воскресенье, 29 декабря 2013 г.

Локализация плагинов AutoCAD: динамическое переключение локализаций интерфейса и справки

В данной заметке показан способ локализации  графического интерфейса плагина и его справочной системы. Помимо этого, продемонстрирован способ динамического переключения локализаций отдельно для графического пользовательского интерфейса плагина и отдельно для его справочной системы.

среда, 25 декабря 2013 г.

AutoCAD, фильтры выбора, LINQ и методы расширения

Возможности SelectionFilter, предоставляемого AutoCAD .NET API достаточно ограничены. Далеко не любое условие выборки можно сформировать с его помощью. Например, недавно некоторым нашим сотрудникам потребовалась команда, которая бы в текущем пространстве (Model\Layout) выбирала любые полилинии, имеющие указанное в запросе количество вершин. Такую выборку с помощью фильтров AutoCAD сделать не удастся.

вторник, 17 декабря 2013 г.

getc и fgetc: в чём различие?

В языках C и С++ функции getc и fgetc делают одно и то же: читают из указанного потока очередной символ. Однако в виду того, что getc может быть реализована в виде макроса, мы получаем следующие особенности использования указанных выше функций (см. "Advanced Programming in the UNIX Environment, 3rd Edition", стр. 151):

четверг, 12 декабря 2013 г.

CHSPACE и аннотативные размеры в AutoCAD

Проблема, обозначенная в этой заметке, наблюдалась в AutoCAD 2009 SP3, в то время как в AutoCAD 2014 SP1 всё работало корректно. В какой именно версии AutoCAD был исправлен обозначенный в тексте баг, мне не известно, а проверить нет возможности. Возможно, что кому-то опубликованная здесь информация пригодится и в более новой, чем 2009 версии.

вторник, 10 декабря 2013 г.

Пользовательские свойства групп листов в подшивке AutoCAD

Стандартная реализация менеджера подшивок AutoCAD такова, что пользователь может создавать произвольное количество пользовательских свойств уровней подшивки и листа, но не набора листов. Компания Autodesk неоднократно получала от своих пользователей просьбы исправить эту досадную недоработку однако, руководствуясь маркетинговой политикой компании, эти просьбы были проигнорированы. Лично я не питаю никаких иллюзий на тему того, что в обозримом будущем ситуация исправится. Однако отсутствующий функционал достаточно востребован среди пользователей, как русских, так и зарубежных. Возникает вопрос: можно ли это как-то исправить?

пятница, 22 ноября 2013 г.

Кое-что о DWL и DWL2 файлах

Файлы с расширением DWL и DWL2 автоматически создаются AutoCAD'ом и, как пишет Александр Ривилис:
Оба файла используются для блокировки одновременного доступа к файлу и содержат информацию с какого PC и каким пользователем и в какое время открыт dwg-файл. dwl-файл содержит информацию в текстовом виде, а dwl2-файл в виде xml.
 Эти файлы исчезают при закрытии AutoCAD, если его работа не была завершена аварийно. Однако есть один нюанс, который может быть интересен для .NET-программистов...

четверг, 14 ноября 2013 г.

О загрузке плагинов в AutoCAD

Данную заметку решил создать для того, чтобы давать не неё ссылку пользователям, когда у них вдруг возникнут проблемы с загрузкой в AutoCAD плагинов, написанных на AutoLISP, Visual LISP, VBA, C++ или .NET, поскольку процесс загрузки в последних версиях AutoCAD стал не только более безопасным, но и менее прозрачным для рядового обывателя.

Компиляция .NET плагинов AutoCAD, использующих TLB файлы

Столкнулся с такой проблемой: не удалось в MS Visual Studio 2012, установленной на Windows 7 x64 скомпилировать этот код для AutoCAD 2009 SP3 x86, хотя все ссылки были обновлены на версию x86 и библиотеки использовались версии 17, как и полагается.

среда, 13 ноября 2013 г.

Перенумерация листов в подшивках AutoCAD

Написал пару команд AutoCAD, позволяющих обновить нумерацию всех листов сразу во всех открытых в данный момент подшивках.

понедельник, 11 ноября 2013 г.

Об использовании больших мониторов при проверке чертежей

В одной из последних заметок я писал об электронной проверке чертежей. До этого пользователи боялись, что проверять чертежи на экранах мониторов будет не удобно, т. к. мол "они не видят перед собой сразу весь лист целиком", подразумевая листы больших форматов, например A1 или A0. 

