拼凑的自动对齐标注
拼凑的自动基线标注;看有没人有心情完善;搞累了;效果不行自动基线标注,貌似全网也没见过; 坐标标注倒是很多;
(defun c:A23 (/ pt ss pts xVals yVals xOffset yOffset)
;; 初始化设置
(setvar "CMDECHO" 0)
(setvar "OSMODE" 439)
(setvar "DIMSCALE" 1)
;; 获取基准点(强制二维)
(if (not (setq pt (getpoint "\n指定基准点: ")))
(exit)
)
(setq pt (list (car pt) (cadr pt)))
;; 选择对象(增强过滤)
(while (not (setq ss (ssget '((0 . "LINE,LWPOLYLINE,SPLINE")))))
(princ "\n请选择直线、多段线或样条曲线!")
)
;; 提取端点(二维优化)
(setq pts (Get2DEndpoints ss pt))
(setq xVals (vl-sort (mapcar 'car pts) '<)
yVals (vl-sort (mapcar 'cadr pts) '<))
;; 设置标注偏移参数
(setq xOffset 20); X方向标注基线偏移量
(setq yOffset 20); Y方向标注基线偏移量
(setq dimGap 8) ; 相邻标注之间的间隔
;; 生成X方向标注(带间隔)
(setq i 0)
(foreach x (vl-remove-if '(lambda (n) (equal n (car pt) 1e-6)) xVals)
(command "_.DIMLINEAR"
"_non" pt
"_non" (list x (cadr pt))
"_non" (polar pt (/ pi 2) (+ yOffset (* i dimGap))))
(setq i (1+ i))
)
;; 生成Y方向标注(带间隔)
(setq i 0)
(foreach y (vl-remove-if '(lambda (n) (equal n (cadr pt) 1e-6)) yVals)
(command "_.DIMLINEAR"
"_non" pt
"_non" (list (car pt) y)
"_non" (polar pt 0 (+ xOffset (* i dimGap))))
(setq i (1+ i))
)
(princ (strcat "\n生成标注: X方向" (itoa (length xVals)) "个, Y方向" (itoa (length yVals)) "个"))
(princ)
)
;; 二维端点提取函数(保持不变)
(defun Get2DEndpoints (ss base / ent pts)
(vl-load-com)
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i))))
(cond
((= (cdr (assoc 0 (entget ent))) "LINE")
(mapcar '(lambda (p) (setq pts (cons (list (car p) (cadr p)) pts)))
(list (cdr (assoc 10 (entget ent))) (cdr (assoc 11 (entget ent)))))
)
((wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
(foreach v (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))
(setq pts (cons (list (cadr v) (caddr v)) pts))
)
)
)
)
;; 去重并排除基准点
(vl-remove-if '(lambda (x) (equal x base 1e-6))
(vl-sort pts '(lambda (a b) (if (equal (car a) (car b) 1e-6)
(< (cadr a) (cadr b))
(< (car a) (car b))))))
)
没懂你这个标什么,怎么不是连续标注,然后上下左右都标 本帖最后由 sunny_8848 于 2025-4-28 20:20 编辑
看起来挺好的,需要消除有些重复尺寸 加油。。。。:handshake 感谢分享 你有种再说一遍 发表于 2025-4-28 17:20
没懂你这个标什么,怎么不是连续标注,然后上下左右都标
没有避让,看起来像是4个方向;实际只有2个方向
页:
[1]