stoyer 发表于 2025-2-11 14:29:13

所有建筑标注样式缩小1000倍

应朋友要求解决建筑图纸以毫米表示,但朋友在使用建筑图纸都需要缩小1000倍后来做图,一但炸开缩小1000的建筑块,就是满屏标注的问题。

写得不好,效应能用。
(defun c:rDimMeter ( / dimstlst)
(setvar 'cmdecho 0)
(setq dimstlst (get-dimstyles)) ;标注样式名集
(while dimstlst
    (rDimstl (car dimstlst))
    (setq dimstlst (cdr dimstlst))
)
(princ "\n 已将所有文字高度大于100的标注样式缩小了1000倍")
(princ)
)
(defun get-dimstyles ( / dimsts dimst1 dimstname)
(if (null vlax-dump-object) (vl-load-com) )
(setq dimsts (vla-get-dimstyles (vla-get-activedocument (vlax-get-acad-object))))
(setq dimst1 '())
(vlax-for dimstname dimsts
    (setq dimst1 (cons (vla-get-name dimstname) dimst1))
)
(reverse dimst1)
)
(defun rDimstl (dimstyleName / )
(SetDimStyle dimstyleName)
(if (> (getvar 'dimtxt) 100)
    (progn
      (setvar 'dimasz (/ (getvar 'dimasz) 1000)) ;箭头大小=2.5
      (setvar 'dimexe (/ (getvar 'dimexe) 1000)) ; 超出尺寸线=1.25
      (setvar 'dimexo (/ (getvar 'dimexo) 1000)) ;起点偏移量
      (setvar 'dimgap (/ (getvar 'dimgap) 1000)) ;从尺寸线偏移=0.625
      (setvar 'dimtxt (/ (getvar 'dimtxt) 1000)) ;;;;文字高度
      (if (> (getvar 'dimdl1) 1.0)
      (setvar 'dimdl1 (/ (getvar 'dimdl1) 1000)) ;;基线间距
      )
      (if (> (getvar 'dimcen) 1.0)
      (setvar 'dimcen (/ (getvar 'dimcen) 1000)) ;;圆心标记大小
      )
      (vl-cmdf "dimstyle" "S" dimstyleName "y")
))
)
(defun SetDimStyle (dimstlname / AcadObject AcadDocument mSpace dimStyleSel newDimStyle)
(setq AcadObject (vlax-get-acad-object)
      AcadDocument (vla-get-ActiveDocument AcadObject)
      mSpace (vla-get-ModelSpace AcadDocument)
)
(setq dimStyleSel (vla-get-DimStyles AcadDocument))
(setq newDimStyle (vla-add dimStyleSel dimstlname))
(vla-put-ActiveDimStyle AcadDocument newDimStyle)
)
页: [1]
查看完整版本: 所有建筑标注样式缩小1000倍