QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2558|回复: 4
收起左侧

[已答复] 把数字对分程序,坐标点经常错,帮忙看下

[复制链接]
发表于 2011-11-29 11:38:57 | 显示全部楼层 |阅读模式 来自: 中国广西南宁

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

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

x
本帖最后由 woaishuijia 于 2011-11-29 12:09 编辑
! P7 g7 [) Q1 g
  1. (defun c:bdf(/ e ent tc newt mc ang st zb zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2)
    $ F( Z( T3 b& T; k
  2.   (setvar "cmdecho" 0)
    - P! M; d3 j0 H. c& o
  3.   (setq e (entsel "\n选择要对分的板筋: "))
    % j  T. ^2 [$ U7 E) A
  4.   (setq ent (entget (car e)))
    2 D/ y  N  {; X
  5.   (setq newt (atoi (cdr (assoc 1 ent))))) b. b- v9 Q8 n8 y8 j9 W
  6.   (if (/= 0 newt)                              ;过滤非数值文字
    + }( Q  m% Z: v, w
  7.   (progn
    . R" H3 p7 F4 D5 r* @  H- h  h
  8.        (setq tc (cdr (assoc 8 ent)))           ;提取图层信息
    0 K3 T6 a. {9 N" X
  9.        (command "._Clayer" tc)                 ;保持图层一致
    " c  |' z6 C/ @5 c" G: l, C1 v
  10.        (setq mc (cdr (assoc -1 ent)))          ;提取名称,删除原对象使用8 K* p4 u) ]( p
  11.        (setq ang (cdr (assoc 50 ent)))         ;提取文字角度" X8 l5 C6 _0 W7 ?0 l
  12.        (setq st (cdr (assoc 7 ent)))           ;提取文字样式; b) s" [% ]/ k4 m
  13.        (setq zb (cdr (assoc 10 ent)))          ;提取文字起点坐标$ _7 J! K9 v7 `5 W8 g: A
  14.        (setq zbx (car zb))                     ;文字x坐标
      E) c6 z" g# V: e) o. a6 c+ l# a
  15.        (setq zby (cadr zb))                    ;文字Y坐标
    5 I* H) D8 w: Y2 I. E2 f
  16.        (setq zg (cdr (assoc 40 ent)))          ;提取字高
    ( }* k5 d" O( {  g
  17.        (setq zb1x (+ zbx (* 0.25 newt (cos ang))))  ;计算分开后两个数值的文字起点/ x! \3 t( _7 c  ]$ K
  18.        (setq zb1y (+ zby (* 0.25 newt (sin ang)))): c/ C- ?& U6 [% F
  19.        (setq zb2x (- zbx (* 0.25 newt (cos ang)))): b$ W) r5 ?7 T. y
  20.        (setq zb2y (- zby (* 0.25 newt (sin ang))))
    / h. ]  m+ e7 Y, {# }
  21.        (setq zb1 (list zb1x zb1y))                      ;确定坐标点
    8 f' ^/ T- K4 d4 A% e5 F
  22.        (setq zb2 (list zb2x zb2y))
    , E* [" `" B: Q
  23.        (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))   ;输入两个对分的数值
    : x- v( l6 I7 @# f  i
  24.        (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2)). @* p4 e* n: O0 F) j( Z* ?+ y8 w+ Y% ^# ~
  25.        (entdel mc)                                                     ;删除原对象
      Y' Q. X9 C$ o- n8 `1 F8 {# C
  26.    )' ?/ ^3 I7 R7 ]  M  [, U7 }
  27.    (princ "\n所选对象不能处理")" B* r4 }2 [+ k0 s4 D, ]  {0 q
  28.    )   
    - h" }/ H: [5 a
  29.   (setvar "cmdecho" 1); U0 c9 s+ f- _. m  `9 ?" m8 b5 Y
  30.   (princ): Z& }6 n. e/ E* d3 l4 K% c
  31. )
复制代码
' q6 i, a9 t6 S- b+ x# O  P

$ ^* B! U! k% C第一次照着书写的,程序大部分时间是正常的,但有时候会出现新对象的坐标点不正确,在CAD中进行undo操作发现,大部分的错都是坐标点zb1的问题,就是不知道哪里留下了漏洞
 楼主| 发表于 2011-11-29 11:41:49 | 显示全部楼层 来自: 中国广西南宁
另外,如果选择的数值字体样式内已经定义高度的时候,程序也会出错,因为这种字体标注时的参数会跳过字高,造成输入错误,这个该如何避开?
发表于 2011-11-29 13:36:09 | 显示全部楼层 来自: 中国辽宁
  1. (defun c:bdf (/            e          ent        tc    newt  mc          ang        st    zb
    2 @8 ?$ r3 f5 Q) L  a! @
  2.               zbx   zby          zg        zb1x  zb1y  zb2x  zb2y        zb1   zb2) |! Q+ H: Q8 s& v0 {5 F% D- x
  3.               oldosmode
    " J0 r* F$ x& p, f3 ?4 L/ Q* r
  4.              )$ h6 K- w/ M! F4 {
  5.   (setq oldosmode (getvar "osmode"))        ;记录用户当前的对象捕捉设置3 [* |& Q' Z$ S: N8 p
  6.   (setvar "osmode" 0)                        ;关闭对象捕捉
    ) }9 i/ ~% J: `; V0 @
  7.   (setvar "cmdecho" 0)$ G: A/ |- l) f4 U2 d! A3 t
  8.   (setq e (entsel "\n选择要对分的板筋: "))
    # q% P0 c. C; D: }9 r. w
  9.   (setq ent (entget (car e)))
    3 @: j- s4 Y/ a2 h; G
  10.   (setq newt (atoi (cdr (assoc 1 ent))))
    8 o* @' s6 A6 @0 i$ c
  11.   (if (/= 0 newt)                        ;过滤非数值文字5 J; g; D7 z2 ?
  12.     (progn. i7 R; O% u" w* }
  13.       (setq tc (cdr (assoc 8 ent)))        ;提取图层信息
    / D; B/ [7 g% f" N
  14.       (command "._Clayer" tc)                ;保持图层一致
    ! V- O( v( Y" Q9 Q" q4 u" K$ }
  15.       (setq mc (cdr (assoc -1 ent)))        ;提取名称,删除原对象使用- D" C- T/ Y9 r: N" j0 G+ L
  16.       (setq ang (cdr (assoc 50 ent)))        ;提取文字角度' u; E9 |; B  v8 {2 z8 Q3 z! ]
  17.       (setq st (cdr (assoc 7 ent)))        ;提取文字样式
    # o1 N& I1 }( Y4 o$ o
  18.       (setq zb (cdr (assoc 10 ent)))        ;提取文字起点坐标
    4 j/ K3 Q0 z6 c! U; F* u
  19.       (setq zbx (car zb))                ;文字x坐标/ J* l3 s2 U. g1 ~8 s
  20.       (setq zby (cadr zb))                ;文字Y坐标
      U1 o: p6 Z& O- m1 V
  21.       (setq zg (cdr (assoc 40 ent)))        ;提取字高; _1 ^3 S# f$ B. d
  22.       (setq zb1x (+ zbx (* 0.25 newt (cos ang))))
    ' q# q8 h) A4 k
  23.                                         ;计算分开后两个数值的文字起点
    & I/ Z: A: G. y/ M8 N
  24.       (setq zb1y (+ zby (* 0.25 newt (sin ang))))
    & a% T2 Q& F& w/ C0 _
  25.       (setq zb2x (- zbx (* 0.25 newt (cos ang))))4 Z% e& m% d9 v  \+ x5 p5 I
  26.       (setq zb2y (- zby (* 0.25 newt (sin ang))))
    % S+ G4 A- u7 |, u2 |; u
  27.       (setq zb1 (list zb1x zb1y))        ;确定坐标点
      u8 w) e. Y0 q! D
  28.       (setq zb2 (list zb2x zb2y))# P6 l& `+ G" ^+ F: B  k3 Y
  29.       (if (= (cdr (assoc 40 (entget (tblobjname "style" st)))) 0)
    ! A2 H8 K6 E7 y' s+ Z' o
  30.                                         ;查看该文字样式中文字高度是否为0. q/ \+ o: H; n& _) r) n- t0 L
  31.         (progn                                ;文字样式中文字高度为0时使用原对象的文字高度
    9 l. K1 S1 ]- |4 Y+ L4 N! Z0 J3 @
  32.           (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))
    6 o0 Q& a1 D8 M; @$ q$ Z
  33.                                         ;输入两个对分的数值" ]8 Q. L$ F1 P- Q
  34.           (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))
    / e* Q( X) u* u4 ?
  35.         )) j& h3 q4 z) q% p# W$ A
  36.         (progn                                ;文字样式中文字高度不为0时不在命令行中指定文字高度, g( |' I! R; Z3 M0 F% ~  F
  37.           (command "text" "s" st zb1 (* 180 (/ ang pi)) (/ newt 2))
      K( ~7 M5 o  c& D* A9 a6 |
  38.                                         ;输入两个对分的数值" P* s& O/ P3 r1 |/ n
  39.           (command "text" "s" st zb2 (* 180 (/ ang pi)) (/ newt 2))
    ' B; |4 Q  V9 n8 ?% Y$ Z. T
  40.         )
    , r7 D& `+ _7 @, }3 H8 q/ c9 g
  41.       )
    8 c% ]+ {7 Z* W* G; ]$ P: T
  42.       (entdel mc)                        ;删除原对象
    7 f, H! [8 b% S. _0 o& O6 D
  43.     )
    2 W+ W4 N. y* X/ d# T9 S
  44.     (princ "\n所选对象不能处理")
    ) g  H1 s5 L9 A6 ^6 i' o. x
  45.   )4 _& t% K( l0 r5 m$ E$ B
  46.   (setvar "osmode" oldosmode)                ;恢复用户对象捕捉设置* Z$ j* z3 Z/ H8 i$ }' y# `; a
  47.   (setvar "cmdecho" 1)
    ' x( {2 V% n3 Q+ C% H* G' h! @" ?
  48.   (princ)+ t* g) k2 F. t
  49. )
复制代码
发表于 2011-11-29 13:37:48 | 显示全部楼层 来自: 中国台湾
Ans1:
" \: }  K: L; Y5 V(SetVar "OsMode" 0)   ; 加这列 关闭捕捉5 p8 V5 r8 H/ F# A, k' G

1 k1 @8 E1 I/ T+ P5 H4 d: m3 m* {Ans2:- o5 {/ P7 p9 j8 R* X; D
(if (zerop (cdr (assoc 40 (entget (TblobjName "Style" (getvar "TextStyle")))))) ...)

评分

参与人数 1三维币 +5 收起 理由
woaishuijia + 5 应助

查看全部评分

 楼主| 发表于 2011-11-30 08:29:53 | 显示全部楼层 来自: 中国广西南宁
谢谢上面两位的回答
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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