Штриховка по двум окружностям

Автор Тема: Штриховка по двум окружностям  (Прочитано 3578 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Подскажите,
как мне сделать по 2 окуржностям с общим центром
штриховку (в виде "бублика").

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


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Штриховка по двум окружностям
« Ответ #2 : 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.         }

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Штриховка по двум окружностям
« Ответ #3 : 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);

вот такой бублик получился.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Штриховка по двум окружностям
« Ответ #4 : 19-06-2017, 23:06:18 »
вот такой бублик получился.
Ну если выполнишь регенерацию, то будет нормальный бублик.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Штриховка по двум окружностям
« Ответ #5 : 19-06-2017, 23:57:21 »
Ну если выполнишь регенерацию, то будет нормальный бублик.
Ну это уж понятно.