著作权归作者所有,任何形式的转载都请联系作者。
昨天Filter的基础篇里介绍了基本用法,尚未介绍等高线不分颜色、不分图层的地形图计曲线线宽修改的解决方案。在解决该问题前,必须深入掌握Filter命令。这里介绍两个高级技巧:
一、逻辑运算符
复杂的过滤器需要用到逻辑运算符,Filter支持的逻辑运算符包括NOT、AND、OR和XOR四种。每一个逻辑运算符包括3行或3行以上,第一行为开始行,最后一行为逻辑运算结束行,二者之间为过滤条件。
1、** 开始 NOT/** 结束 NOT
NOT为逻辑非,只能有1个条件,结果为不满足该条件的对象。若需要多个条件,需要嵌套AND使用。
如:
** 开始 NOT
对象 = 直线
** 结束 NOT
表示选择不是直线的对象。
2、** 开始 AND/** 结束 AND
AND为逻辑与,可以有1个或多个条件,结果为满足所有条件的对象。
如:
** 开始 AND
对象 = 块
图层 = GCD
块名 = GC200
** 结束 AND
表示选择图层为GCD、块名为GC200的块参照对象。
3、** 开始 OR/** 结束 OR
OR为逻辑或,可以有1个或多个条件,结果为满足其中一个条件或多个条件的对象。
如:
** 开始 OR
对象 = 直线
对象 = 多段线
** 结束 OR
表示选择直线或多段线对象。
4、** 开始 XOR/** 结束 OR
XOR为逻辑异或,只能有2个条件,结果为满足其中一个条件、但不满足另一个条件的对象。
如:
** 开始 XOR
线型 = Dashed
颜色 = 5 - 蓝色
** 结束 XOR
表示选择仅线型为Dashed或仅颜色为蓝色的对象(不选择线型为Dashed、颜色为蓝色的对象)。
逻辑运算符必须配对使用,可以嵌套使用。
二、filter.nfl文件编辑与复制
言归正传,讲一讲等高线不分颜色、不分图层的地形图中,计曲线线宽修改的问题。
那天拿着等高线不分颜色、不分图层的地形图,手工用Filter过滤 265m、270m两个高程的等高线,尝试过滤修改。但地形图里高程从100+到600+,5m等高距,一百多个高程,一个个修改很慢,也很无趣。正无计可施之际,突然想起过滤器的存储文件Filter.nfl,之前用文件编辑神器UltraEdit打开研究过,是一个文本文件。搜索到该文件,在C:\Users<用户名>\AppData\Roaming\Autodesk\AutoCAD 2012 - Simplified Chinese\R18.2\chs\Support目录下找到了,用UltraEdit打开,文件内容如下:
Filter.nfl -- 请勿编辑此文件。
:ai_lisp|等高线
(0 . "*POLYLINE")
(-4 . "<OR")
(-4 . "=")
(38 . 265.000000000000000)
(-4 . "=")
(38 . 270.000000000000000)
(-4 . "OR>")
:ai_str|等高线
对象 = 多段线
** 开始 OR
标高 = 265.000000000000000
标高 = 270.000000000000000
** 结束 OR
该文件第一行有汉字提示“请勿编辑此文件。”虽然有此提示,但对于什么都感改的自己来说,这样的提示完全无效,凭直觉认为依葫芦画瓢完全没问题。记得自己最伤心的一次修改,是多年前,不知道哪根筋不对,去修改Windows Mobile手机的注册表,当时就将手机改成砖头,据说是字体损坏,花了380元才修好。这是自己计算机研究生涯中最严重的一次事故,如导致计算机无法启动的修改都不值一谈。
既然动了这个心思,就将225~260的等高线过滤,用Excel依葫芦画瓢做好,拷贝到Filter.nfl中,结果如下:
Filter.nfl -- 请勿编辑此文件。
:ai_lisp|等高线
(0 . "*POLYLINE")
(-4 . "<OR")
(-4 . "=")
(38 . 225.000000000000000)
(-4 . "=")
(38 . 230.000000000000000)
(-4 . "=")
(38 . 235.000000000000000)
(-4 . "=")
(38 . 240.000000000000000)
(-4 . "=")
(38 . 245.000000000000000)
(-4 . "=")
(38 . 250.000000000000000)
(-4 . "=")
(38 . 255.000000000000000)
(-4 . "=")
(38 . 260.000000000000000)
(-4 . "=")
(38 . 265.000000000000000)
(-4 . "=")
(38 . 270.000000000000000)
(-4 . "OR>")
:ai_str|等高线
对象 = 多段线
** 开始 OR
标高 = 225.000000000000000
标高 = 230.000000000000000
标高 = 235.000000000000000
标高 = 240.000000000000000
标高 = 245.000000000000000
标高 = 250.000000000000000
标高 = 255.000000000000000
标高 = 260.000000000000000
标高 = 265.000000000000000
标高 = 270.000000000000000
** 结束 OR
在AutoCAD中重新打开Filter命令,看到了修改的结果(修改不正确,会导致AutoCAD崩溃,呵呵),然后应用,试验成功。之后一次性将所有高程在Excel中拖拖拉拉编制好,复制到Filter.nfl中,一次修改成功。这个研究虽然耗费了一些时间,但相比枯燥的修改,这个研究显然更有成就感和乐趣。这里给大家抛砖引玉,在需要进行大量手工重复劳动的时候,可以研究采用一些非常规手段解决。
补充说明一下:第一,Filter.nfl文件其实主要由两部分组成,第一部分是过滤器的DXF组码表达,有兴趣的同仁可以继续研究,第二部分是过滤器的字符串表达,与Fileter命令内见到的内容完全一致;第二,Filter.nfl文件可以拷贝到其他计算机对应的目录下,过滤器就能在该计算机上使用。对于大家都反复用的过滤器,可以通过该方法共享,而不必重复编辑。
网友评论