среда, 16 октября 2013 г.

Структура электронной версии рабочего проекта в AutoCAD

Подумал, раз уж выложил информацию по электронной проверке чертежей, то может стоить выложить и др. инструкции (вдруг кому полезны будут)... В этой записи я выкладываю инструкцию по формированию электронной версии проектов с использованием механизма подшивок (Sheet Set Manager). Данная инструкция была написана мною несколько лет назад для пользователей AutoCAD 2009, поскольку именно эта версия обозначенного САПР используется в нашей организации.

пятница, 11 октября 2013 г.

Design Review: электронная проверка чертежей

Сегодня внёс небольшие корректировки (разъясняющего характера) в ранее написанную мною инструкцию по электронной проверке чертежей. Практика показала, что данный способ проверки и исправлений полученных замечаний достаточно быстро осваивается пользователями и многими из них признан более удобным, чем проверка бумажной версии, с последующим внесением исправлений в электронную на основе пометок, оставленных на бумаге. Удобство оценили как исполнители, выполняющие исправления на основе полученных замечаний, так и сами проверяющие (ГИПы и нормоконтролёры).

воскресенье, 29 сентября 2013 г.

Установка более новых версий компиляторов gcc и g++

Маленькая шпаргалка на тему того, как в Linux установить наиболее "свежие" на сегодняшний день release-версии компиляторов gcc и g++. В моём случае - установить версии 4.8.1, взамен предустановленных по умолчанию версий 4.6.3 в операционной системе Ubuntu 12.04 LTS.

среда, 18 сентября 2013 г.

О некоторых пользователях AutoCAD и "перспективах" на будущее...

Сегодня у меня был особенно "нервенный" день... Всё благодаря "особо одарённым пользователям". Всё ещё находясь под "впечатлением" от общения с некоторыми моими юзерами, я полез на форум в интернете и в одной из тем, созданной очередным "знатоком" на двг.ру, дающем заявления на тему "удобства\неудобства" работы с внешними ссылками (при том, что пользоваться ими он, как оказалось, не умеет) я изложил свои печальные мысли по текущему положению дел, однако с вероятностью 100% моё сообщение будет удалено администратором (см. P.S. ниже). С данным случаем всё предельно ясно, однако в ряде др. случаев (не моих) поступки "тамошнего" администратора, к сожалению, не поддаются какой-либо внятной логике... В виду этого решил изложить свои печальные мысли по теме в данной записи блога... В свете чрезвычайной эмоциональности, в которой я сегодня нахожусь после продолжительных стрессов, после общения с некоторыми людьми, текст этой темы местами пестрит завуалированной нецензурной лексикой (впечатлительным лучше не читать)...

четверг, 12 сентября 2013 г.

О влиянии исключений на производительность в C++

Несколько лет назад я сравнивал производительность кода, использующего Exceptions в .NET, и кода, работающего в обход такой обработки. Результаты опубликовывал здесь. Как видим, разница была колоссальная: 5мин. 30 сек., против 0,7 сек. К сожалению, в C++ обработка исключений так же является весьма накладным занятием...

воскресенье, 18 августа 2013 г.

Установка ARXWizard 2009 в Windows 7

Маленькая шпаргалка на тему того, как в Windows 7 успешно установить ARXWizard для MS Visual Studio 2005. Необходимость столь старой версии IDE обусловлена тем, что ARX плагины для AutoCAD 2009 (до сих пор используемой в нашей организации), пишутся именно с использованием её инструментов. нужно предварительно выполнить пару дополнительных шагов, для того, чтобы MSI пакет отработал должным образом и ARX шаблон проекта появился в перечне IDE.

четверг, 15 августа 2013 г.

Создание DLL файла ресурсов для Partial CUI файла

Графические изображения, которые используются в CUI файлах, могут браться как из внешних BMP файлов, так и из неуправляемого DLL файла ресурсов, в который эти изображения помещены. Второй способ более удобен в использовании. В этой записи я покажу, как создавать такие DLL файлы и как их использовать в CUI файлах.

среда, 7 августа 2013 г.

VS 2008 SP1: Error result 1 returned from 'C:\Windows\system32\cmd.exe'.

Дабы иметь возможность писать плагины под AutoCAD не только на .NET, но и на C++, мне пришлось установить на компьютер сразу несколько версий IDE, т.к. каждой версии AutoCAD соответствует своя версия MS Visual Studio. Поскольку мои юзеры в большинстве своём используют AutoCAD 2009, то и установить пришлось версии, начиная с 2005-й, т.е.: 2005, 2008, 2010 и 2012. Для начала пришлось снести уже установленную версию VS 2012, дабы избежать проблем при установке, после чего установил все версии в порядке старшинства, начиная с самой древней и заканчивая наиболее свежей. Всё установилось без проблем. Однако, в процессе написания  на C++ тестового "Hello World", при сборке проекта в среде VS 2008 SP1, вылезли неожиданные подводные камни (в MS VS 2010 подобных проблем не возникло). Вот об этом собственно и собираюсь написать.

пятница, 2 августа 2013 г.

Использование в коде C библиотек, написанных на C++

На C++ можно писать библиотеки, которые можно было бы использовать в др. языках программирования, в т.ч. не являющихся объектно ориентированными. В частности, меня интересовал вопрос о написании на C++ таких библиотек, которыми можно было бы воспользоваться в C. Я в курсе о том, что следует использовать extern "C", однако этим дело не заканчивается, поскольку по ходу реализации такой библиотеки выявляется большое количество подводных камней, которые следует как-то обходить.

четверг, 1 августа 2013 г.

AutoCAD и nanoCAD: о совместимости .NET кода

nanoCAD хорошо развивается и кое в чём даже переплюнул компанию Autodesk. Причём это "кое-что" является весьма важной способностью, отсутствующей в AutoCAD и непонятно когда она в нём появится (в чём лично я вообще сомневаюсь). В данной заметке хочу разместить обсуждение кода, ориентированного на начинающих программистов и опубликованного в этой статье на хабре.

четверг, 18 июля 2013 г.

Локализация ISO/IEC 14977 : 1996(E) (Extended BNF)

Перевёл себе для работы Стандарт ISO/IEC 14977: 1996(E), описывающий Extended BNF

Возможно материал будет интересен и др. людям, поэтому выкладываю результат в сеть для свободного использования. Обозначенная google-группа, создана для корректировки текущей версии перевода, замечания/исправления приветствуются.

суббота, 6 июля 2013 г.

Сборка MS Visual C++ проекта под платформу x64

Для того, чтобы скомпилировать MS Visual C++ проект под платформу x64, в настройках этого проекта потребуется выполнить несколько больше изменений, чем это обычно потребовалось бы для проекта написанного, к примеру, на .NET.

вторник, 2 июля 2013 г.

Объём утечки памяти при выделении её с помощью new для нулевого количества байт

Заинтересовал такой вопрос: если используя оператор new выделить память для массива, указав в качестве его размера значение 0, после чего не вызывать оператор delete, то будет ли утечка памяти, и если будет то в каком объёме?

суббота, 29 июня 2013 г.

Создание DLL консольными средствами Visual Studio

MS Visual Studio имеет графический интерфейс для разработки приложений и управления их проектами и решениями. Однако за кулисами всё выполняется консольными утилитами, так же входящими в состав этой IDE. В данной заметке я покажу маленький пример создания dll файла консольными средствами MS Visual Studio, с последующим его использованием в другом приложении. В качестве языка программирования использован C++. Весь приведённый ниже программный код можно набирать в любом текстовом редакторе (я использовал Notepad++).

среда, 19 июня 2013 г.

Баг компилятора MS Visual Studio 2012


Недавно наткнулся в MS Visual Studio 2012 на неприятный баг... Обозначенная в данной теме ошибка компилятора MS Visual Studio 2012 не является смертельной и её можно обойти (ниже способ будет указан), однако она опасна, т.к. наличие оной может неожиданно привести либо к неправильной работе программы (если в глобальном пространстве имён компилятором будет обнаружена другая функция с такой же сигнатурой, пусть даже не вами объявленная), либо, в противном случае, выдаст ошибку времени редактирования связей.

четверг, 23 мая 2013 г.

Как повысить качество программного кода (несколько советов)


На вскидку несколько основных правил, позволяющих повысить качество программного кода (самому вспомнить и, возможно, будет интересно кому-то ещё). Следует уточнить, что эти рекомендации проверены годами и исходят от авторитетных программистов, например от Б. Страуструпа (создатель языка C++):

