Hatch オブジェクトの境界に対するループの追加、挿入、または削除を行うことができます。境界に対する変更に合うように、自動調整ハッチングは更新されます。非自動調整ハッチングは更新されません。
ハッチング境界を編集するには、次のメソッドを使用します。
ハッチングにループを追加します。AppendLoop メソッドの最初のパラメータおよび HatchLoopTypes 列挙型によって定義される定数を使用して、追加するループの種類を定義します。
ハッチングの指定インデックスのループを取得します。
ハッチングのインデックスを指定して、ループを挿入します。
ハッチングの指定インデックスのループを削除します。
ハッチング境界をクエリーするには、次のいずれかのメソッドを使用します。
ハッチングの指定インデックスのループの種類を取得します。
ハッチングのループの数を取得します。
次の例は、自動調整ハッチングを作成します。次に円を作成し、その円を内部ループとしてハッチングに追加します。
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
[CommandMethod("EditHatchAppendLoop")]
public static void EditHatchAppendLoop()
{
// Get the current document and database
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
// Create an arc object for the closed boundary to hatch
using (Arc acArc = new Arc(new Point3d(5, 3, 0), 3, 0, 3.141592))
{
acBlkTblRec.AppendEntity(acArc);
acTrans.AddNewlyCreatedDBObject(acArc, true);
// Create an line object for the closed boundary to hatch
using (Line acLine = new Line(acArc.StartPoint, acArc.EndPoint))
{
acBlkTblRec.AppendEntity(acLine);
acTrans.AddNewlyCreatedDBObject(acLine, true);
// Adds the arc and line to an object id collection
ObjectIdCollection acObjIdColl = new ObjectIdCollection();
acObjIdColl.Add(acArc.ObjectId);
acObjIdColl.Add(acLine.ObjectId);
// Create the hatch object and append it to the block table record
using (Hatch acHatch = new Hatch())
{
acBlkTblRec.AppendEntity(acHatch);
acTrans.AddNewlyCreatedDBObject(acHatch, true);
// Set the properties of the hatch object
// Associative must be set after the hatch object is appended to the
// block table record and before AppendLoop
acHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
acHatch.Associative = true;
acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl);
// Create a circle object for the inner boundary of the hatch
using (Circle acCirc = new Circle())
{
acCirc.Center = new Point3d(5, 4.5, 0);
acCirc.Radius = 1;
acBlkTblRec.AppendEntity(acCirc);
acTrans.AddNewlyCreatedDBObject(acCirc, true);
// Adds the circle to an object id collection
acObjIdColl.Clear();
acObjIdColl.Add(acCirc.ObjectId);
// Append the circle as the inner loop of the hatch and evaluate it
acHatch.AppendLoop(HatchLoopTypes.Default, acObjIdColl);
acHatch.EvaluateHatch(true);
}
}
}
}
// Save the new object to the database
acTrans.Commit();
}
}