给一个将CAD块内是实体坐标转换到当前显示坐标VLisp例子
时间: 2024-01-20 22:04:47 浏览: 181
绘图范例,可以显示坐标
以下是一个将CAD块内实体的坐标转换为当前显示坐标的VLisp例子:
```
(defun c:convert-coordinates (ent / blk pt)
(setq blk (cdr (assoc 2 (entget ent))))
(setq pt (cdr (assoc 10 (entget ent))))
(if (not (eq blk 0))
(setq pt (mapcar '- pt (cdr (assoc 10 (entget (tblsearch "BLOCK" blk)))))))
(setq pt (vlax-3d-point pt))
(setq pt (vlax-curve-getClosestPointTo ent pt))
(setq pt (vlax-3d-point->list pt))
(setq pt (mapcar '(lambda (x) (rtos x 2 6)) pt))
pt)
```
这个函数接受一个实体的对象标识符(ent),并返回该实体的坐标转换为当前显示坐标的列表。
该函数首先从实体的属性列表中提取块名和实体的原始坐标。如果实体不在块内,则块名为0。
接下来,如果实体在块内,函数将实体的原始坐标转换为相对于块的坐标系。然后,函数使用vlax-curve-getClosestPointTo方法将坐标转换为当前显示坐标系。
最后,函数返回转换后的坐标列表。在这个例子中,我们还使用了vlax-3d-point和vlax-3d-point->list函数将点表示为VLisp中的3D点对象,并使用rtos函数将每个坐标保留两个小数位。
阅读全文