вторник, 21 мая 2013 г.

Генеральному Директору Издательства "ДИАЛЕКТИКА-ВИЛЬЯМС" Виктору Штонду


Доброго времени суток, Виктор.

Данное сообщение опубликовываю в своём блоге, и даю Вам на него ссылку, т.к. в Вашем блоге установлено ограничение на количество вводимых символов в комментариях, а адреса Вашей электронной почты не знаю. Я занимаюсь программированием, в виду чего, время от времени, покупаю книги этого направления, в т.ч. и книги Вашего издательства. Информация, изложенная ниже, относится к качеству перевода, а так же к исправлениям ошибок, публикуемых авторами книг.

пятница, 19 апреля 2013 г.

Аудит и пересохранение чертежей без наличия установленного САПР.

Недавно оформил подписку  Associate Member. Сейчас потихоньку знакомлюсь с Teigha и Teigha.NET (по сути между ними разницы нет). Обозначенные мною программные библиотеки удобно использовать как для написания своего САПР, что собственно и сделали эти компании, так и для разработки небольших утилит, предназначенных для решения небольшого набора конкретных задач. Библиотека позволяет работать с чертежами DWG, файлами подшивок, а так же чертежами DGN, не требуя при этом наличие установленного САПР (подробнее о возможностях - здесь).

среда, 27 марта 2013 г.

CAD Recovery на смену AcadSecurity

Некоторое время назад я написал утилиту AcadSecurity, задачей которого было удаление "вирусов" написанных на AutoLISP и Visual LISP, а так же восстановление AutoCAD и пользовательских наборов плагинов, ранее заражённых вредоносным кодом. 

понедельник, 25 марта 2013 г.

Палитры инструментов AutoCAD и версия Windows

В нашей организации на сервере хранится общий набор палитр инструментов  (tool palettes), тех, что открываются/закрываются в AutoCAD по нажатию Ctrl + 3. Палитры созданы "родными" средствами AutoCAD 2009 SP3 и в нём же они и используются. На локальных машинах находятся локальные копии того, что находится на сервере. Если возникает необходимость внести изменения в общие палитры инструментов, то я делаю это на своей локальной машине, после чего удаляю серверный набор палитр, заменяя его отредактированной мною локальной версией. Затем с сервера все выполненные мною изменения автоматически распространяются по всем локальным машинам. Такой подход успешно работал на протяжении нескольких лет, до недавнего времени...

среда, 20 марта 2013 г.

Контекстное меню элементов в AutoCAD

Маленький пример на тему работы с контекстным меню элементов в AutoCAD. Показаны способы динамического изменения состава и свойств элементов меню, в зависимости от тех или иных условий (на усмотрение разработчика).

вторник, 19 февраля 2013 г.

Отключение автоматической загрузки файлов acad*.lsp и acad*.fas.

Как я уже ранее писал - в AutoCAD 2013 SP1.1 появилась возможность включать\отключать автоматическую загрузку файлов acad*.lsp и acad*.fas. Однако, при желании, реализовать это можно и в более ранних версиях AutoCAD.

среда, 16 января 2013 г.

DBObject.HandOverTo() - подмена существующего объекта новым, с сохранением ObjectId и Handle оригинала

Время от времени, в AutoCAD возникает необходимость преобразовать (не заменить, а именно преобразовать) один примитив в другой. Под преобразованием я подразумеваю, что результат будет иметь те же самые значения ObjectId и Handle, какие имел до операции преобразования, а так же сохранит уже имеющуюся подписку на события. В качестве примера преобразования, которое может потребоваться на практике - преобразовать окружность в дугу.

вторник, 15 января 2013 г.

Мультивыноска с дробью в тексте и отступом от полки

Маленькая зарисовка на тему того, как в AutoCAD программно создать мультивыноску, у которой часть текста оформлена в виде дроби. Тут же показано, как решать всем хорошо известную проблему с прилипанием текста к полке мультивыноски.

пятница, 4 января 2013 г.

Работа с Database в AutoCAD: с использованием транзакций и без них


Сегодня, разгребая мусор в "Моих Документах" нашёл когда-то написанную мною маленькую шпаргалку на тему работы с объектом Database в AutoCAD. Поскольку текст может быть полезен - опубликовываю его здесь.