QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 2329|回复: 4
收起左侧

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

[复制链接]
发表于 2011-11-29 11:38:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 woaishuijia 于 2011-11-29 12:09 编辑
! K6 _" H' r# v  a" \) m, c( n& |
  1. (defun c:bdf(/ e ent tc newt mc ang st zb zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2)0 n$ p# v9 f- }  [
  2.   (setvar "cmdecho" 0)) i# j9 {8 K7 k- b
  3.   (setq e (entsel "\n选择要对分的板筋: "))
    4 Z# s% I5 x6 ^: }& p
  4.   (setq ent (entget (car e))): N2 B) o7 b7 A  f
  5.   (setq newt (atoi (cdr (assoc 1 ent))))" F( Y/ J9 S* |8 r
  6.   (if (/= 0 newt)                              ;过滤非数值文字4 u1 ?* P9 @) b2 v7 Y0 [: h
  7.   (progn8 |4 i# i, n- S+ P/ h! W. t: A
  8.        (setq tc (cdr (assoc 8 ent)))           ;提取图层信息
      U3 f. l0 Y1 S- }( Y. ]/ A! G
  9.        (command "._Clayer" tc)                 ;保持图层一致
    8 S0 f& @/ G' v& ~& S/ \1 u( H
  10.        (setq mc (cdr (assoc -1 ent)))          ;提取名称,删除原对象使用' C! J6 A) N5 V+ b( F0 i
  11.        (setq ang (cdr (assoc 50 ent)))         ;提取文字角度# _' U3 D9 f# p: g& S  V. C- p
  12.        (setq st (cdr (assoc 7 ent)))           ;提取文字样式
    0 t- |6 J2 t  f' g
  13.        (setq zb (cdr (assoc 10 ent)))          ;提取文字起点坐标6 j, k/ b2 C1 C7 k
  14.        (setq zbx (car zb))                     ;文字x坐标5 y9 o  x# o  \9 F* a1 Q
  15.        (setq zby (cadr zb))                    ;文字Y坐标
    3 w, t+ _8 v! }( B3 ^: i4 s* c8 G
  16.        (setq zg (cdr (assoc 40 ent)))          ;提取字高2 K1 t! X3 W" H: S6 X/ F/ F
  17.        (setq zb1x (+ zbx (* 0.25 newt (cos ang))))  ;计算分开后两个数值的文字起点
    & F7 N! F5 c, }3 _% D* N' `" n; c/ b
  18.        (setq zb1y (+ zby (* 0.25 newt (sin ang))))
    ) Q& R& s; {" W9 O' b
  19.        (setq zb2x (- zbx (* 0.25 newt (cos ang))))
    ; X0 B8 j6 b+ ~8 a. A  h
  20.        (setq zb2y (- zby (* 0.25 newt (sin ang))))
    ' I" y* y  {; A) S
  21.        (setq zb1 (list zb1x zb1y))                      ;确定坐标点0 T/ z! Z; w/ H$ y+ a; q9 O1 l
  22.        (setq zb2 (list zb2x zb2y))
    # ?: w/ z8 U2 A. r6 Y6 p: n
  23.        (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))   ;输入两个对分的数值
    ( n# p& [: R: t2 u) {8 m; X
  24.        (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))# h7 U% A% m  a0 L( a* s( Q
  25.        (entdel mc)                                                     ;删除原对象
    3 s) n6 U% G* t/ R3 }
  26.    )! C, l& u$ I, f, g, O' \
  27.    (princ "\n所选对象不能处理")7 n& u+ _* P9 ?) x" b! T
  28.    )   . I: e7 I# t2 O+ p6 m& M
  29.   (setvar "cmdecho" 1)
    2 O# a- G+ m- G! B. i6 N- K
  30.   (princ)
    ) A- c9 v/ z# V1 S. k0 ^
  31. )
复制代码

