본문 바로가기
autocad

Fix Dimstyle

by kmlab 2026. 10. 21.

revit 에서 Export된 cad는 Layout에 추출됨
Layout을 export layout to model을 실행하면 1:1 로 Model에 저장 됨
도면 스케일에 맞게 확대하면 치수 스타일이 엉망이 되는 문제 발생.
다음은 이러한 dimstyle의 문제를 수정하는 리습임

;;
;;
;;
(defun KM:setDIMST_INI ( / ) 
(setq _dimFont "돋움") ;; 치수 폰트 지정  
(setq _scale 1.0) 
(setq _sclPosition '(770.0 64.0)) ;;coordination(SK titleblock) of the string "A1: 1 / 400" of scale of the drawing  
;;(setq SheetBlockName "*Sheet_YI*") ;; addtional get scale function for the YI project on 20260130
(setq SheetBlockName "*Sheet_*") ;; addtional get scale function for the YI project on 20260130
(setq scl 1.0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setvar "PROXYNOTICE" 0)
(setvar "PROXYSHOW" 0)
(princ)
);defun
;;
;;
(defun KM:VARsDIMSTYLE_INI ( / )
(setvar "DIMSCALE" dscale) ; Set dimscale 
(setvar "DIMEXE" 1.5) ; Lines. Extend beyond dim lines 1.5
(setvar "DIMEXO" 3.0) ; Lines. Offset from origin 3.0  
(setvar "DIMASZ" 1.0) ; Symbols and Arrows. Arrow size 1.0  
(setvar "DIMBLK" "_DOTBLANK") ; Symbols and Arrows. Arrowhead  
(setvar "DIMCLRT" 0) 
(setvar "DIMTXSTY" _dimFont) ; Text. Text style  
(setvar "DIMTXT" dimtxtsize) ; Text. Text Height 2.9  
(setvar "DIMTAD" 1) ; Text. Text placement Vertical Above(1)  
(setvar "DIMGAP" 1.0) ; Text. Offset from dim line 1.0  
(setvar "DIMTIH" 0) ; Text. Aligned with dimension line  
(setvar "DIMTMOVE" 2) ; Fit. Text placement without leader  
(setvar "DIMTIX" 1) ; Fit. Always keep text between ext lines  
(setvar "DIMTOFL" 1) ; Fit. Draw dim line between ext lines  
(setvar "DIMDEC" 0.0) ; Primary Units. Linear dimensions Precision 0.0  
(setvar "DIMLUNIT" 6) ; Primary Units. Windows Desktop(6) 
);defun
;;
;; 
(defun KM:getScl ( / pt1 sclobj);; find scale factor   
(KM:setDIMST_INI)
(command "zoom" "e")  ;; 
(setq sclobj (entget (ssname (ssget _sclPosition) 0) )) ;get entity zero from prop.   
(if
	(setq scl (cdr (assoc 1 sclobj))) ;extract string from prop.  
	(if (setq sclpos (vl-string-search "/" scl))  ; 08.85714,112.48571,116.11429;{1/700} 에서 {1 "/" 위치
		(progn
			(setq scl (substr scl (+ 2 sclpos)))  ; set scl "700}"
;; if scl is mtext "08.85714,112.48571,116.11429;{1/700}" , extract str scale "700"
			(if (eq (cdr (assoc 0 sclobj)) "MTEXT")
				(setq scl (atof (vl-string-subst "" "}" scl)))  ; delete "}"; replace "}" to ""
				(setq scl (atof scl))
			)
		))	
	(progn
		(setq scl (cdr (assoc 41 (entget (ssname (ssget "X" (list (cons 0 "INSERT") (cons 2 SheetBlockName))) 0)))))
;	(setq scl 1.0) ; if scale ("NONE") is 0.0, setq scl is 1.0
	)
)
(if (eq scl 0.0)
	(setq scl 1.0)
)
(print scl)
);defun
;;
;;
(defun KM:df0 ( dimfont );; set font-height to zero ;   
(progn   
(vl-load-com)   
(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))   
(setq StyList (vla-get-TextStyles ActDoc))   
(setq StyObj (vla-Item StyList dimFont))   
(vla-put-Height StyObj 0.0)   
)   
(princ)   
);defun
;;
;;
;; Parse Numbers  -  Lee Mac
;; Parses a list of numerical values from a supplied string.

(defun LM:parsenumbers ( str )
    (   (lambda ( l )
            (read
                (strcat "("
                    (vl-list->string
                        (mapcar
                           '(lambda ( a b c )
                                (if (or (< 47 b 58)
                                        (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                        (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                    )
                                    b 32
                                )
                            )
                            (cons nil l) l (append (cdr l) '(()))
                        )
                    )
                    ")"
                )
            )
        )
        (vl-string->list str)
    )
);defun
;;
;;
(defun KM:fixDIMSTYLE ( / dscale dimdata styleName dts dims )
(KM:setDIMST_INI)
(setq dscale (KM:getScl))
;(setq dimtxtsize 2.5)
(setq dimdata (tblnext "DIMSTYLE" T))
(while dimdata
	(setq styleName (cdr (assoc 2 dimdata)))
	(if (or (= styleName "Standard") (= styleName "Annotative"))
		(setq dimdata (tblnext "DIMSTYLE"))
		(progn
			(command "-dimstyle" "r" styleName)
			(setq _dimFont (getvar "DIMTXSTY"))
			(setq dts (LM:parsenumbers styleName))
			(if (< 1 (length dts))
				(setq dts (+ (abs (car dts)) (* 0.1 (cadr dts))))
				(setq dts (abs (car dts)))
			);if
			(KM:df0 _dimFont)
			(setq dimtxtsize dts)
			(KM:VARsDIMSTYLE_INI)
			(command "-dimstyle" "s" styleName "y")
			(setq dims (ssget "X" (list (cons 0 "DIMENSION") (cons 3 styleName))))
			(command "-dimstyle" "a" dims "")
			(setq dimdata (tblnext "DIMSTYLE"))
		)
	)
)
(princ)
);defun
;;
;;
(defun c:fds ( / )
(KM:fixDIMSTYLE)
(princ)
)
(princ "\n===== Press \"FDS\" to FIX Dimstyle.\n")(princ)
반응형

'autocad' 카테고리의 다른 글

배경색상 레이어 만들기  (0) 2026.10.12
OLE->RGB by LeeMAC  (0) 2026.10.12
기존 dwg 열어서 문자 수정한 후 다른 이름으로 저장  (0) 2026.09.29
OPENING DWG to EDIT  (0) 2026.09.16
ScriptPro  (0) 2026.09.10