QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
有没有编程高手帮我编个LISP程序。我做在标注模板图的时候,用英制标注,而加工需要用公制,要是每个都手工改很费时间的。比方说自动标注出的直径为%%C0.125(英寸),我只能手工改成%%c3.175(0.125x25.4)。能不能编个LISP程序自动改成这样?先谢谢啦!
发表于 2008-8-10 19:30:16 | 显示全部楼层 来自: 中国上海
用不到什么程序的,只要在标注样式里设置一下,在标注时就有公英制双尺寸显示了
$ i7 }( |8 Y: O; B( R1 e% _你这个“C0.125(英寸),”也有错误,一般英制是用分数表示的
) r6 W, D& l( F( t3 v# F$ z0 V
' B1 @$ e8 a: N8 h: L[ 本帖最后由 newdhj 于 2008-8-10 19:32 编辑 ]
0810-6.JPG
 楼主| 发表于 2008-8-11 13:07:18 | 显示全部楼层 来自: 中国江苏苏州

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

谢谢newdhj 的答复。
% }$ |5 ?6 y1 _肯恩是我没有所清楚,我是在标注模板坐标时出现这个问题。模板的XY坐标标出来后,跟模板就没有关联性了。换句话说,标出来的就是一对文字,不是尺寸了。所以没有办法从设置里面更改。(这个软件是个外挂)。
4 s; S$ k, G, m0 L# c
9 {( p- A/ a1 D& S% k[ 本帖最后由 mouse-net 于 2008-8-11 13:19 编辑 ]
111.JPG

新建 文本文档.txt

86 Bytes, 下载次数: 10

发表于 2010-10-14 16:49:49 | 显示全部楼层 来自: 中国广东深圳
我有一个发给大家学习学习(defun c:inm()
& C- Q, F' S1 n3 c; `(setq kkdat(findfile(strcat way"\\dat\\TAGMARK.kdat" )))
% ^3 C; E, ]" Z7 S2 f(Setq ss@SS(ssget(list(cons -3 (list(list "my_tag"))))))- u; b1 V; {" d9 f5 G2 I
(setq ss@len(sslength ss@SS))$ p, b6 D2 t0 k# c
(setq @k 0)) O/ M+ z: f0 J
(while(< @k ss@len)
2 [" F/ a0 z1 W' W(xl:GetXData (setq ssn(ssname ss@SS @k)) '("my_tag"))
( c" K" s; B7 r0 }( M/ u  (setq  my_tag(car(cdr(cdr(car data_i)))))
- a+ U1 c' W6 ~$ I. C/ P (if (/= "org"(cdr my_tag ))(progn3 H+ \. ]! k& p- {
  (setq my_tag(cdr my_tag))0 d2 L4 a/ `6 _  W
  (setq temptag(substr my_tag (+ 2(vl-string-search  " " my_tag))))' K6 ^! _, ]* C; _% w- B
  (setq tagmark(substr temptag 1 (vl-string-search  " " temptag)))' M( a( L; b; w, L+ U; M+ o- J# t0 H  I
  (setq elss(entget ssn))
% n! |/ U( S, g/ w, g(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn
2 p! v0 j  I9 ~4 `( _(setq circen(cdr(assoc 10 elss)));;圆心
  Y* o; W" M! Z( g1 U, Q(setq Rcir(cdr(assoc 40 elss)));;半径2 Q. ]% L, L' S9 U9 Z( [
(setq cirlayer(cdr(assoc 8 elss)));;图层: s8 w' l2 Y' N& @
                                    ( E0 y" c/ v- W8 B
  ));;(if(= "CIRCLE"(cdr(assoc 0 elss)))(progn" r* W2 ?  |( }
  V8 B3 T5 i( D0 d$ T9 C0 |& u3 v
  6 C8 z. d7 f' w8 w8 s, }
  (findtag tagmark)
" H; H4 r- ?9 C  
! v) g" R6 C. F- a  ));;(if my_tag(progn
  B8 U3 X* Y3 A8 Z  (setq @k(+ @k 1))# O% Z# N: m: u* \& H
  );;(while(< @k ss@len)# ?' b1 c' j  \: j" ^# B
5 L" R( M9 N( p  A( |
  (princ)
7 O( W7 E; y  c8 g- s+ P1 J  );end' Q+ V8 F% _# G- J* R6 ], K
" K# B, [! v. F' ]' h( @. y5 s8 z
; d9 @' C+ f0 {
' v- p9 j3 L6 X0 n) [' o
4 b8 n$ ~+ W! Q, f

2 `, y* D! {( ^  P2 C; ~7 ]- A) u/ x2 ^  @

3 m) `: F/ n- u1 I; J
; u, O8 [9 |& \2 k& F;;功能  
8 T5 h1 ]6 Q+ X. ^( t;;获取附着在AutoCAD对象上的扩展图元数据  
% S2 Y* p( T3 W, X- f;;语法  
8 o( J2 _' w" T! @' _- B" E;;(ax:GetXData Obj AppID)  " C3 N  }1 z# u  }1 `* D+ y
;;参数  / [/ d5 @9 I9 C4 D# l4 t% U
;;obj:图元名. m; ]# s3 r' t% [
;;appid:AutoLISP函数REGAPP注册的应用名,如为("*")则返回全部XDATA,如为("AAA" "ACAD")则返回两个程序的数据
' P  X" u3 X  L+ H7 Q! Q# M" H( n' ];;返回值  
9 Z5 B$ u5 x3 p/ |/ b/ P;;返回附着到对象上的扩展图元数据列表  
2 p% `4 r! `2 A) M5 u4 c;;如:  (("south" (1000 . "204201") (1040 . 1.0))4 U! M! O  r, Y8 ?& |
;;       ("AAAA" (1041 . 562.307)  (1000 . "aaaaa")). Z! j# r5 s6 x* P1 r
;;       ("BBBB" (1000 . "bbbbbbb"))( T. ^* T5 {/ T. `
;;       ("CCCC" (1041 . 752.569))- \# p) p& h7 g- m4 h
;;      )* f2 q3 ]  Y' i! j4 [
;;样例  - Q8 a! `  v. y" b7 t
;;(xl:GetXData myVlaObj '("*")) 或 (xl:GetXData myVlaObj '("AAA" "ACAD" "my_tag"))
) x' E6 k0 H$ X. l, @5 v(defun xl:GetXData7 @2 l0 T3 m2 r# F
       (Obj AppID / data n i  k i_k data_k temp1 temp2)2 j1 k/ g; H' N4 ?! n0 U# @* c
  (setq data_i nil)
8 M: d0 B, K% y- p) o  (setq data (cdr (assoc -3 (entget obj appid)))
+ t- q; n# C3 W4 E' h  A" X3 Y- D n    (length data)/ X% l3 p! {# d: S. s
i    0! i9 G  I( Q& [' T  i
  ); I& V* x; [  c0 X4 W0 B6 K- a
  (repeat n& ^" D  b. e+ B& o# Y
    (setq temp1  (nth i data)' S. M$ e6 a! o, c3 [' k
   data_k (list (car temp1))
# H" P' d  y" ~; I" O6 d+ |   temp1  (cdr temp1)  H: O3 s! w# A/ u. b1 z
   k  (length temp1)9 ?# c% x9 b) w1 g- z
   i_k  0
, i1 V/ P) N. i    )
! E9 i8 j! k8 N, `6 L/ Z4 a7 T5 z% G% l6 {    (repeat k* {9 L# ~7 `& f) v
      (setq temp2 (nth i_k temp1)
8 u  z0 E4 Q& s; k, j+ B     i_k   (1+ i_k)
. n9 `" Z; C; m( a  j      )
% t# X! N5 q4 ^- I/ ~$ s      (if (and (not (equal temp2 '(1002 . "{")))
7 }6 L8 e8 C+ m3 g. x4 q        (not (equal temp2 '(1002 . "}")))1 R3 q8 ^; R, {2 n  z
   )) j" U+ f, ]+ J. H  S. n( D
(setq data_k (append data_k (list temp2))), k3 S7 I5 i! J
      )/ E* |) i; e, D  m/ B
    )0 n7 ~, c! |% n+ D8 _
    (setq data_i (append data_i (list data_k))& D# G" O( F; |4 E( p. f
   i  (1+ i)
5 B9 q" z1 r2 M& s1 d    )! b/ V6 A4 A* V, |5 S6 V
  )3 P  y/ Y% h1 v2 J! T& Z( F7 s0 y7 x* t
  data_i
1 D4 p; G& |' b/ q)4 b+ c& E) n7 f, f  i
- i" J2 A/ U. S2 x/ [6 _1 W
) h$ Q! C% Z  r8 i1 J, B% B# f2 W3 _
/ _5 d+ _& p! U0 c
' q, K  n7 O9 x" w9 e
(defun findtag (tagmark)
% ?$ [; ?- H1 ?3 |, R% }  (setq kdat(open kkdat "r"))7 ^  p4 q- o- |- n" N
(while(setq kdatread (read-line kdat))
; R7 Q4 c) z; c* x9 a# @1 [   (if(/=" "(substr kdatread 1 1))
4 W8 r1 W: W2 {: k$ f8 e    (if(= kdatread tagmark)(progn
% A% n7 e6 T3 d, j3 A  S8 f  Z(setq kai nil)                             
$ D( M0 Q" a- k2 K3 z(while (and (/= kai 1)(setq kdatread (read-line kdat))) ;运行下面的- a+ t7 S/ o$ ]( G/ E& D2 W) ]
   (if(/=" "(substr  kdatread 1 1))(setq kai 1))
  x# Y0 K( t2 a  (setq kdatread(substr kdatread 2 ))2 @9 J) ?; q# S7 y0 U9 x# z
  (Setq pwk(vl-string-search " " kdatread))' h9 e0 B/ t  Z9 J: R( L4 u+ v+ C
  (setq comma (strcase (substr  kdatread 1 pwk)));变大写6 N) @( y7 z- k3 U4 S6 v' x2 m
  (if (= comma "TEST")(progn  j1 K( W- x9 L* Z5 l
(setq kdatread(substr kdatread (+ pwk 2)))
. g$ s6 {& u' [(Setq pwk(vl-string-search " " kdatread))
, _$ r+ j/ T2 ~+ o$ S" u* Y  (setq textin (strcase (substr  kdatread 1 pwk)));文字插入点9 w: {7 u! d0 @! @
(if (= textin "CEN")(setq textin  circen));如果为CEN为圆心6 ?  c  g8 V' O1 G3 Z
  (setq kdatread(substr kdatread (+ pwk 2)))0 I, L; v& y  q! B/ [7 {. c. w+ l6 r
(Setq pwk(vl-string-search " " kdatread))
& \& P7 [) C* x) U% s  (setq textt (strcase (substr  kdatread 1 pwk)));文字" A: ]9 R4 N* Q/ _# a
(setvar "clayer" cirlayer)7 Z% F7 u6 t, P
(vla-Addtext mspace textt(vlax-3d-point textin)2.5);写文字
# _7 C! b6 u- d; ~# p! E4 y        ));(if (= comma "TEST")(progn
5 D4 Z* J8 }  o* L- d' L7 B6 |0 y/ ^. U/ Z
  (if (= comma "LINE")(progn# t) x, k( |( \  g4 C4 j
        (setq kdatread(substr kdatread (+ pwk 2)))1 Z& o9 Y9 X; T0 O6 G4 q
(Setq pwk(vl-string-search " " kdatread)), j' ?, F2 K) _& G* J
  (setq lineang (strcase (substr  kdatread 1 pwk)));起点
  l. W, l* J1 H  T" R1 I. K* g (setq linep1 (polar circen (angtof lineang)  Rcir));起点2 _: T0 }4 R  _0 O. N: f. ]9 P
       
0 e& e, q& I! o' H% i5 D' v  (setq kdatread(substr kdatread (+ pwk 2)))+ g9 Y" i" [6 Y2 T% @
(Setq pwk(vl-string-search " " kdatread))
" h- {# Y5 T7 A; T/ O; W  (setq lineang2 (strcase (substr  kdatread 1 pwk)));端点
: ?3 f& P0 k+ I4 B: N(setq linep2 (polar circen (angtof lineang2)  Rcir));端点
9 p' R7 `) H9 E' e  F (setvar "clayer" cirlayer)
- y  @; A1 b+ O% q! V0 h(vla-Addline mspace (vlax-3d-point linep1)(vlax-3d-point linep2));画线               
. v2 u% _5 F: d/ o# ~        ));(if (= comma "LINE")(progn$ d$ {9 @/ B+ n+ D* g% @

! L; Z% L% c8 `  (if (= comma "HATCH")(progn7 Z! S% T& x: S6 L4 ~, y% w3 J$ |" q
( X5 `) W% G; |
                         
8 A  B8 z. l' I! m9 N7 }: k& w5 v        ));(if (= comma "HATCH")(progn
- p5 W1 b& }( A# [. F8 g0 p
9 x. l: w( E1 ?! h% b) C    (if (= comma "CIRCLE")(progn- k& L/ i0 p! B1 ]0 O
+ o% t9 e" b2 I* Z% g5 o  r
                         0 |' j2 S% |$ G( R$ k4 X
        ));(if (= comma "CIRCLE")(progn2 T5 Y/ Z0 P  q8 N6 d6 q
  8 W, {+ T# g5 R! Y5 M9 F2 `3 ^5 D6 v6 |  q
  
. j  Q) T& f& u: @- ^7 z  );;;(while (=" "(substr (setq kdatread (read-line kdat)) 1 1))( s2 A9 J  Z: @+ d
                             
4 _2 v: M5 Q. s5 X                             
5 }* @* ?4 \1 d; C# I      ));;(if(= kdatread tagmark)(progn
8 b2 w, T: P( L% [) d     );;(if(/=" "(substr kdatread 1 1))" N4 s+ W* l7 b* k
    6 c( R, v. u- }2 v4 e) m
    );;;(while(setq kdatread (read-line kdat))
$ S2 _# [2 V2 O2 Z$ C9 L  ) D4 M, r( z" T$ ]
  (close kdat)- Y& B  U$ j2 o0 c. `
  );end
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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