QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 3608|回复: 3
收起左侧

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

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

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

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

x
有没有编程高手帮我编个LISP程序。我做在标注模板图的时候,用英制标注,而加工需要用公制,要是每个都手工改很费时间的。比方说自动标注出的直径为%%C0.125(英寸),我只能手工改成%%c3.175(0.125x25.4)。能不能编个LISP程序自动改成这样?先谢谢啦!
发表于 2008-8-10 19:30:16 | 显示全部楼层 来自: 中国上海
用不到什么程序的,只要在标注样式里设置一下,在标注时就有公英制双尺寸显示了
0 v0 Y8 a8 ]! F7 x' ?% x- m( B你这个“C0.125(英寸),”也有错误,一般英制是用分数表示的
# V" b% R" g6 [$ A3 o- {2 t0 {7 d; o; Q9 `: P
[ 本帖最后由 newdhj 于 2008-8-10 19:32 编辑 ]
0810-6.JPG
 楼主| 发表于 2008-8-11 13:07:18 | 显示全部楼层 来自: 中国江苏苏州

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

谢谢newdhj 的答复。
" G$ F; m, y) ]! [肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。
; {$ s1 i5 ]4 X; I* w; j6 V: f4 ~6 B* r# ?6 g
[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()
2 f' b3 q( j2 y; [' s$ ^4 b7 t  Z(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))
& M& [" w$ Q( z. H* N3 ^(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))
7 r9 X5 I) j# x( _& {, }+ T& _7 r(setq ss@len(sslength ss@SS))
* N  H2 c2 ]' R  K; D9 v6 U(setq @k 0)# D) b8 @9 Q6 f; P+ n5 ^4 i
(while(< @k ss@len)
; ?- i& H5 d, h$ }% Z' W(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))
& z" G& g+ t: Y( }; T) a) @  (setq  my_tag(car(cdr(cdr(car data_i)))))
, o# \4 f& {- U0 f  j (if (/= "org"(cdr my_tag ))(progn
6 l7 p- b6 U7 {: G: i3 I  (setq my_tag(cdr my_tag))
) W) A2 _, S2 x) Z, l  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))7 w) B! o  K$ E/ ?6 l
  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))
