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

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

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

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

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

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

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

Как пример:

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

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

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



Комментарии

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

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

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

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

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

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

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


Я не робот.