QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 woaishuijia 于 2011-11-29 12:09 编辑 ' L$ u# ~0 n9 s' w
  1. (defun c:bdf(/ e ent tc newt mc ang st zb zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2)) U0 L6 {& C& F! Y' j: K/ z
  2.   (setvar "cmdecho" 0)
    9 ^" m, h; b, R8 d# }& r& ~
  3.   (setq e (entsel "\n选择要对分的板筋: "))
    6 O) S" S, H+ M* ?& i
  4.   (setq ent (entget (car e)))6 B' {4 F. x+ Z7 r3 w! Y
  5.   (setq newt (atoi (cdr (assoc 1 ent))))
    . n2 p' M8 L7 i, C
  6.   (if (/= 0 newt)                              ;过滤非数值文字6 p, J% O, I% D7 O
  7.   (progn
    / t! Z9 W" I& x7 ?
  8.        (setq tc (cdr (assoc 8 ent)))           ;提取图层信息$ o+ K) X' x+ o" Q
  9.        (command "._Clayer" tc)                 ;保持图层一致
    * h6 H% F8 F+ \& v! z, @, Y* r
  10.        (setq mc (cdr (assoc -1 ent)))          ;提取名称,删除原对象使用
    $ Z, Y1 `. ~# }4 G
  11.        (setq ang (cdr (assoc 50 ent)))         ;提取文字角度
    . [& i% b7 p# p+ V
  12.        (setq st (cdr (assoc 7 ent)))           ;提取文字样式& P* A9 k& D7 K/ o
  13.        (setq zb (cdr (assoc 10 ent)))          ;提取文字起点坐标
    $ ^5 l3 I) x: h" \6 ~
  14.        (setq zbx (car zb))                     ;文字x坐标+ t! s: b: }) n7 X0 F$ A4 j& f' L
  15.        (setq zby (cadr zb))                    ;文字Y坐标& l$ L! F# S9 N: O
  16.        (setq zg (cdr (assoc 40 ent)))          ;提取字高
      D$ Y5 K  n1 n+ u% \
  17.        (setq zb1x (+ zbx (* 0.25 newt (cos ang))))  ;计算分开后两个数值的文字起点* j* _1 N) {! h3 o- N
  18.        (setq zb1y (+ zby (* 0.25 newt (sin ang))))
    - d3 t( Z# t& J& Z) b+ G6 f, f. ]
  19.        (setq zb2x (- zbx (* 0.25 newt (cos ang))))- b+ V6 A  J$ [" ~( q
  20.        (setq zb2y (- zby (* 0.25 newt (sin ang))))& G* P4 f+ B3 ^3 U3 }
  21.        (setq zb1 (list zb1x zb1y))                      ;确定坐标点* e: F# u+ x2 V8 G3 _
  22.        (setq zb2 (list zb2x zb2y))
    1 _# z$ Z! Y5 ~$ k5 @
  23.        (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))   ;输入两个对分的数值
    8 w0 R8 S4 Z* ]9 h; C8 V6 Z- w" w* ^
  24.        (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))
    0 E8 R" m. ~5 q( L4 h) e
  25.        (entdel mc)                                                     ;删除原对象
    ! @6 j: O9 e6 s0 U) M0 F
  26.    )
    * u) L6 M$ o2 M* L$ U! ~
  27.    (princ "\n所选对象不能处理")8 g% `4 z3 _+ i* l- t: |6 Z
  28.    )   
    $ O6 [5 a) K/ p2 `
  29.   (setvar "cmdecho" 1)
    1 y% \  w  Z8 U7 p
  30.   (princ)
    $ m4 h* t+ b& ]9 @
  31. )
复制代码
! ?; ]% E% Q8 N8 t
$ w0 m0 t- |5 f  R' g( ?2 {
第一次照着书写的,程序大部分时间是正常的,但有时候会出现新对象的坐标点不正确,在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
    , m# T, {$ i3 J. g6 {; W/ F
  2.               zbx   zby          zg        zb1x  zb1y  zb2x  zb2y        zb1   zb2( r8 Y5 I- s  y# \; ]
  3.               oldosmode& K: J, E) T$ M9 }: k  r, e' X' }
  4.              )
    " R9 l8 D, }% Q, u3 I2 I7 V$ W
  5.   (setq oldosmode (getvar "osmode"))        ;记录用户当前的对象捕捉设置
    % i9 R; j; L3 U0 M8 ~% K
  6.   (setvar "osmode" 0)                        ;关闭对象捕捉
    . t6 W+ @1 u( a, d
  7.   (setvar "cmdecho" 0)  U! S( k0 P  w" L/ W
  8.   (setq e (entsel "\n选择要对分的板筋: "))
    2 V6 n3 ~% l1 I1 q* T9 \' J1 x( u
  9.   (setq ent (entget (car e)))
    ' ]. Z/ b6 n0 j7 o- y% _) `( ^
  10.   (setq newt (atoi (cdr (assoc 1 ent))))/ J; H9 O# `% {  D. L9 G5 c
  11.   (if (/= 0 newt)                        ;过滤非数值文字
    . I) R& Z* j2 i# E3 R" C6 t
  12.     (progn- Z( |7 d0 _9 U0 R6 z
  13.       (setq tc (cdr (assoc 8 ent)))        ;提取图层信息
    0 H1 p, o) C* p# k& _
  14.       (command "._Clayer" tc)                ;保持图层一致
    5 o, h) K9 }% \2 j+ {
  15.       (setq mc (cdr (assoc -1 ent)))        ;提取名称,删除原对象使用  j) E8 B9 Q4 ^, O% D+ t) u
  16.       (setq ang (cdr (assoc 50 ent)))        ;提取文字角度1 y- G6 e' X1 \, r- W4 A! ^
  17.       (setq st (cdr (assoc 7 ent)))        ;提取文字样式
    , D  S, I+ T9 g# f
  18.       (setq zb (cdr (assoc 10 ent)))        ;提取文字起点坐标
    / j, U# c" \3 E, |1 W9 {
  19.       (setq zbx (car zb))                ;文字x坐标
    % B, s- P7 b* W6 r. m
  20.       (setq zby (cadr zb))                ;文字Y坐标1 ^9 B8 U% S5 x- I2 W8 Y+ N
  21.       (setq zg (cdr (assoc 40 ent)))        ;提取字高4 {+ B, e- `: ^+ U* }2 q  E- A
  22.       (setq zb1x (+ zbx (* 0.25 newt (cos ang))))
    3 i2 t7 z$ ]  @+ i
  23.                                         ;计算分开后两个数值的文字起点" S- ?1 B* R* n1 m3 V% p# n9 }
  24.       (setq zb1y (+ zby (* 0.25 newt (sin ang))))
    6 F! }! g+ |; Y% }
  25.       (setq zb2x (- zbx (* 0.25 newt (cos ang))))
    ' C3 z1 \8 S8 i
  26.       (setq zb2y (- zby (* 0.25 newt (sin ang))))( j! r3 M% S* F& H
  27.       (setq zb1 (list zb1x zb1y))        ;确定坐标点
    1 D' J, J- U5 w6 j( ]
  28.       (setq zb2 (list zb2x zb2y))0 y  `+ Z5 c; O9 X, Z1 ]: [' t" b: T
  29.       (if (= (cdr (assoc 40 (entget (tblobjname "style" st)))) 0)$ _* |+ L' K0 s- s3 ?9 \  g# w
  30.                                         ;查看该文字样式中文字高度是否为0
    1 p- S, b$ k6 y% T
  31.         (progn                                ;文字样式中文字高度为0时使用原对象的文字高度
    0 e3 {! e$ z+ G7 [3 v
  32.           (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))' I' ]/ l9 N, L7 g
  33.                                         ;输入两个对分的数值. L7 v) v% a! B8 c1 q
  34.           (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))
    - k( I% J9 o8 x% m
  35.         )
    , M( r- r& j! n' \( \
  36.         (progn                                ;文字样式中文字高度不为0时不在命令行中指定文字高度
    + v; @1 j  `# m! v$ c! @
  37.           (command "text" "s" st zb1 (* 180 (/ ang pi)) (/ newt 2))
    ) L1 l2 F8 v; f) K$ p1 e4 H
  38.                                         ;输入两个对分的数值
    & ?: v0 f, |# h5 g
  39.           (command "text" "s" st zb2 (* 180 (/ ang pi)) (/ newt 2))
    & ]. e$ I: K8 s  U5 t5 o: R( N
  40.         )0 J' d% f. a' F# i# n& i. ?
  41.       )1 |, L/ @9 |" t$ K, {3 d' X
  42.       (entdel mc)                        ;删除原对象
    0 ?0 X0 |; z2 v: S  j
  43.     )
    4 _( `  L7 {5 S  \- o( }7 y
  44.     (princ "\n所选对象不能处理")( H  X, B( C, D4 i; Q
  45.   )# d$ s! j+ T6 ]+ J" o4 m& N3 |  k% j
  46.   (setvar "osmode" oldosmode)                ;恢复用户对象捕捉设置
    6 G' x2 g) L- L  I& E$ C
  47.   (setvar "cmdecho" 1)
    0 [6 Y( y' |* `+ h0 N% A/ f
  48.   (princ)# X2 \  S' C" Q
  49. )
复制代码
发表于 2011-11-29 13:37:48 | 显示全部楼层 来自: 中国台湾
Ans1:
2 a2 u' |  H! Q& g5 }; _(SetVar "OsMode" 0)   ; 加这列 关闭捕捉
! o: o1 T8 r, R' ]% ~6 F) E6 y- X1 T/ E" z1 p" b1 D% a
Ans2:
  _( b' f  E; @2 \1 N3 T$ G) s(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 )

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