Autodesk Community Tips- ADNオープン
Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。

AutoCAD .NET API:自動調整配列複写の判定と分解

Issue

選択したオブジェクトが自動調整配列複写の要素かどうか判定して、自動調整配列複写であった場合に分解する実装するには、どのようなコードを記述すればいいでしょうか?

 

array.jpg

 

Solution

自動調整配列複写の対象となっているオブジェクト一式は、匿名ブロック(Anonymous Block)として自動調整フレームワークで管理、維持されています。

 

自動調整配列複写の判定には、AssocArray.IsAssociativeArray メソッドを利用することが出来ます。

同様に、分解には AssocArray.Explode メソッドを利用することが出来ます。

 

次のコードは、選択したオブジェクトが自動調整配列複写の構成要素だった場合に、トップレベルの調整配列複写を分解する C# 例です。

 

Database db = HostApplicationServices.WorkingDatabase;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

PromptEntityResult pent = ed.GetEntity("\nオブジェクトを選択:");
if (pent.Status != PromptStatus.OK)
{
    return;
}

using (Transaction tr = db.TransactionManager.StartTransaction())
{
    if (AssocArray.IsAssociativeArray(pent.ObjectId))
    {
        ed.WriteMessage("\n自動調整配列です");

        AssocArray ary = AssocArray.GetAssociativeArray(pent.ObjectId);
        var param = ary.GetParameters();

        if (param as AssocArrayPathParameters != null)
            ed.WriteMessage("\n - パス");
        if (param as AssocArrayPolarParameters != null)
            ed.WriteMessage("\n - 円形状");
        if (param as AssocArrayRectangularParameters != null)
            ed.WriteMessage("\n - 矩形状");

        AssocArray.Explode(pent.ObjectId);
    }
    else
        ed.WriteMessage("\n自動調整配列ではありません");

    tr.Commit();
}

 

EXPLODE コマンドで自動調整配列複写を分解する場合には、次のようなコードで AssocArray.Explode メソッドを代替することが出来ます。いずれの場合も、自動調整フレームワークが構成要素オブジェクトを保持しているため、すべてのオブジェクトを指定する必要はありません。

 

        var sset = SelectionSet.FromObjectIds(new ObjectId[] { pent.ObjectId });
        ed.Command("EXPLODE", sset);

 

exploded.jpg