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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 19-06-2017, 21:35:33

Название: Штриховка по двум окружностям
Отправлено: Алексей (IdeaSoft) от 19-06-2017, 21:35:33
Подскажите,
как мне сделать по 2 окуржностям с общим центром
штриховку (в виде "бублика").

1) Передать в метод AppendLoop(...) коллекцию идентификаторов двух окружностей?
2) Может у метода AppendLoop есть "братик"?
3) Или как-то по другому?
 

Название: Re: Штриховка по двум окружностям
Отправлено: Александр Ривилис от 19-06-2017, 21:38:21
http://adn-cis.org/forum/index.php?topic=7617.0
Название: Re: Штриховка по двум окружностям
Отправлено: Алексей (IdeaSoft) от 19-06-2017, 22:07:02
Делаю так
Сообщает ошибку InvalidInput.



Код - C# [Выбрать]
  1.        public static void bublick() {
  2.             Document doc = acApp.DocumentManager.MdiActiveDocument;
  3.             Database db = doc.Database;
  4.             using (Transaction tr = db.TransactionManager.StartTransaction()) {
  5.                 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
  6.                 BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  7.                 // 1. Создаем объект штриховки
  8.                 Hatch Hobj = new Hatch();
  9.                 Hobj.SetHatchPattern(HatchPatternType.CustomDefined, "SOLID");
  10.                 // 2. Создаем объекты окружностей
  11.                 Circle max_Cir = new Circle(); max_Cir.Radius = 1;
  12.                 Circle min_Cir = new Circle(); min_Cir.Radius = 0.5;
  13.                 // 3. добавляем записи в таблицу
  14.                 ObjectId idmax = btr.AppendEntity(max_Cir);
  15.                 ObjectId idmin = btr.AppendEntity(min_Cir);
  16.                 btr.AppendEntity(Hobj);
  17.                 tr.AddNewlyCreatedDBObject(max_Cir, true);
  18.                 tr.AddNewlyCreatedDBObject(min_Cir, true);
  19.                 tr.AddNewlyCreatedDBObject(Hobj, true);
  20.                 // 4. Назначение ассоциации
  21.                 ObjectId[] ids = { idmax, idmin };
  22.                 ObjectIdCollection coll = new ObjectIdCollection(ids);
  23.                 acadnet_Hath_LoopsObj(ref Hobj, coll,
  24.                                       HatchLoopTypes.Outermost);
  25.                 tr.Commit();
  26.             }
  27.         }
  28.  
  29.         public static void acadnet_Hath_LoopsObj(ref Hatch entH,
  30.                                                  ObjectIdCollection IDColl,
  31.                                                  HatchLoopTypes mode) {
  32.             entH.UpgradeOpen();
  33.             entH.Associative = true;
  34.             if (IDColl != null) {
  35.                 entH.AppendLoop(mode, IDColl);
  36.                 entH.EvaluateHatch(true);
  37.             }
  38.         }
Название: Re: Штриховка по двум окружностям
Отправлено: Алексей (IdeaSoft) от 19-06-2017, 22:15:21
А разобрался.
Вот так работает.
Получается, по очереди нужно делать?

Код - C# [Выбрать]
  1.                 ObjectId[] ids = { idmax }
  2.                 ObjectIdCollection coll = new ObjectIdCollection(ids);
  3.                 acadnet_Hath_LoopsObj(ref Hobj, coll,
  4.                                      HatchLoopTypes.Outermost);
  5.  
  6.                 ObjectId[] ids1 = { idmin };
  7.                 ObjectIdCollection coll1 = new ObjectIdCollection(ids1);
  8.                 acadnet_Hath_LoopsObj(ref Hobj, coll1,
  9.                                      HatchLoopTypes.External);

вот такой бублик получился.
Название: Re: Штриховка по двум окружностям
Отправлено: Александр Ривилис от 19-06-2017, 23:06:18
вот такой бублик получился.
Ну если выполнишь регенерацию, то будет нормальный бублик.
Название: Re: Штриховка по двум окружностям
Отправлено: Алексей (IdeaSoft) от 19-06-2017, 23:57:21
Ну если выполнишь регенерацию, то будет нормальный бублик.
Ну это уж понятно.