お知らせ

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

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

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

2010年4月23日金曜日

.NET の勉強 「arxmgd.chm を見ながらオブジェクトの作成」(AutoCAD 2011)

金曜日なので、.NET の勉強です。


先週は、「今後も、どんどん進んでいこうと思います。」 と言っていましたが、ちょっとヘルプの見方とか少しですが分かってきたような気がするので、もう一度復習でオブジェクトの作図についてやってみようと思います。


C:\ObjectARX 2011\docs フォルダにある arxmgd.chm を見ながら、オブジェクトを描くプログラムを作成したいと思います。


まず最初に、こんなコードを書いてみます。

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices

Public Class Class1
     <CommandMethod("DrawObjects")> _
    Public Sub DrawObjects()

        '' Get the current document and database
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database

        '' Start a transaction
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            '' Open the Block table for read
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                                  OpenMode.ForWrite)

            ''線分を作成
            Dim acLine As New Line()

            acBlkTblRec.AppendEntity(acLine)
            acTrans.AddNewlyCreatedDBObject(acLine, True)

            '' Save the new object to the database
            acTrans.Commit()
        End Using
    End Sub
End Class


ここで、線分を作成しているのは、Dim acLine As New Line() になります。
arxmgd.chm の
Autodesk.AutoCAD.DatabaseServices Namespace > Line Class > Line Constructor
にある Line.Line() について以下の記述があります。
Default constructor. Initializes the normal vector to (0,0,1), the start and end points to (0,0,0), and the thickness to 0.0. All coordinates are WCS.
ということで、これを実行すると、始点も終点も 0,0 の線分が作成されます。


また、arxmgd.chm の
Autodesk.AutoCAD.DatabaseServices Namespace > Line Class > Line Properties
を見ると、以下のプロパティがあります。
Angle、Delta、EndPoint、Length、Normal、StartPoint、Thickness
でも、Angle、Delta、Length の Conditions は Read-only と書かれているので、線分を作成するときに EndPoint、Normal、StartPoint、Thickness のプロパティを使えるんだと思います。


そこで、以下のように 4 つのプロパティを指定するよう追記してみました。

Dim acLine As Line = NEW Line()
acLine.StartPoint = New Point3d(50, 50, 0)
acLine.EndPoint = New Point3d(100, 100, 0)
acLine.Normal = New Vector3d(1, 0, 0)
acLine.Thickness = 2


すると、始点が 50,50、終点が 100,100、UCS に依存する押し出し方向が 1,0,0、厚さが 2 の線分が作成されました。

※ Point3d や Vector3d は、Autodesk.AutoCAD.Geometry 名前空間になるので、「Imports Autodesk.AutoCAD.Geometry」 という記述も追加しました。


プロパティには、線分以外のオブジェクトに共通のものがありますよね。例えば、色とか線種とか。
それは、きっと
Autodesk.AutoCAD.DatabaseServices Namespace > Entity Class > Entity Properties
にある内容になるんだと思います。


そこで、以下も追加してみました。

acLine.ColorIndex = 1
acLine.Linetype = "continuous"
acLine.LineWeight = &HD3


すると、赤色で、線種が continuous で、線の太さが 2.11 mm になりました。


では、今度は楕円にチャレンジです。
(Autodesk.AutoCAD.DatabaseServices Namespace > Ellipse Class を見ながらやりました。)


線分と同じような感じで、以下のようにやってみましたが、エラーとなって描けませんでした。

Dim acEllipse As Ellipse = New Ellipse()
acEllipse.StartParam = 0
acEllipse.EndParam = 1
acEllipse.Center = New Point3d(10, 10, 0)
acEllipse.RadiusRatio = 0.5
acEllipse.StartAngle = 0
acEllipse.EndAngle = PI

acBlkTblRec.AppendEntity(acEllipse)
acTrans.AddNewlyCreatedDBObject(acEllipse, True)


何ででしょうね?いろいろ試してみましたが、管理人には何故かわかりませんでした。


そこで、以下のように記述を変えて実行したところ、楕円も作成できました。

Dim acEllipse As Ellipse = New Ellipse(New Point3d(10, 10, 0), Vector3d.ZAxis, New Vector3d(1, 0, 0), 0.5, 0, PI)
acEllipse.StartParam = 0
acEllipse.EndParam = 1
acEllipse.Center = New Point3d(10, 10, 0)
acEllipse.RadiusRatio = 0.5
acEllipse.StartAngle = 0
acEllipse.EndAngle = PI

acBlkTblRec.AppendEntity(acEllipse)
acTrans.AddNewlyCreatedDBObject(acEllipse, True)


※ PI を認識するために、「Imports System.Math」 も追記しました。


以前よりも理解しながらオブジェクトを作れたような気がします。
次回は、今度こそ、先に進んで新しいことにチャレンジしたいと思います。

0 件のコメント:

コメントを投稿