Локализация и команды
Просто захотелось дать полный ответ на такой вопрос: "Как в русском / немецком / китайском etc AutoCAD написать лисп / DIESEL / макрос, не зависящий от локализации?
Все достаточно просто (на первый взгляд): ставим подчеркивание перед английским именем команды и перед каждой опцией - и все.
Но! Вызывать команды надо с полными именами, т.е. _pline, а не pl или пл. С опциями такого требования нет, т.е. можно указывать и полное имя опции, и ее сокращение.
Но и это не все. Никто не знает, какие расширения "навешаны" на AutoCAD конечного пользователя. А среди этих "довесков" может оказаться достаточно зловредный код, который переопределяет команды (о переопределении команд и командных реакторах как-нибудь в другой раз). Чтобы вызвать стандартную "чистую" команду AutoCAD'a, достаточно перед именем команды поставить не только подчеркивание, но и точку.
Поэтому лично я при неизбежности использования команд (бывает такое, бывает) делаю таким образом:
- Имя команды - полностью на английском языке, перед именем устанавливается знак подчеркивания и точка (например, _.-purge)
- Каждая опция команды предваряется знаком подчеркивания (например, _r). Точка не устанавливается - она будет только мешаться.
Как пример:
1 2 3 | (command "_.audit" "_y") ;; (command "_.-purge" "_r" "" "*") |
P.S. Это касается не только лисп-кода, но и макросов, вызываемых по кнопкам.
Стоит добавить, что точку можно писать и в опции функции выбора, предполагающие запросы в командной строке:
2
(ssget "_+.:e" '((0 . "line")))
В этом случае, перед точкой необходимо ставить плюс.
Плюс необходим при комбинации нескольких ключей. А так-то его можно и пропустить (сколько раз уже делал, все работало без особых вопросов).
Другой момент - это то, что внутри (ssget) каждый символ должен находиться в строго определенном месте (то есть менять местами символы '+', '.', '_' нельзя, в отличие от команд, где точка и подчеркивание могут идти в любом порядке).
[cc lang="lisp"]
Доброго времени суток!
(COMMAND "_.LAYOUT" "_SET" "_MODEL" PAUSE)
_.LAYOUT
Enter layout option [Copy/Delete/New/Template/Rename/SAveas/Set/?] : _SET
Enter layout to make current : _MODEL Cannot find layout "_MODEL".
Почему не работает?
Во-первых, прошу прощения за долгое молчание.
Во-вторых, а на момент вызова опции _set разве существует лист с именем "_MODEL"? Потому что код
вполне корректно сработал в английском AutoCAD (сейчас русского под рукой нет)