development of

Tieghaに関する備忘録とおまけ

【IJCAD】ダイナミックブロックのプロパティを取得する

ダイナミックブロックのプロパティを取得する

IJCAD の .NET API を使用して、ダイナミックブロックに設定されているプロパティを取得したいと思います。 f:id:tknmt:20190523144126p:plain

ダイナミックブロックのプロパティとは、ダイナミックブロックに設定されているパラメータセットの名前や、現在設定されている値などです。

サンプルコード

[CommandMethod("SAMPLECMD")]
public void SampleCommand()
{
    var db = Application.DocumentManager.MdiActiveDocument.Database;
    var ed = Application.DocumentManager.MdiActiveDocument.Editor;

    var res = ed.GetEntity("\nダイナミックブロックを選択");
    if (res.Status != PromptStatus.OK) return;

    // トランザクションを開始
    using (var tr = db.TransactionManager.StartTransaction())
    {
        // 選択したダイナミックブロックを開く
        using (var blockRef = tr.GetObject(res.ObjectId, OpenMode.ForRead) as BlockReference)
        {
            // ブロック参照が開かれたかどうか確認
            if (blockRef == null) return;
            
            // ダイナミックブロックかどうか確認
            if(blockRef.IsDynamicBlock)
            {
                // ダイナミックブロックに含まれるプロパティを取得
                var properties = blockRef.DynamicBlockReferencePropertyCollection;
                foreach(DynamicBlockReferenceProperty prop in properties)
                {
                    // プロパティ名を出力
                    ed.WriteMessage($"\nプロパティ名 : {prop.PropertyName}");
                    // プロパティの値を出力
                    ed.WriteMessage($"\n値 : {prop.Value}");
                }
            }
        }
    }
}

サンプル図面

ダイナミックブロック.dwg - Google ドライブ

※サンプルコードについての補足

プロパティ名を取得するには、DynamicBlockReferenceProperty クラスの PropertyName プロパティを使用して、プロパティの値を取得するには Value プロパティを使用します。

実行結果

サンプル図面に対してサンプルコードのコマンドを実行すると、次のようにIJCADのコマンドラインにプロパティの情報が出力されます。

f:id:tknmt:20190520153956p:plain

距離1 がダイナミックブロックに設定されている直線状パラメータで、現在の値は 50 とコマンドラインに出力されています。 Origin というのが上記の直線状パラメータの原点なのですが、値がありません。
AutoCAD では、直線状パラメータの原点の座標値をここで取得できるのですが、IJCAD で取得できないのは API のバグだと思います。