Как регенерировать штриховку

Автор Тема: Как регенерировать штриховку  (Прочитано 2536 раз)

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

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

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

Во избежании многократных "тупых" действий.
Можно как-то разом регенерировать изображение всех штриховок?

Прикрепляю файл примера.
Справа как должно быть, а
слева штриховка отображается неверно.



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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как регенерировать штриховку
« Ответ #1 : 26-06-2018, 16:01:37 »
Программировать нужно. Почитай: http://adn-cis.org/forum/index.php?topic=3264.0
P.S.: Я еще немножко посмотрел на эту штриховку "изнутри". У неё какой-то неправильный контур. Об этом говорит ARXDBG. После того как выбрать штриховку, и переместить какую-либо ручку саму в себя контур становится правильный (это подтверждает ARXDBG).
Так что нужно обрабатывать все контура.
« Последнее редактирование: 26-06-2018, 19:54:23 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как регенерировать штриховку
« Ответ #2 : 27-06-2018, 01:00:45 »
Во избежании многократных "тупых" действий.
Можно как-то разом регенерировать изображение всех штриховок?

Я не уверен, что это будет панацеей, но для данной штриховки этот код помогает:

Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7. #pragma warning disable 0618
  8.  
  9. // This line is not mandatory, but improves loading performances
  10. [assembly: CommandClass(typeof(Rivilis.HatchFix))]
  11.  
  12. namespace Rivilis
  13. {
  14.   public class HatchFix
  15.   {
  16.     [CommandMethod("HatchFix")]
  17.     public void HatchFixCommand() // This method can have any name
  18.     {
  19.       Document doc = Application.DocumentManager.MdiActiveDocument;
  20.       Editor ed = doc.Editor;
  21.       SelectionFilter filter = new SelectionFilter(
  22.         new TypedValue[] { new TypedValue((int)DxfCode.Start, "HATCH") });
  23.       PromptSelectionOptions pso = new PromptSelectionOptions();
  24.       pso.MessageForAdding = "Выберите штриховки для исправления: ";
  25.       pso.MessageForRemoval = "Удалите штриховки из набора: ";
  26.       PromptSelectionResult rso = ed.GetSelection(pso, filter);
  27.  
  28.       if (rso.Status == PromptStatus.OK && rso.Value.Count > 0)
  29.       {
  30.         foreach (ObjectId id in rso.Value.GetObjectIds())
  31.           HatchFix1(id);
  32.       }
  33.     }
  34.  
  35.     public void HatchFix1(ObjectId id)
  36.     {
  37.       Point3d ptGrip = Point3d.Origin;
  38.       using (Hatch h = id.Open(OpenMode.ForWrite) as Hatch)
  39.       {
  40.         using (GripDataCollection grips = new GripDataCollection())
  41.         {
  42.           h.GetGripPoints(grips, 1, 3, Vector3d.ZAxis, (GetGripPointsFlags)0);
  43.           using (GripDataCollection gripsMove = new GripDataCollection())
  44.           {
  45.             // Смещаем ручку в одну сторону на 0.00001
  46.             ptGrip = grips[1].GripPoint + Vector3d.XAxis * 1e-5;
  47.             gripsMove.Add(grips[1]);
  48.             h.MoveGripPointsAt(gripsMove, Vector3d.XAxis * 1e-5, 0);
  49.           }
  50.         }
  51.       }
  52.       using (Hatch h = id.Open(OpenMode.ForWrite) as Hatch)
  53.       {
  54.         using (GripDataCollection grips = new GripDataCollection())
  55.         {
  56.           h.GetGripPoints(grips, 1, 3, Vector3d.ZAxis, (GetGripPointsFlags)0);
  57.           using (GripDataCollection gripsMove = new GripDataCollection())
  58.           {
  59.             foreach (GripData grip in grips)
  60.             {
  61.               if (ptGrip.DistanceTo(grip.GripPoint) < 1e-6)
  62.               {
  63.                 // Смещаем эту же ручку в обратную сторону на 0.00001
  64.                 gripsMove.Add(grip);
  65.                 h.MoveGripPointsAt(gripsMove, -Vector3d.XAxis * 1e-5, 0);
  66.               }
  67.             }
  68.           }
  69.         }
  70.       }
  71.     }
  72.   }
  73. }

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение