お知らせ

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

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

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

2010年12月19日日曜日

.NET - 現在の寸法スタイルを変更する/<優先スタイル> を破棄する(AutoCAD 2011)


今日は、.NET での寸法スタイルの変更についてです。

先日、<優先スタイル> を破棄したいといった質問をいただきました。

<優先スタイル> って知ってます?
例えば上の絵のように、現在の一部の設定(上の例では 「垂直方向の寸法値位置」(DIMTAD))が寸法スタイル(上の例では 「ACAD Video」)と違っているときに出てきます。

これをなくしたいってことなんですが、以下のようにやってもなくならないといった内容です。
db.Dimstyle = dimTblRec.ObjectId

※ db は Database、dimTblRec は DimStyleTableRecord
確かに、これを実行しても <優先スタイル> はなくなりませんでした。
なんででしょう???

いろいろ調べてみたんですが、<優先スタイル> ってどこにも覚えられていなみたいなんですよね。
どこかに覚えられていればそれを消せばいいかと思ってたんですが、それがどこにもなさそうなので、諦めかけてたんですが、やっと見つけました。

SetDimstyleData っていうのがあって、これを使うようです。
具体的にはこんな感じです。
'-----------------------------------------------------------------
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database

Using trans As Transaction = db.TransactionManager.StartTransaction
    Try
        Dim dimTbl As DimStyleTable = trans.GetObject(db.DimStyleTableId, OpenMode.ForRead)
        Dim dimTblRec As DimStyleTableRecord = trans.GetObject(dimTbl("ACAD Video"), OpenMode.ForRead)

        db.Dimstyle = dimTblRec.ObjectId
        db.SetDimstyleData(dimTblRec)

        trans.Commit()

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

    End Try
End Using
'-----------------------------------------------------------------

現在の寸法スタイルを変更するときもこれと同じで OK です。
(<優先スタイル> を破棄するときは、db.Dimstyle = dimTblRec.ObjectId がなくても OKです。)

なんで Dimstyle の設定だけではダメかというと、こういった理由になると思います。

DIM* といった寸法に関するシステム変数は、現在のデータベースに設定されています。
Dimstyle の設定を置き換えるように設定すると、現在の寸法スタイルは指定したものになりますが、他のシステム変数(例:DIMTAD など)は変わらずそのままです。
なので、<優先スタイル> も残ったままになります。

そのため、寸法スタイルの設定から、すべての DIM* というシステム変数を読み込む必要があります。
それをするのが SetDimstyleData ということです。

0 件のコメント:

コメントを投稿