QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 woaishuijia 于 2011-11-29 12:09 编辑
; P: ^" Y* y- n3 Q5 y3 f7 A
  1. (defun c:bdf(/ e ent tc newt mc ang st zb zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2)
    $ A  M2 {0 f  f) S6 i+ E( y3 h
  2.   (setvar "cmdecho" 0)& e" B& ^( U5 t
  3.   (setq e (entsel "\n选择要对分的板筋: "))% b( x) q8 x* t4 S3 n- H6 T
  4.   (setq ent (entget (car e)))
    7 {% W2 `; j1 V
  5.   (setq newt (atoi (cdr (assoc 1 ent))))
    % h/ t. t0 U3 I' V/ a2 a
  6.   (if (/= 0 newt)                              ;过滤非数值文字
    9 D6 o4 y1 d" h- R- u' S5 |
  7.   (progn
    % P& J3 a0 b4 p& H/ o
  8.        (setq tc (cdr (assoc 8 ent)))           ;提取图层信息
    - E. R/ t& {) Q; `# i+ n! q
  9.        (command "._Clayer" tc)                 ;保持图层一致9 q$ x& [6 k( m
  10.        (setq mc (cdr (assoc -1 ent)))          ;提取名称,删除原对象使用
    9 q3 [3 i5 p6 s7 Z
  11.        (setq ang (cdr (assoc 50 ent)))         ;提取文字角度) I  `/ D& h: n8 U7 H2 F' P3 Z
  12.        (setq st (cdr (assoc 7 ent)))           ;提取文字样式5 Q; Z# s& Y- u8 J* N2 w  D/ H4 o/ u
  13.        (setq zb (cdr (assoc 10 ent)))          ;提取文字起点坐标' x! I( I" i4 d* X# o* z3 e
  14.        (setq zbx (car zb))                     ;文字x坐标
    * z6 G( Z! Z  O! j; t( a/ M
  15.        (setq zby (cadr zb))                    ;文字Y坐标
    # Z1 q$ w$ d1 ~8 W) i+ E
  16.        (setq zg (cdr (assoc 40 ent)))          ;提取字高3 D1 @- H4 x0 t" Y0 Q
  17.        (setq zb1x (+ zbx (* 0.25 newt (cos ang))))  ;计算分开后两个数值的文字起点/ f  Q3 E! t9 P3 ~% V! Q- o+ N
  18.        (setq zb1y (+ zby (* 0.25 newt (sin ang))))
    , _& C* T- R/ a
  19.        (setq zb2x (- zbx (* 0.25 newt (cos ang))))
    . G' ~4 X7 l  W3 S- C2 [
  20.        (setq zb2y (- zby (* 0.25 newt (sin ang))))
    6 m1 I; G' G& `
  21.        (setq zb1 (list zb1x zb1y))                      ;确定坐标点3 T" l* e6 A- O4 @5 E. P' l- z
  22.        (setq zb2 (list zb2x zb2y)). r; j) C7 H4 l7 t- t
  23.        (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))   ;输入两个对分的数值
    & k5 H# L) d1 d3 ]7 _" j
  24.        (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))7 C0 ?9 P! ~+ ~3 m, K/ b8 g
  25.        (entdel mc)                                                     ;删除原对象( x) A' t( c5 _$ C% ]9 U
  26.    )$ c8 W* l- z. ~* W( i' R
  27.    (princ "\n所选对象不能处理")5 X: [9 R7 O: r  m4 @! t
  28.    )   
    ( }! e  z2 `( [8 ^' p: T
  29.   (setvar "cmdecho" 1)
    + {/ @. L, h# p' Z
  30.   (princ)7 P! S" u$ A& k4 ?6 h
  31. )
复制代码

- a" {. K: F2 j  H6 \4 d( k- y3 g/ g+ D: Q" y
第一次照着书写的,程序大部分时间是正常的,但有时候会出现新对象的坐标点不正确,在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    zb6 `& s3 {) O$ }: N$ D/ }
  2.               zbx   zby          zg        zb1x  zb1y  zb2x  zb2y        zb1   zb27 \8 M1 D+ m9 v5 A# m! N
  3.               oldosmode5 n, A$ p% N6 R- B7 W9 }6 B) o. x' H
  4.              )
    ' k" H- {( A( [" Q2 {8 w5 Z5 q
  5.   (setq oldosmode (getvar "osmode"))        ;记录用户当前的对象捕捉设置
    % n6 ]# V2 M4 Z( j! A
  6.   (setvar "osmode" 0)                        ;关闭对象捕捉& y/ o& d7 I2 h1 H3 K% x/ z- I
  7.   (setvar "cmdecho" 0)
    : g. ^( o8 l2 k, M& r
  8.   (setq e (entsel "\n选择要对分的板筋: "))9 ~0 {! |' r$ |2 M) e* F1 I
  9.   (setq ent (entget (car e))): a4 @. f( \9 W, l+ x% v' g
  10.   (setq newt (atoi (cdr (assoc 1 ent))))
    8 c6 C+ u% Z9 y% j/ r) e2 x8 c
  11.   (if (/= 0 newt)                        ;过滤非数值文字
    0 W. D* ]5 L6 P) k6 l. Y9 R0 C
  12.     (progn$ L9 O; @+ b3 m
  13.       (setq tc (cdr (assoc 8 ent)))        ;提取图层信息
    - Q0 {$ r7 o7 u2 o! ~" t
  14.       (command "._Clayer" tc)                ;保持图层一致! g* A) \+ x% I& U' V3 v9 f
  15.       (setq mc (cdr (assoc -1 ent)))        ;提取名称,删除原对象使用, @, l! a  O8 q# O" M( @
  16.       (setq ang (cdr (assoc 50 ent)))        ;提取文字角度
    9 ~" C& t8 i+ R9 b9 P! b  s
  17.       (setq st (cdr (assoc 7 ent)))        ;提取文字样式' u6 _- c7 k5 b2 s& V1 c) J! O9 I
  18.       (setq zb (cdr (assoc 10 ent)))        ;提取文字起点坐标
    3 j2 R$ x, e( R6 o  z7 P5 e
  19.       (setq zbx (car zb))                ;文字x坐标
    6 Y7 k+ v6 s, ^' F7 Q4 n( Q3 G3 J' S
  20.       (setq zby (cadr zb))                ;文字Y坐标
    5 j! i) f, D0 K9 }1 d
  21.       (setq zg (cdr (assoc 40 ent)))        ;提取字高# Z+ s! `' f& a1 {# w: N
  22.       (setq zb1x (+ zbx (* 0.25 newt (cos ang))))+ T4 j1 x0 N# v$ T, _; [
  23.                                         ;计算分开后两个数值的文字起点
    2 ?9 B6 `$ g( ~) [% ]& ?* Q
  24.       (setq zb1y (+ zby (* 0.25 newt (sin ang))))2 J; P* E; M* z
  25.       (setq zb2x (- zbx (* 0.25 newt (cos ang))))4 H6 x2 |: H& h' u& K+ i
  26.       (setq zb2y (- zby (* 0.25 newt (sin ang))))
    5 P7 E6 e/ `' O* H7 W$ ~6 n
  27.       (setq zb1 (list zb1x zb1y))        ;确定坐标点7 o8 g9 V6 \8 @; [* s1 r
  28.       (setq zb2 (list zb2x zb2y))
    * f4 _: y; Y9 A8 I$ k
  29.       (if (= (cdr (assoc 40 (entget (tblobjname "style" st)))) 0)$ i, V6 @/ R8 f( T. L; q& j
  30.                                         ;查看该文字样式中文字高度是否为0# R* n0 E5 s. D9 Z) K
  31.         (progn                                ;文字样式中文字高度为0时使用原对象的文字高度
    1 q- |% R' A0 g$ A
  32.           (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2)); d/ ]: ?+ R' k" j
  33.                                         ;输入两个对分的数值
    7 e  `( Z  m% |6 D; `+ d* d$ S
  34.           (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))5 N) F* `' F# `" D9 I/ P* b7 v
  35.         )4 e* N9 X, o" |2 E7 Z. ]
  36.         (progn                                ;文字样式中文字高度不为0时不在命令行中指定文字高度- M, Y+ f0 C3 ~; v  r% C( N( ?" h
  37.           (command "text" "s" st zb1 (* 180 (/ ang pi)) (/ newt 2))$ p9 n$ o0 `2 [7 C/ v# i
  38.                                         ;输入两个对分的数值
    / z" t4 `+ J  ]% A. E% \. i
  39.           (command "text" "s" st zb2 (* 180 (/ ang pi)) (/ newt 2))
    ' e, U  u/ B: R) F; p$ J2 L" ?" t
  40.         )
    ; g# Y/ ]6 M# U+ [. u; [5 w5 W
  41.       )
    , \* L; ^. m8 C5 n) j3 H
  42.       (entdel mc)                        ;删除原对象2 \6 E! L# D4 T/ K. m/ H
  43.     )
    : l2 A- A; @7 T: T9 a0 x
  44.     (princ "\n所选对象不能处理")  N- b. E! c0 ~3 @; `
  45.   )
    8 |$ o/ {& V! P
  46.   (setvar "osmode" oldosmode)                ;恢复用户对象捕捉设置
    6 U% V4 r0 @, Q: _+ F
  47.   (setvar "cmdecho" 1)- J+ s! J. d9 p/ z# k$ P0 E8 g
  48.   (princ)6 S- K4 O& B3 F. r
  49. )
复制代码
发表于 2011-11-29 13:37:48 | 显示全部楼层 来自: 中国台湾
Ans1:
# j4 A9 y. H+ H" A' t(SetVar "OsMode" 0)   ; 加这列 关闭捕捉
* b4 E! c% m, I, d) h+ s# ]' d, a
3 x: X3 h; F- zAns2:" [4 |$ q, f5 j8 O1 w4 ^/ W* X
(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 )

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