QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3696|回复: 3
收起左侧

[讨论] Lisp 编程完成英制转换为公制

[复制链接]
发表于 2008-8-10 19:11:08 | 显示全部楼层 |阅读模式 来自: 中国江苏苏州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
有没有编程高手帮我编个LISP程序。我做在标注模板图的时候,用英制标注,而加工需要用公制,要是每个都手工改很费时间的。比方说自动标注出的直径为%%C0.125(英寸),我只能手工改成%%c3.175(0.125x25.4)。能不能编个LISP程序自动改成这样?先谢谢啦!
发表于 2008-8-10 19:30:16 | 显示全部楼层 来自: 中国上海
用不到什么程序的,只要在标注样式里设置一下,在标注时就有公英制双尺寸显示了+ l* D' b3 }# `. D) y2 P9 U
你这个“C0.125(英寸),”也有错误,一般英制是用分数表示的$ u- G4 z2 H2 S6 A% [; T; G- u

  v- o+ D; U9 ]1 M[ 本帖最后由 newdhj 于 2008-8-10 19:32 编辑 ]
0810-6.JPG
 楼主| 发表于 2008-8-11 13:07:18 | 显示全部楼层 来自: 中国江苏苏州

Lisp 编程完成英制转换为公制

谢谢newdhj 的答复。% F& N1 i. k4 {8 t+ G1 S& y4 ~6 K
肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。. ]8 f4 l- H4 @7 t% o  f* }# H
7 u6 Z' ^) N  o3 y4 I
[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()
7 q/ j. T2 {2 N- f! D5 C) U(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))
7 N( F$ R0 m) ]* a(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))
' a3 S- _1 R: F+ P0 Q(setq ss@len(sslength ss@SS))
+ q( I7 O* Z4 \( h(setq @k 0)
! Q0 E; V% t& o/ S8 @1 s: S(while(< @k ss@len)
7 L9 `7 y  @9 }4 j1 E% G0 \(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))
$ G. N  C4 T4 l" q$ G$ z3 g  (setq  my_tag(car(cdr(cdr(car data_i)))))% j: g2 P- j9 w7 P1 b2 P+ S; u9 E
(if (/= "org"(cdr my_tag ))(progn
& q+ w+ p; X  R7 z- e3 _: G+ n  (setq my_tag(cdr my_tag)): U% ^) V- S' c4 f
  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag)))): J- t, g: C* w/ L
  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))
4 @8 [4 d' a9 p+ X# N8 ^- ~  (setq elss(entget ssn))" Y* ]  {) h8 [2 }$ |- i
(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn( B5 x. `8 D! I# R& \( |
(setq circen(cdr(assoc 10 elss)));;圆心
' D4 U5 J- x2 H. l/ L+ k(setq Rcir(cdr(assoc 40 elss)));;半径1 j8 @/ ?" C1 s- d
(setq cirlayer(cdr(assoc 8 elss)));;图层
, }1 q2 Y4 t7 E# T                                    
& i1 m8 g* f% C  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
  h: B$ g/ K; |! l
$ o  Z3 N& E+ }6 r) a6 I9 v5 B- X  * i: D( [' V3 G  |( I4 t
  (findtag tagmark)6 s$ N2 Q& a% C2 t9 r0 _  F
  
) ^8 |- u8 N3 d% B5 e$ p  ));;(if my_tag(progn# L9 g2 p  g0 f# `& n9 g
  (setq @k(+ @k 1))# H: R. n/ g" K2 w7 o: v1 D! u
  );;(while(< @k ss@len)  U' X9 t; p% o% g! ?% |+ Q: q
+ g( X" U9 }4 p3 g0 V1 r
  (princ)
/ {5 O+ a# ?' K: I+ R, T  );end. @9 H$ D5 K9 l  K) o3 L1 a. n
/ m. t- z3 Y8 @2 m
; O- [9 Y1 v: K+ Y5 }1 K
9 h  f4 U  m( `$ e3 n' Z; H" Y% a/ r" ~

/ ^9 n0 E9 j- n. h) M2 O
8 h: U5 V( E8 X3 @0 U' `& Q8 d
; w, _) P3 A1 _2 x4 Y+ G
$ B! r- t" t4 F; C; |( `, c- b* k( X4 U
;;功能  
8 j, M" }# s. @& g( D' f5 d;;获取附着在AutoCAD对象上的扩展图元数据  ; p: C7 v- ^# b' a% ?; a. a" h' @
;;语法  
0 t7 t0 J9 @# z  w0 h;;(ax:GetXData Obj AppID)  ; @& c/ d" y  O
;;参数  
* S% l! B2 J+ M( c( t0 h: r# L( M;;obj:图元名  _- \" [1 G5 H6 w8 C/ H% M
;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据+ Z' n" U. N  q  s% O! V% T1 I* O4 s
;;返回值    x' r* v! e( `" C' f( U) ?
;;返回附着到对象上的扩展图元数据列表  ) e2 a" v5 j( M; A' Z2 l
;;如:  (("south" (1000 . "204201") (1040 . 1.0))
. l4 R$ E% ~1 v# R9 a# T8 K, j1 `7 g;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))
; F: E) _! t' l' B, P6 M) c;;       ("BBBB" (1000 . "bbbbbbb"))
9 T6 G0 p0 r) W- V4 Y( s;;       ("CCCC" (1041 . 752.569))
6 _6 L7 K& `4 I* `* O;;      )7 A) p2 S' ?: J8 d# @
;;样例  ! m) t3 |( i" C6 M# I8 v
;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))1 X" B& L( p; O3 m8 K( p
(defun xl:GetXData
1 W" @3 p; l0 L4 k       (Obj AppID / data n i  k i_k data_k temp1 temp2)# G, c1 J6 N# X( |
  (setq data_i nil)
: X$ }# G' M, T: ^" c* v" a  (setq data (cdr (assoc -3 (entget obj appid)))
8 e+ J7 S5 I4 \1 V n    (length data)
) A! W- [3 h4 b8 e+ Q1 G i    0
4 _, b- J  C" }; Q" b# a: V  )
6 U0 I9 l8 k) E* R, y  (repeat n* a  h/ {& C" r# b1 s7 j6 @
    (setq temp1  (nth i data)
* ]) k% L4 V$ D9 l- A- ]6 e   data_k (list (car temp1))
" K1 t/ l5 b, T3 J6 W" x   temp1  (cdr temp1)
& [* u% Y( V4 h. X   k  (length temp1)
7 e8 h/ u% i. h- e! r" c( T* n   i_k  0
! H% h  o9 _8 g; ~9 l9 l' a+ d    )! |, O! X5 T3 n5 B; w
    (repeat k+ G( o6 j; j; X( ^2 Z
      (setq temp2 (nth i_k temp1)
  P3 _* R0 r4 u. R/ t7 v     i_k   (1+ i_k)  e% G4 i& s  h2 g& e4 P: @; O
      ): ^, B; i8 q# {0 U6 D8 d
      (if (and (not (equal temp2 '(1002 . "{")))0 B& `7 U6 _3 n- q/ ?0 k) q& l
        (not (equal temp2 '(1002 . "}")))! u& U0 w7 B+ \) }" f
   )
' J, ]( i, L# z2 j3 v" i5 Z (setq data_k (append data_k (list temp2)))3 E3 F0 k( f' Z  m1 j
      )
$ F+ e( p1 @# v* @3 T7 ?    )
1 V' Q. f  W* N7 J+ o) F3 l    (setq data_i (append data_i (list data_k))
; @& q) @) }3 [' G! u   i  (1+ i)& n! B) e& J! {8 H( G5 U
    )5 A$ W0 J4 |4 G7 v, p
  )
6 M9 [2 a+ i, c+ _6 h& H  data_i
: k. R' D* C( G: B" n)0 V- }# y( A4 z
- R2 G: z# ?* I5 ^* e& Z

! B& y1 I7 r. |8 ~# }* e
% |: c" d6 x- r0 J2 X, p' i. E3 b7 L% h6 R
(defun findtag (tagmark), `- x& `/ x' g
  (setq kdat(open kkdat "r"))) V# V0 o$ v* F: g- `4 H+ S6 ~
(while(setq kdatread (read-line kdat))
( H! L: g. M  I2 C1 N   (if(/=" "(substr kdatread 1 1))7 }$ W: t9 P- ^5 Z- D
    (if(= kdatread tagmark)(progn- W' b. a7 U: n/ U4 Z* v
(setq kai nil)                             ! d# M! [' P4 O
(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的
% s% I' ]6 D3 E% c   (if(/=" "(substr  kdatread 1 1))(setq kai 1))
* G( a& f0 J9 e6 t  (setq kdatread(substr kdatread 2 ))3 _0 N/ w6 n. |' T
  (Setq pwk(vl-string-search " " kdatread))
: }; `2 V% o4 Z# }: a3 N4 g" e  (setq comma (strcase (substr  kdatread 1 pwk)));变大写6 U6 r  [2 p* j% i! Q: u
  (if (= comma "TEST")(progn5 ~! _+ p3 [' e, b0 Q: p5 j
(setq kdatread(substr kdatread (+ pwk 2)))
7 y  V. U0 I$ @& q2 U" C(Setq pwk(vl-string-search " " kdatread))! h$ g7 l* [5 ?# F
  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点
5 s. i* [5 C9 r8 i! G(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心
0 x* l3 Z6 j- v. q6 Q. {& L  (setq kdatread(substr kdatread (+ pwk 2)))
& y5 |8 A, t) N3 j, |(Setq pwk(vl-string-search " " kdatread))4 E& E, F7 R8 S# }$ p9 e
  (setq textt (strcase (substr  kdatread 1 pwk)));文字
# h  p& V% K% H8 g. Z (setvar "clayer" cirlayer)
8 W# ^" U5 i! o7 \1 X* b8 @8 J(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字1 G8 G4 B3 }' T& i) A
        ));(if (= comma "TEST")(progn
2 ?& X7 ~2 ^7 c% o, Q7 _  z# j3 w7 U2 W; x3 h) G; V# p
  (if (= comma "LINE")(progn% J8 M1 W5 M! T. j/ S6 C: A
        (setq kdatread(substr kdatread (+ pwk 2)))) M+ _0 ?7 A( r8 }, R
(Setq pwk(vl-string-search " " kdatread))5 M, r, `7 u, L; d
  (setq lineang (strcase (substr  kdatread 1 pwk)));起点
7 @/ C/ x" i0 |! q9 ~ (setq linep1 (polar circen (angtof lineang)  Rcir));起点
% K# F" }8 a# d" B4 V: T9 C        ; k  v$ @1 u$ {& D, M0 x' y! L
  (setq kdatread(substr kdatread (+ pwk 2)))
" Z% |6 x0 }: ~(Setq pwk(vl-string-search " " kdatread)): e# Y6 p% N% K7 M! v7 H: D
  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点% m5 ~& G8 I! Y$ U6 x( J
(setq linep2 (polar circen (angtof lineang2)  Rcir));端点: {! p6 a+ V7 s- z9 d1 `: x
(setvar "clayer" cirlayer)
3 e; r( w3 s8 R- U8 f/ ]" Q$ S/ ^( c(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线               
9 G! E; D% A# r& v        ));(if (= comma "LINE")(progn' [. N. w6 i6 V6 v! L) Y
/ \- ^3 ]( V/ Z$ t5 X
  (if (= comma "HATCH")(progn
6 h% ?" g( o6 j5 M1 D
- a# a$ Q3 V/ P3 Q( J                         3 P; c) y! D. |$ Q  @0 s& L( }
        ));(if (= comma "HATCH")(progn# v+ k- |+ p+ m
9 e, ]* c. x) a) |5 @. q
    (if (= comma "CIRCLE")(progn
* Q7 O: X! K( X' E: ~3 G& V$ G! C: q- @8 l
                         
( P; s- U0 D- z2 B" H) ~8 z3 U        ));(if (= comma "CIRCLE")(progn
* v& d" j2 {! Y4 H( {# j$ W  
: [+ a# X0 V% {9 h  p; M+ `  
9 X1 I( T6 l5 m, V  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))3 a" T; `& d5 N' }0 O* W% `
                             6 x7 w/ ^9 I# ^# R+ W
                             
( C1 d2 O" R3 m" i/ R      ));;(if(= kdatread tagmark)(progn
6 z3 n5 u# m2 I& e     );;(if(/=" "(substr kdatread 1 1))( z3 E3 {- V4 M8 g; P9 B
    , @$ O( `4 z' w: _4 v
    );;;(while(setq kdatread (read-line kdat))! B) j1 y# u8 |  f0 S
  / g+ V. f5 |& [1 c# m8 M
  (close kdat)5 ]  T. g- \# l' }* ^6 q
  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表