nanoCAD и системные переменные

На форуме dwg.ru появился запрос на смену привязки в процессе работы Lisp-кода. Фигня вопрос - подумал я. И как же капитально я обломился!

Суть задачи проста и незатейлива - сменить режим привязки, что-то там запросить у пользователя (к примеру, точку), и вернуть все обратно как было.

В ACAD подобная конструкция сработает как и ожидается:

1
2
3
4
(setvar "osmode" 1)
(setq pt1 (getpoint "\nEnd point : "))
(setvar "osmode" 512)
(setq pt2 (getpoint "\nNearest point : "))

Режим привязки будет корректно меняться. Но в NC подобное не срабатывает ни разу. Полное ощущение, что setvar тупо игнорится.

В чате посоветовали в настройках, вызываемых через _.params, отключить принудительное назначение привязки (ну ни себе фига, я и не думал в эту сторону от слова совсем!). Не помогло.

Уж не помню, на основании чего я сделал вывод, что после установки osmode может помочь вызов какой-либо команды:

1
2
3
4
5
6
7
8
(setvar "osmode" 1)
(command "_.point" "0,0,0")
(entdel (entlast))
(setq pt1 (getpoint "\nEnd point : "))
(setvar "osmode" 512)
(command "_.point" "0,0,0")
(entdel (entlast))
(setq pt2 (getpoint "\nNearest point : "))

Не-а, эффект равен нулю.

Ладно, думаю - но уж на NET-то должно все работать нормально! Угу, ага, губозакатывательную машинку забыл купить:

1
2
3
4
5
6
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Application.SetSystemVariable("osmode", 1);
PromptPointResult pt1 = ed.GetPoint("\nEnd point");
Application.SetSystemVariable("osmode", 512);
PromptPointResult pt2 = ed.GetPoint("\nNearest point");

Все то же, все там же.

В результаты выяснилось, что системная переменная osmode в NC меняется только в единственном случае - смены ее через команду (!!!!). Т.е. вот такой код сработает как и заказывалось:

1
2
3
4
(command "osmode" 1)
(getpoint "\nEnd point : ")
(command "osmode" 512)
(getpoint "\nNearest point ")

А ведь было у меня ощущение, что NC не сильно дружит с системными переменными!
Первое: в ком.строке колочу dwgcodepage. На выходе - 29. Но стоит запросить (getvar "dwgcodepage") - и результат "ANSI_1251".
Второе: вбиваю название любой системной переменной. Хоть osmode, хоть celtype, жму Enter - и хочу посмотреть на нее справку. Что нормальный человек жмет? Правильно, F1. Только сильно повезет, если справка вообще откроется. А уж о том, чтоб сразу активировать соответствующую закладку, вообще речи не идет. Кстати, в поиске системные переменные участвуют или нет?
Третье: программист может вполне легко создать собственную системную переменную. Кто не верит - вбейте в ком.строке (setvar "abcdef" 1234), а потом - (getvar "abcdef"). Мне одному это кажется дикостью невероятной?

Вывод: меняя системные переменные в NC, приходится проверять даже железобетонно работающие решения. На справку надежды ноль.

Пожелание разработчикам:
- во-первых, привести работу с системными переменными (вообще всеми!) в единый режим независимо от варианта смены их значений
- во-вторых, дополнить и по-новой проиндексировать справку
- в-третьих, запретить программисту создавать собственные системные переменные.
- в-четвертых, самим разобраться и прописать в справке, как собственные режимы привязки коррелируют с прописанными значениями в _.params (поскольку лично я в справке этой информации навскидку не увидел).

P.S. NC 23.1.

Размещено в .NET, nanoCAD, Код LISP, Новости · Метки: , , ,



Комментарии

Есть 3 коммент. к “nanoCAD и системные переменные”
  1. Кулик Алексей aka kpblc пишет:

    В чате подсказали возможное решение проблемы - писать названия системных переменных ТОЛЬКО В ВЕРХНЕМ РЕГИСТРЕ. Бред и маразм - но вроде бы по отзывам работает.

  2. Максим пишет:

    Справку по системным переменным можно посмотреть в функциональной панели "Системные переменные" или иначе - "Монитор системных переменных".

    Максим

  3. Кулик Алексей aka kpblc пишет:

    Это понятно. Непонятно, почему в каде (setvar "osmode" 0) и (setvar "OSMODE" 0) работают, а в нанике сработает только второй вариант, и никак иначе. Статья именно про это, а не про "где посмотреть".

Поделитесь своим мнением


Я не робот.