15062311027 发表于 2023-5-19 09:23:57

请教下标注全局比例怎么同步更新?

本帖最后由 15062311027 于 2023-5-19 09:30 编辑

原贴出处:http://bbs.mjtd.com/forum.php?mo ... %FD&_dsign=3ce0c766

该帖子中动态修改标注动态比例,经原作者修改后,原来的标注样式的界面中全局比例已经同步变化了,但其他已经标注好的标注不同步更新,请教下怎么修改可以同步更新该样式的所有已标注全局比例?
原插件:

xj6019 发表于 2023-5-19 09:23:58

;;
;;动态比例   by 明经通道QQ9034598
;;
(defun c:NM(/ crel cret dxf h lle llt mouse obj objset pt pt2 pt3 sc1 sc2 sname txt xent)
        (defun creT()(entmake (list '(0 . "TEXT") (cons 1 "1") (list 10 0 0 0) (cons 40 1))))
        (defun creL(p1 p2)(entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2))))
        (setvar "cmdecho" 0)
        (setq xent (entsel "\n请选择标注对象:"))
        (if (and xent (= (cdr (assoc 0 (entget (car xent)))) "DIMENSION"))
                (progn
                        (setq obj (vlax-ename->vla-object (car xent))
                                pt (cadr xent))
                        (setq sc1 (vla-get-ScaleFactor obj)
                                sname (vla-get-StyleName obj))
                        (creL pt pt)
                        (setq LLe (entget (entlast)))
                        (creT)
                        (setq LLt (entget (entlast)))
                        (while (or (= (car (setq mouse (grread t 5 0))) 5)(= (car mouse) 2))
                                (setq pt2 (cadr mouse)
                                        h (* 0.02 (getvar "VIEWSIZE"))
                                        sc2 (* sc1 (/ (distance pt pt2) h) 0.1)
                                        txt (strcat "全局比例=" (rtos sc2 2))
                                        pt3 (polar pt2 (* -0.45 pi) (* 1.5 h)))
                                (foreach x (list (cons 1 txt)(cons 10 pt3)(cons 40 h))
                                        (setq LLt (subst x (assoc (car x) LLt) LLt)))
                                (entmod LLt)
                                (entmod (subst (cons 11 pt2)(assoc 11 LLe) LLe))
                                (if (null (equal sc2 0 1e-6)) (vla-put-ScaleFactor obj sc2))                               
                        )
                        (setvar "DIMSCALE" sc2)
                        (setq objset (ssget "X" '((0 . "DIMENSION"))))
                        (command "dimedit" "h" objset "")
                        (vl-cmdf "-dimstyle" "a" objset"")
                        (setq dxf (entget (tblobjname "dimstyle" sname)))
                        (entmod (subst (cons 40 sc2)(assoc 40 dxf) dxf))
                        (command "-DIMSTYLE" "R" sname)
                        (entdel (cdr (assoc -1 LLE)))
                        (entdel (cdr (assoc -1 LLT)))
                )
        )       
        (setvar "cmdecho" 1)
        (princ)
)


15062311027 发表于 2023-5-19 11:03:06

xj6019 发表于 2023-5-19 09:23
;;
;;动态比例   by 明经通道QQ9034598
;;


谢谢援手!!!

15062311027 发表于 2023-5-21 08:52:26

xj6019 发表于 2023-5-19 09:23
;;
;;动态比例   by 明经通道QQ9034598
;;


你好 虽然现在可以把已经标注的同步更新过来但是重新标注的还是没有同步变?麻烦你有空再修改下哈

15062311027 发表于 2023-5-21 09:04:12

xj6019 发表于 2023-5-19 09:23
;;
;;动态比例   by 明经通道QQ9034598
;;


好像不是插件的问题 原先的插件可以把标注样式里的全局比例同步改了 现在我试了之前的插件 竟然也没有同步改掉了 不知道咋回事

xj6019 发表于 2023-5-21 09:22:48

15062311027 发表于 2023-5-21 08:52
你好 虽然现在可以把已经标注的同步更新过来但是重新标注的还是没有同步变?麻烦你有空再修改下哈

这样试试

(defun c:NM(/ crel cret dxf h lle llt mouse obj objset pt pt2 pt3 sc1 sc2 sname txt xent)
        (defun creT()(entmake (list '(0 . "TEXT") (cons 1 "1") (list 10 0 0 0) (cons 40 1))))
        (defun creL(p1 p2)(entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2))))
        (setvar "cmdecho" 0)
        (setq xent (entsel "\n请选择标注对象:"))
        (if (and xent (= (cdr (assoc 0 (entget (car xent)))) "DIMENSION"))
                (progn
                        (setq obj (vlax-ename->vla-object (car xent))
                                pt (cadr xent))
                        (setq sc1 (vla-get-ScaleFactor obj)
                                sname (vla-get-StyleName obj))
                        (creL pt pt)
                        (setq LLe (entget (entlast)))
                        (creT)
                        (setq LLt (entget (entlast)))
                        (while (or (= (car (setq mouse (grread t 5 0))) 5)(= (car mouse) 2))
                                (setq pt2 (cadr mouse)
                                        h (* 0.02 (getvar "VIEWSIZE"))
                                        sc2 (* sc1 (/ (distance pt pt2) h) 0.1)
                                        txt (strcat "全局比例=" (rtos sc2 2))
                                        pt3 (polar pt2 (* -0.45 pi) (* 1.5 h)))
                               
                                (foreach x (list (cons 1 txt)(cons 10 pt3)(cons 40 h))
                                        (setq LLt (subst x (assoc (car x) LLt) LLt)))
                                (entmod LLt)
                                (entmod (subst (cons 11 pt2)(assoc 11 LLe) LLe))
                                (if (null (equal sc2 0 1e-6)) (vla-put-ScaleFactor obj sc2))                              
                        )
                        (setvar "DIMSCALE" sc2)
                        (setq objset (ssget "X" '((0 . "DIMENSION"))))
                        (command "dimedit" "h" objset "")
                        (vl-cmdf "-dimstyle" "a" objset"")
                        (setq dxf (entget (tblobjname "dimstyle" sname)))
                        (entmod (subst (cons 40 sc2)(assoc 40 dxf) dxf))
                        (command "-DIMSTYLE" "R" sname)
                        (entdel (cdr (assoc -1 LLE)))
                        (entdel (cdr (assoc -1 LLT)))
                )
        )      
        (setvar "DIMSCALE" sc2)       
        (setvar "cmdecho" 1)
        (princ)
)

15062311027 发表于 2023-5-21 09:22:55

xj6019 发表于 2023-5-19 09:23
;;
;;动态比例   by 明经通道QQ9034598
;;


你好 测试了下 现在是必须自己在标注样式界面手动修改一下全局比例 接下来再使用插件才会同步修改全部比例 这个是哪里设置有问题么?

15062311027 发表于 2023-5-21 09:25:34

xj6019 发表于 2023-5-21 09:22
这样试试

(defun c:NM(/ crel cret dxf h lle llt mouse obj objset pt pt2 pt3 sc1 sc2 sname txt xe ...

厉害 可以了 谢谢哈

atone 发表于 2024-2-14 18:10:57

非常厉害,AutoCAD2023测试通过

shirker 发表于 2024-2-17 12:47:00

收藏了,谢谢大师分享
页: [1] 2
查看完整版本: 请教下标注全局比例怎么同步更新?