QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 3690|回复: 3
收起左侧

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

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

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

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

x
有没有编程高手帮我编个LISP程序。我做在标注模板图的时候,用英制标注,而加工需要用公制,要是每个都手工改很费时间的。比方说自动标注出的直径为%%C0.125(英寸),我只能手工改成%%c3.175(0.125x25.4)。能不能编个LISP程序自动改成这样?先谢谢啦!
发表于 2008-8-10 19:30:16 | 显示全部楼层 来自: 中国上海
用不到什么程序的,只要在标注样式里设置一下,在标注时就有公英制双尺寸显示了
( g( x5 P/ Y) \6 g, f. U" j你这个“C0.125(英寸),”也有错误,一般英制是用分数表示的
8 L0 q/ q) n* j, \; i. w' Y
* w: V) W0 n8 l" H$ ]5 U# H[ 本帖最后由 newdhj 于 2008-8-10 19:32 编辑 ]
0810-6.JPG
 楼主| 发表于 2008-8-11 13:07:18 | 显示全部楼层 来自: 中国江苏苏州

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

谢谢newdhj 的答复。) W  b3 M- n  E9 K; w# X: ~$ S
肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。
# E: l8 l; {( x  }, ~* ^2 N1 Y! r& U' ?& Z5 n7 f$ w9 \
[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm(); t9 ?& Y0 t. X6 h& r
(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))- b: \* L* i5 J8 Z" [! O; d
(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))8 F% I, A. E' v/ z
(setq ss@len(sslength ss@SS))
! A; V, u- l/ n$ V6 w, \(setq @k 0)' g+ a- T! F( n; D6 A
(while(< @k ss@len)! m5 [" T7 [9 Q  J1 `+ n5 A# {
(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))( u9 _$ h0 `0 p1 W) ]& J, u
  (setq  my_tag(car(cdr(cdr(car data_i)))))7 G& M- K( b! y  a# V) c* T1 z$ J
(if (/= "org"(cdr my_tag ))(progn, L0 ~  E1 Y2 m
  (setq my_tag(cdr my_tag))! E7 B5 h6 m1 l" d+ h9 ~
  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))
2 h9 D2 }! t' _3 c  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))
5 C1 K2 w6 L# s0 Z5 q  (setq elss(entget ssn))  z2 V! x$ D& K: ~+ n: e
(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn% D+ ?$ |. c; I- C5 V4 [) K
(setq circen(cdr(assoc 10 elss)));;圆心
. C" E$ R7 A% |& ~1 z, G) Y  M9 I( K(setq Rcir(cdr(assoc 40 elss)));;半径& R+ {+ K% F8 L( k- P7 [( f
(setq cirlayer(cdr(assoc 8 elss)));;图层7 Z5 T6 W8 D4 q8 |& J" M
                                    3 a5 u' w& Q+ t4 o
  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn' H6 B4 [+ O8 r# \. X6 T2 t, _

- q" C7 R" G/ g  6 n, H9 _) s+ {5 X4 l( y% f
  (findtag tagmark)
( F3 w4 Q8 w7 o  
# p! _  u, \1 a$ l  ));;(if my_tag(progn6 C( E" \7 h& |" B* D
  (setq @k(+ @k 1))
* Y  O# {! c3 T  );;(while(< @k ss@len)$ f% @, ^+ Q; z* J0 u: `0 Z* Z5 F
6 e- n9 `8 e# e6 a
  (princ)
- B0 J, B! j! [0 z# s( s  );end9 \. f: U* H) O  `

" R" {8 G( ?; ]  }2 B) h
2 [; I: F% s' L$ U7 o: Y
7 _! m% M/ m; e
  c: k" s) I- t9 r% |% R5 H% E: y7 i6 S& m
1 T! X3 E# x9 o  V7 O7 E3 J

- B) R  |6 U' t% m- {
' v' p: i; E& \' T5 d;;功能  $ N3 Y: D6 ?+ b
;;获取附着在AutoCAD对象上的扩展图元数据  5 k6 Z: [0 x, j  n4 b4 d5 k
;;语法  , O1 R" X/ K! n9 p& f  h% d
;;(ax:GetXData Obj AppID)  ' _; u9 @! K4 \
;;参数  
* j% n) e7 i, [6 ^;;obj:图元名
# ]' {2 M0 F: g! }/ I2 L;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据" q, A2 K- Z, r' p1 t8 O) e8 w( {
;;返回值  : F3 ?; a9 A+ T- I# P
;;返回附着到对象上的扩展图元数据列表  + L+ t3 z/ }& {: D0 i) ]7 x
;;如:  (("south" (1000 . "204201") (1040 . 1.0))7 f  |3 Q, Y' c0 p
;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))
$ J/ ~' q5 b0 u, T;;       ("BBBB" (1000 . "bbbbbbb"))
5 @% k) r8 R# _;;       ("CCCC" (1041 . 752.569))+ H1 u/ J0 l+ v; b! O! u' K
;;      )
/ T* y' e9 ]- }6 V5 C% n;;样例  % F2 C  l& K0 B2 m( Z2 z% P/ q
;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))
# x4 m: i- s& A' G: w( {$ J( _(defun xl:GetXData( C* O9 n5 V2 _
       (Obj AppID / data n i  k i_k data_k temp1 temp2). Y6 w, R% N* V
  (setq data_i nil): g% M; p; I* {* W9 T
  (setq data (cdr (assoc -3 (entget obj appid)))) r- J* c5 Y7 Z8 ^$ @! f. b8 y9 |
n    (length data)
/ p1 L- t* u+ `# ]# m/ f i    0
" W) a" k: @2 q% ^2 K) |# s  ); F7 i. W. f7 M  D6 G) ^, b; |! c
  (repeat n' [1 A5 z7 |' ?  P. k/ I
    (setq temp1  (nth i data)
0 O- @- \$ _$ _% S- A2 m   data_k (list (car temp1))
6 w0 v3 \) [/ ?5 M; w% ?0 j9 ~   temp1  (cdr temp1)+ h$ O: B+ g2 a' e
   k  (length temp1)7 G$ R4 D# R/ f% Q' \( M9 o
   i_k  0. P+ e/ r. E$ [) \( P
    )% `2 D6 y4 L# S9 Z( i2 q" B
    (repeat k
. {7 Y: d0 h3 f5 a7 R$ I4 U      (setq temp2 (nth i_k temp1)$ ?: g4 c# I: g  U! E
     i_k   (1+ i_k); O% }  B& P+ h# ~
      )
  ~5 h( P1 @2 t  a$ X8 m      (if (and (not (equal temp2 '(1002 . "{")))$ |0 D; O7 F; E$ t
        (not (equal temp2 '(1002 . "}")))
1 ~. v4 u& W) v. W4 R   )
9 o$ L& I9 f6 I" ~: \6 Y' D4 l+ y (setq data_k (append data_k (list temp2)))
) B# z1 g: r4 e# G/ V. S5 r      )8 v  o3 X' P" g$ _2 G( p
    )! \  J! j/ d+ k9 p$ B0 \1 ^
    (setq data_i (append data_i (list data_k))/ ?6 R9 o% v2 b7 O' w$ m1 X
   i  (1+ i)
, \* x5 y0 Z* t* m4 L- m6 n! a    )
3 ?# t+ C3 P. |2 r  )
+ u0 L$ o& x. s' p3 M& T$ l, e  data_i+ @, |4 K3 U( x4 b
)
* M, i9 ?' k0 v, Q. @  b$ T' b1 \0 U2 T3 n5 b2 v6 B# ?
/ a  c$ g! |- W* W. `" {
/ }5 R# B# s8 Z7 @4 i( n

: m( K8 _- p5 C: ]5 M# b/ X# {4 E(defun findtag (tagmark)) ?+ d- L0 A/ w, T/ k
  (setq kdat(open kkdat "r"))
" s# L* _( X' m* E7 D( ~ (while(setq kdatread (read-line kdat))
1 W5 X0 i7 M, s   (if(/=" "(substr kdatread 1 1))
& Y* R. l) b+ U# y/ E) [    (if(= kdatread tagmark)(progn
3 J* L' T( C5 z( T- k- d' D/ e(setq kai nil)                               t* O+ m* u, k3 g2 u! Y
(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的# n3 {7 T, w9 C/ j0 Q
   (if(/=" "(substr  kdatread 1 1))(setq kai 1))4 }" x6 _9 X+ t, V: S6 P* A3 @/ j
  (setq kdatread(substr kdatread 2 ))# y, i5 G# B- c/ T0 A9 h
  (Setq pwk(vl-string-search " " kdatread))
6 n3 v8 C+ k% u8 x8 {  n  (setq comma (strcase (substr  kdatread 1 pwk)));变大写  D0 @2 x  z. ]
  (if (= comma "TEST")(progn
0 Z* X: L. k0 _! a% N" f, Y6 z" H3 ~(setq kdatread(substr kdatread (+ pwk 2)))
" O5 N3 A# E1 G7 J+ S) F! o' ~(Setq pwk(vl-string-search " " kdatread))+ h2 I6 g( V, C$ }9 g# G
  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点
" C$ P: t6 V$ @6 ^7 E; M(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心
) V- H$ W' e3 q! V: e. y  (setq kdatread(substr kdatread (+ pwk 2)))
8 H( o9 x5 r' T0 s(Setq pwk(vl-string-search " " kdatread))
3 @0 r6 T5 ]4 {4 J2 y  (setq textt (strcase (substr  kdatread 1 pwk)));文字
, y, E; n# ]1 {, ^# d  W (setvar "clayer" cirlayer)
- j# D; \. S, ^; T1 l(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字
8 l3 w/ l$ C+ x* \& y* {* j" q5 H        ));(if (= comma "TEST")(progn! D- _/ |) {7 q4 Y! g& i8 l$ x

0 l* v" Z9 F  l" j  (if (= comma "LINE")(progn0 h, H- {! G, A9 H2 a7 H" Q6 s
        (setq kdatread(substr kdatread (+ pwk 2)))
/ t- f/ n  r$ [; I1 ^. C5 p5 B; ~$ A(Setq pwk(vl-string-search " " kdatread))
0 r# D, H3 i- O4 K8 d' z* b  (setq lineang (strcase (substr  kdatread 1 pwk)));起点% K3 p: D5 X. b6 b' j
(setq linep1 (polar circen (angtof lineang)  Rcir));起点
+ Z' H5 N% M9 P$ Y" j       
1 m8 ^5 q1 s0 g2 j+ N: a9 j  (setq kdatread(substr kdatread (+ pwk 2)))
% w& f$ N/ `! Z5 R9 D& i(Setq pwk(vl-string-search " " kdatread))& w2 S- f8 n$ l$ u! e
  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点5 @7 C2 J/ U7 ~
(setq linep2 (polar circen (angtof lineang2)  Rcir));端点. e7 ~: }. z" y4 g4 \
(setvar "clayer" cirlayer)
6 r* g$ |$ \2 m; p/ @- H/ o+ P, m(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线               
) V/ n5 \% ~7 @5 l$ }) t5 e3 \        ));(if (= comma "LINE")(progn0 Y( l$ r2 B. Q! v# n+ S* K

! z0 s5 u2 e9 `7 y% t  D2 o  i( ]  (if (= comma "HATCH")(progn
- P1 Z+ I( B* o6 G+ f
7 W1 h' n/ i$ |/ ?$ @* n                         ! O; y" h0 b2 R4 s: Q5 M' Q
        ));(if (= comma "HATCH")(progn
: e6 z6 ^/ H3 a) T5 a# P- w+ {* o0 d  z/ C
    (if (= comma "CIRCLE")(progn
+ ~: n  h  q, T7 E: f
3 x$ \, g. Z1 c. [- U                         
, O+ D7 Y( t7 L        ));(if (= comma "CIRCLE")(progn
- O& ?$ ?1 p& [* M( E  3 Q% `$ P* s1 ?& E
  
) I) v, }+ k! U0 S0 E) e/ s' p  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))1 L. @" p8 H2 o) v
                             
9 `8 g1 x- \: P# I+ v, g! ~                             2 a! V% B4 _3 ^" m$ H6 |# y$ o3 [
      ));;(if(= kdatread tagmark)(progn
" s7 W% a6 o. {% T/ W     );;(if(/=" "(substr kdatread 1 1)); f9 Y) D' }; V7 R9 z2 m( `
   
0 X) O& J' [8 }: }9 H# G    );;;(while(setq kdatread (read-line kdat))
, q  o3 D+ h9 r% a$ }9 G  
, h! Q! a6 V* k' b9 M$ c  (close kdat)& [  t! n3 ^1 p4 X# ^' [8 j
  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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