Настройки размерного стиля

Автор Тема: Настройки размерного стиля  (Прочитано 21974 раз)

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #15 : 15-05-2014, 10:13:12 »
внёс важные уточнения в моё предыдущее сообщение.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Настройки размерного стиля
« Ответ #16 : 15-05-2014, 11:22:21 »
Я наблюдаю несколько различное поведение в AutoCAD 2009 и 2015 по данному вопросу.
Я смотрел как это работает в AutoCAD 2015.
Если опции Lineweight назначить значение Default, то в DIMLWD будет сохранено именно значение -3, а не скопировано то значение, которое хранится в LWDEFAULT.
Ты сейчас про свой код или про диалоговое окно? У меня (в 2015) при изменении в диалоге сохраняется в DIMLWD размерного стиля не -3, а то значение, которое в LWDEFAULT
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #17 : 15-05-2014, 12:28:35 »
Вариант 1 (меняю значение переменных DIMLWD и DIMLWE через диалоговое окно):

1. Создаём новый документ на основе шаблона acadiso.dwt.
2. Задаём переменной LWDISPLAY значение ON.
3. Назначаем переменной LWDEFAULT значение 25.
4. В текущем размерном стиле, на вкладке Lines, в группах Dimension lines и Extension lines, назначаем опциям Lineweight значение Default.
5. Сохраняем настройки и закрываем окно редактирования размерного стиля.
6. Смотрим значение переменной DIMLWD.
7. Создаём в пространстве модели произвольный линейный размер.
8. Назначаем переменной LWDEFAULT значение 80.
9. Смотрим значение переменной DIMLWD.
10. Проверяем, изменили ли толщину линии созданного нами размера...
11. Открываем настройки размерного стиля и смотрим значения ранее изменённых нами опций Lineweight.
12. Назначаем переменной LWDEFAULT значение 25.
13. Открываем настройки размерного стиля и смотрим значения ранее изменённых нами опций Lineweight.

Результат 1:
6. 25
9. 25
10. Нет
11. 0.25
13. Default

Вариант 2 (меняю значение переменных DIMLWD и DIMLWE в консоли AutoCAD):

1. Создаём новый документ на основе шаблона acadiso.dwt.
2. Задаём переменной LWDISPLAY значение ON.
3. Назначаем переменной LWDEFAULT значение 25
4. Назначаем переменной DIMLWD значение -3
5. Назначаем переменной DIMLWE значение -3
6. Открываем настройки размерного стиля (помечен как <style owerrides>) и смотрим значения ранее изменённых нами опций Lineweight.
7. Создаём в пространстве модели произвольный линейный размер.
8. Назначаем переменной LWDEFAULT значение 80.
9. Проверяем, изменили ли толщину линии созданного нами размера...
10. Смотрим значение переменной DIMLWD
11. Смотрим значение переменной DIMLWE
12. Открываем окно Dimension Style Manager и из контекстного меню элемента <style owerrides> выбираем пункт "Save to current style". Закрываем окно.
13. Смотрим значение переменной DIMLWD
14. Смотрим значение переменной DIMLWE
15. Открываем настройки размерного стиля и смотрим значения ранее изменённых нами опций Lineweight.

Результат 2:
6. ByBlock
9. Да
10. -3
11. -3
13. -3
14. -3
15. ByBlock

Резюме:
Как видим, результаты отличаются. Логичным поведением варианта Default являлся бы тот случай, когда он хранил бы значение -3 и тем самым заставлял бы примитивы получать толщину, считывая её из LWDEFAULT. Однако это почему-то делает не вариант Default, а вариант ByBlock.

Вариант ByBlock, насколько мне известно, должен указывать примитивам считывать толщину из настроек блока, в состав которого они входят.

Поправьте меня, если я ошибаюсь.
« Последнее редактирование: 15-05-2014, 12:39:40 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Настройки размерного стиля
« Ответ #18 : 15-05-2014, 12:50:30 »
Вариант 2 (меняю значение переменных DIMLWD и DIMLWE в консоли AutoCAD):
Это ты меняешь значения для Database, но не для текущего размерного стиля. Согласен, что Autodesk'овцы с этим перемудрили.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #19 : 15-05-2014, 12:54:34 »
Согласен, что Autodesk'овцы с этим перемудрили
Я бы скорее назвал это багом реализации: нелогичность поведения - это одна из разновидностей багов. Логичным поведением было бы то, которое я обозначил выше в резюме, причём это поведение я не с потолка взял, но, если мне не изменяет память, вычитал в документации Автодеска. Т.о. налицо некоторое несоответствие задумки с фактической реализацией. Проблему наблюдаю в 2009-м и 2015-м (промежуточные версии не проверял, но уверен, что там будет то же самое).

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #20 : 15-05-2014, 13:12:22 »
Это ты меняешь значения для Database, но не для текущего размерного стиля.
А что, размерный стиль у нас живёт вне базы данных чертежа? И почему это не для текущего? Эти изменения способствуют тому, что Автокад зачем-то создаёт производный (от текущего) стиль <style owerrides>. Однако этот "призрак" исчезает сразу же после выполнения следующих действий:
Код - C# [Выбрать]
  1. db.Dimstyle = dimStyle.ObjectId;
  2. db.SetDimstyleData(dimStyle);
Это приводит к тому, что<style owerrides> синхронизируется с текущим размерным стилем (т.е. переписывает в него свои изменения) и исчезает.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Настройки размерного стиля
« Ответ #21 : 15-05-2014, 13:16:10 »
И почему это не для текущего?
Потому что dimStyle.Dimlwd и db.Dimlwd - это разные вещи, в чем ты уже сам убедился.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #22 : 15-05-2014, 14:52:31 »
Потому что dimStyle.Dimlwd и db.Dimlwd - это разные вещи, в чем ты уже сам убедился.

Смотрим документацию разработчика:

Цитата: ObjectARX SDK Documentation
Database.Dimlwd Property
Accesses the current DIMLWD value for the dimension.
See the System Variables section of the AutoCAD Command Reference manual for information on DIMLWD.

DimStyleTableRecord.Dimlwd Property
Accesses the current DIMLWD value for the dimension.
See the System Variables section of the AutoCAD Command Reference manual for information on DIMLWD.

Dimension.Dimlwd Property
Accesses the current DIMLWD value for the dimension.
See the System Variables section of the AutoCAD Command Reference manual for information on DIMLWD.

Видим, что выполнен банальный копипаст текста без последующего внесения в него необходимых изменений. Т.е. по сути - мусор, вносящий дезинформацию.

Смотрим документацию пользователя (информация о переменной):

Цитата: AutoCAD 2009 Help
DIMLWD
Assigns lineweight to dimension lines. Values are standard lineweights.

Не густо, тоже ни о чём...

Тестирование:
Код - C# [Выбрать]
  1. [Rt.CommandMethod("Test", Rt.CommandFlags.Modal)]
  2. public void Test() {
  3.   Ap.Document doc = cad.DocumentManager.MdiActiveDocument;
  4.   if(doc == null)
  5.     return;
  6.   Ed.Editor ed = doc.Editor;
  7.   Db.Database db = doc.Database;
  8.   using(doc.LockDocument()) {
  9.     using(Db.Transaction tr = db.TransactionManager.StartTransaction()) {
  10.       Db.DimStyleTableRecord style = tr.GetObject(db.Dimstyle,
  11.         Db.OpenMode.ForWrite) as Db.DimStyleTableRecord;
  12.  
  13.       ed.WriteMessage("db.Dimlwd = {0}\n", db.Dimlwd);
  14.       ed.WriteMessage("style.Dimlwd = {0}\n\n", style.Dimlwd);
  15.  
  16.       ed.WriteMessage("Меняем значение db.Dimlwd.\n\n");
  17.  
  18.       db.Dimlwd = Db.LineWeight.LineWeight060;
  19.       // то же самое делает и SetSystemVariable:
  20.       // const String variable = "DIMLWD";
  21.       // cad.SetSystemVariable(variable, (Int16) 60);
  22.  
  23.       ed.WriteMessage("db.Dimlwd = {0}\n", db.Dimlwd);
  24.       ed.WriteMessage("style.Dimlwd = {0}\n\n", style.Dimlwd);
  25.  
  26.       ed.WriteMessage("Меняем значение style.Dimlwd.\n\n");
  27.  
  28.       style.Dimlwd = Db.LineWeight.LineWeight035;
  29.  
  30.       ed.WriteMessage("db.Dimlwd = {0}\n", db.Dimlwd);
  31.       ed.WriteMessage("style.Dimlwd = {0}\n\n", style.Dimlwd);
  32.       ed.WriteMessage("db.Dimstyle {0}= style.ObjectId\n\n",
  33.         db.Dimstyle == style.ObjectId ? "=" : "!");
  34.  
  35.       ed.WriteMessage("Выполняем SetDimstyleData.\n\n");
  36.  
  37.       db.Dimstyle = style.ObjectId;
  38.       db.SetDimstyleData(style);
  39.  
  40.       ed.WriteMessage("db.Dimlwd = {0}\n", db.Dimlwd);
  41.       ed.WriteMessage("style.Dimlwd = {0}\n", style.Dimlwd);
  42.       ed.WriteMessage("db.Dimstyle {0}= style.ObjectId\n\n",
  43.         db.Dimstyle == style.ObjectId ? "=" : "!");
  44.  
  45.       tr.Commit();
  46.     }
  47.   }
  48. }