1 u/ {- Q( _+ d4 q7 X% w4 ], v! M' z* O) g" @: V
第一次照着书写的,程序大部分时间是正常的,但有时候会出现新对象的坐标点不正确,在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    zb8 D8 F' g! d8 ]! U+ z
  2.               zbx   zby          zg        zb1x  zb1y  zb2x  zb2y        zb1   zb2" C7 V3 K) M: ?( D9 ^4 q7 w! o
  3.               oldosmode+ C5 Y. p  [: G
  4.              ). }( h5 Q. F+ M. b8 V0 A7 K6 K% S
  5.   (setq oldosmode (getvar "osmode"))        ;记录用户当前的对象捕捉设置5 I# z9 [* D/ p
  6.   (setvar "osmode" 0)                        ;关闭对象捕捉
    / B8 f2 ~/ {: g9 P1 h( y
  7.   (setvar "cmdecho" 0)
    + {3 H+ c: o* n( M0 u+ Q! n
  8.   (setq e (entsel "\n选择要对分的板筋: "))
    0 M! ~& _: f7 r& Y" U+ n
  9.   (setq ent (entget (car e)))
    3 B3 C% {8 O( m! c& M  T
  10.   (setq newt (atoi (cdr (assoc 1 ent))))9 M8 S  ]$ a$ q: _; q
  11.   (if (/= 0 newt)                        ;过滤非数值文字
    4 _# E' T: p' n0 |+ l: \
  12.     (progn/ L. U# Z/ }& |2 E& {3 n, f0 Y* B  |1 v
  13.       (setq tc (cdr (assoc 8 ent)))        ;提取图层信息4 k& t2 u) e; v+ V9 A( c
  14.       (command "._Clayer" tc)                ;保持图层一致8 ]' G1 U7 ^7 n
  15.       (setq mc (cdr (assoc -1 ent)))        ;提取名称,删除原对象使用
    ; {7 J: N. c+ L% G# w7 D
  16.       (setq ang (cdr (assoc 50 ent)))        ;提取文字角度# Q6 W) ^1 d" G- h6 c3 T
  17.       (setq st (cdr (assoc 7 ent)))        ;提取文字样式3 S1 L% Y- D* H# Q4 R) {
  18.       (setq zb (cdr (assoc 10 ent)))        ;提取文字起点坐标
    * L4 T9 {$ c" y" k5 f, `8 `
  19.       (setq zbx (car zb))                ;文字x坐标
    / U* E  |) q+ G+ X$ i
  20.       (setq zby (cadr zb))                ;文字Y坐标
    ( k: V& u) z( w5 }
  21.       (setq zg (cdr (assoc 40 ent)))        ;提取字高
    ; G/ ]* _8 h/ T( ], h" F/ r
  22.       (setq zb1x (+ zbx (* 0.25 newt (cos ang)))); ]* d3 b, y* Z0 N7 h
  23.                                         ;计算分开后两个数值的文字起点
    2 y. F1 ^. f, Z
  24.       (setq zb1y (+ zby (* 0.25 newt (sin ang))))
    ' ?$ p  U; W' Q% A
  25.       (setq zb2x (- zbx (* 0.25 newt (cos ang))))
    , a3 Q8 a0 k4 w7 m6 H6 O  A4 Y
  26.       (setq zb2y (- zby (* 0.25 newt (sin ang))))
    " l1 \/ @% A# h% Y) k& Z6 O# p
  27.       (setq zb1 (list zb1x zb1y))        ;确定坐标点" Q* a1 j! \4 n8 d- Q/ b5 B0 E
  28.       (setq zb2 (list zb2x zb2y))3 ]/ o- C# g' Y
  29.       (if (= (cdr (assoc 40 (entget (tblobjname "style" st)))) 0), U2 T, C. x( u5 K
  30.                                         ;查看该文字样式中文字高度是否为05 X: Q3 u: _; ~! D7 R
  31.         (progn                                ;文字样式中文字高度为0时使用原对象的文字高度
    , `( _6 M% H& l( r# a0 ~
  32.           (command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))
    $ }+ y. H* l! Q: S
  33.                                         ;输入两个对分的数值
    ; q) l" R8 f) y# J
  34.           (command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))
    % k0 Z) O3 }) ?6 J
  35.         )
    , H* [- K( T: y' V0 {
  36.         (progn                                ;文字样式中文字高度不为0时不在命令行中指定文字高度4 r) J& ?/ V3 m0 _% m3 c5 p0 U5 j: S
  37.           (command "text" "s" st zb1 (* 180 (/ ang pi)) (/ newt 2))
    ! O+ O; I8 `8 f
  38.                                         ;输入两个对分的数值& T8 f7 i0 n5 x7 U7 l$ _, a) D
  39.           (command "text" "s" st zb2 (* 180 (/ ang pi)) (/ newt 2))
    & @' U+ Q3 R0 I2 ]) _1 [% H
  40.         )2 n9 g% ]. r/ n' |, f) j
  41.       )
    1 ^8 ~  b% w" G% Z$ B. O# P# q
  42.       (entdel mc)                        ;删除原对象  U. I* W/ ]  @2 }
  43.     )
    * C) g! j, v; c
  44.     (princ "\n所选对象不能处理")4 g: L# R9 U) u' E" D& Z/ S' q
  45.   )
    # U! n" z1 M) p  Z
  46.   (setvar "osmode" oldosmode)                ;恢复用户对象捕捉设置
    1 [3 B4 }% I" s9 ]5 p2 S
  47.   (setvar "cmdecho" 1)
    9 a4 l, d: v5 K+ D  u8 D9 ~
  48.   (princ)
    2 J; ?) q( l, W, |% F. [* ^6 w
  49. )
复制代码
发表于 2011-11-29 13:37:48 | 显示全部楼层
Ans1:% ^0 V9 L3 G' U; |1 q* \$ V/ b9 K
(SetVar "OsMode" 0)   ; 加这列 关闭捕捉9 l' V$ J% y4 r8 O; c7 g
+ }3 ]+ r( i4 S* a1 t% [9 {7 u
Ans2:
- _& m6 U* Y0 Q7 w3 B0 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备13008828号-1 )

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