5 K7 B% a4 s+ \  (setq elss(entget ssn))! V, k" ~3 n6 s0 t( E/ y
(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
9 _) s$ Y9 N0 F/ n(setq circen(cdr(assoc 10 elss)));;圆心
' J0 @$ f, Z( }(setq Rcir(cdr(assoc 40 elss)));;半径  x5 u6 R% K  U/ C, S
(setq cirlayer(cdr(assoc 8 elss)));;图层
! i; |) ?% K9 M: y; m; P                                    ( x+ D3 V3 x1 w  {* `. H% G8 V6 f: t
  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
0 |) {1 @, s- ~* k( b* h9 n, |( l5 \8 z1 _
  % o3 W2 N6 N7 N
  (findtag tagmark)
- v! B1 t! \2 |  9 {- Q* m- }9 Q$ p7 S
  ));;(if my_tag(progn
* Q3 ^* ?% [# T5 w  (setq @k(+ @k 1))
  r+ J8 \+ }  Q% o  );;(while(< @k ss@len)' o: a/ G$ p2 B9 S: I0 h! {1 |5 t
* k8 O! z% V6 X6 z& {# D
  (princ); z9 Y+ \# B4 v* _4 l+ w
  );end0 M8 [  |; X3 ]$ F( F0 h& P: W. a  J

; Q! }! ]0 p- s! s& ^
9 _. B) g5 _- ?3 h- U
  P! S8 i8 z" h# L2 t: f4 E
1 T6 A& ?; r& ?2 l- X6 R/ ^' Y6 ?& x' \

. s1 T$ {7 y' i7 T0 U3 p' }4 A! s
- E/ S  b: c5 X# D; c5 f& s  C4 i( d# _) P
;;功能  " e8 N  E1 L) k! r$ N
;;获取附着在AutoCAD对象上的扩展图元数据  
" i0 }% l) _; ];;语法  
6 o* x5 j$ D9 ~( Z- ~! T6 J;;(ax:GetXData Obj AppID)  : {7 Z1 |0 l; v9 ?8 F  }# r
;;参数  
5 N2 Y& x: Y0 m& x;;obj:图元名
) w9 `2 ^: Z/ [* J. d4 d;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据, g" ]% P- j9 a2 h# G
;;返回值  
0 Z# T/ t( S9 \; {& z) _;;返回附着到对象上的扩展图元数据列表  
8 E" {4 M9 V& E4 v" C;;如:  (("south" (1000 . "204201") (1040 . 1.0)), J# J1 r; Q2 A" k
;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))" [) Z5 g7 p* x2 D# g
;;       ("BBBB" (1000 . "bbbbbbb"))# M6 U6 H1 Z$ Z8 m
;;       ("CCCC" (1041 . 752.569))
" W/ g, u* Z8 Y( R5 h( d- L;;      )
2 `3 k8 v3 k; Q8 z;;样例  . f) F3 I- t, [5 ^
;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))
- K. c9 k+ g; {(defun xl:GetXData- y/ l# E2 }' w: o7 @, w
       (Obj AppID / data n i  k i_k data_k temp1 temp2)
  W3 I( N  C# @$ a- y0 a  (setq data_i nil)
* |0 R: _/ k1 S, Q3 B% B- I  (setq data (cdr (assoc -3 (entget obj appid)))
1 W* }9 _* u, H4 t2 t. E; z8 E* G' J n    (length data)- Z) p6 L0 g$ N6 l
i    0# S3 R" _7 D4 l
  )  C2 E0 K: b! v* }
  (repeat n6 |" E/ p. G! f% a3 O
    (setq temp1  (nth i data)
7 [9 u/ c- F2 D, K, z2 ]& q( U' a! h1 l   data_k (list (car temp1))% f4 B' r  ~& \/ G
   temp1  (cdr temp1)
$ @8 v% I# Q8 w. v; f) [- B. O) B  G   k  (length temp1)3 k# }9 M) d% j8 o& u; x
   i_k  0
/ Q7 C! l! H" o& q    )$ b6 ?6 i  w5 M
    (repeat k
$ c4 d5 c6 {- z/ f2 c      (setq temp2 (nth i_k temp1)5 C+ L  _' E, n* t' M8 u
     i_k   (1+ i_k)
- N# L# X7 v( I9 d( ]5 [8 b+ X1 Q      )' x1 t7 B3 Y- n2 n* w! ?
      (if (and (not (equal temp2 '(1002 . "{")))! [$ V  M& x# A8 Y# h, K  R; Z/ F* n
        (not (equal temp2 '(1002 . "}")))
1 h% C6 P) x: o. o) X   )5 @! @) H1 s2 _, @6 V+ M
(setq data_k (append data_k (list temp2)))
: V8 u; {$ k3 B& `& n9 w* k- N      )
: j6 ]! H2 t% B    )
* H/ P+ y/ \* y5 X( Y/ d! i& X) {    (setq data_i (append data_i (list data_k))
/ o" g/ Z  |  i4 F, k   i  (1+ i)
* p; Z8 r; x% ~- ^& t6 Q    )# V6 W+ H/ o+ C( M
  )
8 R9 B' ~7 M6 [8 b) B% q  data_i7 F" @9 J# P/ s. d; K- f  `
)% G( }; e9 h2 e; v6 c

