乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 14|回复: 5

[编程交流] 选择集无法识别

[复制链接]
ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 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

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 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公司
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 15:05:07 | 显示全部楼层
尝试打开“属性”对话框
然后窗口选择所有内容
使用“特性”下拉窗口并选择“直线”或“多段线”
然后调整下面的行值
 
或者使用“属性”框上的“快速选择”按钮
 
一旦你理解了它,你就会快速了解全球变化
回复

使用道具 举报

ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 15:28:27 | 显示全部楼层
你可以试试这个。应获得厚度>零且
[code](setq sset(ssget“X”((0。“LWPOLYLINE”)(-4“>”)(39.0.0)(-4。“
回复

使用道具 举报

ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 15:40:48 | 显示全部楼层
非常感谢。这也奏效了
 
AJS公司
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 00:18 , Processed in 0.421523 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表