ajs 发表于 2022-7-6 14:31:53

选择集无法识别

奇怪的是:
 
我有由第三方程序导出的dxf图形,据我所知,该程序使用的是R14之前的协议。
 
导出图形时,所有图层信息都将丢失。确定哪些实体属于哪些层的唯一方法是通过线厚度。
 
我的问题是:当线条厚度低于某个阈值时,我的选择集将不再识别该厚度。
 
下面是一个示例,其中选择集识别0.5的线宽:
 
首先,我将再次检查线条厚度(红色):
 
命令:(setq en(car(entsel“\n选择一行:”))
选择一行:
命令:(setq ENGRET(entget en))
((-1 . ) (0.“行”)(5.“19CD”)(67.0)(8.“0”)(410.“模型”)(62.256)(6.“ByLayer”)(370.-1)(347。)(284 . 0) (48 . 1.00000) (60 . 0) (39 . 0.500000) (10 -60.6955 -232.224 0.000000) (11 224.744 -84.3548 0.000000) (210 0.000000 0.000000 1.00000))
 
下面是成功的选择集:
 
命令:(setq ID_2(ssget“x”(list(cons 39 0.5)))
 
 
好啊现在我要寻找一个较小的厚度;0.04
 
 
我会再次检查:
 
命令:(setq en(car(entsel“\n选择一行:”))
选择一行:
命令:(setq ENGRET(entget en))
((-1 . ) (0.“行”)(5.“19CD”)(67.0)(8.“0”)(410.“模型”)(62.256)(6.“ByLayer”)(370.-1)(347。)(284 . 0) (48 . 1.00000) (60 . 0) (39 . 0.0400000) (10 -60.6955 -232.224 0.000000) (11 224.744 -84.3548 0.000000) (210 0.000000 0.000000 1.00000))
 
然而,现在,当我基于厚度值0.0400运行选择集时,我得到了一个nill:
 
命令:(setq ID_2(ssget“x”(list(cons 39 0.0400)))

 
呵呵???
 
我能想到的唯一一件事是,有一个阈值,低于该阈值,线厚度无法识别。不幸的是,第三方程序导出这些线厚度的值小于0.1。此值不可编辑。
 
现在,线的厚度与我无关;一旦我知道了如何运行选择集,我将把线宽设置为零,并改用线宽。
 
所以我想知道的是,是否有可能执行某种全局命令,将所有现有线宽缩放到可以识别的点。我一直在玩这个,但我还没有想出如何做到这一点。
 
如果能为这位受困者提供任何帮助,我们将不胜感激。
 
AJS公司

ajs 发表于 2022-7-6 14:52:06

在杰弗里·P·桑德斯(Jeffrey P Sanders)的帮助下,我得以解决这一问题:http://www.jefferypsanders.com/autolisp.html
 
以下是缩放lisp:
 
;;;--- 刻度线厚度
 
(定义C:SLTHK()
(setq sf(getreal“\n比例因子:”))
;;;--- 缩放线条
(if(setq eset(ssget“X”(列表(cons 0”行)))
(程序
(setq cntr 0)
(虽然(
(setq en(ssname eset cntr))
(setq登记(entget en))
(if(assoc 39登记)
(程序
(setq oldSF(cdr(assoc 39 enlist)))
(setq newSF(*oldSF sf))
(setq登记(subst(cons 39 newSF)(assoc 39 ENSLET)登记)
(entmod登记)
(entupd en)
(setq cntr(+cntr 1))
)
)
)
(princ“按比例”)(princ cntr)(princ“线厚度”)
)
)
;;;--- 缩放LW多段线
(if(setq eset(ssget“X”(list(cons 0“LWPOLYLINE”))))
(程序
(setq cntr 0)
(虽然(
(setq en(ssname eset cntr))
(setq登记(entget en))
(if(assoc 39登记)
(程序
(setq oldSF(cdr(assoc 39 enlist)))
(setq newSF(*oldSF sf))
(setq登记(subst(cons 39 newSF)(assoc 39 ENSLET)登记)
(entmod登记)
(entupd en)
(setq cntr(+cntr 1))
)
)
)
(princ“缩放”)(princ cntr)(princ“LW多段线厚度”)
)
)
;;;--- 缩放多段线
(if(setq eset(ssget“X”(list(cons 0“POLYLINE”))))
(程序
(setq cntr 0)
(虽然(
(setq en(ssname eset cntr))
(setq登记(entget en))
(if(assoc 39登记)
(程序
(setq oldSF(cdr(assoc 39 enlist)))
(setq newSF(*oldSF sf))
(setq登记(subst(cons 39 newSF)(assoc 39 ENSLET)登记)
(entmod登记)
(entupd en)
(setq cntr(+cntr 1))
)
)
)
(princ“缩放”)(princ cntr)(princ“多段线厚度”)
)
)
(普林斯)
)
 
 
 
感谢所有看过这个的人。
 
AJS公司

JohnM 发表于 2022-7-6 15:05:07

尝试打开“属性”对话框
然后窗口选择所有内容
使用“特性”下拉窗口并选择“直线”或“多段线”
然后调整下面的行值
 
或者使用“属性”框上的“快速选择”按钮
 
一旦你理解了它,你就会快速了解全球变化

ajs 发表于 2022-7-6 15:10:54

感谢您的反馈。如果我理解正确,您建议通过“属性”对话框进行手动更改。
 
对于这个应用程序,手动更改是不现实的,因为这是应用程序的“装配线”事件。每次60张图纸。
 
测线厚度缩放过程似乎确实有效。我唯一需要做的调整是应用舍入函数,使缩放厚度舍入到最接近的0.5,到目前为止,在选择集方面是100%可靠的。
 
我推测,由于精度变化,较小的数字可能会导致问题。
 
感谢大家的慷慨帮助;Cadtutor对我来说是无价的。。。
 
 
AJS公司

CAB 发表于 2022-7-6 15:28:27

你可以试试这个。应获得厚度>零且
(setq sset(ssget“X”((0。“LWPOLYLINE”)(-4“>”)(39.0.0)(-4。“

ajs 发表于 2022-7-6 15:40:48

非常感谢。这也奏效了
 
AJS公司
页: [1]
查看完整版本: 选择集无法识别