06/05/2018
Установка исходной точки при создании штриховки с помощью .NET
У нас был вопрос, поднятый клиентом относительно установления исходной точки штриховки в процессе создания штриховки.
Было установлено, что исходную точку следует устанавливать в транзакции, отличной от той, в которой он был создан для того, чтобы всё работало корректно.
Нижеприведенный код может быть использован для тестирования:
Код - C#: [Выделить]
- [CommandMethod("setOrginHatch")]
- public void setOriginHatch()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- ObjectId mHatchId;
- Hatch mHatch = new Hatch();
- using (Transaction tr1 = db.TransactionManager.StartTransaction())
- {
- BlockTable bt = (BlockTable)tr1.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
- BlockTableRecord btr = (BlockTableRecord)tr1.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
- Point2d pt = new Point2d(0, 0);
- Polyline mPolyline = new Polyline(4);
- mPolyline.AddVertexAt(0, pt, 0.0, -1.0, -1.0);
- mPolyline.Normal = Vector3d.ZAxis;
- mPolyline.AddVertexAt(1, new Point2d(pt.X + 10, pt.Y), 0.0, -1.0, -1.0);
- mPolyline.AddVertexAt(2, new Point2d(pt.X + 10, pt.Y + 5), 0.0, -1.0, -1.0);
- mPolyline.AddVertexAt(3, new Point2d(pt.X, pt.Y + 5), 0.0, -1.0, -1.0);
- mPolyline.Closed = true;
- ObjectId mPlineId;
- mPlineId = btr.AppendEntity(mPolyline);
- tr1.AddNewlyCreatedDBObject(mPolyline, true);
- ObjectIdCollection ObjIds = new ObjectIdCollection();
- ObjIds.Add(mPlineId);
- Vector3d normal = new Vector3d(0.0, 0.0, 1.0);
- mHatch.Normal = normal;
- mHatch.Elevation = 0.0;
- mHatch.PatternScale = 2.0;
- mHatch.SetHatchPattern(HatchPatternType.PreDefined, "NET");
- mHatch.ColorIndex = 1;
- mHatch.PatternAngle = 2;
- // Попытка устаовить здесь исходную точку не работает
- // Point2d setOrigin = new Point2d(6.698, 2.78);
- // mHatch.Origin = setOrigin;
- btr.AppendEntity(mHatch);
- tr1.AddNewlyCreatedDBObject(mHatch, true);
- mHatch.Associative = true;
- mHatch.AppendLoop(HatchLoopTypes.Outermost, ObjIds);
- mHatch.EvaluateHatch(true);
- // Получаем ObjectId штриховки
- mHatchId = mHatch.ObjectId;
- tr1.Commit();
- }
- // Устанавливаем исходную точку в другой транзакции
- using (Transaction tr2 = doc.TransactionManager.StartTransaction())
- {
- Entity ent = (Entity)tr2.GetObject(mHatchId, OpenMode.ForWrite);
- if (ent != null)
- {
- Hatch nHatch = ent as Hatch;
- String hatchName = nHatch.PatternName;
- Point2d setOrigin = new Point2d(6.698, 2.78);
- nHatch.Origin = setOrigin;
- nHatch.SetHatchPattern(HatchPatternType.PreDefined, hatchName);
- nHatch.EvaluateHatch(true);
- nHatch.Draw();
- }
- tr2.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2018/05/set-origin-while-creating-a-hatch-using-net.html
Автор перевода: Александр Ривилис
Отредактировано 06.05.2018 в 19:38:39
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 06.05.2018Отредактировано 06.05.2018 в 19:38:39