お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2013年5月24日金曜日

画層情報の取得(VLISP ActiveX)


おはようございます。

前回までは 線分 や 円 を作成したり、そのプロパティを取得したり変更したりといったことをやってきました。

今日は、画層について見ていこうと思います。


以前お話した 『オブジェクト モデル』 って覚えてます?
こんな絵のことです。


今回は、画層なので Layer です。
で、Layer に行くには、Application → Document → Layers → Layer という流れになってます。

Document までは線分などのときと同じなのでこんな感じになりますよね。


(vl-load-com)
(setq acadObject (vlax-get-acad-object))
(setq acadDocument (vla-get-ActiveDocument acadObject))


で、次は Layers になります。
そこで、Visual Lisp エディタで vla-get-Layers と入力して  ボタンをクリックすると、Layers プロパティのヘルプを確認できます。


引数は object のひとつだということが分かりますよね。(object.Layers のようにメソッドの前にあるもの(この場合は object)が vla- で始まる関数の最初の引数になるって話は覚えてます?)

なので、以下のようにすればドキュメントの Layers コレクションを取得することができます。

(setq layColl (vla-get-Layers acadDocument))


これで Layers コレクションを取得できたのですが、Layers コレクションってなんでしょう???

これは、文字通り画層(Layer)を集めたものです。
で、この画層を集めたものからそれぞれの画層を取得するってことになります。


このように何かの集まりの中の個別のオブジェクトに対して処理を行いたいときに便利な関数が用意されています。

それは、vlax-for という関数です。
ヘルプにの記述はこうなってます。
最初の引数 symbol はコレクションの中にある各シンボル(今回は画層)を取り出して割り当てる変数名を指定します。

2 番目の引数 collection はコレクション(今回は Layers コレクション)を指定します。

そのあとはやりたいことを書いていくだけです。(for 文なので、コレクションから取り出したそれぞれのシンボルに対して実行してくれます。)


なので、こんな感じにすれば現在の図面に含まれる画層をコマンド ラインに表示させることができます。


(vlax-for la layColl
  (princ (strcat "\n" (vla-get-Name la)))
)



今日の内容をまとめるとこうなります。


(vl-load-com)
(setq acadObject (vlax-get-acad-object))
(setq acadDocument (vla-get-ActiveDocument acadObject))

(setq layColl (vla-get-Layers acadDocument))

(vlax-for la layColl
  (princ (strcat "\n" (vla-get-Name la)))
)



これで、画層に対してもいろんなことができますね(^_-)-☆

0 件のコメント:

コメントを投稿