お知らせ

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

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

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

2010年12月20日月曜日

.NET - 寸法図形の寸法スタイルを変更する(AutoCAD 2011)


昨日は、現在の寸法スタイルを変更する方法でしたね。
今日は、既に描かれている寸法図形を他の寸法スタイルに変更する方法を試してみたので、それを紹介したいと思います。

例えば、選択した寸法図形の寸法スタイルを「ACAD Video」という寸法スタイルの変えたいときは、こんな感じでできました。

'--------------------------------------------------------
<CommandMethod("test", "test4", CommandFlags.Modal + CommandFlags.UsePickSet)> _
Public Sub test4()

    Dim doc As Document = Application.DocumentManager.MdiActiveDocument
    Dim db As Database = doc.Database
    Dim ed As Editor = doc.Editor

    Using trans As Transaction = db.TransactionManager.StartTransaction
        Try
            ' PickFirst 選択セットを取得
            Dim psr As PromptSelectionResult = ed.SelectImplied()

            ' PickFirst 選択セットを取得できなかったときは、オブジェクトをオブジェクトを選択する
            If psr.Status <> PromptStatus.OK Then
                psr = ed.GetSelection()
            End If

            ' 何も選択されていなかったら、コマンドを終了する
            If psr.Status <> PromptStatus.OK Then
                Return
            End If

            ' ObjectIdCollection に選択したオブジェクトのオブジェクト ID を設定
            Dim objIdColl As New ObjectIdCollection(psr.Value.GetObjectIds())

            ' 選択したそれぞれのオブジェクトに対して実行
            For Each objId As ObjectId In objIdColl
                ' もし、寸法図形だったら、寸法スタイルを ACAD Vide に変更
                Dim ent As Entity = trans.GetObject(objId, OpenMode.ForRead)
                If TypeOf ent Is Dimension Then
                    Dim d1 As Dimension = ent

                    d1.UpgradeOpen()
                    d1.DimensionStyleName = "ACAD Video"
                End If
            Next

            trans.Commit()

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

        End Try
    End Using

End Sub
'--------------------------------------------------------

また、d1.DimensionStyleName = "ACAD Video" の代わりにこんな感じにしても OK でした。
'--------------------------------------------------------
Dim dimTbl As DimStyleTable = trans.GetObject(db.DimStyleTableId, OpenMode.ForRead)
Dim dimTblRec As DimStyleTableRecord = trans.GetObject(dimTbl("ACAD Video"), OpenMode.ForRead)

d1.DimensionStyle = dimTblRec.ObjectId
'--------------------------------------------------------

0 件のコメント:

コメントを投稿