В настоящее время я работаю над разработкой плагинов Autocad и хочу выделить круги, и выделенные круги превращаются в штриховки с помощью C#. Должен ли я сделать список штриховок, который содержит все выбранные круги или что? Я пытался это, но я получаю исключение во время выполнения на AppendL oop () Вот код:
public void SelectCirclesToHatch(int n)
{
var doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null)
return;
var acCurDb = doc.Database;
var edt = doc.Editor;
using (DocumentLock docLock = doc.LockDocument())
{
using (var acTrans = doc.TransactionManager.StartTransaction())
{
var acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
var acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
ObjectIdCollection acObjIdColl = new ObjectIdCollection();
// list of circles
List<Circle> circles = new List<Circle>();
var peo2 = new PromptEntityOptions("\nSelect the Circle");
peo2.SetRejectMessage("\nMust be a Circle.");
peo2.AddAllowedClass(typeof(Circle), false);
// select circles
for (int i = 0; i < n; i++)
{
var per2 = edt.GetEntity(peo2);
if (per2.Status != PromptStatus.OK)
return;
var cId = per2.ObjectId;
var br = acTrans.GetObject(cId, OpenMode.ForRead) as Circle;
if (br != null)
{
circles.Add(br);
}
// Adds the circle to an object id array
acObjIdColl.Add(br.ObjectId);
}
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);
acHatch.EvaluateHatch(true);
}
}
}
}