明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1580|回复: 6

[提问] 关于坐标标注组码70 的值变动问题

[复制链接]
发表于 2015-10-1 11:18:20 | 显示全部楼层 |阅读模式
本帖最后由 qinleilei 于 2015-10-1 14:39 编辑

最近写了个代码,主要是方便自己标注坐标后用于坐标数值对其,使其美观,但是在使用中发现了问题。
先贴上代码,后面再上图讨论。本人搞模具的,出2D图纸标注占了一大半的工作量
  1. (DEFUN C:cb()
  2. (setvar "CMDECHO" 0)
  3. (command "ucs" "w")
  4. (princ "\n选择参考尺寸: ")
  5. (setq ent(entget(car (entsel))))
  6. (setq ge (cdr (assoc 70 ent)));根据组码70来判断横纵坐标类型
  7. (princ "\n选择需要修改的尺寸: ")
  8. (setq ss (ssget (list '(0 . "DIMENSION") (cons 70 ge))));按横纵坐标标注类型创建选择集
  9. (COND
  10.   ((= ge 102)(setq ref(caddr(assoc 14 ent))))
  11.   ((= ge 38)(setq ref(cadr(assoc 14 ent))))
  12.   (progn
  13.     (princ "\n选取的图元错误!!!")
  14.      (quit)
  15.     )
  16. )
  17. (setq n 0)
  18. (repeat (sslength ss)
  19.   (setq en (entget (ssname ss n)))
  20.   (setq p1 (assoc 14 en))
  21.   (setq p2(cadr p1))
  22. (COND
  23.   ((= ge 102)(setq p2(caddr p1)))
  24.   ((= ge 38)(setq p2(cadr p1)))
  25.   (progn
  26.     (princ "\n选取的图元错误!!!")
  27.      (quit)
  28.     )
  29. )
  30.   (setq p3(subst ref p2 p1))
  31.   (entmod(subst p3 p1 en))
  32.   (setq n(1+ n))
  33. )
  34. ) (princ)



图一中是演示的效果,选取参考值,使同类型的标注文字对齐,看似没有问题。接着往下看图二 图三


大家仔细看会发现,拖动标注文字夹点后 组码70的值变了。


我是根据组码70的值 102和38 来判断横纵坐标的类型的,那么问题来了,如果我在标注过程中有拖动坐标,那么70的组码就会变动,接着图一的演示也就宣告失败了!

还望各位大师不吝赐教,公司用的是正版中望CAD,没有网络,好不容易国庆一天假 跑网吧来了,装个CAD来发这个求助帖
各位可不要让我白跑一趟呀[em0]

写代码纯属业余,上面代码中用组码70来判断横纵坐标标注类型,纯粹是自己根据坐标标注的群码对比找出来的不同处。不知道各位一般是根据什么来判断的,还有就是上面的代码应该还可以精简下,就是不知道怎么弄,谁要是有高招还望指点下
谢谢了!

本帖子中包含更多资源

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

x
发表于 2015-10-2 08:03:10 | 显示全部楼层
本帖最后由 ivde 于 2015-10-2 08:06 编辑

(= (logand 166 6) 6) -> T
(= (logand 230 6) 6) -> T

(ssget '((0 . "dimension")(-4 . "&=") (70 . 6)))

X 坐标 (logand dxf70 64) == 0
Y 坐标 (logand dxf70 64) == 64





 楼主| 发表于 2015-10-2 13:08:37 | 显示全部楼层
不是很明白,可以讲解下不?
 楼主| 发表于 2015-10-2 17:12:07 来自手机 | 显示全部楼层
ivde 发表于 2015-10-2 08:03
(= (logand 166 6) 6) -> T
(= (logand 230 6) 6) -> T


可以大致讲解下不?有点看不懂
发表于 2015-10-3 05:24:58 | 显示全部楼层
下面是帮助中的内容
组码70
标注类型:
值 0-6 是整数值,表示标注类型。值 32、64 和 128 是添加到整数值的位值(在 R13 及以后的版本中始终设置为 32)
0 = 旋转、水平或垂直;1 = 对齐
2 = 角度;3 = 直径;4 = 半径
5 = 三点角度;6 = 坐标
32 = 表示块参照(组码 2)仅由该标注参照。
64 = 坐标类型。这是一个位值(位 7),仅与整数值 6 一起使用。如果设置该值,则坐标为 X 类型;如果不设置,则坐标为 Y 类型。
128 = 这是一个添加到其他组 70 值的位值(位 8)(如果标注文字已放置到用户定义的位置,而不是放置到默认位置)
******
从上面内容可以看出,不管是什么标注类型,只要用户定义了位置70组码就会变化。
而ivde的回答就是去伪存真,用逻辑算法判断70组码的内容是否包含6。
发表于 2015-10-3 09:46:30 | 显示全部楼层
166 = 6 + 32+ 128
230 = 6 + 32 + 64 + 128
发表于 2015-10-3 20:03:59 | 显示全部楼层
我以前也写了一个,用的是比较笨的方法,目前发现70组码的有如下几个,供你参考.
                        (setq ss (ssget
                                        '(
                                                (0 . "DIMENSION")
                                                (-4 . "<or")
                                                (70 . 6)
                                                (70 . 70)
                                                (70 . 38)
                                                (70 . 102)
                                                (70 . 134)
                                                (70 . 198)
                                                (70 . 166)
                                                (70 . 230)
                                                (-4 . "or>")
                        )));;end ss
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 21:18 , Processed in 0.172120 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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