お知らせ

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

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

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

2013年5月31日金曜日

モデル空間にある特定のオブジェクト名に対して処理を行う(VLISP ActiveX)


おはようございます。

前回は、モデル空間にあるすべてのオブジェクトに対して処理を行う方法を紹介しました。

でも実際にプログラムを作るときは、特定のものだけに対して処理を行いたいっていうときの方が多そうですよね。


そこで、今日はモデル空間にある特定のオブジェクト名に対して処理を行う方法を紹介しようと思います。


ここで言っているオブジェクト名っていうのは、線分、円、円弧、ポリライン、ハッチング、寸法とかいったもののことです。


そんなときに便利なのが vla-get-objectname です。
vla-get-objectname の引数にオブジェクト名を取得したいオブジェクトを指定すると、そのオブジェクト名が戻り値になります。


例えば、モデル空間にある円(AcDbCircle)だけ色を赤に変えたいときは、前回使用した vlax-for 関数も使用してこんな感じになります。

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

(setq mSpace (vla-get-ModelSpace acadDocument))

(vlax-for vlaobj mSpace
  (if (= "AcDbCircle" (vla-get-objectname vlaobj))
    (vla-put-Color vlaobj acRed)
  )
)


vla-get-objectname でオブジェクト名を取得して、それが AcDbCircle(円) だったら vla-put-Color で色を赤色に変えています。


円のオブジェクト名は AcDbCircle ってことですね。


でも、これってどうやって知ったらいいんでしょう???


線分や円弧などのオブジェクト名は何になるの???ってことになりますよね。


そんなときも vla-get-objectname を使って知ることができます。(vla-get-objectname の戻り値がオブジェクト名なので)

具体的にはこんな感じです。

(setq ename (car (entsel)))
(setq vlaobj (vlax-ename->vla-object ename))
(alert (vla-get-objectname vlaobj))


オブジェクトを選択するよう求められるので、オブジェクトを選択するとそのオブジェクト名が表示されます。

これでいろんなオブジェクトに対して、個別にいろんな処理ができるようになりますね(^^)v


0 件のコメント:

コメントを投稿