标注对齐
本帖最后由 KO你 于 2025-7-11 15:53 编辑原帖狼版的标注对齐http://bbs.mjtd.com/thread-75401-1-1.html
优化了支持不同角度对齐
快捷键ddg标注对齐
(defun c:ddg (/ *acad* *doc* ang base_ent base_p10 base_p14 base_vec def_vec ent i name nv p0 p00 ss tol u unit_norm v)
(vl-load-com)
(setq *acad* (vlax-get-acad-object))
(setq *doc* (vla-get-ActiveDocument *acad*))
(setvar "cmdecho" 0)
(setq tol 1e-6)
(defun vec-mod (vec)
(sqrt (apply '+ (mapcar '(lambda (x) (* x x)) vec))))
(defun get-unit-normal-vector (vec / len)
(setq len (vec-mod vec))
(if (> len tol)
(list (- (/ (cadr vec) len)) (/ (car vec) len) 0.0)))
(defun parallel-p (vec1 vec2 tol)
(setq cross (- (* (car vec1) (cadr vec2)) (* (car vec2) (cadr vec1))))
(< (abs cross) tol))
(defun project-point (pt base unit-norm)
(setq vx (- (car pt) (car base))vy (- (cadr pt) (cadr base)))
(setq proj (+ (* vx (car unit-norm)) (* vy (cadr unit-norm))))
(list
(+ (car base) (* proj (car unit-norm)))
(+ (cadr base) (* proj (cadr unit-norm)))))
(if (setq ss (ssget '((0 . "DIMENSION"))))
(progn
(if (> (sslength ss) 0)
(progn
(setq base_ent (entget (ssname ss 0))
base_p10 (cdr (assoc 10 base_ent))
base_p14 (cdr (assoc 14 base_ent))
base_vec (mapcar '- base_p14 base_p10))
(setq unit_norm (get-unit-normal-vector base_vec))
(if (not unit_norm)
(progn
(alert "基准标注方向向量长度为零!")
(exit)))))
(if (setq p0 (getpoint "\n指定标注尺寸线位置, 右键或空格跳过<不改变>: "))
(repeat (setq i (sslength ss))
(setq ent (entget (setq name (ssname ss (setq i (1- i)))))
def_vec (mapcar '- (cdr (assoc 14 ent)) (cdr (assoc 10 ent))))
(if (parallel-p base_vec def_vec tol)
(progn
(setq np10 (project-point (cdr (assoc 10 ent)) p0 unit_norm)
np11 (project-point (cdr (assoc 11 ent)) p0 unit_norm))
(entmod
(subst (cons 10 np10) (assoc 10 ent)
(subst (cons 11 np11) (assoc 11 ent) ent))))
(princ (strcat "\n跳过角度不匹配的标注: " (cdr (assoc 1 ent)))))))
(if (setq p00 (getpoint "\n指定标注尺寸界线位置, 右键或空格跳过<不改变>: "))
(repeat (setq i (sslength ss))
(setq ent (entget (setq name (ssname ss (setq i (1- i)))))
def_vec (mapcar '- (cdr (assoc 14 ent)) (cdr (assoc 10 ent))))
(if (parallel-p base_vec def_vec tol)
(progn
(setq np13 (project-point (cdr (assoc 13 ent)) p00 unit_norm)
np14 (project-point (cdr (assoc 14 ent)) p00 unit_norm))
(entmod
(subst (cons 13 np13) (assoc 13 ent)
(subst (cons 14 np14) (assoc 14 ent) ent)))))))))
(princ))
(princ)
你这是拿AI的代码训练大佬呢。自己都不先钻研尝试一下。 kozmosovia 发表于 2025-5-5 21:28
你这是拿AI的代码训练大佬呢。自己都不先钻研尝试一下。
风趣幽默的 :lol感谢大佬的分享 kozmosovia 发表于 2025-5-5 21:28
你这是拿AI的代码训练大佬呢。自己都不先钻研尝试一下。
正确的中肯的一阵见血的 就拿这个考验老干部? 哪里有问题就继续问 是在不行就换个思路重新开始 合并标注需要这么复杂吗?
页:
[1]