Sponsored links

【AutoLISP VLISP】vla-put-xxxx ActiveXで図形を編集

Sponsored links
Visual Lisp
Sponsored links

vla-put-xxxx で、図形のプロパティを変更することができます。

Sponsored links

事前知識

VLISPを使いActiveXという形式で図形のプロパティ情報を得ることができます。
AutoLISPを使って得るDXF図形情報よりも多くの情報をカバーしています。

vla-put-xxxxxx

vla-put は、プロパティを書き換える関数です。xxxx の部分に欲しい情報のプロパティ名を入れます。

関数vlax-dump-objectで図形のプロパティ一覧を確認できます。
以下は選択した (vlax-ename->vla-object (car(entsel))) で得た図形のVLAオブジェクト名から vlax-dump-object でプロパティ一覧を表示させたものです。


(vlax-dump-object 
  (vlax-ename->vla-object 
          (car(entsel))
     )
)

上記をコマンドラインに入力後、図形を選択すると、以下のようなプロパティ一覧がコマンドラインに表示されます。

このプロパティ名をvla-put-xxxxのxxxxの部分に入れれば、図形のプロパティを変更する関数になります。

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

vla-put-layer 図形の画層を変更する

ActiveX図形情報

例えば画層名。

; Layer = "0"

Layer がプロパティ名です。
vla-put-xxxxxにプロパティ名Layer を当てはめて、vla-put-layer が画層を変更する関数になります。

“選択した図形の画層を”Test”に変更する” コードはこうなります。
画層 Test を用意して試して下さい。

  (setq Obj (car(entsel)))
       (setq VlObj (vlax-ename->vla-object Obj))
         (vla-put-layer VlObj "Test")

これで、選択した図形の画層が”Test”に変更されます。

vla-put-center 図形(円)の中心点を変更する

さて、中心点座標のリストはVLISPではバリアントと言われると特殊な形を使わなければならず、中心点として渡す値は(X Y Z)のリストではありません

vlax-3D-point バリアント型の点データを作成

関数 vlax-3D-pointは、VLISP で扱える、バリアント型の点データを作成する関数です。

(vlax-3D-point 1000 500 0)

vlax-3D-point を使って点データを作成してみると、

#<variant 8197 ...>

とバリアント型に変更された値が戻ります。

Jagaimo
Jagaimo

AutoLISPでDXF図形情報を書き換えて図形編集するよりも、VLISPでvla-put-xxxの方がシンプルだし多くの新しいプロパティにも対応しています。

しかし、点座標の場合、バリアント型になり値の中身はまたリストに変換しないと確認できず、常にVLISPの方が良いとも限りません。

 

 

“選択した図形(円)の中心点を、(1000 500 0)に変更する” コードはこうなります。

   (setq Obj (car(entsel)))
       (setq VlObj (vlax-ename->vla-object Obj))
      (vla-put-center VlObj (vlax-3D-point 1000 500 0))

まとめ

  • vla-put-xxxx で、図形のプロパティを得ることができる。
  • xxxx には プロパティ名が入る。
  • 挿入点、中心点など、点座標を指定するときはバリアント型にする必要がある。
  • vlax-3D-point で、バリアント型の点データを作成できる。

関連記事

vla-put-xxxx を使って図形を変更するサンプルコマンドです。

円の半径を変更する例です。

Comments

  1. ひろ より:

    こんにちは。
    いつも拝見させて頂いています。ひろと言います。
    仕事の為、cadで図面を書いています。
    ここ5か月ほど前からautocadLTからIJcadに乗り換えてautolispのプログラム始めました。
    autolispの情報がとても分かりやすくまとめられていて毎日参考にしています。どんどん更新されているのでブログを見るのが楽しみです。ブログ内で紹介してあったVisual Studio Codeはインストールして、プログラマブルキーも購入してコマンドを割り当てて使っています。大変便利です。今後、entmakeやxdataも使って見たいと思っています。調べていますが難しそうです。これからも参考にさせてください。ありがとうございました。

  2. Jagaimo より:

    ひろ様
    コメントありがとうございます。
    ブログを参考にしていただけているとのこと、とても励みになりました。
    これからもよろしくお願いします。