Штриховка созданная в разных единицах чертежа.

Автор Тема: Штриховка созданная в разных единицах чертежа.  (Прочитано 7309 раз)

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

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Суть проблемы такая.
Есть 2 штриховки с одинаковыми именами и масштабами, но выглядят по разному. Масштаб примерно в 25 раз отличается.

Проблема существует, если создать одну штриховку в acadiso.dwt, а другую в acad.dwt и скопировать их в один чертеж.
Предположение, что влияют единицы чертежа в момент создания штриховки.

Изменение контура, регенерация  не сбрасывает "не правильный" масштаб.
Изменение масштабного коэффициента сбрасывает.

Можно ли через API определить что штриховка не соответствует своему масштабному коэффициенту?

https://yadi.sk/d/WvEvp4cAm3sdn


Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
http://forum.dwg.ru/showthread.php?t=95858

на форуме предположение, что при создании штриховок использовались acad.pat и acadiso.pat
разные шаблоны, с одинаковыми названиями штриховок

string patternName = hat.PatternName;
сравнить через имена штриховок не получается.


Отмечено как Решение Привалов Дмитрий 07-12-2015, 17:17:41

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно ли через API определить что штриховка не соответствует своему масштабному коэффициенту?
Специального метода нет (разве что анализировать саму штриховку и определять растояние между штрихами). Так что только исправлять:
Код - C# [Выбрать]
  1. [CommandMethod("EVH")]
  2. public void evh()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Editor ed = doc.Editor;
  6.   PromptEntityOptions pr = new PromptEntityOptions("\nВыберите штриховку");
  7.   pr.SetRejectMessage("\nЭто не штриховка");
  8.   pr.AddAllowedClass(typeof(Hatch), true);
  9.   PromptEntityResult rs = ed.GetEntity(pr);
  10.   if (rs.Status == PromptStatus.OK) {
  11.     using (Hatch h = rs.ObjectId.Open(OpenMode.ForWrite) as Hatch) {
  12.       h.SetHatchPattern(h.PatternType, h.PatternName);
  13.       h.EvaluateHatch(false);
  14.     }
  15.   }
  16. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Так что только исправлять

Т.е. можно предположить что есть варианты:
1. создается шаблон штриховки "hatchTemplate" и сохраняется внутри каждого объекта Hatch. "hatchTemplate" можно сменить только явным указанием
2. "hatchTemplate" храниться на уровне файла, на подобии текстовых стилей и Hatch связан с "hatchTemplate" по id, но API не дает доступа к хранилищу "hatchTemplate".

Возможно ли узнать механизм сохранения у Autodesk, чтобы лучше понять как это работает?
Для типов линий скорее всего тот же механизм применяется.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Обрати внимание на различие для этих двух штриховок:
Правильная:
--- PatternDefinition ---------------------------
                    Angle    0.7854
                   Base X    0
                   Base Y    0
                 Offset X    -22.4506
                 Offset Y    22.4506
                   Dashes    < DoubleCollection >
Неправильная:
--- PatternDefinition ---------------------------
                    Angle    0.7854
                   Base X    2050.5688
                   Base Y    1845.5714
                 Offset X    -0.8839
                 Offset Y    0.8839
                   Dashes    < DoubleCollection >

После исправления (запуска команды EVH):
--- PatternDefinition ---------------------------
                    Angle    0.7854
                   Base X    0
                   Base Y    0
                 Offset X    -22.4506
                 Offset Y    22.4506
                   Dashes    < DoubleCollection >
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Т.е. можно предположить что есть варианты:
1. создается шаблон штриховки "hatchTemplate" и сохраняется внутри каждого объекта Hatch. "hatchTemplate" можно сменить только явным указанием
Этот вариант справедлив. Явный вызов h.SetHatchPattern(h.PatternType, h.PatternName); заставляет AutoCAD перечитать соответствующий pat-файл (в зависимости от системной переменной MEASUREMENT) и получить новые PatternDefinition.
Из спортивного интереса измени MEASUREMENT с 1 на 0 и выполни команду EVH для обеих штриховок.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение