development of

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

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

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

前回の記事ではダイナミックブロックに設定されているプロパティの取得方法を紹介しましたが、
tknmt.hatenablog.com

今回は、ダイナミックブロックのプロパティの値を変更する方法について紹介しようと思います。 といっても前回の記事で値を取得する時に使用したValueプロパティに値を割り当てるだけですが…

サンプルコード

[CommandMethod("SAMPLECMD")]
public void SampleCommand()
{
    var db = Application.DocumentManager.MdiActiveDocument.Database;
    var ed = Application.DocumentManager.MdiActiveDocument.Editor;
    var res1 = ed.GetEntity("\nダイナミックブロックを選択");
    if (res1.Status != PromptStatus.OK) return;

    // トランザクションを開始
    using (var tr = db.TransactionManager.StartTransaction())
    {
        // 選択したダイナミックブロックを開く
        using (var blockRef = tr.GetObject(res1.ObjectId, OpenMode.ForWrite) as BlockReference)
        {
            // ブロック参照が開かれたかどうか確認
            if (blockRef == null) return;
            
            // ダイナミックブロックかどうか確認
            if(blockRef.IsDynamicBlock)
            {
                // ダイナミックブロックに含まれるプロパティを取得
                var properties = blockRef.DynamicBlockReferencePropertyCollection;
                foreach(DynamicBlockReferenceProperty prop in properties)
                {
                    // 距離1プロパティかどうか確認
                    if(prop.PropertyName == "距離1")
                    {
                        // プロパティが読み書き可能かどうか確認
                        if(prop.ReadOnly == false)
                        {
                            var res2 = ed.GetDistance("\n距離を入力");
                            if(res2.Status == PromptStatus.OK)
                            {
                                // 入力した距離を設定
                                prop.Value = res2.Value;
                            }
                        }
                    }
                }
            }
        }
        //トランザクションをコミット
        tr.Commit();
    }
}

サンプル図面

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

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

サンプル図面のダイナミックブロックには、直線状パラメータによるストレッチしか設定されていないので、サンプルコードでは入力された距離の値を割り当てています。
ただ、値を割り当てる際に注意点が必要で、直線状パラメータであれば距離を示す値を、回転パラメータであれば角度を示す値を、可視性のパラメータであれば現在の可視性の状態を示す値を設定しなければなりません。

実行結果

サンプル図面に対してサンプルコードのコマンドを実行すると、次のような結果になります。 f:id:tknmt:20190520162928g:plain