第三篇 第四部分 返回指定文字的坐标、根据坐标插入指定块并移动到指定图层
过了一个安稳的五一,没有傻逼业主和施工单位打电话。
所以今天继续摸鱼继续。
这部分的标题比较长,因为几个功能都比较煎蛋,就一起描述了。
1
首先是根据标注的桩号,得到指定桩号的位置信息。
- (setq selSet (ssget "X" (list (cons 0 "TEXT") (cons 1 text))))
一个新的函数 ssget,这也算是一个很常用的函数,毕竟要针对对象进行操作,绝大部分情况下需要有一个特定的选择集。
ssget 后面有三个部分,第一个是选择模式,例如 "C" (交叉窗口), "W" (窗口), "F" (上一个选择集), "L" (最后创建的对象), "P" (前一个选择集), "I" (反转选择), "N" (新建选择集) 等。如果省略,则默认为交互式选择模式。
这次使用的“X”,代表全图范围查找。
第二个是一系列的点对数据,跟前位 entmake 有点像哦。
0,代表要选择 text 文本;1,代表内容。
第三个是提示,懒得写,反正自己知道是在干什么。
找到相应的文本后,需要读取文本的坐标和旋转角度。
将上述 ssget 返回的选择集中,返回具体的对象名称。
- (setq ent (ssname selSet 0))
0就是代表选择集里的第1个实体。
返回具体对象名称后,就要提取内容了。
- (list (cdr (assoc 11 (entget ent))) (cdr (assoc 50 (entget ent))))
这里面的函数作用都是之前有提过,都是操作列表的函数。
11和50也是之前提供的DXF群码。
作用就是返回坐标和角度。
注意坐标有两类,一个是10,这是文字坐标;这次用的11,是对齐坐标。
为什么要使用cdr和assoc这两个函数呢,因为 assoc 返回的是一个点对列表,前面是 dxf 群码,后面是对应的数值。
2
找到对应桩号文字的坐标和角度后,就可以插入块了。
首先定义块文件的地址。
- (setq blkDef (strcat folderPath "\\" blockName ".dwg"))
极其简单的一行代码,唯一注意点是 autolisp 中的地址分隔符应该用"\\",因为"\"好像会作为代码处理还是咋的。
OK,这里有个小坑点:
插入的块应该是分解状态,不能作为快参照。
不然进一步处理很麻烦。
- (setq blkDef (strcat "*" blkDef))
在块地址前并入 *,这是CAD自带的功能。
然后就是调用 command,这个很煎蛋了,不赘述。
- (command "_insert" blkDef textPosition "1" textAngle)
用下划线是将命令转为命令行模式而不是图形模型。
不是所有的命令都有这个变化。
也不是所有的命令都需要这个变化才能转为命令行模式。
3
最后是移动图层。
太煎蛋了朋友们,我直接丢代码。
- (setq layername (strcat treatMent cateGory))
- (command "change" "l" "" "p" "la" layername "")
|