维度类型
我需要一次覆盖多个维度的维度文本,但覆盖必须不同于径向、角度或线性维度。如何确定选择了什么类型的维度?如何迭代多个(assoc 100)以获得正确的信息?最好的技术是什么?维度的每个dxf组码中都有几个实例(assoc 100)。有时我正在寻找的信息(径向、对齐、旋转等)在第三个实例中,另一个在第四个实例中(assoc 100)。在这里,我通过前两个(assoc 100)从第三个中获得正确的值。你们是怎么做到的?谢谢
(setq d (1- sl)
n(ssname ss d) ; ss = selection set obtained with ssget
e1 (entget n)
q (cdr (member (assoc 100 e1) e1)); step over the first assoc 100
q (cdr (member (assoc 100 q) q)); step over the second assoc 100
q (cdr (assoc 100 q)) ; get the info here
) 嗨,paulmcz,也许VLisp方法是你想要的?
(vla-get-Objectname (vlax-ename->vla-object entity)) 如果需要普通溶液,我会测试DXF组70的值,例如:测试径向尺寸:
(= 4 (logand (cdr (assoc 70 (entget <dim>))) (~ 224)))
谢谢hanhphuc。不幸的是,我对Vlisp了解不够,无法尝试您的方法。
嗨,李,你的解决方案一如既往地完美。非常感谢。我只是希望知道这里发生了什么。我不知道logand函数背后的算术。我无法理解这(洛根164-225)如何返回4。
谢谢李。
太好了,不客气,保罗
为了帮助您理解,不要从算术角度(即基数10)来看待它,试着用二进制(基数2)来可视化它,以了解逐位运算(logand/LOGOR/boole等)如何影响每个位。
DXF组70通常是位编码值,然而,维度的DXF 70组有点奇怪,因为值0-6是连续整数,值32以后是位代码。
因此,尽管径向尺寸的DXF 70组代码为4,但您不能简单地使用以下内容来测试尺寸是否为径向(与其他DXF 70组代码一样):
(= 4 (logand 4 (cdr (assoc 70 (entget <dim>)))))因为,这也将返回坐标尺寸的T(如6=2+4)。
因此,我的示例中的logand表达式不是使用特定位(即本例中的位4)执行AND操作,而是屏蔽位32-128,以便按位AND操作将匹配设置的任何其他位。
例如,考虑用户重新定位的X型坐标尺寸,DXF组70等于198(6+64+128)。
198作为32位有符号整数的二进制表示为:
对224(=32+64+128)执行位非运算将用二进制表示为:
现在,对这两个二进制表示执行逐位“与”运算有效地屏蔽了32、64和128位,剩下的位都已设置:
我希望这更清楚。
李 非常感谢李。我真的很感激。是的,对我来说天气正在慢慢转晴。我现在开始以一种完全不同的方式看待这个世界。
保罗。 太好了,我很高兴解释清楚
我刚刚纠正了几个拼写错误(225应该是224)。
李
感谢李的澄清。
正如我所料,你会给我们提供非常有用的信息。注意并赞赏
我必须承认,你的dxf建议非常有用,尤其是在ssget过滤中,
7
本主题使我想起最近使用位掩码等于运算符“&=”的线程dxf 70
再次感谢李
不客气,韩,我很乐意帮忙
这是一个好主意,但不幸的是,我不认为它可以这么简单-例如,假设您想要构造一个ssget过滤器,以仅允许径向维度。您可以使用以下过滤器:
然而,这也将匹配纵坐标尺寸(因为6=2+4)-因此,在这种情况下不能使用位编码滤波器。
我对这个问题的解决方案是使用如下函数来构造适当的过滤器:
[颜色=绿色];;维度选择过滤器列表-Lee Mac;;为给定维度类型构造适当的过滤器列表;;lst-DXF组70维度类型列表(0-6);;e、 g.旋转和对齐尺寸:(LM:dimfilter(0 1))(defunLM:dimfilter(lst)(lambda(位)(append'((0.“*尺寸”)(-4.”“))(LM:bitcombinations(32 64 128)));;位组合-Lee Mac;;返回给定位代码集[(color)](defun[(color]LM:位组合(l/foo条)(defun[(color]foo(l r)(if[(color=BLUE)](if[(color=BLUE)](和[[color=BL
页:
[1]