QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
5天前
查看: 3602|回复: 3
收起左侧

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

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

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

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

x
有没有编程高手帮我编个LISP程序。我做在标注模板图的时候,用英制标注,而加工需要用公制,要是每个都手工改很费时间的。比方说自动标注出的直径为%%C0.125(英寸),我只能手工改成%%c3.175(0.125x25.4)。能不能编个LISP程序自动改成这样?先谢谢啦!
发表于 2008-8-10 19:30:16 | 显示全部楼层 来自: 中国上海
用不到什么程序的,只要在标注样式里设置一下,在标注时就有公英制双尺寸显示了( c9 S& P( G7 v8 Q/ O
你这个“C0.125(英寸),”也有错误,一般英制是用分数表示的
$ a- @# \, {% a8 M% @' {9 A! y# t9 E, q. d% q( i1 D
[ 本帖最后由 newdhj 于 2008-8-10 19:32 编辑 ]
0810-6.JPG
 楼主| 发表于 2008-8-11 13:07:18 | 显示全部楼层 来自: 中国江苏苏州

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

谢谢newdhj 的答复。
1 @7 q! r( K( M肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。
& S4 z1 [/ T- N. N1 @9 u: ]3 \% k+ `; ^+ u/ O
[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()
: h3 k' d4 H& ]# E/ J(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))
9 H$ E$ L' C3 ]" g(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))$ F' V9 m$ e2 }  g4 w) x0 a
(setq ss@len(sslength ss@SS))
& u8 s2 L5 R# `% [. b(setq @k 0)
! \7 \! y+ f1 n) i6 Q% @3 X  E(while(< @k ss@len)
: Q  v  e9 Y- p/ {8 S(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))
- \! ^. [2 [4 }: x  u6 E9 \8 m. l  (setq  my_tag(car(cdr(cdr(car data_i)))))9 v% o. W4 n4 M2 I3 c+ m% G. |
(if (/= "org"(cdr my_tag ))(progn
% H9 P: I3 U: x) Q! O  (setq my_tag(cdr my_tag))
8 {. o, a5 ?  `) k$ q$ }  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))- z7 r' N6 j% Z& a0 |
  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag))): j( h+ T$ M; c) k. B0 D% A
  (setq elss(entget ssn))
( E+ F- e. v& ^  o(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
; [! J' U/ I3 i4 y+ o(setq circen(cdr(assoc 10 elss)));;圆心1 n. c; H, C; h; t- i% k1 X! e# @8 p: @
(setq Rcir(cdr(assoc 40 elss)));;半径
) o+ E" e2 W$ n(setq cirlayer(cdr(assoc 8 elss)));;图层
# Z3 v& [$ J6 x1 l% [" T                                    . S* h3 G5 M- R
  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
7 K+ r  W5 }- D7 n0 S- d. e
8 b& ^& `0 ?! r5 G8 j2 M1 @. N  
3 U( X+ o( M" }0 b8 W( R  (findtag tagmark)
7 E5 U% w- {# S4 T  k+ c7 r6 D  
% u1 T) Q( h4 D- B3 G7 R# k; w( w  ));;(if my_tag(progn/ Z4 Z, E, }' ~! f7 O
  (setq @k(+ @k 1))* w2 K% Z8 Q8 O' k$ P; |
  );;(while(< @k ss@len)  O* |* k3 O: q7 R
, X% O; T( _3 }  {0 k& e5 E
  (princ)" k7 W2 ^) `2 D! L+ S
  );end% G, f8 F5 Z& _8 D; G0 ?
; f! L" ~/ Y+ D( w; \- o* U) E

" j5 z( S8 W6 A6 U# d; B
6 X9 j  z* Z* k
2 Q- m5 V, r  s9 n* ~5 _5 i
& m' Z- Z; G" g) H" U- Y0 c, S, ]* b6 I0 i
0 k. U  ?( R) ?4 r& a8 |1 S
0 ~. [; C/ C3 E& v
;;功能    I0 h  ~  t' q# x& s& r( z
;;获取附着在AutoCAD对象上的扩展图元数据  4 l; X9 L8 M' O: c5 u1 i2 |
;;语法  " {, |, K! l/ U% ^, `5 E
;;(ax:GetXData Obj AppID)  $ c. u$ j( q6 ?; ^/ T
;;参数  # J  }& Q; g, C( V
;;obj:图元名6 j. O: n  ?8 s2 B
;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据
  \3 U' U5 p. T. a; F1 E;;返回值  
6 V/ ?( Z5 i, [9 }4 h$ B;;返回附着到对象上的扩展图元数据列表  
! I8 |* s" @0 N/ t* V;;如:  (("south" (1000 . "204201") (1040 . 1.0))
7 b, c4 N8 Z' r" x;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))
. P* g% f. q0 T9 d4 ^; Y;;       ("BBBB" (1000 . "bbbbbbb"))6 g+ ^1 m) R, U4 s9 s) [: }
;;       ("CCCC" (1041 . 752.569))
1 Y9 t/ M( L- d0 h8 h;;      )' e* d. k3 O" ]+ `) H# d6 s8 A
;;样例  
7 r  Y, @$ E, L* W( c6 `;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))
- P0 d" I6 R0 [: V! x! X(defun xl:GetXData7 A  E9 a% z" k' r
       (Obj AppID / data n i  k i_k data_k temp1 temp2)
5 N  R6 n1 Q. u0 |( `+ ^+ d2 l3 R  (setq data_i nil)  F! S( n5 g* u0 f  ^
  (setq data (cdr (assoc -3 (entget obj appid)))% _* Z, @* t! Z* v8 h
n    (length data)) c9 O9 x; Z: r
i    09 k; {0 X# A( f" _  r; B
  ): b- A0 m3 q; K/ Z
  (repeat n* c) u, }$ A! R9 B2 J6 o9 j3 V
    (setq temp1  (nth i data)
2 Z2 U& f9 a9 o$ O; Z   data_k (list (car temp1))/ w& j4 w  D' s" K2 \* v
   temp1  (cdr temp1), h% V  _% w0 a
   k  (length temp1)& \( M5 i7 ~& J; o& \( [# [9 ?5 A
   i_k  0
8 I$ u$ u0 C1 \    )
( P6 m  u/ ~- b" B! n7 p    (repeat k
* K9 i/ p! n/ }0 ], P* l      (setq temp2 (nth i_k temp1), v- H9 D( H4 A! j
     i_k   (1+ i_k)8 D: Y/ C  L! y/ C
      )/ p2 F% \2 V. r' }
      (if (and (not (equal temp2 '(1002 . "{")))" _: o$ Q/ O/ ^8 g
        (not (equal temp2 '(1002 . "}")))
1 }0 J! D/ d+ f& W; L: d6 {   )
% x" v# {7 n$ ? (setq data_k (append data_k (list temp2)))& G, ]7 k6 E; R5 c
      )
7 @+ _: H" k% X3 S% g+ r0 p, w    )
) Q( }, W0 t' |: l8 X4 A& |    (setq data_i (append data_i (list data_k))$ E* |' F  n1 `! d) r
   i  (1+ i)
2 p% b( p: u1 p* I( W4 ^  p    )" J2 e9 Q  a' a5 u4 g) p
  )
( ^  v2 v  z, H' J' S& u  data_i9 k3 {: R/ g# d3 F
)
8 \! M' E. E4 Y8 d# _+ I( ~
' s0 M9 C7 q/ w# k
7 q: y( O/ f: m; ]4 Q; P# Z- \3 N3 `6 a

. L( d, w; [3 |9 i9 k# P9 Y(defun findtag (tagmark)0 a+ p0 l4 W4 x# y" v) ?( l
  (setq kdat(open kkdat "r"))- Y0 B  F7 f5 T2 I5 H" T* F( I
(while(setq kdatread (read-line kdat))
0 e# s( L4 b4 @) i- U  g+ P   (if(/=" "(substr kdatread 1 1))
9 F6 }, c- d. g; U0 W6 z" i& M3 _    (if(= kdatread tagmark)(progn
1 Q3 f; i7 Q; H: ]  P! L% g(setq kai nil)                             # e3 c$ m( n+ s$ W
(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的7 t- ?6 T& s( N' ]2 i0 j( }( A
   (if(/=" "(substr  kdatread 1 1))(setq kai 1))* r/ Q: z3 [  d
  (setq kdatread(substr kdatread 2 ))
/ p$ c8 y& s. A3 \! g: P  (Setq pwk(vl-string-search " " kdatread))' b0 v  I/ r2 c
  (setq comma (strcase (substr  kdatread 1 pwk)));变大写
) h! f( q3 Q1 h& X  ?  (if (= comma "TEST")(progn
% ^. F" u) q# g7 Z- B0 S(setq kdatread(substr kdatread (+ pwk 2)))
" O' ?% b8 m/ [7 h6 Q(Setq pwk(vl-string-search " " kdatread))- b# o  p' Z. Y1 D
  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点
! _# x0 {- N) B( u- Y: u(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心* J# Y4 _* F* a( ~
  (setq kdatread(substr kdatread (+ pwk 2)))
5 e6 q) O/ ]: |- D(Setq pwk(vl-string-search " " kdatread))2 k- |- N" L) Z+ m* c
  (setq textt (strcase (substr  kdatread 1 pwk)));文字2 ]( Z9 h; ?. Z. O+ V( `* |9 t
(setvar "clayer" cirlayer)
& ?! \( @8 d" {! F(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字' p. b$ E/ ]/ @: K( |1 K+ B7 I# a
        ));(if (= comma "TEST")(progn
5 T: k/ G* D7 E8 m6 [; [: `6 R/ N( F
! T5 ?; k1 n' }) r  (if (= comma "LINE")(progn
6 {7 U5 W* I- r6 R        (setq kdatread(substr kdatread (+ pwk 2)))& S% B/ v# f5 F- j
(Setq pwk(vl-string-search " " kdatread))
! k9 J9 X8 V$ G+ z& O% ]  (setq lineang (strcase (substr  kdatread 1 pwk)));起点
3 i# D$ j/ P5 `1 ] (setq linep1 (polar circen (angtof lineang)  Rcir));起点2 _4 u: W/ A' N6 ~9 |. _, @
       
% Q2 N9 z- D& N. T  (setq kdatread(substr kdatread (+ pwk 2)))/ G' z6 c$ H& P! ?. L8 V" u
(Setq pwk(vl-string-search " " kdatread))
& ?2 x7 g4 K/ e4 O  z; P  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点
4 `5 C" |7 m' e1 X( k" A0 Z(setq linep2 (polar circen (angtof lineang2)  Rcir));端点# B9 l* L; \) f: r1 A+ c' P1 x+ w
(setvar "clayer" cirlayer)
6 Q3 e( |& d; E1 n3 T(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线                6 h; Z/ u' J7 I1 R9 s' ?2 f) q
        ));(if (= comma "LINE")(progn! P; F, K$ q! H$ b6 l4 O

  b' Y! f1 I& F! v4 d) N# P& L  (if (= comma "HATCH")(progn) r) V9 g' i7 b+ N- w
1 h! X  u6 N, c0 H( N
                         
+ z& |/ |& p" R' [- I        ));(if (= comma "HATCH")(progn! w$ B0 X2 b( P7 B, n
8 t# X( w; T6 ~+ ?' A# t, ^
    (if (= comma "CIRCLE")(progn. g: Q. ^! a7 ^) ^

) S' ~' J& Q8 A7 h* Z. f9 u                         3 V1 K0 `- f: g$ [; g* t1 @
        ));(if (= comma "CIRCLE")(progn
2 }+ W) ^" R7 ~! O. [6 i9 y  ) t' A! x% A( F" i1 b
  ( e* S% {* a4 A1 g. A  W
  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))
0 c- u2 K4 t( L7 y4 Q  ]                             1 Y- @/ ^; V3 i6 Y* u4 W3 p
                             
- k- I; v6 i. R" [      ));;(if(= kdatread tagmark)(progn
3 b& L) j3 C  ]& A     );;(if(/=" "(substr kdatread 1 1))" G! ?0 S+ x3 E$ ^. s( i8 k+ j* ?
   
) D4 P) f. g6 d: a4 p) g! d    );;;(while(setq kdatread (read-line kdat)), o' n/ f( b" F( f
  5 g% [3 E9 d# u( U( l
  (close kdat); t0 t. O3 l. M" O
  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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