//в одном методе перебираю полилинии
if (acSSPrompt.Status == PromptStatus.OK)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (ObjectId id in acSSPrompt.Value.GetObjectIds())
{
Polyline plln = tr.GetObject(id, OpenMode.ForRead) as Polyline;
pllntemp.Add(plln);
if (plln.Closed == true) ObjIds.Add(plln.ObjectId); //тут добавляю их в ObjectIdCollections
}
tr.Commit();
_5_Vosstaovlenie_shtrihovki.CHB(ObjIds, db); // потом передаю в метод, который по идее должен создавать штриховку
// и сам метод:
public static void CHB(ObjectIdCollection ObjIds, Database db)
{
//Document doc = Application.DocumentManager.MdiActiveDocument;
//Database db = doc.Database;
//Editor ed = doc.Editor;
using (DocumentLock locked = Application.DocumentManager.MdiActiveDocument.LockDocument())
{
using (Transaction Tx = db.TransactionManager.StartTransaction())
{
ObjectId ModelSpaceId =
SymbolUtilityServices.GetBlockModelSpaceId(db);
BlockTableRecord btr = Tx.GetObject(ModelSpaceId,
OpenMode.ForWrite) as BlockTableRecord;
Hatch oHatch = new Hatch();
Vector3d normal = new Vector3d(0.0, 0.0, 1.0);
oHatch.Normal = normal;
oHatch.Elevation = 0.0;
oHatch.PatternScale = 200.0;
oHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
btr.AppendEntity(oHatch);
Tx.AddNewlyCreatedDBObject(oHatch, true);
// Вот теперь можно сделать штриховку ассоциативной
oHatch.Associative = true;
oHatch.AppendLoop((int)HatchLoopTypes.Default, ObjIds); //вот тут позникает ошибка, если в ObjIds лежит больше 1 элемента
oHatch.EvaluateHatch(true);
Tx.Commit();
}
locked.Dispose();
}
}