, {$ n* S: i+ g: U6 r% Y" B  w; j3 j+ P

4 {, \9 P  K3 x. H% V/ f6 b3 ?" Z) W  \: G8 [5 o3 \" C
(defun findtag (tagmark)
! {' V1 g2 d/ Q: E9 N! g+ x/ v4 a8 s  (setq kdat(open kkdat "r"))
# }8 r2 x$ N& r (while(setq kdatread (read-line kdat))
+ q* I6 U! A9 |6 [; Q   (if(/=" "(substr kdatread 1 1))4 a+ B% n' G$ {0 u5 B
    (if(= kdatread tagmark)(progn) B! V4 Z% ]: B% X" J' Y
(setq kai nil)                             
# F. h, E5 V4 ^6 g/ O2 }% D(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的
4 k1 u! b# u) b/ X1 X7 r- e) }   (if(/=" "(substr  kdatread 1 1))(setq kai 1))
+ d3 P4 B2 L, w+ n7 e  (setq kdatread(substr kdatread 2 ))
) m# ^, y  `+ ~% S  (Setq pwk(vl-string-search " " kdatread))
3 ^, n& N, D+ m8 }) j# _! C2 Y  (setq comma (strcase (substr  kdatread 1 pwk)));变大写# Y( |4 r9 g2 c: {3 j: N# I/ C, V
  (if (= comma "TEST")(progn
  |* a, P9 A/ u+ E- l(setq kdatread(substr kdatread (+ pwk 2)))
* @6 D$ N- Z" I1 O: B# S. X* l0 A* ](Setq pwk(vl-string-search " " kdatread)); C* }& n5 {" x1 T; @" B
  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点
( Q, D9 D* q1 [8 k: z(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心
1 r, x( |  c; d. y- g  (setq kdatread(substr kdatread (+ pwk 2))). M& ?- [' J1 L3 a
(Setq pwk(vl-string-search " " kdatread))
- }+ L0 A8 @* P# w/ a7 ^  (setq textt (strcase (substr  kdatread 1 pwk)));文字2 N4 L! }8 `' j& J4 q
(setvar "clayer" cirlayer)* j. P' `- o; Z; z+ t
(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字4 `" o$ r: ?6 C" L# W
        ));(if (= comma "TEST")(progn9 |* h: S7 e3 M: ]( e4 @9 G4 M) b

2 _# h0 y& s  r/ ]" d4 ^! W$ B  (if (= comma "LINE")(progn( ~0 O6 ]! ?# |. ?( g" Z& U
        (setq kdatread(substr kdatread (+ pwk 2)))7 Q" _7 e/ }( I  q' K/ p- _% Y
(Setq pwk(vl-string-search " " kdatread))8 q- i  f4 ^3 }5 I' c9 M
  (setq lineang (strcase (substr  kdatread 1 pwk)));起点9 M% Q& F$ g! l  e
(setq linep1 (polar circen (angtof lineang)  Rcir));起点
) W! p- l& X0 [3 N7 [$ M        * s3 O1 b7 V0 }& O* b  x% d
  (setq kdatread(substr kdatread (+ pwk 2))), i6 A/ q+ k& u& J& ]6 U0 X
(Setq pwk(vl-string-search " " kdatread))
- b3 y" k. n; o1 G& F7 N- C  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点" U) d1 P; Z7 B# v9 O+ w- `" I; _5 V
(setq linep2 (polar circen (angtof lineang2)  Rcir));端点
6 s1 D% ^# l6 j; v- z; f% \ (setvar "clayer" cirlayer)
/ k( `, m, K8 t% U/ ~! C(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线               
# N2 _7 b! D& @0 P8 l1 h        ));(if (= comma "LINE")(progn4 i" A9 u( A3 B0 \5 K- @

8 o2 X0 C$ ^. k" C8 C& B; d+ T" @  (if (= comma "HATCH")(progn, [; o3 h, a+ u" |0 m# k
+ p! Q" A; Q6 y6 Y
                         7 w, T  Q; O* v6 V4 G
        ));(if (= comma "HATCH")(progn$ x$ p5 ~6 l5 A2 G- A

: l4 c6 r. w' [7 _! @1 R    (if (= comma "CIRCLE")(progn
! P# H, [: D5 c" F* B
$ y% G. W# @  V8 Z                         
: t- k( ?* j" m4 C        ));(if (= comma "CIRCLE")(progn, t+ r5 `$ u' U. [. ?. _! l' C; R
  
: {( w2 e4 m/ W& V$ i- M* l0 d  6 p6 p/ a4 a7 w' I* F
  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))
1 }! E  P* L# B1 d. T$ K5 ~                             
" v# Q* B! `# g& k  g7 D                             + `, W% u8 f7 n. G; j9 d% a
      ));;(if(= kdatread tagmark)(progn
1 C+ h$ K3 c3 h/ ^     );;(if(/=" "(substr kdatread 1 1)), ^5 e( K$ f* b2 ^0 O9 ^8 J& j2 E6 K
      ~  L. K9 M: d. U6 c8 R
    );;;(while(setq kdatread (read-line kdat))0 Z; l2 ~; ]! R3 v  e
  
9 r. R- `+ Z) O  (close kdat)
' ~% a& s% ~3 U, F9 r. g  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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