お知らせ

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

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

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

2010年5月28日金曜日

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

なんか最近 .NET が続いてますが、覚え始めでおもしろくて、ちょっとはまってきたかも。
ということで、今日も .NET です。


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

で、昨日つくったやつでは、ACVD_LayerState っていう画層状態に保存するようにしたので、ACVD_LayerState があれば、その状態を復元するように変更してみました。

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

        ' ACVD_LayerState という画層状態が存在すれば、それを復元するサンプル(acad_mdg.chm「AutoCAD .NET デベロッパ ガイド」のサンプルを元に作成)
        <CommandMethod("ACVD_Blog", "_ACVD_RestoreLayerState", "ACVD_RestoreLayerState", CommandFlags.Modal)> _
        Public Sub ACVD_RestoreLayerState()
            '' Get the current document
            Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
            Dim ed As Editor = acDoc.Editor

            Dim acLyrStMan As LayerStateManager
            acLyrStMan = acDoc.Database.LayerStateManager

            Dim sLyrStName As String = "ACVD_LayerState"

            Try
                If acLyrStMan.HasLayerState(sLyrStName) = True Then

                    ' 本当に画層状態を復元するかどうかの確認を求める
                    Dim pr As PromptResult
                    Dim pko As PromptKeywordOptions = New PromptKeywordOptions("")
                    pko.Message = vbLf & "画層状態を復元しますか?"
                    pko.Keywords.Add("Yes", "Yes", "はい(Y)")
                    pko.Keywords.Add("No", "No", "いいえ(N)")
                    pko.AllowNone = False
                    pr = ed.GetKeywords(pko)
                    If pr.Status <> PromptStatus.OK Then
                        Return
                    End If

                    ' 画層状態の復元
                    If pr.StringResult.ToString = "Yes" Then
                        acLyrStMan.RestoreLayerState(sLyrStName, _
                                                     ObjectId.Null, _
                                                     1, _
                                                     LayerStateMasks.On + _
                                                     LayerStateMasks.Frozen + _
                                                     LayerStateMasks.Locked + _
                                                     LayerStateMasks.Plot + _
                                                     LayerStateMasks.Color + _
                                                     LayerStateMasks.LineType + _
                                                     LayerStateMasks.LineWeight + _
                                                     LayerStateMasks.Transparency + _
                                                     LayerStateMasks.PlotStyle + _
                                                     LayerStateMasks.NewViewport)
                    Else
                        Return
                    End If
                Else
                    Application.ShowAlertDialog("ACVD_LayerState という画層状態が存在しないため、画層状態を復元できません。")
                End If
            Catch ex As Autodesk.AutoCAD.Runtime.Exception
                MsgBox(ex.ToString)
            End Try
        End Sub



間違えてコマンドを実行してしまうとまずいので、「画層状態を復元しますか?」と表示して はい(Y) か いいえ(N) を選ぶように追加してみました。
GetKeywords っていうのをこんな感じかなと思って入れてみたのですが、とりあえずこれで試してみたら、一応ちゃんと動きました。
ビルドした DLL ファイルは こちら です。

NETLOAD コマンドで ACAD Video Blog.dll をロードして、ACVD_RestoreLayerState コマンドを実行すると、ACVD_LayerState という画層状態が存在すれば、それが復元されます。

0 件のコメント:

コメントを投稿