안녕하세요.
질문좀 하겠습니다.
바쁘시겠지만 잠시 시간내어주시면 감사하겠습니다
아래에 리습은 세로좌표 리습입니다.
2가지 기능만 더 추가 되었으면 좋겠는데,
2가지만 추가좀 해주세요.
1. 아래 리습은 표준좌표가 아닌 “usc좌표”로 변경원합니다.
(객체가 원점에 있지 않으면 치수가 “0.000” 부터 시작하지 않고
객체가 위치한 좌표를 표시해 주더라구요.)
2. 치수스케일좀 추가해주세요.
캐드명령어 dimlfac 좀 추가 해주세요.
(아래리습은 물어보지 않은데 물어보게쫌 해주세요)
감사합니다.
;————————————————————————————————–
; 좌표치수(서페이스주문)
;————————————————————————————————–
; 이리습의목적은
;1. 원점좌표일때는“< 0 >” 문자표기를바꾸어준다.
;2. X좌표든Y좌표든연속기입시일직선으로정렬시켜준다.
; 사용방법
;1. 피쳐위치를지정:
;2. 지시선끝점을지정:
;3. 그려진객체의형상을보고가로형인지세로형인지자동판단
;4. 반복작업시가로형은두번째지점의Y값을변경하여일직선으로만들어준다.
; 반복작업시세로형은두번째지점의X값을변경하여일직선으로만들어준다.
; 주의할점
; 최초에기입된기준으로정렬이되게해서
; 명령이종료될때까지같은방향의좌표만기입해야함
; 치수변수를사용자마다다르게적용하여서아래의변수를기억시키고강제로값을변경후
; 리습이종료되면원래값으로복귀시킴
; “DIMTXT” 3 ;<- 문자크기
; “DIMTAD” 0 ;<- 문자위치
; “DIMDEC” 2 ;<- 소수점자릿수
; “DIMZIN” 1 ;<- 소수점이하0을억제
; “DIMTVP” 0 ;<- 치수선위쪽또는아래쪽치수문자의수직위치를조정
; “DIMDSEP” “.” ;<- 소수점구분문자
; 리습작성시참고사항
; 세로좌표치수그룹코드
; 100 하위클래스표식기(AcDbOrdinateDimension)
; 13 선형및각도치수의정의점(WCS) DXF: X 값, APP: 3D 점
; 23, 33 DXF: 선형및각도치수에대한정의점의Y 및Z 값(WCS)
; 14 선형및각도치수의정의점(WCS) DXF: X 값, APP: 3D 점
; 24, 34 DXF: 선형및각도치수에대한정의점의Y 및Z 값(WCS)
; 점(13,23,33)은피쳐위치를지정하며
; 점(14,24,34)은지시선의끝점을지정합니다.
; 점(11,21,31)은치수문자의중간점을지정합니다.
; 점(10,20,30)은치수가작성될때의현재좌표인UCS의원점에배치됩니다.
(defunc:cDm(/pt1ent1valptHVent2pt14newValxDisyDis)
(vl-load-com)
(setqAcObj(vlax-get-acad-object))
(setqAcDoc(vla-get-ActiveDocumentAcObj))
;————————————————————————————————–
(defun*ERROR*(st)(princ“n error: “)(MrEND)(princ))
(defunMrSTA()
(setqgVar
(mapcar‘getvar
(setqgVarLst
‘(“OSMODE”“CMDECHO”“CLAYER”
“DIMTXT”“DIMTAD”“DIMDEC”“DIMZIN”“DIMTVP”“DIMDSEP”)
)
)
)
(mapcar‘setvargVarLst‘(00“0”30210“.”))(vla-startundomarkAcDoc)
)
(defunMrEND()(mapcar‘setvargVarLstgVar)(vla-endundomarkAcDoc))
(defunsubEnameObjLst(ss)
(mapcar‘vlax-ename->vla-object
(vl-remove-if‘listp(mapcar‘cadr(ssnamexss)))
)
)
(defunsubOrgPt(ptent)
(if(equalpt‘(0.00.00.0)0.001)
(entmod(subst(cons1“< <> >”)(assoc1(entgetent))(entgetent)))
)
)
(defunsubDimordinate(ptent1/ent2)
(setvar“osmode”161);끝점1,교점32,직각점128
(command“_dimordinate”ptpause)
(setvar“osmode”0)
(setqent2(entlast))
(if(eqent1ent2)nilent2)
)
;————————————————————————————————–
(MrSTA)
(if(and
(setvar“osmode”33);끝점1,교점32
(setqpt1(getpoint“n피쳐위치를지정: “))
)
(progn
(princ“n 지시선끝점을지정: “)
(setvar“osmode”161);끝점1,교점32,직각점128
(command“_dimordinate”pt1pause)
(setvar“osmode”0)
(setqent1(entlast))
(setqval(cdr(assoc42(entgetent1))))
(setqpt(cdr(assoc14(entgetent1))))
(if(and;두개의값이같으면
(equalval(carpt1)0.01)
(equalval(cadrpt1)0.01)
)
(progn;같을때
(setqxDis(–(carpt)(carnewPt)))
(setqyDis(–(cadrpt)(cadrnewPt)))
(if(>xDisyDis)(setqnewValT)(setqnewValnil))
)
;같지않을때
(if(equalval(carpt1)0.01)(setqnewValT)(setqnewValnil))
)
(subOrgPtpt1ent1)
(whilept1
(if(and
(setvar“osmode”33);끝점1,교점32
(setqpt1(getpoint“n피쳐위치를지정: “))
(setvar“osmode”0)
(setqent2(subDimordinatept1ent1))
)
(progn
(setqpt14(cdr(assoc14(entgetent2))))
(ifnewVal
(entmod(subst(cons14(list(carpt14)(cadrpt)0.0))(assoc14(entgetent2))(entgetent2)))
(entmod(subst(cons14(list(carpt)(cadrpt14)0.0))(assoc14(entgetent2))(entgetent2)))
)
(subOrgPtpt1ent2)
)
(setqpt1nil)
)
(setqent1ent2)
)
)
)
(MrEND)(princ)
)