Halb10 发表于 2022-7-5 15:05:26

更改DimScale,但使用Tolra

你好
 
我对可变的DimScale和Tolernaces有问题。
 

(defun c:bf (/ Faktor)

(alert " Achtung   Toleranzen werden entfernt")
(initget 7)
(setq Faktor (getreal "\nBemaßungsfaktor: "))
(setvar "dimscale" Faktor)
(setvar "mleaderscale" Faktor)
(princ "\nBemaßung auswählen")
(setq DimObject (ssget "X" '((0 . "DIMENSION,MULTILEADER"))))
(command "._-DimStyle" "_A" DimObject "")
(vl-load-com)
(if (ssget "_x" '((0 . "MULTILEADER")))
   (vlax-for item
             (setq
               ss (vla-get-activeSelectionSet
                  (vla-get-activedocument (Vlax-get-acad-object))
                  )
             )
   (if (eq (vla-get-Stylename item) "M1_T70")
       (vl-catch-all-apply 'vla-put-scalefactor (list item Faktor))
   )
   )
)
)
 
我从另一个论坛得到了这个代码。
此代码用于更改DimScale,但如果我有一个带有公差的标注,则在刷新后它们会消失。
 
我想要的:
 
获得带有公差的尺寸→ 保存公差值
更改尺寸比例
刷新后,将公差放在原来的位置。可能是指暗值。
 
idk它是如何完成的。
 
有人能帮我解决我的问题吗?
 
非常感谢。

Roy_043 发表于 2022-7-5 15:46:52

尝试:
(defun KGA_Conv_Pickset_To_EnameList (ss / i ret)
(if ss
   (repeat (setq i (sslength ss))
   (setq ret (cons (ssname ss (setq i (1- i))) ret))
   )
)
)

; (KGA_List_Divide_2 '(0 1 2 3 4 5 6 7 8 9)) => ((0 1) (2 3) (4 5) (6 7) (8 9))
; (KGA_List_Divide_2 '(0 1 2 3 4 5 6 7 )   => ((0 1) (2 3) (4 5) (6 7))
(defun KGA_List_Divide_2 (lst / ret)
(repeat (/ (length lst) 2)
   (setq ret (cons (list (car lst) (cadr lst)) ret))
   (setq lst (cddr lst))
)
(reverse ret)
)

; The function assumes the "ACAD" Xdata for dimensions only contains "DSTYLE" items.
(defun c:OverrideScale ( / dat doc elst scl ss)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(initget 7)
(if
   (and
   (setq scl (getreal "\nScale: "))
   (setq ss (ssget "_:L" '((0 . "DIMENSION,MULTILEADER"))))
   )
   (foreach enm (KGA_Conv_Pickset_To_EnameList ss)
   (setq elst (entget enm '("ACAD")))
   (if
       (vl-position '(0 . "DIMENSION") elst)
       (progn
         (setq dat
         (append
             '(
               (1000 . "DSTYLE")
               (1002 . "{")
             )
             ; Remove (1000 . "DSTYLE"), (1002 . "{"), (1002 . "}") and existing scale override data:
             (apply
               'append
               (vl-remove-if
               '(lambda (sub) (equal (car sub) '(1070 . 40)))
               (cdr (KGA_List_Divide_2 (cdadr (assoc -3 elst))))
               )
             )
             (list
               '(1070 . 40)
               (cons 1040 scl)
               '(1002 . "}")
             )
         )
         )
         (regapp "ACAD")
         (entmod
         (list
             (cons -1 enm)
             (list -3 (cons "ACAD" dat))
         )
         )
       )
       (vla-put-scalefactor (vlax-ename->vla-object enm) scl)
   )
   )
)
(vla-endundomark doc)
(princ)
)

Halb10 发表于 2022-7-5 16:09:44

真 的!
 
谢谢你,罗伊!
 
非常适合我的需要。
页: [1]
查看完整版本: 更改DimScale,但使用Tolra