【IJCAD】ダイナミックブロックのプロパティを取得する
ダイナミックブロックのプロパティを取得する
IJCAD の .NET API を使用して、ダイナミックブロックに設定されているプロパティを取得したいと思います。
ダイナミックブロックのプロパティとは、ダイナミックブロックに設定されているパラメータセットの名前や、現在設定されている値などです。
サンプルコード
[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}"); } } } } }
サンプル図面
※サンプルコードについての補足
プロパティ名を取得するには、DynamicBlockReferenceProperty
クラスの PropertyName
プロパティを使用して、プロパティの値を取得するには Value
プロパティを使用します。
実行結果
サンプル図面に対してサンプルコードのコマンドを実行すると、次のようにIJCADのコマンドラインにプロパティの情報が出力されます。
距離1 がダイナミックブロックに設定されている直線状パラメータで、現在の値は 50 とコマンドラインに出力されています。
Origin というのが上記の直線状パラメータの原点なのですが、値がありません。
AutoCAD では、直線状パラメータの原点の座標値をここで取得できるのですが、IJCAD で取得できないのは API のバグだと思います。