AutoCAD 2010에서 테스트해봤습니다. (vl-load-com) (setq *acad* (vlax-get-acad-object)) ; <= 응용 객체를 얻기위한 함수 로딩 (setq doc (vla-get-activedocument *acad*)); <= 객체이름 응답 (setq dic (vla-get-dictionaries doc)) ; <= 객체이름 응답 , Count (RO) = 12 <= 확인(의미는 모르지만) (setq tmplist nil) (vlax-for obj dic (setq tmplist (cons obj tmplist)) ) ; 실행한후 _$ (vla-get-name (nth 0 tmplist)) ; <= 응답 ;0일때 "AcDbVariableDictionary" ;1일때 "ACAD_VISUALSTYLE" ;2일때 "ACAD_TABLESTYLE" ;3일때 "ACAD_SCALELIST" ;4일때 "ACAD_PLOTSTYLENAME" ;5일때 Error: ActiveX Server에서 오류를 반환함: 알 수 없는 이름: Name ;6일때 "ACAD_MLINESTYLE" ;7일때 "ACAD_MLEADERSTYLE" ;8일때 Error: ActiveX Server에서 오류를 반환함: 알 수 없는 이름: Name ;9일때 Error: ActiveX Server에서 오류를 반환함: 알 수 없는 이름: Name ;10일때 Error: ActiveX Server에서 오류를 반환함: 알 수 없는 이름: Name ;11일때 "ACAD_COLOR" 질문1) 5 8 9 10에서 에러가 왜 나는지 모르겠습니다.
_$ (setq mstyle (nth 7 tmplist)) #<VLA-OBJECT IAcadDictionary 0c9e6754> _$ (vlax-dump-object mstyle t) ; <= 응답 ; IAcadDictionary: 객체 저장하기 및 회수하기에 대한 컨테이너 객체 ; 특성 값: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d591b4> ; Count (RO) = 3 ; Document (RO) = #<VLA-OBJECT IAcadDocument 014c8d40> ; Handle (RO) = "D7" ; HasExtensionDictionary (RO) = 0 ; Name = "ACAD_MLEADERSTYLE" ; ObjectID (RO) = 2129219704 ; ObjectName (RO) = "AcDbDictionary" ; OwnerID (RO) = 2129214560 ; 지원되는 메써드: ; AddObject (2) ; AddXRecord (1) ; Delete () ; GetExtensionDictionary () ; GetName (1) ; GetObject (1) ; GetXData (3) ; Item (1) ; Remove (1) ; Rename (2) ; Replace (2) ; SetXData (2) 지원되는 메써드: AddObject (2) ;<= 확인함 (setq obj (vlax-invoke mstyle 'addobject "aaaaa" "AcDbMLeaderStyle")) 실행후 캐드에서 확인해보니 새로운 aaaaa의 다중지시선 유형이 생겨났네요^^
여기까지 매우만족^^
(vlax-dump-object obj t) ; IAcadMLeaderStyle: AutoCAD MLeaderStyle 인터페이스 ; 특성 값: ; AlignSpace = 5.0 ; Annotative = 0 ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d591b4> ; ArrowSize = 0.18 ; ArrowSymbol = "" ; BitFlags = 0 ; Block = "" ; BlockColor = #<VLA-OBJECT IAcadAcCmColor 0cccd400> ; BlockConnectionType = 0 ; BlockRotation = 0.0 ; BlockScale = 1.0 ; BreakSize = 0.125 ; ContentType = 2 ; Description = "" ; Document (RO) = #<VLA-OBJECT IAcadDocument 014c8d40> ; DoglegLength = 2.0 ; DrawLeaderOrderType = 0 ; DrawMLeaderOrderType = 1 ; EnableBlockRotation = -1 ; EnableBlockScale = -1 ; EnableDogleg = -1 ; EnableFrameText = 0 ; EnableLanding = -1 ; FirstSegmentAngleConstraint = 0 ; Handle (RO) = "183" ; HasExtensionDictionary (RO) = 0 ; LandingGap = 0.4 ; LeaderLineColor = #<VLA-OBJECT IAcadAcCmColor 0cccdd60> ; LeaderLinetype = 1 ; LeaderLineTypeId = AutoCAD.Application: NULL 객체 ID입니다. ; LeaderLineWeight = -2 ; MaxLeaderSegmentsPoints = 2 ; Name = "aaaaa" ; ObjectID (RO) = 2129220760 ; ObjectName (RO) = "AcDbMLeaderStyle" ; OverwritePropChanged (RO) = 0 ; OwnerID (RO) = 2129219704 ; ScaleFactor = 1.0 ; SecondSegmentAngleConstraint = 0 ; TextAlignmentType = 0 ; TextAngleType = 0 ; TextAttachmentDirection = 0 ; TextBottomAttachmentType = 0 ; TextColor = #<VLA-OBJECT IAcadAcCmColor 0cccc1d0> ; TextHeight = 0.2 ; TextLeftAttachmentType = 2 ; TextRightAttachmentType = 3 ; TextString = "" ; TextStyle = AutoCAD.Application: NULL 객체 ID입니다. ; TextTopAttachmentType = 0 ; 지원되는 메써드: ; Delete () ; GetExtensionDictionary () ; GetXData (3) ; SetXData (2) T 이제 이제 위의 값들은 바꾸려고 하는데.. "=" <= 니콜 뒤에 값들만 변경시키면 될거 같은데... 질문2) 아래에 나열한 직접 바꾸지 못하는것들에 대해서는 어떻해 해야 바꿀수 있는지요? BlockColor Document (RO) LeaderLineColor LeaderLineTypeId TextColor TextStyle
질문3) 아래 함수들에 대해서 강의좀 부탁드릴께요..캐도리님이 설명해 주시면서 쓰여진 함수가 5개 인데 각 기능들에 대해서 설명좀 부탁하구여..이것 말고도 자주 쓰여지는 함수가 있다면 어떤것들이 있는지...그리고 그 기능들은 어떨때 쓰여지는지 알고싶어요^^ (vla-get ... ) <= 어떤 값을 읽어와라 같으고.. (vla-put ... ) <= 어떤 값으로 바꾸어라 같으고.. (vlax-invoke ...) <= 이건 전혀 모르겠구요 위 3가지는 그 동안 알지는 못하지만 많이 본 함수들이고 (vlax-dump-object xxx t) <= 특성 및 메써드 확인하는거 같고 (vlax-for ... ...) <= 이건 처음보는 함수구여
(setq tmplist nil) (vlax-for obj dic
(setq tmplist (cons obj tmplist))
) 제가 ActiveX 함수를 어떻해 리습으로 적용하는지 방식을 몰라서 서점도 가보고 인터넷 검색도 많이 해봤지만 리습처럼 체계적으로 설명나온것을 본적이 없어서..아직까지 ActiveX를 적용 못하고 있습니다. 캐도리님의 강의가 달수뿐만 아니라 카페회원중 ActiveX에 관심있는분들에게 많은 도움이 될거 같습니다. 많은 가르침 부탁드립니다.