QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 3687|回复: 3
收起左侧

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

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

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

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

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

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

谢谢newdhj 的答复。
) Z8 n' I; U# ]8 E) W肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。
3 p" g2 i+ Z9 w( T5 a8 m) r" T3 I; l# ?# m
[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()3 i, j5 d: ]8 B( S( d
(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))" C- |8 r7 c; O' @: }% S
(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))
- A/ ~5 W; J9 e2 W: B; y(setq ss@len(sslength ss@SS))
1 Y: [# n1 D$ h% s0 f(setq @k 0)! d- m, f# _: n* U1 x
(while(< @k ss@len)$ m4 _4 {: z0 Q. {
(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))
% d7 `0 ~, m2 K- o( S" c5 r  (setq  my_tag(car(cdr(cdr(car data_i)))))
/ b" Z% x, x! s5 X2 i (if (/= "org"(cdr my_tag ))(progn
1 }; f! ^1 z1 e& }2 _  (setq my_tag(cdr my_tag))" i" J' d) Y  _8 w  y
  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))6 l3 u4 ]% _) j- G6 F
  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))
, E" H8 J% Q+ {( z" t, z  (setq elss(entget ssn))0 i* `+ @5 H: `4 F: Z+ [, c% m7 A
(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn9 A% D0 c! D) E% J2 i1 v3 @6 l
(setq circen(cdr(assoc 10 elss)));;圆心/ C3 a- i5 m( k
(setq Rcir(cdr(assoc 40 elss)));;半径4 x/ l" z& F) S1 `5 c3 }
(setq cirlayer(cdr(assoc 8 elss)));;图层5 O; @2 C3 p% A4 }
                                    
3 Q* I- j2 y2 R# I+ I  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn: g- h# D7 B- m  a

6 G& b) d7 h7 L+ a  
( y: U1 V9 T: Y% y$ G  (findtag tagmark)+ V8 R' w, z5 N* k
  ( f, Y% X( O- a- H6 G  V
  ));;(if my_tag(progn
" E" ~6 [/ A: I- S0 r  (setq @k(+ @k 1)); z- M8 i. l7 A0 U3 k
  );;(while(< @k ss@len)
0 i/ Y4 Y/ j1 p5 I1 z
/ U5 r7 T( `# j( h3 P) y  (princ)1 Z+ B) a) d3 M2 _$ K! X3 X; M# ~
  );end: q. `% j9 e+ ^0 R' A$ ^& U
% d; D! p# ^8 \0 ^1 x& ]& i
$ \* I) A  A. M3 }4 f  x6 b9 \& ^
- J* Z  P( l) i2 C
3 I- V6 F$ j! }4 P
8 {3 j$ Q" P9 T- s' B1 j

0 V' Q2 G2 E2 k' r$ L  `: q
$ u7 j9 u, Z9 T9 O2 |0 w3 i1 m4 t2 b- i* |) c
;;功能  
  F+ l% d# y$ r0 A& t0 C* f) S;;获取附着在AutoCAD对象上的扩展图元数据  
. b4 Y# y5 n& I  X;;语法  
1 T# o4 m" I( z1 M6 n, j;;(ax:GetXData Obj AppID)  
; ^- w5 o1 g; m" m3 ~;;参数  0 j1 e' o, {3 l. X; P( Y4 O6 Y: \- E
;;obj:图元名
. ]- u2 {  x  H- }9 a;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据/ J4 k: B$ k4 L8 ]: L! V
;;返回值  
4 y; D' f9 ~( z0 H$ X2 ~;;返回附着到对象上的扩展图元数据列表  ! F% ]) \: }2 m- ~+ ?
;;如:  (("south" (1000 . "204201") (1040 . 1.0))
. `0 G) I! o, [; a7 |;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))5 l0 ^" g" N( A' e( h
;;       ("BBBB" (1000 . "bbbbbbb"))/ N) |0 Y; c) \+ J6 u: I# {$ ?
;;       ("CCCC" (1041 . 752.569))' H9 z' O* m& z& ]9 D% K
;;      )
. y" F' k& i  F3 S" E;;样例  
! J+ W4 K9 I. g4 d3 R, z4 y, f;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))
3 {/ s2 A5 G9 J/ P(defun xl:GetXData' o& |' b5 M8 |4 @6 Y! h4 @
       (Obj AppID / data n i  k i_k data_k temp1 temp2)
; S- r- V! c& M% K, Y7 `4 b  l) `  (setq data_i nil)
8 Z- V- X! g# h5 B$ K  C- Q/ V  (setq data (cdr (assoc -3 (entget obj appid)))* G% \, S# x* c3 n' u3 W
n    (length data)0 P: A7 U, U' J. e
i    0
2 n6 z6 f, n! Q# f  A! u6 f' h  )
; [. A  ?6 {7 G, `& i$ v+ @, D  (repeat n) i6 P( P9 [# B+ ~" M5 v
    (setq temp1  (nth i data)
: C2 D8 {) m) B   data_k (list (car temp1))4 Y- L; R5 _/ |4 _' g. s% g! }
   temp1  (cdr temp1)9 h/ t  I2 z0 ]& k: d+ t- A/ c
   k  (length temp1)  d' D& R( f( J8 ~, C
   i_k  0; ~* J1 }6 ?3 v) j
    )
5 T+ h4 @2 \0 L$ ?5 o. J    (repeat k
0 g+ m  v, G+ l: i% c      (setq temp2 (nth i_k temp1)' l( `& P1 @9 \' t  ?4 B
     i_k   (1+ i_k)
- k( f0 k3 z0 K0 l! ?! i# W9 C      )5 ]+ A. q8 h. N: Y
      (if (and (not (equal temp2 '(1002 . "{")))0 k  I# S' y* o4 E+ `+ J
        (not (equal temp2 '(1002 . "}")))
  N. K6 D1 N( E" S1 w   )/ K7 c0 ~1 c/ {5 F, h  \
(setq data_k (append data_k (list temp2)))
- n! y9 E/ ?6 ~  x: z0 |' W      )7 ~  G7 w) p) _- K- V
    )
: }1 ^) S" g4 `    (setq data_i (append data_i (list data_k)); h5 Z8 S  f: G3 k
   i  (1+ i)- J3 y4 ^9 K, _# p! c! N
    )
! `" r: m6 Z$ K$ W2 y  )" u3 s' Y. P7 w# }5 |
  data_i
: ?# t- x* G% Y)# C: [$ T6 ?& ^' d- z
+ f/ O0 R3 {6 j2 a- P- {

/ }1 `; U" n6 \5 i, P" K2 D' Q$ C; O0 V) ]$ A
0 ^' G( f1 _% c) v+ S, V- L
(defun findtag (tagmark): i4 E  V$ N  P3 U$ c
  (setq kdat(open kkdat "r")). j+ i- B- y% V3 a2 U1 E
(while(setq kdatread (read-line kdat))6 Q% Y0 w6 [. T# _
   (if(/=" "(substr kdatread 1 1))
& j( {2 U: ?) ~    (if(= kdatread tagmark)(progn5 V8 E" ~; n6 U: \0 W1 O; X( T4 N
(setq kai nil)                             / U+ r% }- H: ?0 w5 v
(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的/ w( X* b) N7 R# f7 S* I  F3 v& o
   (if(/=" "(substr  kdatread 1 1))(setq kai 1))/ V7 e: p) K. {4 A% M! p
  (setq kdatread(substr kdatread 2 ))
5 V- B' ^- [* x3 m4 h8 B5 K3 ?  (Setq pwk(vl-string-search " " kdatread))
5 {4 r* f& ~# O2 t) N5 e6 f1 `  (setq comma (strcase (substr  kdatread 1 pwk)));变大写: p9 |9 R' {- V6 r
  (if (= comma "TEST")(progn
4 n7 {" ]2 @% J* X4 c, }(setq kdatread(substr kdatread (+ pwk 2)))
" k  D& J# X# P5 l, f(Setq pwk(vl-string-search " " kdatread))
# a: z& ?) g3 J  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点  ?8 h9 S" p4 t- T- D
(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心7 c+ D) K# h- Q* P; `; B
  (setq kdatread(substr kdatread (+ pwk 2)))
4 Z) ]% g0 @$ {(Setq pwk(vl-string-search " " kdatread))9 f' c" Q4 A0 t8 p3 V
  (setq textt (strcase (substr  kdatread 1 pwk)));文字- i, J  M6 k( U# C! X
(setvar "clayer" cirlayer)
( y# w: x- s8 h1 C(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字/ |9 K) x) m% N& p; B- A
        ));(if (= comma "TEST")(progn- M+ A/ S6 w& z; g* _0 H

4 q7 S) ]. H* A% M; V, E  (if (= comma "LINE")(progn0 B; G6 X  B) d2 C6 q6 k3 b7 _  B- M
        (setq kdatread(substr kdatread (+ pwk 2)))
' F) E+ o7 j1 z4 G2 O, a* [' D(Setq pwk(vl-string-search " " kdatread))
& z4 e# o  e6 ^; ~, q7 i3 T  (setq lineang (strcase (substr  kdatread 1 pwk)));起点
+ X9 {( }( R) n/ Z; m0 m6 I3 Z (setq linep1 (polar circen (angtof lineang)  Rcir));起点
# y3 k+ f3 \" Z4 k/ ^$ v5 C        ' z. C6 E  O6 [& o% }" M7 ~6 Q0 e9 _5 G
  (setq kdatread(substr kdatread (+ pwk 2)))
0 w2 G# a  z. o% R. W, h0 m7 O; w(Setq pwk(vl-string-search " " kdatread))
8 u: T: r, N1 p6 x* L1 _/ l' F  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点% q5 _: y; e" l- [; J
(setq linep2 (polar circen (angtof lineang2)  Rcir));端点
# y0 D* N! |  o% v9 W0 s (setvar "clayer" cirlayer)
2 T% |% D, `: y6 a0 a1 @. G' Q(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线                ( |0 ?: [- f' m! b" z
        ));(if (= comma "LINE")(progn& E8 g0 r% H9 ]0 E( r
! B# |( Q" _- p! @; Z. G
  (if (= comma "HATCH")(progn
, P7 C3 N- G4 {3 S' f% r; \  T: o
4 ~# I( r- i2 S0 D  A                         
+ D) E9 J: J) V, r' N        ));(if (= comma "HATCH")(progn
  S! ~$ h) }8 ^* z2 V
6 }- ]7 R" |7 H" d- }' T7 w- G    (if (= comma "CIRCLE")(progn* Y- C" N5 o; D4 M7 w
3 [" q) z- ^7 h, O, u. {3 F1 p3 U9 Y
                         : _) L: L9 d. Q) Y
        ));(if (= comma "CIRCLE")(progn
0 \# h9 s8 j8 t! O) h2 k* B' q9 c  3 l% F1 ~0 F( m
  
9 k* S1 q  W8 [3 l( U  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))
- g, J1 G* X: i! f* J, P6 X                             / j" _0 }' j  {% x  R( ^
                             
3 n4 q# k) P6 ]1 m4 N      ));;(if(= kdatread tagmark)(progn8 y" B2 j% h( U% ?) R3 b1 {/ d
     );;(if(/=" "(substr kdatread 1 1))) E, A( @1 {3 j, c
   
* q/ ~) q% ?5 ~0 j3 x% S, H3 V5 M    );;;(while(setq kdatread (read-line kdat))( T5 }0 A& X- Y. l
  
2 p2 D" @  l* j3 t1 ~4 x7 d( T- E  (close kdat)" k- M3 C1 L) m; ]. J
  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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