ADN Open CIS
Сообщество программистов Autodesk в СНГ

06/05/2018

Установка исходной точки при создании штриховки с помощью .NET

У нас был вопрос, поднятый клиентом относительно установления исходной точки штриховки  в процессе создания штриховки.

 

Было установлено, что исходную точку следует устанавливать в транзакции, отличной от той, в которой он был создан для того, чтобы всё работало корректно.

Нижеприведенный код может быть использован для тестирования:

Код - C#: [Выделить]
  1. [CommandMethod("setOrginHatch")]
  2. public void setOriginHatch()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     ObjectId mHatchId;
  9.     Hatch mHatch = new Hatch();
  10.     using (Transaction tr1 = db.TransactionManager.StartTransaction())
  11.     {
  12.         BlockTable bt = (BlockTable)tr1.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
  13.         BlockTableRecord btr = (BlockTableRecord)tr1.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  14.  
  15.         Point2d pt = new Point2d(0, 0);
  16.         Polyline mPolyline = new Polyline(4);
  17.         mPolyline.AddVertexAt(0, pt, 0.0, -1.0, -1.0);
  18.         mPolyline.Normal = Vector3d.ZAxis;
  19.         mPolyline.AddVertexAt(1, new Point2d(pt.X + 10, pt.Y), 0.0, -1.0, -1.0);
  20.         mPolyline.AddVertexAt(2, new Point2d(pt.X + 10, pt.Y + 5), 0.0, -1.0, -1.0);
  21.         mPolyline.AddVertexAt(3, new Point2d(pt.X, pt.Y + 5), 0.0, -1.0, -1.0);
  22.         mPolyline.Closed = true;
  23.  
  24.         ObjectId mPlineId;
  25.         mPlineId = btr.AppendEntity(mPolyline);
  26.         tr1.AddNewlyCreatedDBObject(mPolyline, true);
  27.  
  28.         ObjectIdCollection ObjIds = new ObjectIdCollection();
  29.         ObjIds.Add(mPlineId);
  30.  
  31.         Vector3d normal = new Vector3d(0.0, 0.0, 1.0);
  32.         mHatch.Normal = normal;
  33.         mHatch.Elevation = 0.0;
  34.         mHatch.PatternScale = 2.0;
  35.         mHatch.SetHatchPattern(HatchPatternType.PreDefined, "NET");
  36.         mHatch.ColorIndex = 1;
  37.         mHatch.PatternAngle = 2;
  38.  
  39.         // Попытка устаовить здесь исходную точку не работает
  40.         // Point2d setOrigin = new Point2d(6.698, 2.78);
  41.         // mHatch.Origin = setOrigin;
  42.  
  43.         btr.AppendEntity(mHatch);
  44.         tr1.AddNewlyCreatedDBObject(mHatch, true);
  45.  
  46.         mHatch.Associative = true;
  47.         mHatch.AppendLoop(HatchLoopTypes.Outermost, ObjIds);
  48.         mHatch.EvaluateHatch(true);
  49.  
  50.         // Получаем ObjectId штриховки
  51.         mHatchId = mHatch.ObjectId;
  52.  
  53.         tr1.Commit();
  54.     }
  55.     // Устанавливаем исходную точку в другой транзакции
  56.     using (Transaction tr2 = doc.TransactionManager.StartTransaction())
  57.     {
  58.         Entity ent = (Entity)tr2.GetObject(mHatchId, OpenMode.ForWrite);
  59.         if (ent != null)
  60.         {
  61.             Hatch nHatch = ent as Hatch;
  62.             String hatchName = nHatch.PatternName;
  63.             Point2d setOrigin = new Point2d(6.698, 2.78);
  64.             nHatch.Origin = setOrigin;
  65.             nHatch.SetHatchPattern(HatchPatternType.PreDefined, hatchName);
  66.             nHatch.EvaluateHatch(true);
  67.             nHatch.Draw();
  68.         }
  69.         tr2.Commit();
  70.     }
  71. }

Источник: http://adndevblog.typepad.com/autocad/2018/05/set-origin-while-creating-a-hatch-using-net.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 06.05.2018
Отредактировано 06.05.2018 в 19:38:39