-
;; xyp-DXF-pl 函数用于获取实体的 DXF 数据并提取 X 和 Y 坐标此函数是对 xyp-DXF 功能的扩展,不仅获取指定代码的 DXF 数据,还会提取出 X 和 Y 坐标
defun xyp-DXF-pl (code ename / ent lst)
;; 检查传入的 code 是否为列表类型
(if (= (type code) 'LIST)
;; 如果是列表类型
(progn
;; 获取实体的完整 DXF 数据
(setq ent (entget ename))
;; 初始化一个空列表用于存储结果
(setq lst '())
;; 遍历 code 列表中的每个元素
(foreach a code
;; 将每个元素及其对应的 DXF 数据组成的列表添加到结果列表中
(setq lst (cons (list a (cdr (assoc a ent))) lst))
)
;; 反转结果列表以保证顺序正确
(setq lst (reverse lst))
;; 提取 X 坐标
;(setq x (car lst))
;; 提取 Y 坐标
;(setq y (cadr lst))
;; 重新组合成只包含 X 和 Y 坐标的列表
;(setq lst (list x y))
(setq lst (list (car lst) (cadr lst)))
)
;; 如果 code 不是列表类型
(if (= code -3)
(progn
; ;; 当 code 为 -3 时,获取扩展数据
(setq lst (cdr (assoc code (entget ename '("*")))))
; ;; 提取 X 坐标
;(setq x (car lst))
; ;; 提取 Y 坐标
;(setq y (cadr lst))
; ;; 重新组合成只包含 X 和 Y 坐标的列表
(setq lst (list (car lst) (cadr lst)))
)
(progn
; ;; 其他情况,获取指定 code 的 DXF 数据
(setq lst (cdr (assoc code (entget ename))))
; ;; 提取 X 坐标
; (setq x (car lst))
; ;; 提取 Y 坐标
; (setq y (cadr lst))
; ;; 重新组合成只包含 X 和 Y 坐标的列表
(setq lst (list (car lst) (cadr lst)))
; (setq lst (list x y))
)
)
)
;lst
- ;;WE2函数用于启动绘制二维多段线的命令并通过选取图元提取多段线的顶点并继续绘制
defun c:WE2 (/ s1)
(command "pline")
(while (setq s1 (car (entsel "\n选择图元: ")))
(command "non" (xyp-DXF-PL 10 s1))
)
(command "")
(princ)
- ;这个代码在AutoCAD2018能顺利实施,在中望cad里竟然不能运行。