AutoLISPをパワーアップさせるVisualLisp (VLISP)では、図形のActiveXの情報をみることができます。
ActiveXでは、DXF図形情報の変更だけでは編集できないプロパティも変更できます。
VLISP関数 vlax-ename->vla-object
VLで始まる関数が、VLISP関数です。
vlax-ename->vla-object は、entsel で得た要素(エンティティ)の名前を、VLISP用の名前に変更する機能があります。
(setq Obj (car (entsel))) (setq VlObj (vlax-ename->vla-object Obj)
これで、VlObjに、VLISP関数で操作できる、図形のVLAオブジェクト名が入りました。
VLISP関数 vlax-dump-object
entget でDXF図形情報を見るように、vlax-dump-objectを使うと、ActiveX 図形情報を見ることができます。
引数は、VLISP用のオブジェクト名です。
vlax-ename->vla-object と vlax-dump-object を組み合わせて、ActiveX の図形情報を表示させるコマンドがこちらです。
(defun c:test-AX (/ Obj VlObj )
(setq Obj (car(entsel)))
(setq VlObj (vlax-ename->vla-object Obj))
(vlax-dump-object VlObj)
)
コマンド名は test-AX です。実行して図形を選択すると、そのActiveX 図形情報がコマンドラインに出てきます。
これは、円を選択した場合の一例です。
Select object: ; IAcadCircle: AutoCAD Circle Interface ; Property values: ; Application (RO) = # ; Area = 314.159 ; Center = (500.0 1000.0 0.0) ; Circumference = 62.8319 ; Diameter = 20.0 ; Document (RO) = # ; EntityTransparency = "ByLayer" ; Handle (RO) = "41C0A" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = # ; Layer = "0" ; Linetype = "ByLayer" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Material = "ByLayer" ; Normal = (0.0 0.0 1.0) ; ObjectID (RO) = 45 ; ObjectName (RO) = "AcDbCircle" ; OwnerID (RO) = 43 ; PlotStyleName = "ByLayer" ; Radius = 10.0 ; Thickness = 0.0 ; TrueColor = # ; Visible = -1 T
DXF図形情報との比較
では、entget で出てくるDXF図形情報と比較してみましょう。
(defun c:test-Ent (/ Obj)
(setq Obj (car(entsel)))
(entget Obj)
)
コマンド名は test-Ent です。実行して図形を選択すると、DXF図形情報が出てきます。
そして、上の例と全く同じ円を選択した情報がこちらです。
((-1 . ) (0 . "CIRCLE") (330 . ) (5 . "41C0A") (100 . "AcDbEntity") (67 . 1) (410 . "01") (8 . "0") (100 . "AcDbCircle") (10 500.0 1000.0 0.0) (40 . 10.0) (210 0.0 0.0 1.0))
比較してみると、ActiveX 図形情報の方が多くのプロパティが表示されますね。
DXF図形情報から情報を得たり内容を変更して図形の編集ができるように、ActiveX図形情報からも図形の情報を得たり内容を変更して図形の編集ができます。
まとめ
- vlax-ename->vla-object で、(car (entsel))で得る図形名をVLISPで扱える図形名に変換できる。
- vlax-dump-object で、ActiveX図形情報を得ることができる。
Comments