Как отличить переменные окружения AutoCAD, от системных переменных AutoCAD?

Автор Тема: Как отличить переменные окружения AutoCAD, от системных переменных AutoCAD?  (Прочитано 11974 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Как отличить переменные окружения AutoCAD, от системных переменных AutoCAD?

Насколько я понимаю, первые всегда хранятся в ветке FixedProfile/General:
Цитата: ObjectARX 2017 SDK
acedGetEnv retrieves the value of an environment variable. Looks first in the AutoCAD-specific FixedProfile/General section of the registry

а вторые - либо в конкретном  профиле AutoCAD, либо в конкретном DWG-файле:
Цитата: ObjectARX 2017 SDK
acedGetVar retrieves the current value of the specified AutoCAD system variable.

Я правильно понимаю?

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

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
смысл в том, что моя DLL может вызываться как из кода расширений AutoCAD, так и из кода сторонних приложений. В первом случае должна вызываться соответствующая функция AutoCAD чтения\правки переменной, а во втором - прямая правка (или чтение) значения в реестре. Поскольку в автокаде присутствует свой набор функция для каждого вида переменных, то возникает необходимость понимать (определять программно), в каком случае какую из них вызывать.

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Переменные окружения (если это не переменные Windows) действительно хранятся в FixedProfile\General и (!!!) в FixedProfile\Editor Configuration (для проверки можешь попробовать (getenv "AutoSnapPolarAng") и поискать где строка "AutoSnapPolarAng" находится) и (!!!) в FixedProfile\General Configuration  - проверка (getenv "DYNMODE")
Возможно и еще где-то - однозначно никто не скажет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
а по поводу системных переменных автокада?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Переменные окружения (если это не переменные Windows) действительно хранятся в FixedProfile\General и (!!!) в FixedProfile\Editor Configuration (для проверки можешь попробовать (getenv "AutoSnapPolarAng") и поискать где строка "AutoSnapPolarAng" находится) и (!!!) в FixedProfile\General Configuration  - проверка (getenv "DYNMODE")
Возможно и еще где-то - однозначно никто не скажет.
И я так понимаю, что от версии к версии состав подветок реестра и размещение переменных хаотично скачет, т.к. в более ранних версиях последней из них не было.

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Во-первых, если ты помнишь имя системной переменной AutoCAD не всегда совпадает с именем переменной в реестре, что уже делает твой поиск совсем не простым. Во-вторых, в разных версиях AutoCAD это тоже не всё одинаково...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
И я так понимаю, что от версии к версии состав подветок реестра и размещение переменных хаотично скачет, т.к. в более ранних версиях последней из них не было.
Я перечислил переменные из древнего AutoCAD 2008. Вероятно эта переменная (как и многие другие) появляется в списке только если её значение отлично от значения по-умолчанию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще интересный факт:

Код - INI [Выбрать]
  1. Command: (getenv "Attdia") "0"
  2. Command: (getvar "Attdia") 0
  3.  
  4. Command: (getenv "Coords") "1"
  5. Command: (getvar "Coords") 1
  6.  
  7. и т.д.
Это всё из конкретного профиля\General
При этом (getenv) - регистрозависимая, а (getvar) - нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Продолжение юмора:

Код - INI [Выбрать]
  1. Command: (getvar "Osmode") 33
  2. Command: (getenv "Osmode") "33"
  3. Command: (setenv "Osmode" "34") "34"
  4. Command: (getenv "Osmode") "34"
  5. Command: (getvar "Osmode") 34

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Согласно документации, OSMODE - системная переменная (как и ATTDIA, COORDS). Т.е. для работы с ней нужно пользоваться acedGetVar(), поскольку функция acedGetEnv() не должна с ней работать  в принципе...

Т.е. показанныее выше примеры, на мой взгляд, несколько противоречит официальной документации:
Цитата: ObjectARX SDK 2017
acedGetEnv()
This function will not work for AutoCAD sysvars. For AutoCAD sysvars, use acedGetVar().
В этом случае как-то не до шуток юмора...

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
В этом случае как-то не до шуток юмора...
Тем не менее. Можешь сам попробовать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Так что из этого неправильно? Документация кривая, ибо не соответствует реализации, или же реализация кривая, ибо не соответствет документации? Что из этого может в дальнейшем измениться, дабы реализация соответствовала документации? На что ориентироваться - на документацию или же на текущую реализацию?

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
На что ориентироваться - на документацию или же на текущую реализацию?
Ну если ты будешь ориентироваться на документацию, то погрязнешь в ошибках. Так что:
Цитировать
О сколько нам открытий чудных
Готовят просвещенья дух
И Опыт, [сын] ошибок трудных,
И Гений, [парадоксов] друг...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Ну если ты будешь ориентироваться на документацию, то погрязнешь в ошибках
Тогда получается, что это будет использование "недокументированных возможностей", которые могут "исправить" в любой момент без каких-либо предупреждений...
О сколько нам открытий чудных
Готовят просвещенья дух
И Опыт, [сын] ошибок трудных,
И Гений, [парадоксов] друг...
Да, это однозначно про автокад.... Всегда с ним так было, есть и будет (к сожалению).