Особенности vla-функций и их применения, часть 3
В предыдущих частях (здесь и здесь) велся разговор о графических примитивах. Здесь немного продолжим о них, но основной упор сделаем на неграфических элементах dwg-файла (стилях, слоях, описаниях блоков и т.п.).
Далее
Особенности vla-функций и их применения, часть 2
В предыдущей части уже были рассмотрены некоторые особенности работы vla-функций применительно к графической составляющей dwg-файла. Но были рассмотрены далеко не все вопросы. В частности, не было освещено "создание примитива через ActiveX без явного указания необязательных настроек". И никак не был затронут вопрос о модификации созданного примитива (точнее, удобства и очевидности изменения).
Далее
Особенности vla-функций и их применения
Если Вы (или Ваши клиенты) работаете только в мировой системе координат; если создаваемые Вами объекты никогда не будут иметь координату Z, отличную от 0; если Вы не хотите задумываться о трехмерном проектировании; если... Короче, если у Вас пляжные условия работы, то этот пост Вам неинтересен будет, скорее всего.
Если же Вы вынуждены работать (хотя бы иногда) не в мировой системе координат; если Ваши пользователи иногда (будем милосердными) устанавливают Elevation не 0 - то сейчас мы и будем говорить о проблемах работы в таких условиях и не всегда очевидными особенностями применения ActiveX.
Далее
Создание записей в таблицах стилей, слоев и т.п.
Как показала практика, приведенный пример не совсем жизнеспособен. Он прекрасно будет работать только в том случае, если в файле либо уже существует указанный текстовый стиль (и тогда выполняется его модификация), либо в файле с момента его открытия этого стиля еще не существовало.
Если же стиль был создан, а потом удален, то строка
1 |
tblStyle.Has(StyleName) |
вернет true, несмотря на то, что стиль имеет свойство IsErased = true. Что же делать?
Далее
Как же писать коды?
Прочитав статьи Стили программирования и Сравнение скорости выполнения кода, возникает вполне логичный вопрос: а как же писать? Через AutoLISP или VisualLISP?
Далее
Стили программирования
Как известно, есть 3 стиля программирования: "инженерный", "программисткий" и "объектный".
Их описания можно посмотреть здесь - ни отнять, ни прибавить. Но интересно не это, а качество кода.
Код пишется не просто так: обычно создаваемые объекты надо потом как-то обрабатывать. Поэтому критериями качества сейчас примем:
- длина кода
- устойчивость работы
- возможность получения созданного объекта
- легкость и прозрачность внесения изменений в объект.
Для конкретизации примера будем создавать объект отрезка и однострочного текста
Далее
Сравнение скорости выполнения кода
Не всегда, но бывает необходимо проверить - какой вариант функции работает быстрее. Здесь мы и рассмотрим уже готовый вариант.
Далее
Как сделать отмену результата выполнения?
Разрабатываемые коды, как правило, что-то делают с файлом dwg: рисуют объекты, вносят изменения в таблицы файла и т.п. При этом могут меняться системные переменные, отрисовываться временные примитивы и т.п.
Все будет замечательно, если пользователь сделает все сразу и верно. А если нет? А если понадобится отменять выполненную команду?
Далее
Анонимные (lambda) функции
Когда я начинал работать с lisp'ом, я долго не мог понять смысла применения lambda-функций. И что это такое - достаточно долго для меня оставалось тайной (сказывался подход Visual Basic'a). На самом деле этот механизм очень удобен и прост.
Далее
Разница между ‘ и function
Просматривая чужие коды, можно наткнуться на странное применение ' и function - их ставят "как бог на душу положит". Вот примеры вполне адекватных кодов:
1 | (mapcar '1+ '(1 2 3)) |
1 | (mapcar (function 1+) '(1 2 3)) |