お知らせ

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

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

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

2013年5月10日金曜日

線分を作成する前にやっておかなければならないこと(VLISP ActiveX)


おはようございます。

今日は、以下の 3 つの関数についてです。
vlax-get-acad-object
vla-get-ActiveDocument
vla-get-ModelSpace
先日の線分を作成するコードの 2 ~ 4 行目で使っている関数です。

(vl-load-com)
(setq acadObject (vlax-get-acad-object))
(setq acadDocument (vla-get-ActiveDocument acadObject))
(setq mSpace (vla-get-ModelSpace acadDocument))
(setq myLine (vlax-invoke-method mSpace 'AddLine (vlax-3D-point 100.0 100.0 0.0)  (vlax-3D-point 200.0 200.0 0.0)))

まずは、以下の絵を見てみてください。


これは、AutoCAD のオブジェクト モデルっていうものの一部です。
Visual LISP の ActiveX はこんな感じになっているんですね。

で、今回は線分(Line)を作成してるんですが、Line はこの絵の右下にありますよね。

これを作成するには、その上の ModelSpace の情報が必要になります。
今回線分はモデル空間に描くので、モデル空間(ModelSpace)の情報なしに、いきなり線分を描きますよっていうことはできないんです。

それに、ModeslSpace 情報を得るには、その上の Document の情報が必要になります。
また、Document の情報を得るには、その上の Applicationの情報が必要になります。

上からの順番でいうとこうなります。
Application(AutoCAD)
  ↓
Document(図面)
  ↓
ModelSpace(モデル空間)
  ↓
Line

ということで、

  • vlax-get-acad-object で AutoCAD アプリケーション オブジェクトを取得
  • vla-get-ActiveDocument でアクティブなドキュメント(図面ファイル)を取得
  • vla-get-ModelSpace でモデル空間を取得

しているってことです。



これはあんまり難しく考えなくて、線分や円などの図形を作成するときは、必ずこれらをやっておかないといけないっていうように覚えておいてもいいんじゃないかと思います。


ただし、これをやっておくのは 1 回だけで OK です。setq で変数に設定しておけば、後からも使えますからね。

逆に、同じプログラムの中で何回もこれをやるとパフォーマンスが悪くなることがあるようなので注意が必要のようです。


0 件のコメント:

コメントを投稿