// mas - коэффициент масштаба
public static void test_addHatch(double mas) {
Document doc = acApp.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction() ) {
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
// 1. Создаем объект штриховки
Hatch Hobj = new Hatch();
Hobj.SetHatchPattern(HatchPatternType.CustomDefined, "ANSI35");
Hobj.PatternScale = 0.5;
Hobj.SetHatchPattern(HatchPatternType.CustomDefined, "ANSI35");
// 2. Создаем объект полилилинии
Polyline pl = new Polyline();
pl.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0);
pl.AddVertexAt(0, new Point2d(4, 0), 0, 0, 0);
pl.AddVertexAt(0, new Point2d(4, 1), 0, 0, 0);
pl.AddVertexAt(0, new Point2d(0, 1), 0, 0, 0);
pl.Closed = true;
// 3. добавляем записи в таблицу
ObjectId id = btr.AppendEntity(pl);
btr.AppendEntity(Hobj);
tr.AddNewlyCreatedDBObject(pl, true);
tr.AddNewlyCreatedDBObject(Hobj, true);
// 4. масштабируем объекты в mas раз
Entity ent1 = pl as Entity;
Entity ent2 = Hobj as Entity;
acadnet_Primitive_Scale_Ent(ref ent1, mas);
//5. Назначение ассоциации
ObjectId[] IDS = { id };
ObjectIdCollection InnObj = new ObjectIdCollection(IDS);
acadnet_Hath_LoopsObj(ref Hobj, InnObj);
tr.Commit();
}
}
// масштабирует примитив
public static void acadnet_Primitive_Scale_Ent(ref Entity ent, double val) {
if ((val == 1) || (val == 0)) return;
Database db = ent.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
ent.UpgradeOpen();
Point3d Zpnt = new Point3d(0, 0, 0);
Matrix3d matScale = Matrix3d.Scaling(val, Zpnt);
ent.TransformBy(matScale);
tr.Commit();
}
}
// назначение асоциативных обектов для штриховки
public static void acadnet_Hath_LoopsObj(ref Hatch entH,
ObjectIdCollection IDColl_Inner) {
entH.UpgradeOpen();
entH.Associative = true;
if (IDColl_Inner != null) {
entH.AppendLoop(HatchLoopTypes.Default, IDColl_Inner);
entH.EvaluateHatch(true);
}
}