Локализация и команды

Просто захотелось дать полный ответ на такой вопрос: "Как в русском / немецком / китайском etc AutoCAD написать лисп / DIESEL / макрос, не зависящий от локализации?

Все достаточно просто (на первый взгляд): ставим подчеркивание перед английским именем команды и перед каждой опцией - и все.

Но! Вызывать команды надо с полными именами, т.е. _pline, а не pl или пл. С опциями такого требования нет, т.е. можно указывать и полное имя опции, и ее сокращение.

Но и это не все. Никто не знает, какие расширения "навешаны" на AutoCAD конечного пользователя. А среди этих "довесков" может оказаться достаточно зловредный код, который переопределяет команды (о переопределении команд и командных реакторах как-нибудь в другой раз). Чтобы вызвать стандартную "чистую" команду AutoCAD'a, достаточно перед именем команды поставить не только подчеркивание, но и точку.

Поэтому лично я при неизбежности использования команд (бывает такое, бывает) делаю таким образом:

  1. Имя команды - полностью на английском языке, перед именем устанавливается знак подчеркивания и точка (например, _.-purge)
  2. Каждая опция команды предваряется знаком подчеркивания (например, _r). Точка не устанавливается - она будет только мешаться.

Как пример:

1
2
3
(command "_.audit" "_y")
;;
(command "_.-purge" "_r" "" "*")

P.S. Это касается не только лисп-кода, но и макросов, вызываемых по кнопкам.

Размещено в Код LISP · Метки: ,



Комментарии

Есть 4 коммент. к “Локализация и команды”
  1. ElpanovEvgeniy пишет:

    Стоит добавить, что точку можно писать и в опции функции выбора, предполагающие запросы в командной строке:

    1
    2
    (ssget "_+.:s")
    (ssget "_+.:e" '((0 . "line")))

    В этом случае, перед точкой необходимо ставить плюс.

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

    Плюс необходим при комбинации нескольких ключей. А так-то его можно и пропустить (сколько раз уже делал, все работало без особых вопросов).
    Другой момент - это то, что внутри (ssget) каждый символ должен находиться в строго определенном месте (то есть менять местами символы '+', '.', '_' нельзя, в отличие от команд, где точка и подчеркивание могут идти в любом порядке).

  3. VOLTRON пишет:

    [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".
    Почему не работает?

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

    Во-первых, прошу прощения за долгое молчание.
    Во-вторых, а на момент вызова опции _set разве существует лист с именем "_MODEL"? Потому что код

    1
    (command "_.-layout" "_s" "model")

    вполне корректно сработал в английском AutoCAD (сейчас русского под рукой нет)

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


Я не робот.