お知らせ

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

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

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

2010年5月27日木曜日

.NET の勉強 「画層状態を保存するサンプル」(AutoCAD 2011)

acad_mdg.chm「AutoCAD .NET デベロッパ ガイド」のサンプルに画層状態を保存するものがあったので試してみました。

サンプルにあったコードはこんな内容です。
<CommandMethod("RestoreLayerState")> _
Public Sub RestoreLayerState()
'' Get the current document
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

Dim acLyrStMan As LayerStateManager
acLyrStMan = acDoc.Database.LayerStateManager

Dim sLyrStName As String = "ColorLinetype"

If acLyrStMan.HasLayerState(sLyrStName) = True Then
acLyrStMan.RestoreLayerState(sLyrStName, _
ObjectId.Null, _
1, _
LayerStateMasks.Color + _
LayerStateMasks.LineType)
End If
End Sub

保存するのは、色と線種だけみたいなので、その他の設定も保存するように変更してみました。

また、既に同じ名前の画層状態があったら、何もしてくれないので、既に同じ名前の画層状態があったら、削除して作りなおすようにしてみました。

それと、Try~Catch も入れてみました。こんな使い方でいいのかなぁ…

変更後のコードはこんな感じです。

        ' 画層状態の保存のサンプル(acad_mdg.chm「AutoCAD .NET デベロッパ ガイド」のサンプルを元に作成)
        <CommandMethod("ACVD_Blog", "_ACVD_CreateLayerState", "ACVD_CreateLayerState", CommandFlags.Modal)> _
        Public Sub ACVD_CreateLayerState()
            '' Get the current document
            Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

            Dim acLyrStMan As LayerStateManager
            acLyrStMan = acDoc.Database.LayerStateManager

            Dim sLyrStName As String = "ACVD_LayerState"

            Try
                ' もし、既に同じ名前の画層状態があったら削除する
                If acLyrStMan.HasLayerState(sLyrStName) = True Then
                    acLyrStMan.DeleteLayerState(sLyrStName)
                End If

                ' 画層状態を保存する
                acLyrStMan.SaveLayerState(sLyrStName, _
                                          LayerStateMasks.On + _
                                          LayerStateMasks.Frozen + _
                                          LayerStateMasks.Locked + _
                                          LayerStateMasks.Plot + _
                                          LayerStateMasks.Color + _
                                          LayerStateMasks.LineType + _
                                          LayerStateMasks.LineWeight + _
                                          LayerStateMasks.Transparency + _
                                          LayerStateMasks.PlotStyle + _
                                          LayerStateMasks.NewViewport, _
                                          ObjectId.Null)
            Catch ex As Autodesk.AutoCAD.Runtime.Exception
                MsgBox(ex.ToString)
            End Try
          
        End Sub


これで試してみたら、一応ちゃんと動きました。
ビルドした DLL ファイルは こちら です。

NETLOAD コマンドで ACAD Video Blog.dll をロードして、ACVD_CreateLayerState コマンドを実行すると、現在の画層状態が ACVD_LayerState という名前で保存されます。

0 件のコメント:

コメントを投稿