什么是图元信息
在Autocad中,一条线,一个圆,一个块,都是图元。想要控制某个图元,就要掌握该图元的信息。
获取图元属性
相关函数 | 功能说明 |
---|---|
(entsel) | 选择一个图元后,得到这个图元的名称和x,y,z坐标点。 |
(entget) | 根据图元名,得到图元的联合属性。 |
比如,图纸空间中有一条Line。
- (entsel)
获取图元信息(<图元名: 39199820> (23889.0 25547.0 0.0))
- (car (entsel))
将图元信息的第一部分提取出来了,得到<图元名: 39199820>
- (entget (car (entsel)))
拿到图元名,就可以用entget获取图元的联合属性:
(
(-1 . <图元名: 39199820>)
(0 . "LINE") (330 . <图元名: 2f7ba1f0>)
(5 . "2B2")
(100 . "AcDbEntity")
(67 . 0) (410 . "Model")
(8 . "0")
(100 . "AcDbLine")
(10 24498.4 26270.7 0.0)
(11 17109.4 17662.2 0.0)
(210 0.0 0.0 1.0)
)
这些属性中间有个.
,叫做点对
。
每项属性前面的数字,叫做群码
,类似于索引值,方便引用。
不同的图元有共有的属性,也有特有的属性。
观察这些属性,我们应该能看出来,0是图元名称,8是图层,10是line的起点坐标,11是line的终点坐标。
修改图元属性
相关函数 | 功能说明 |
---|---|
(assoc) | 查询并获取指定项数据 |
(cons) | 创造一个点对格式的属性 |
(list) | 创造一个列表 |
(subst) | 替换属性 |
(entmod) | 更新状态 |
得到图元信息后,我们自然就想修改。
想要修改信息,可以使用一下步骤
- 使用enget函数取得图元属性
- 使用assoc函数取得现有的某项属性
- 使用cons函数造一个新的属性
- 使用subst函数替换属性
- 使用entmod更新
现在,我们可以试试修改line的起点位置。
- 首先,我们要获取图元属性
(setq line_data (entget (car (entsel))))
; 取得图元信息并赋值给变量 line_data
; ((-1 . <图元名: 36e46820>) (0 . "LINE") (330 . <图元名: 2f4e99f0>) (5 . "2B2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 34425.8 25984.5 0.0) (11 25395.5 15122.9 0.0) (210 0.0 0.0 1.0))
- 先把现有的起点坐标取到
(setq old_spoint (assoc 10 line_data))
; (10 34425.8 25984.5 0.0)
- 仿照这个点坐标属性的格式,再定义一个新的坐标点属性
用cons能创造一个点对,但是我们的坐标包含xyz三个值,因此要先用list创建。
(setq new_spoint (cons 10 (list 5.8 26984.5 0.0)))
; 得到了new_spoint
; (10 5.8 26984.5 0.0)
- 更新line_data的信息
(setq new_line_data (subst new_spoint old_spoint line_data))
替换的时候要注意,如果old_spoint
和图元当前状态匹配不上,替换会不成功。
此时,我们得到了new_line_data
,但是,想要图形发生变化,还需要更新下
(entmod new_line_data)
回到autocad,会发现图形已经变化。