Issue
AutoCAD を使用していると、テーブル(*Tnn ) / 寸法(*Dnn)/ ハッチング( *Xnn)などの匿名ブロックが作成されています。( nn は図面内で一意になるような数字)
INSERT コマンドや BLOCK コマンドのユーザ インタフェースには匿名ブロック名が表示されないので、カスタマイズ運用時に便利なのですが、この匿名ブロックを AutoCAD .NET API で作成することは出来ますか?
Solution
API で(ユーザー定義で)登録することが出来る匿名ブロックの作成では、新しく作成するブロック名に "*U" の名前をつけることで、AutoCAD が図面内で重複しないように数字を付加してブロック名を定義します。 次の C# コードは、円を含む匿名ブロックを作成するものです。
Database db = HostApplicationServices.WorkingDatabase;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
try
{
// 匿名ブロック定義の作成
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
BlockTableRecord blkdef = new BlockTableRecord();
Circle oCirc = new Circle(Point3d.Origin, Vector3d.ZAxis, 10.0);
blkdef = new BlockTableRecord();
blkdef.Name = "*U";
bt.Add(blkdef);
tr.AddNewlyCreatedDBObject(blkdef, true);
blkdef.AppendEntity(oCirc);
tr.AddNewlyCreatedDBObject(oCirc, true);
ed.WriteMessage("\n匿名ブロック名 : {0}", blkdef.Name);
// 匿名ブロック参照の作成
Point3d pt = new Point3d(100.0, 100.0, 0.0);
BlockReference blkref = new BlockReference(pt, blkdef.ObjectId);
BlockTableRecord model = (BlockTableRecord)tr.GetObject(bt["*MODEL_SPACE"], OpenMode.ForWrite);
model.AppendEntity(blkref);
tr.AddNewlyCreatedDBObject(blkref, true);
tr.Commit();
}
catch (Autodesk.AutoCAD.Runtime.Exception ex)
{
ed.WriteMessage("\n例外エラー : {0}", ex.ToString());
}
}
記事全体を表示