QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3692|回复: 3
收起左侧

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

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

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

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

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

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

谢谢newdhj 的答复。$ E1 J$ T% Q5 ?  j8 g8 r7 ?4 L8 @
肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。) A; d- l& ?! x: S- h

" b4 L* U+ Q( u1 h! `[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 9

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()4 w; H2 u% l, N# p. b2 X4 Z
(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))
7 D; R; @+ b1 e(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))
* H$ i6 a! s- V0 D* G: w(setq ss@len(sslength ss@SS))
4 }  j$ Y. S4 e# J(setq @k 0); v) k" Q' D" e
(while(< @k ss@len)
8 z7 L4 O7 X- v' r, U1 g: N& d(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))$ Z$ k% N. q, o1 l, ]; W( p
  (setq  my_tag(car(cdr(cdr(car data_i)))))
  J8 G4 H' J0 o* e/ @2 u (if (/= "org"(cdr my_tag ))(progn- @6 d1 @6 C0 S5 N# q" `) j
  (setq my_tag(cdr my_tag))& q8 B# ~! U6 f7 i; o, l. Z
  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))
! G. }/ f0 P, w" Z4 v  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))
3 e7 g/ W) ?# \& [& X. _  (setq elss(entget ssn))% ]1 i! B3 z7 X( C- E8 I5 k
(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn/ N1 _- K+ ]4 v0 C. e8 u4 T
(setq circen(cdr(assoc 10 elss)));;圆心
; y# J4 P1 ?0 W& I- s; D" L, p(setq Rcir(cdr(assoc 40 elss)));;半径
) j0 f9 G$ Q( h9 P7 X(setq cirlayer(cdr(assoc 8 elss)));;图层
' H% f& Q' L2 G$ Z8 x                                    0 p+ H8 G6 k1 V+ I: S
  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn) Y. k$ ^$ I; l

