(defun getlayerfilter ( filter / dict )
(if
(and
(setq dict
(cdr
(assoc 360
(entget
(cdr
(assoc 330
(entget (tblobjname "LAYER" "0"))
)
)
)
)
)
)
(setq dict
(cdr
(assoc -1
(dictsearch dict "ACAD_LAYERFILTERS")
)
)
)
)
(dictsearch dict filter)
)
)
用图层过滤器的名称命名:
(getlayerfilter "YourLayerFilter") 没错,测试的图形中没有图层过滤器。
我还不习惯处理层过滤器,因为我们公司处理的所有承包商都没有使用过滤器
大多数人在绘图时也不遵循图层名称,这使我只能坚持使用图层对话框。
因此,在添加一个过滤器到绘图后,我得到了这个,我认为它是空的。。。
谢谢。 为了进一步演示,下面是一个向ACAD\U LAYERFILTERS字典添加新图层特性过滤器(XRecord)的示例。如果ACAD\U LAYERFILTERS字典不存在(即,如果尚未将图层特性过滤器添加到图形中),则代码还将构建该字典。
(defun test ( filter / dict xdict )
(if
(and
(setq xdict
(cdr
(assoc 360
(entget
(cdr
(assoc 330
(entget (tblobjname "LAYER" "0"))
)
)
)
)
)
)
(or
(setq dict
(cdr
(assoc -1
(dictsearch xdict "ACAD_LAYERFILTERS")
)
)
)
(setq dict
(dictadd xdict "ACAD_LAYERFILTERS"
(entmakex
'(
(0 . "DICTIONARY")
(100 . "AcDbDictionary")
(280 . 0)
(281 . 1)
)
)
)
)
)
(not (dictsearch dict filter))
)
(dictadd dict filter
(entmakex
(list
(cons 0 "XRECORD")
(cons 100 "AcDbXrecord")
(cons 280 1)
(cons 1 filter)
(cons 1 "#*")
(cons 1 "3")
(cons 1 "*")
(cons 70 768)
(cons 1 "*")
(cons 1 "*")
(list -3
(list "ACAD"
(cons 1000 "( NAME== \"#*\" ) and ( COLOR== \"3\" ) and LOCKED == \"FALSE\"")
)
)
)
)
)
)
)
为清楚起见,我已将层过滤器属性硬编码到代码中,以便仅使用层过滤器名称调用该函数,即:
(test "MyFilter")
如果提供的名称(上面的“MyFilter”)在图形中尚未作为图层过滤器出现,则将向字典中添加一个新的图层过滤器。添加的图层过滤器将允许名称匹配“#*”、图层颜色为“3”且图层被解锁的图层(三个任意选择的属性用于演示)。
请注意,除了存储名称、颜色、线型等属性的多个DXF group 1代码外,xRecord还需要存储描述属性值的字符串的扩展数据。
图层过滤器的DXF代码没有文档记录,但我一路上收集了一些信息:
;; Layer Filter XRecord Data
The following list details the various DXF codes and values contained in the Xrecord:
1 Name of Filter
1 Layer Name
1 Color
1 Linetype
70 (Please refer further below)
1 Lineweight
1 PlotStyle
The 70 DXF code can contain one of the following numbers or an addition of them:
ON/OFF
On 1
Off 3
FREEZE/THAW
Freeze 4
Thaw 12
CURRENT VPORT
Freeze 16
Thaw 48
NEW VPORT
Freeze 64
Thaw 192
LOCK/UNLOCK
Lock 256
UnLock 768
PLOT
Plot 1024
Don't Plot 3072
我希望这有帮助。
这是dictsearch为您添加的层过滤器返回的xRecord数据(我假设您将其称为“Tharwat”)。
您可以使用以下工具获取XRecord的DXF组的完整列表:
6
你真是太好了,除了你为我们展示的例子之外。
我想我必须开始学习字典,才能处理或理解像你带来的东西。
非常感谢。
塔瓦特
谢谢塔瓦,不客气。
字典是在图形中存储数据的一种非常有效的方法,因此了解如何操作字典确实非常有用。此外,布局、多重引线样式、多重引线样式、打印样式等项目都存储在字典中,如上图所示,一些对象使用扩展字典来存储其他数据。
还有一些Visual LISP方法用于操作字典*和其中包含的XRecords,但在我看来,使用Vanilla AutoLISP可以更容易地操作这些对象,因为可以避免使用安全数组和变体等。
[*查看文档对象的Dictionaries属性,以及Dictionary对象的AddObject/GetObject方法(可以被视为类似于dictadd/dictsearch函数),然后是与XRecord对象相关的Get/SetXRecordData方法,但这些方法使用相同的数据结构(DXF组)正如Vanilla等价物所使用的一样,尽管必须将其转换为整数的变体和变体的变体。] 李,
我已经看了上面的例子,并熟悉了那个特定的XRECORD,但我仍然在努力找出如何在过滤器中添加新的/查看现有的子过滤器。
谨致问候,
马特 马特,你具体想做什么? 目前,我有一个过滤层名称的过滤器:M-*&MK-*层,在该过滤器中,我有子过滤器,用于过滤带有*HVAC*的层,以及另一个过滤器,用于过滤*管道*等。这些子过滤器布置在第一个机械过滤器下。更多信息请参见图片。此外,我现在将这些过滤器组和属性过滤器导出到*。可以导入到对话框中的lft文件(仅在垂直产品上,即AutoCAD MEP)。我想有一个程序,当我插入我的图层块时,程序要么插入图层过滤器,要么创建它们。
谨致问候,
马特 我想用lisp添加我的所有图层过滤器属性。从“图层过滤器”对话框复制特性适用于大多数情况。我唯一搞不懂的是“身份”。它们仅显示为图标。对于属性,我尝试了STATUS==未使用,STATUS==未使用,STATUS==未使用。两者都不起作用。
(getlayerfilter“NODE”)和所有使用NAME属性的方法都非常有效。
(getlayerfilter“所有未使用的层”)使用状态将不起作用。这些可以存储在单独的词典中吗?
页:
1
[2]