お知らせ

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

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

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

2010年1月25日月曜日

.NET(基本)(2)(AutoCAD 2010)

サンプル プログラムの解析
では、使用したサンプル プログラムは具体的に何を行っているのか内容を見ていきましょう。


ここであらためてサンプル プログラムは以下のとおりです。
--------------------------------------------------
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Public Class Class1
_
Public Sub AngleFromXAxis()
Dim pt1 As Point2d = New Point2d(2, 5)
Dim pt2 As Point2d = New Point2d(5, 2)

Application.ShowAlertDialog("Angle from XAxis: " & _
pt1.GetVectorTo(pt2).Angle.ToString())
End Sub
End Class

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

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry

まずは、これからですが、これは何なんでしょう?

そこで、Google で Imports について探してみたところ http://msdn.microsoft.com/ja-jp/library/7f38zh8x.aspx にこんな記述がありました。


現在のプロジェクトに定義された、または参照されているプロジェクトとアセンブリに定義された名前空間またはプログラミング要素をインポートします。
なので、AutoCAD の名前空間ってやつを読み込んでいみたいです。

続いて、Autodesk.AutoCAD.ApplicationServices などについて Google で探したところ、ちょっと古い(AutoCAD 2008 のころのもの?)ですが、http://images.autodesk.com/apac_japan_main/files/api_customizetechnic.pdf を見つけました。でも、基本的に AutoCAD 2010 も同じでしょうと勝手に都合のいいように考えることにしました。


この中の 30 ページに、こんな記述を見つけました。



AutoCAD マネージクラスライブラリの名前空間
Autodesk.AutoCAD.GraphicsInterface : ベクトル描画機構関連
Autodesk.AutoCAD.PlottingServices : 印刷サービス関連
Autodesk.AutoCAD.Windows : ユーザインタフェース関連
Autodesk.AutoCAD.EditorInput : 選択、入力等ユーザ対話関連
Autodesk.AutoCAD.Runtime : 例外処理など基本機能関連
Autodesk.AutoCAD.Geometry : 幾何演算関連
Autodesk.AutoCAD.DatabaseServices : グラフィカル、非グラフィカルオブジェクト等図面データベース関連
これからいくと、2 行目、3 行目で「例外処理など基本機能関連」と「幾何演算関連」の名前空間をインポートしてるってことですね。詳しいことはわかりませんが、このサンプル プログラムではこれらの名前空間を読み込んでおく必要があるみたいです。(プログラムに詳しい人からすれば、基本中の基本で、当たり前のことなんでしょうね、きっと。。。)

1 行目の Autodesk.AutoCAD.ApplicationServices についての記述はありませんが、名前から見てきっと必ずいるものなんでしょうね、と勝手に理解することにします。(これ以上考えてもわからないので。。。)
いろいろサンプル ファイルを見てみても、Autodesk.AutoCAD.ApplicationServices と Autodesk.AutoCAD.Runtime は必ずインポートしてるみたいです。



_ AutoCAD .NET デベロッパガイド(acad_mdg.zip)の「AutoCAD .NET API の基礎 > コマンドと AutoLISP 関数の定義 > コマンドの定義」に記述がありました。

コマンドの定義を行っているようです。
AngleFromXAxis というコマンドを新たに作りますよってことです。


Dim pt1 As Point2d = New Point2d(2, 5)
Dim pt2 As Point2d = New Point2d(5, 2)

pt1 と pt2 に 2 次元の座標値を割り当ててるようです。


Application.ShowAlertDialog("Angle from XAxis: " & _
pt1.GetVectorTo(pt2).Angle.ToString())

http://www.autodesk.com/objectarx の「License & Download」から「ObjectARX for AutoCAD 2010 (32-bit and 64-bit)」(ObjectARX_2010_Win_64_and_32Bit.exe)を入手しました。


ObjectARX_2010_Win_64_and_32Bit.exe を実行すると C:\ObjectARX 2010\docs フォルダに arxmgd.chm(ObjectARX for AutoCAD 2010 : Managed Class Reference Guide) というファイルがあって、Application.ShowAlertDialog について以下の記述があったので、きっとこれでしょう。


Shows the alert dialog with the specified message.
※ ここで気がついたのですが、arxmgd.chmで、Autodesk.AutoCAD.ApplicationServices Namespace の下に Application.ShowAlertDialog Method に関する記述があるので、「Imports Autodesk.AutoCAD.ApplicationServices」の記述が必要だったんですね、きっと。

pt1.GetVectorTo(pt2).Angle.ToString() に関しては、きっと、p1 から p2 までのベクトルの角度を文字列にしているみたいです。(まだ理屈をちゃんと理解してませんが、そのうち分かる時が来ると勝手に思ってます。)


なので、pt1 から pt2 方向へのベクトルの角度を文字列にしているみたいです。


pt1 は 2,5、pt2 は 5,2 なので、角度は 315° です。

この AngleFromXAxis コマンドを実行すると、上記のように表示されていますが、この値はラジアンだと思います。(180 × 5.49778714378214 ÷ π = 315 ですね。)

0 件のコメント:

コメントを投稿