QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
14小时前
查看: 3581|回复: 3
收起左侧

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

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

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

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

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

3 _# S* P# M. f$ ~/ p- c/ m[ 本帖最后由 newdhj 于 2008-8-10 19:32 编辑 ]
0810-6.JPG
 楼主| 发表于 2008-8-11 13:07:18 | 显示全部楼层 来自: 中国江苏苏州

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

谢谢newdhj 的答复。
1 A9 I  q+ S' e% f" }肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。
. ?9 j$ v( _. v4 c* f) \/ B  i; }# S" p  M
[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()
9 B8 K4 w1 x' _: M  O  D(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))8 g6 i8 S, H2 W' x+ ]- T
(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))
4 I1 @# k  G; r$ Y) _7 s; O) U(setq ss@len(sslength ss@SS))
7 d0 ]1 ^! f0 f5 }% V- C# t(setq @k 0)
' f/ |8 ^2 {7 j% u. C(while(< @k ss@len)6 @& Q* @0 Z& [9 w
(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))# s, b' `  I" D3 O  l4 [- Q# Z, }
  (setq  my_tag(car(cdr(cdr(car data_i)))))
2 J$ X1 C6 F; N7 u (if (/= "org"(cdr my_tag ))(progn4 U( A: I) a1 ?& a, q" A
  (setq my_tag(cdr my_tag))
/ n" |; \3 {0 p7 q- P/ K, g0 m  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))
& `4 n! ?. x$ A# V+ I0 t% G" h  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))- h4 q- ^3 ]3 T. d- _  x7 ^
  (setq elss(entget ssn))
7 R% J, t9 G1 W(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
) [% V; O; K% N3 V4 O. C(setq circen(cdr(assoc 10 elss)));;圆心
- `9 }$ D9 T9 T. l- d6 d/ ]4 N& T(setq Rcir(cdr(assoc 40 elss)));;半径
' F/ W$ d. K4 ?% P( k(setq cirlayer(cdr(assoc 8 elss)));;图层
4 @! ?1 k! I( u7 Z6 S7 y' ~                                    , E, f" |/ U7 M) N
  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn& {  F8 U. I9 G6 R
: u: l- k$ g8 {9 E
  * N3 _  Q  ^. G3 V
  (findtag tagmark)
3 D$ r. J  }9 b, A3 K7 l  e  
5 s: P3 [- V, I3 O1 B  ));;(if my_tag(progn
! T2 T6 e: C% M/ o  (setq @k(+ @k 1))
) C' w5 N) X+ B2 W0 q! W  );;(while(< @k ss@len)! ]6 ?- P2 a( O& D. `3 h$ i

2 F. I/ r- o. J4 S( Y  (princ), _9 G& R; L1 v* v' A' @# ?
  );end
0 t3 p( h, L9 ]8 q& K
" J% l- m5 R" j! k0 B- G/ e: R0 M; [4 I. B4 E- i, l

9 L) r, W& S+ v9 i7 g4 X- Y4 b5 u2 r$ P- x2 h' Y2 t8 @. |

. X$ b9 ?; p7 g' r9 Z6 \
5 @1 B6 W2 i' q( @+ @# C. R( G- z* L" J+ W# C* O1 y6 Y

2 x# M1 ~; k) n5 p;;功能  & ^" n+ L$ E) N, ?2 q
;;获取附着在AutoCAD对象上的扩展图元数据  * w8 j, _/ ]2 k3 r! g9 k
;;语法  1 }" J5 [/ w6 G# |4 f; S
;;(ax:GetXData Obj AppID)  
1 _* P- m$ L: V8 |;;参数  
" C: J1 d) f# B. b1 m;;obj:图元名
; e- s+ ~8 S: {/ v9 f* @) {;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据" a8 \, I7 }0 e% ]9 Q/ B
;;返回值  
* z7 S: w6 |5 H4 ?/ D9 n;;返回附着到对象上的扩展图元数据列表  
8 Z0 R5 F% A: F+ D;;如:  (("south" (1000 . "204201") (1040 . 1.0))
; p+ l1 f: h2 v& `- W;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))! d$ d5 }9 R8 ?( c9 @/ y6 V
;;       ("BBBB" (1000 . "bbbbbbb"))
3 W3 T: X7 r7 E/ h, `2 m4 g: z  _;;       ("CCCC" (1041 . 752.569))
  w, t: V, e+ G2 v;;      )
! N  L0 J) _, {3 G( O;;样例  
# r/ ?: K# o; j- J& u;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag")): o9 @- I$ @3 g' \! Q) R
(defun xl:GetXData
& O7 b$ V+ B/ [8 W8 R& H       (Obj AppID / data n i  k i_k data_k temp1 temp2)4 X! f" N8 {, \# D  n. v# _- Y* s# B" \
  (setq data_i nil)
7 o: w; `- E# X8 {; V5 T! M  (setq data (cdr (assoc -3 (entget obj appid)))
1 F$ y# M0 x( b- o8 g" U n    (length data)& B, T' ~& ]7 y/ Q: g- G. {5 {! V
i    0. r4 G3 r0 @- g
  )
7 [5 w* R/ P  Q; c  (repeat n
+ O; R: [' t% v# q6 Q& J  u    (setq temp1  (nth i data)" q8 _; I) {* L$ B+ _& s
   data_k (list (car temp1))
8 [9 k! l0 Z2 N: U, r9 R$ P1 Y   temp1  (cdr temp1)
: E' X9 z; s% L: Q% n1 }* a   k  (length temp1)
1 \3 W2 B" b: x  x   i_k  0
2 s1 I$ X) K! _# j: W    )) S1 U& f3 _) u+ p( ^0 M
    (repeat k8 m6 [5 @% w* B2 J$ ]/ w! H4 d7 F6 ?
      (setq temp2 (nth i_k temp1)3 X% y7 G% ?/ }# Z: g
     i_k   (1+ i_k)
/ K* I3 ?7 B. R5 c      )
" K' z. V' v+ g      (if (and (not (equal temp2 '(1002 . "{")))0 H2 a) x. @8 F: W1 T, D' P6 T
        (not (equal temp2 '(1002 . "}")))
- F' w0 h- ]& g* U8 A( b   )9 N' b, @0 e5 x6 q" B5 A9 Z2 c
(setq data_k (append data_k (list temp2)))
5 y' v0 ]2 b* D  C8 n      )
6 H" Z# s# F5 w0 x    )) Z2 G1 o2 I7 R
    (setq data_i (append data_i (list data_k))
4 {. |) a! K# n3 v$ D   i  (1+ i)
3 d* a; [7 q, Q1 }    )7 E1 j& j5 y5 u0 n
  )
7 _4 \& g2 P( a, S6 Z  data_i. m9 a4 X9 D. Y* B
)* N+ N4 r. f! d& N# N4 N

* T- @( B3 m' s/ d+ Q
- P) P6 d' x! y+ U( @( }
) Z- ]/ f" r& j* A1 |3 u" a3 W1 q0 Q, t: F* v; Q" V4 C2 D8 p
(defun findtag (tagmark)
5 r; V  o# i) D) L* x- r5 ~1 p' K( i  (setq kdat(open kkdat "r"))
( {; y$ ^* P, T (while(setq kdatread (read-line kdat))! M6 z5 |: F6 @
   (if(/=" "(substr kdatread 1 1))
5 X. R5 \; K1 G1 L4 y& B* ]: j    (if(= kdatread tagmark)(progn
4 \. D7 s9 W, M$ X( h) b# X(setq kai nil)                             
9 J6 C1 Q$ k% u3 e" f! K9 g(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的
* `' f) O$ d9 A   (if(/=" "(substr  kdatread 1 1))(setq kai 1))! [) N2 V. U$ e4 x
  (setq kdatread(substr kdatread 2 )); L8 ~; M. F3 Q3 e9 w( i# ^
  (Setq pwk(vl-string-search " " kdatread))
. @7 m3 |, O( i" d8 s2 A3 R- Y% r  (setq comma (strcase (substr  kdatread 1 pwk)));变大写; W0 B* m* o5 i6 g$ I# e
  (if (= comma "TEST")(progn; J4 Z0 N; f2 k! m4 R0 r4 c
(setq kdatread(substr kdatread (+ pwk 2)))8 P7 t, b" p% Q  v4 g- h: L5 ~
(Setq pwk(vl-string-search " " kdatread))/ x( Q( n3 `9 E0 C
  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点
& U7 d! r5 H  b% G: s(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心
# A2 Q* @! i  ~% q7 a  (setq kdatread(substr kdatread (+ pwk 2)))
  r( _" S7 `4 o# w$ K4 [$ ?(Setq pwk(vl-string-search " " kdatread))8 J2 x( D1 T0 _1 R1 @: j1 x9 {2 k
  (setq textt (strcase (substr  kdatread 1 pwk)));文字
# f* j: p, b+ o- T" e. p (setvar "clayer" cirlayer)/ p! `( H0 i% c6 B
(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字
4 H( _( ~9 f/ O. ^        ));(if (= comma "TEST")(progn
1 {; S$ K7 H- v$ T" D: E
$ K% t9 {5 m# G* z: a  (if (= comma "LINE")(progn
; @+ x! ~0 i! F2 m) p. r        (setq kdatread(substr kdatread (+ pwk 2)))
( s% x' W5 t5 n, d# A; \8 B(Setq pwk(vl-string-search " " kdatread))
1 g3 P& I0 a& S/ T, U1 n  (setq lineang (strcase (substr  kdatread 1 pwk)));起点' `6 [- o& J; d* h
(setq linep1 (polar circen (angtof lineang)  Rcir));起点
9 [+ Y2 Q0 i! y* i5 a( C& _/ z        6 o5 i( ]0 \. L% F  S1 W! X
  (setq kdatread(substr kdatread (+ pwk 2)))
6 U6 ~* B2 Q' Q" m' c2 ?+ P(Setq pwk(vl-string-search " " kdatread))% w, Z! i& u) X8 H
  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点: B3 F' x7 v5 ]# g* t
(setq linep2 (polar circen (angtof lineang2)  Rcir));端点5 @9 ^! R' G4 J% I- ~) A
(setvar "clayer" cirlayer)
9 g( w* v9 w+ O  O9 C* D3 ]9 j(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线               
& r& u6 O$ Q4 V# ?% w/ I        ));(if (= comma "LINE")(progn" U8 s8 S( j8 j% e5 R# d+ Y
6 {4 T# s" R' T: `# |0 ~$ h( c* Y
  (if (= comma "HATCH")(progn
: ~6 i. }9 l4 h& ?
- t; p6 ~0 [; r* i( ?0 U6 i* U                         
: Q' }% h: x$ U4 q; a        ));(if (= comma "HATCH")(progn4 X8 p% a& z" L2 j4 F( H
# O0 [; ~, b" D' N1 B# f9 `
    (if (= comma "CIRCLE")(progn+ D4 Z4 |, J) q* m5 ^
8 f  Q7 T6 Z0 n0 j; k
                         5 ?* {  Q$ ^( O: y2 T! @1 S, e
        ));(if (= comma "CIRCLE")(progn
, Q  O) j# _; C7 r  
  J" F+ x5 @" Y! i2 j9 t* `4 H  $ V- G# y5 ~4 }  f3 f
  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))+ R) d) l8 `+ K3 y! F9 v6 A- e7 R5 R
                             
& q% A! j+ i1 ?5 L                             
0 I; p8 P2 e' C" r" c! x      ));;(if(= kdatread tagmark)(progn3 W, Z- h2 [' D( S4 h9 ^
     );;(if(/=" "(substr kdatread 1 1))
( h8 D" n( P( ^   
6 w4 L/ e2 F1 {: Q' Q- s! c    );;;(while(setq kdatread (read-line kdat))+ A1 b% j5 W+ `8 \6 w( a3 R7 W
  5 ^9 Z8 r' P8 Q, ^8 f% [( Y
  (close kdat)
  B3 ~" W, Y2 }! T, \  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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