;; 10组码取点
(defun dxf10 (e / s)
(if (setq s
(mapcar 'cdr
(vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget e))
)
)
(if (= 1 (length s)) (car s) s)
)
)
;; 获取闭合范围内一点
(setq p1 (getpoint "\n闭合范围内一点:"))
;; 检查 p1 是否为 nil
(if (not p1)
(progn
(princ "\n操作取消,未指定点。")
(exit)
)
)
;; 获取闭合多段线实体
(setq ent (bpoly p1))
;; 检查 ent 是否为 nil
(if (not ent)
(progn
(princ "\n无法根据指定点生成闭合多段线实体。")
(exit)
)
)
;; 提取点坐标
(setq s (dxf10 ent))
;; 检查 s 是否为 nil
(if (not s)
(progn
(princ "\n未从实体中提取到点坐标。")
(entdel ent)
(exit)
)
)
;; 删除临时实体
(entdel ent)
;; 处理点坐标
(setq s (cons (last s) s))
;; 遍历点坐标进行标注
(while (and s (cdr s)) ; 确保 s 至少有两个元素
(setq p1 (car s)
p2 (cadr s)
)
;; 检查 p1 和 p2 是否有效且不相同
(if (and p1 p2 (not (equal p1 p2 1e-6))) ; 使用 1e-6 作为容差判断两点是否相同
(progn
(setq p3 (polar p2 (+ (* 0.5 pi) (angle p1 p2)) 400))
(vl-cmdf "DIMLINEAR" "non" p1 "non" p2 "non" p3)
)
(princ "\n标注时出现无效点坐标或两点相同,跳过该标注。")
)
(setq s (cdr s))
)
(princ)
)这样就可以了不报错
页:
1
[2]