お知らせ

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

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

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

2010年6月4日金曜日

.NET の勉強 「表示、フリーズ、ロック の設定を反転する」(AutoCAD 2011)

以前、悩み事 : 画層のフリーズ状態を反転する簡単な方法は?(AutoCAD LT 2011) で画層のフリーズ状態を反転する簡単な方法はないかなぁ ということを書きました。


折角 .NET の勉強を始めたので、そのコマンドを作ってみました。(.NET なので、LT では使えませんが…)


書いたコードはこんな感じです。

        ' 画層の フリーズ や ON/OFF の設定を逆にするコマンド
        <CommandMethod("ACVD_Blog", "_ACVD_ToggleLayer", "ACVD_ToggleLayer", CommandFlags.Modal)> _
        Public Sub ACVD_ToggleLayer()
            Dim doc As Document = Application.DocumentManager.MdiActiveDocument
            Dim db As Database = doc.Database
            Dim ed As Editor = doc.Editor

            Dim trans As Transaction = db.TransactionManager.StartTransaction
            Dim laTbl As LayerTable = trans.GetObject(db.LayerTableId, OpenMode.ForRead)

            Try
                Dim prRes As PromptResult
                Dim pko As PromptKeywordOptions = New PromptKeywordOptions("")
                pko.Message = vbLf & "どの設定を反転しますか?"
                pko.Keywords.Add("On", "On", "表示(O)")
                pko.Keywords.Add("Freeze", "Freeze", "フリーズ(F)")
                pko.Keywords.Add("Lock", "Lock", "ロック(L)")
                pko.AllowNone = False

                prRes = ed.GetKeywords(pko)
                If prRes.Status <> PromptStatus.OK Then
                    Return
                End If

                For Each objId As ObjectId In laTbl
                    Dim laTblRec As LayerTableRecord = trans.GetObject(objId, OpenMode.ForWrite)

                    ' オプションとして「表示(O)」が選択されたとき
                    If prRes.StringResult.ToString = "On" Then
                        If laTblRec.IsOff = True Then
                            'MsgBox(laTblRec.Name & "画層はオフです")
                            laTblRec.IsOff = False
                        Else
                            'MsgBox(laTblRec.Name & "画層はオンです")
                            laTblRec.IsOff = True
                        End If
                    End If

                    ' オプションとして「フリーズ(F)」が選択されたとき
                    If prRes.StringResult.ToString = "Freeze" Then
                        If laTblRec.IsFrozen = True Then
                            laTblRec.IsFrozen = False

                        ' 現在層はフリーズできないので、現在層の場合は処理を行わないように設定
                        ElseIf laTblRec.ObjectId <> db.Clayer Then
                            laTblRec.IsFrozen = True
                        End If
                    End If

                    ' オプションとして「ロック(L)」が選択されたとき
                    If prRes.StringResult.ToString = "Lock" Then
                        If laTblRec.IsLocked = True Then
                            laTblRec.IsLocked = False
                        Else
                            laTblRec.IsLocked = True
                        End If
                    End If
                Next

                trans.Commit()

            Catch ex As Autodesk.AutoCAD.Runtime.Exception
                Application.ShowAlertDialog(ex.ToString)

            Finally
                trans.Dispose()

            End Try

        End Sub


ビルドした ACAD Video Blog.dll は ここ からダウンロードできます。
これを NETLOAD コマンドでロードして、ACVD_ToggleLayer コマンドを実行すると、「どの設定を反転しますか? [表示(O)/フリーズ(F)/ロック(L)]:」 というオプションが表示されるので、オプションを入力すると、その設定が反転されます。

0 件のコメント:

コメントを投稿