Цитата: Результат
db.Dimlwd = ByBlock
style.Dimlwd = ByBlock

Меняем значение db.Dimlwd.

db.Dimlwd = LineWeight060
style.Dimlwd = ByBlock

Меняем значение style.Dimlwd.

db.Dimlwd = LineWeight060
style.Dimlwd = LineWeight035

db.Dimstyle == style.ObjectId

Выполняем SetDimstyleData.

db.Dimlwd = LineWeight035
style.Dimlwd = LineWeight035
db.Dimstyle == style.ObjectId

Я раньше думал, что свойства базы данных, подобные Dimlwd - это всего лишь своего рода более удобный способ сослаться на конкретные настройки стиля (чтобы не заниматься получением объекта стиля с последующим извлечением значения его свойства).

1. Для чего так сделано?
2. Для чего в размерных стилях порой появляется тот самый <style owerrides>?

В документации, как видим, я ничего не нашёл.
« Последнее редактирование: 15-05-2014, 15:05:29 от Андрей Бушман »

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #23 : 15-05-2014, 15:08:11 »
3. Почему изменение одних переменных не приводят к возникновению <style owerrides>, а другие приводят? Зачем реализовано такое поведение?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Настройки размерного стиля
« Ответ #24 : 15-05-2014, 15:08:45 »
1. Для чего так сделано?
2. Для чего в размерных стилях порой появляется тот самый <style owerrides>?
Так сделано было еще лет двадцать назад. Почему так - это к Autodesk, если там остались люди, которые помнят зачем было сделано именно так.
P.S.: По третьему вопросу ответ тотже.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #25 : 15-05-2014, 15:26:02 »
Чтобы в металлическом ведре принести воды, нужно:

1. Припаять ведру дно.
2. Набрать воду и отнести её куда надо (не забыть вылить).
3. Отпилить дно у ведра.

На вопрос "зачем отпиливать и снова припаивать дно?", ответ простой: "всегда так делаем (традиция), а почему - не помним уже"...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Настройки размерного стиля
« Ответ #26 : 15-05-2014, 15:31:27 »
Ok! Когда появилась в AutoCAD возможность ставить размеры изначально отсутствовало понятие размерных стилей и все настройки были глобальными. На основе их и создавались размеры. Затем появились размерные стили и они начали входить в противоречие с глобальными настройками размеров. Почему не убрали глобальные настройки (т.е. глобальные размерные пе6ременные) - я не знаю. Возможно потому, что часть из них имеет отношение не только к размерам (например, DIMZIN), возможно причина более глубокая.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Настройки размерного стиля
« Ответ #27 : 15-05-2014, 17:56:37 »
Если немного сократить то пожалуй такая картина не только у размеров:
Когда появилась в AutoCAD возможность... Затем появились ... и они начали входить в противоречие с ... Почему не ... я не знаю. Возможно потому, что ..., возможно причина более глубокая.
Наверное пора уже автодеску "Взять все и поделить" переписать.
з.ы. иначе рано или поздно это сделает кто-то другой...

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Настройки размерного стиля
« Ответ #28 : 15-05-2014, 17:58:49 »
Некогда, т.к. нужно 2020-ю версию наскоро собирать и "Свидетелей Иеговы" готовить к очередному пришествию...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Настройки размерного стиля
« Ответ #29 : 15-05-2014, 17:59:08 »
Наверное пора уже автодеску "Взять все и поделить" переписать.
Кто-то предпочитает революции, кто-то эволюции...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение