乐筑天下

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

[编程交流] 图层特性过滤器

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:53:06 | 显示全部楼层
下面是一个更完整的示例,用于检索特定的图层过滤器:
 
  1. (defun getlayerfilter ( filter / dict )
  2. (if
  3.    (and
  4.      (setq dict
  5.        (cdr
  6.          (assoc 360
  7.            (entget
  8.              (cdr
  9.                (assoc 330
  10.                  (entget (tblobjname "LAYER" "0"))
  11.                )
  12.              )
  13.            )
  14.          )
  15.        )
  16.      )
  17.      (setq dict
  18.        (cdr
  19.          (assoc -1
  20.            (dictsearch dict "ACAD_LAYERFILTERS")
  21.          )
  22.        )
  23.      )
  24.    )
  25.    (dictsearch dict filter)
  26. )
  27. )

 
用图层过滤器的名称命名:
 
  1. (getlayerfilter "YourLayerFilter")
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:57:07 | 显示全部楼层
没错,测试的图形中没有图层过滤器。
 
我还不习惯处理层过滤器,因为我们公司处理的所有承包商都没有使用过滤器
大多数人在绘图时也不遵循图层名称,这使我只能坚持使用图层对话框。
 
因此,在添加一个过滤器到绘图后,我得到了这个,我认为它是空的。。。
 
谢谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:00:54 | 显示全部楼层
为了进一步演示,下面是一个向ACAD\U LAYERFILTERS字典添加新图层特性过滤器(XRecord)的示例。如果ACAD\U LAYERFILTERS字典不存在(即,如果尚未将图层特性过滤器添加到图形中),则代码还将构建该字典。
 
  1. (defun test ( filter / dict xdict )
  2. (if
  3.    (and
  4.      (setq xdict
  5.        (cdr
  6.          (assoc 360
  7.            (entget
  8.              (cdr
  9.                (assoc 330
  10.                  (entget (tblobjname "LAYER" "0"))
  11.                )
  12.              )
  13.            )
  14.          )
  15.        )
  16.      )
  17.      (or
  18.        (setq dict
  19.          (cdr
  20.            (assoc -1
  21.              (dictsearch xdict "ACAD_LAYERFILTERS")
  22.            )
  23.          )
  24.        )
  25.        (setq dict
  26.          (dictadd xdict "ACAD_LAYERFILTERS"
  27.            (entmakex
  28.             '(
  29.                (0 . "DICTIONARY")
  30.                (100 . "AcDbDictionary")
  31.                (280 . 0)
  32.                (281 . 1)
  33.              )
  34.            )
  35.          )
  36.        )
  37.      )
  38.      (not (dictsearch dict filter))
  39.    )
  40.    (dictadd dict filter
  41.      (entmakex
  42.        (list
  43.          (cons 0 "XRECORD")
  44.          (cons 100 "AcDbXrecord")
  45.          (cons 280 1)
  46.          (cons 1 filter)
  47.          (cons 1 "#*")
  48.          (cons 1 "3")
  49.          (cons 1 "*")
  50.          (cons 70 768)
  51.          (cons 1 "*")
  52.          (cons 1 "*")
  53.          (list -3
  54.            (list "ACAD"
  55.              (cons 1000 "( NAME== "#*" ) and ( COLOR== "3" ) and LOCKED == "FALSE"")
  56.            )
  57.          )
  58.        )
  59.      )
  60.    )
  61. )
  62. )

 
为清楚起见,我已将层过滤器属性硬编码到代码中,以便仅使用层过滤器名称调用该函数,即:
 
  1. (test "MyFilter")

 
如果提供的名称(上面的“MyFilter”)在图形中尚未作为图层过滤器出现,则将向字典中添加一个新的图层过滤器。添加的图层过滤器将允许名称匹配“#*”、图层颜色为“3”且图层被解锁的图层(三个任意选择的属性用于演示)。
 
请注意,除了存储名称、颜色、线型等属性的多个DXF group 1代码外,xRecord还需要存储描述属性值的字符串的扩展数据。
 
图层过滤器的DXF代码没有文档记录,但我一路上收集了一些信息:
 
  1. ;; Layer Filter XRecord Data
  2. The following list details the various DXF codes and values contained in the Xrecord:
  3. 1 Name of Filter
  4. 1 Layer Name
  5. 1 Color
  6. 1 Linetype
  7. 70 (Please refer further below)
  8. 1 Lineweight
  9. 1 PlotStyle
  10. The 70 DXF code can contain one of the following numbers or an addition of them:
  11. ON/OFF
  12. On 1
  13. Off 3
  14. FREEZE/THAW
  15. Freeze 4
  16. Thaw 12
  17. CURRENT VPORT
  18. Freeze 16
  19. Thaw 48
  20. NEW VPORT
  21. Freeze 64
  22. Thaw 192
  23. LOCK/UNLOCK
  24. Lock 256
  25. UnLock 768
  26. PLOT
  27. Plot 1024
  28. Don't Plot 3072

 
我希望这有帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:01:34 | 显示全部楼层
 
这是dictsearch为您添加的层过滤器返回的xRecord数据(我假设您将其称为“Tharwat”)。
 
您可以使用以下工具获取XRecord的DXF组的完整列表:
 
  1. 6
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 21:05:25 | 显示全部楼层
 
你真是太好了,除了你为我们展示的例子之外。
 
我想我必须开始学习字典,才能处理或理解像你带来的东西。
 
非常感谢。
 
塔瓦特
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:08:03 | 显示全部楼层
 
谢谢塔瓦,不客气。
 
字典是在图形中存储数据的一种非常有效的方法,因此了解如何操作字典确实非常有用。此外,布局、多重引线样式、多重引线样式、打印样式等项目都存储在字典中,如上图所示,一些对象使用扩展字典来存储其他数据。
 
还有一些Visual LISP方法用于操作字典*和其中包含的XRecords,但在我看来,使用Vanilla AutoLISP可以更容易地操作这些对象,因为可以避免使用安全数组和变体等。
 
[*查看文档对象的Dictionaries属性,以及Dictionary对象的AddObject/GetObject方法(可以被视为类似于dictadd/dictsearch函数),然后是与XRecord对象相关的Get/SetXRecordData方法,但这些方法使用相同的数据结构(DXF组)正如Vanilla等价物所使用的一样,尽管必须将其转换为整数的变体和变体的变体。]
回复

使用道具 举报

29

主题

88

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-5 21:12:13 | 显示全部楼层
李,
 
我已经看了上面的例子,并熟悉了那个特定的XRECORD,但我仍然在努力找出如何在过滤器中添加新的/查看现有的子过滤器。
 
谨致问候,
 
马特
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:15:28 | 显示全部楼层
马特,你具体想做什么?
回复

使用道具 举报

29

主题

88

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-5 21:17:36 | 显示全部楼层
目前,我有一个过滤层名称的过滤器:M-*&MK-*层,在该过滤器中,我有子过滤器,用于过滤带有*HVAC*的层,以及另一个过滤器,用于过滤*管道*等。这些子过滤器布置在第一个机械过滤器下。更多信息请参见图片。此外,我现在将这些过滤器组和属性过滤器导出到*。可以导入到对话框中的lft文件(仅在垂直产品上,即AutoCAD MEP)。我想有一个程序,当我插入我的图层块时,程序要么插入图层过滤器,要么创建它们。
 
谨致问候,
 
马特
211959kinydyh9em99biid.jpg
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 21:20:39 | 显示全部楼层
我想用lisp添加我的所有图层过滤器属性。从“图层过滤器”对话框复制特性适用于大多数情况。我唯一搞不懂的是“身份”。它们仅显示为图标。对于属性,我尝试了STATUS==未使用,STATUS==未使用,STATUS==未使用。两者都不起作用。
 
 
 
(getlayerfilter“NODE”)和所有使用NAME属性的方法都非常有效。
(getlayerfilter“所有未使用的层”)使用状态将不起作用。这些可以存储在单独的词典中吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 08:57 , Processed in 1.468535 second(s), 72 queries .

© 2020-2025 乐筑天下

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