5 I* F6 T4 l( f8 x+ W  
! p/ m# d% z& Y. C  (findtag tagmark)
, A7 Z( m2 O6 d) {  ( E3 J( `/ }7 A9 p0 m1 I. @+ z7 [
  ));;(if my_tag(progn
# G! c5 n( ~5 j, m+ V  o  (setq @k(+ @k 1))/ y5 Y& {2 \6 G7 H; \& j: f
  );;(while(< @k ss@len)
' R4 t" {, o: K
4 Y! O5 m9 G  G  (princ)
0 Z6 \  n3 t' ~) t  );end$ N5 v" ?( L1 K. u0 |- I+ w* }. C
" ?3 k0 L' c) j: B# ?9 K

* F* p) H/ P4 \- d  a* E2 r( n, ~& p: Y1 ]8 I2 V, A& E) R* G& s$ \

$ @0 Q0 m3 z& m6 U( H8 h5 p7 h
2 C7 |( ^2 f  ]% ^: G+ x; h! x* c
! c4 O9 X3 i- V$ f! E7 k' U2 E% D  k  h3 y% k
" w7 D+ U7 I3 G( k
;;功能  
1 L" H2 l3 i. a- U;;获取附着在AutoCAD对象上的扩展图元数据  
& i5 `9 c$ ?$ l* m$ [2 r;;语法  
2 o4 k9 ?. |2 j, c$ v1 X% g;;(ax:GetXData Obj AppID)  
4 C. g# n. ]" q: u1 M;;参数  
$ @/ z, i8 j( m8 l2 O  h;;obj:图元名
( X! C+ b0 k; C1 c;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据6 ^: e, v6 `* y3 g# R+ l
;;返回值  " d) Z9 T9 n; s8 U2 v4 u+ L( y7 k
;;返回附着到对象上的扩展图元数据列表  
" L: g" g3 Z) A# Z! y  {) C;;如:  (("south" (1000 . "204201") (1040 . 1.0))- O2 _8 g& u- ]5 B
;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa"))
+ }; V' e/ u. V% k7 W) X: h! Z3 z;;       ("BBBB" (1000 . "bbbbbbb"))) L0 o# s& _. D" [% v) A* d
;;       ("CCCC" (1041 . 752.569))
% ^6 @" d: f; T4 H;;      )
7 f! {: G/ h5 {$ H+ N3 C;;样例  6 V* o7 U5 U1 ^+ S% y4 y
;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))* U- J1 y% V/ g, A! G7 v- f
(defun xl:GetXData" s6 ]- \* a: `$ g; m$ K) c- |
       (Obj AppID / data n i  k i_k data_k temp1 temp2)
3 p4 R/ E7 F# O- w! k  (setq data_i nil). H( n( Y: Q# ?/ J1 R4 v
  (setq data (cdr (assoc -3 (entget obj appid)))! q% {# R3 ?% k& |" T" H
n    (length data)
# u) Z9 W8 ]6 U- |& L; C* M) m! } i    03 h" k1 g5 K2 L* R) E
  )5 T" S/ X0 k& G9 X5 L  E
  (repeat n
  ?2 q  ~& H; D+ N0 m    (setq temp1  (nth i data)
0 M3 F& _6 c& f3 @' X0 C- V   data_k (list (car temp1))% {; e; i1 W4 |/ D  \$ f) |
   temp1  (cdr temp1)
' P$ F+ [1 M3 Y# z   k  (length temp1)& h) y% R2 I* ~! J7 \
   i_k  0
4 v. E% K) o  `; Q. [' {    )
7 @3 |* k- S% {' S, U+ z. ^0 [" e    (repeat k
8 f: D% K4 J6 M+ }) V      (setq temp2 (nth i_k temp1)
* q& q' A1 z/ d6 O; O" V9 \     i_k   (1+ i_k)
, @- K/ B0 r% K2 T- F      )/ i9 d; b/ a# h9 Y- \" x0 ?7 a
      (if (and (not (equal temp2 '(1002 . "{")))
; X' @  @0 c& f' [; c        (not (equal temp2 '(1002 . "}")))
- [9 I3 {* |3 |9 B" a   ), X4 Y( G. H4 y: ?
(setq data_k (append data_k (list temp2)))
1 B8 [& a) y4 I+ b' g      )+ b7 c9 a6 u9 b
    )
8 h6 x2 B8 w2 e! m$ e8 V    (setq data_i (append data_i (list data_k))
/ j; @( l. |7 w4 `- J; v8 I# F' c   i  (1+ i)$ e7 |% G" J8 m( d; {
    )1 z& m( W  r8 _2 L0 r
  )
/ j( H8 i3 o3 {  data_i
2 E8 F/ t* n/ p/ l)0 \1 z0 h' j( i9 B( R' V, x- x
5 s7 @( o) j$ c" H0 }( k! K
) q4 s  E: j4 v2 w

8 V+ E, N2 y+ J, [0 x. e2 Z7 s
- P; J" ~! J& g(defun findtag (tagmark)
! O5 l( e$ t& t  (setq kdat(open kkdat "r"))
9 C" O* f0 A( M+ x& e, m' a6 N (while(setq kdatread (read-line kdat))3 ]9 [0 U) G5 u! G/ B7 i* @
   (if(/=" "(substr kdatread 1 1))
0 i0 R3 h& O7 Y0 c0 L    (if(= kdatread tagmark)(progn0 _4 R  F- Q* ]1 a
(setq kai nil)                             
$ R; o* \* P1 u3 T/ ](while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的1 c5 Z6 y, ]: h/ }' {
   (if(/=" "(substr  kdatread 1 1))(setq kai 1))
. c6 Y* R7 Q7 A% i  (setq kdatread(substr kdatread 2 ))
) ~) h( G* [2 s7 C+ c  (Setq pwk(vl-string-search " " kdatread))/ M" N$ }6 h9 ~- E& `
  (setq comma (strcase (substr  kdatread 1 pwk)));变大写1 g$ D8 o! U9 T2 S" Z/ S+ e
  (if (= comma "TEST")(progn/ x  K8 Z" W/ y2 |
(setq kdatread(substr kdatread (+ pwk 2)))
; G$ V0 }3 u7 A* U$ w(Setq pwk(vl-string-search " " kdatread))
, T: A  T: ^& p7 q: o+ e' h  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点) {! H6 o( C, m  f; {9 y# B; w; [
(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心  G- d! m- a6 S, ]# x! l
  (setq kdatread(substr kdatread (+ pwk 2))): z4 u/ F1 ^1 Q
(Setq pwk(vl-string-search " " kdatread))1 z' _  Q- V7 G3 @5 o  }9 R2 b
  (setq textt (strcase (substr  kdatread 1 pwk)));文字
, \7 b# ?( ]2 i9 g4 S (setvar "clayer" cirlayer)
, m- @0 q. N2 I: S4 _0 h(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字  e, X* \% k' p
        ));(if (= comma "TEST")(progn
, L- i: l' `5 j% I5 P4 n: a* H" U2 R1 A. J% L$ B, B
  (if (= comma "LINE")(progn
7 q  Z$ {2 f! q% E) h        (setq kdatread(substr kdatread (+ pwk 2)))& B# i" r" x$ Q, `. b* S* r% S
(Setq pwk(vl-string-search " " kdatread))
( |# F5 w$ s: ^0 w% J) E  (setq lineang (strcase (substr  kdatread 1 pwk)));起点- g0 o$ d3 u' b' Q( l" @. R
(setq linep1 (polar circen (angtof lineang)  Rcir));起点
- \, D& Z2 d8 n        + y# _* a: s+ I9 }! Z2 V
  (setq kdatread(substr kdatread (+ pwk 2))), ?6 v/ T! p# V; J$ v( [
(Setq pwk(vl-string-search " " kdatread))
& d8 z( x, I8 r/ d( \- H6 |  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点
/ I; _# Z$ z# n9 t8 U- m(setq linep2 (polar circen (angtof lineang2)  Rcir));端点
, X9 K, G- a: K0 Y4 Q% ]0 x (setvar "clayer" cirlayer)
' [+ L4 R( W7 |( N: X1 L4 G  X(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线                * \7 I; ~  N1 }& o$ N
        ));(if (= comma "LINE")(progn3 u- F8 p4 A* j0 c* q
( @- O3 v: Q! v' \. B
  (if (= comma "HATCH")(progn
  \6 e+ l) {" A& a6 @# C1 n' P1 V) u  v% P
                         * n6 i; K4 O# f9 A. n# D# B# z
        ));(if (= comma "HATCH")(progn
: ], ~- U& l$ Z+ L$ R$ O) z: o1 o; \; m0 v0 t8 K$ O
    (if (= comma "CIRCLE")(progn
9 F: B. q5 |- V4 Z( ?# H; x* ^+ d/ G$ F' u4 t: H2 o
                         4 q, `3 D& S+ g, v4 G. V! N- s8 U
        ));(if (= comma "CIRCLE")(progn. P3 c9 M' H; F8 N) Z  z5 }& v- ^
  
! s" e: |; z- G) L. r  * _  ]( m* o+ Q8 x# y5 `9 ~
  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))
4 i8 {# X$ o6 X5 A7 Y                             
8 m$ w0 P8 K- Y, B6 Y% {9 H' X                             
- F5 h) K8 c; I* Q* d! ^9 U6 r      ));;(if(= kdatread tagmark)(progn
" U! k0 |, S( S2 e9 t$ k& s     );;(if(/=" "(substr kdatread 1 1))
/ B% s' k" n9 z% a# S  }   
% f+ H2 S+ _' O2 o! B+ s    );;;(while(setq kdatread (read-line kdat))
& W+ ?& _+ i2 d  9 g8 }' D. W# S( |# h! A
  (close kdat)
0 n- T% q( s$ A2 C  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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