Получение штриховки (Hatch) из мультиполигона (MPolygon)Автор: Александр Ривилис
Вопрос: В dwg-файле имеется множество мультиполигонов (MPolygon). Как из них можно получить штриховки (Hatch)? Метод MPolygon.Hatch в большинстве случаев дает штриховку, у которой в панели свойств неопределенна площадь.
Ответ: Ниже приводится код, который позволяет получить из MPolygon корректную (т.е. имеющую площадь) штриховку.
Создание Polyline3d без использования транзакции
Вы возможно в курсе, а может и не в курсе, что управлять примитивами в базе данных AutoCAD можно без использования транзакций... В примере ниже показано как с помощью методов Open и Close (Close происходит при выполнении закрывающейся фигурной скобки оператора using) создать Polyline3d и связанные с ней вершины PolylineVertex3d.
Мне нравится использовать Open и Close вместо транзакций по ряду причин:
Событие закрытия PaletteSet
PaletteSet в AutoCAD становится невидимым когда нажимается кнопка закрытия. Чтобы узнать что палитра закрыта можно использовать событие "StateChanged".Зумирование до границ окна с использованием CommandASync
В этой статье я проиллюстрирую пример использования AutoCAD 2015 API "Editor.CommandAsync".Вопрос: Можно ли зумировать в пределах окна до тех пор пока не будет нажата кнопка ESC или отмена?
Ответ: Да. Это возможно с помощью CommandAsync.
Добавление значка к курсору в AutoCAD 2015 с помощью .NET
В AutoCAD API 2015 появилась возможность добавлять свой значок к курсору.
Следует отметить, что значок курсора – это BITMAP-объект. Для того, чтобы у вас был прозрачный фон помните, что в качестве прозрачного фона AutoCAD использует пикселы (R=192, G=192, B=192)
Я решил добавить значок курсора в одной команде и удалить его в другой – для того чтобы увидеть как это будет работать в начале выбора примитивов и в других случаях - но более характерно добавлять значок при запуске JIG и удалять его сразу после его завершения.
Не-DWG окна в AutoCAD 2015 с использованием .NET
AutoCAD 2015 позволяет создавать Не-DWG окна документов. Такие Не-DWG окна документов появляются как вкладки наряду с другими окнами документов чертежей.В конце этой статьи я приложил готовый C# проект для создания Не-DWG окна документа и демонстрации его использования.
UNDO удаляет обновленные записи словаря
У меня есть команда, которая добавляет новую запись в Словарь Именованных Объектов (NOD) или обновляет значение существующего.
Проблема в том, что когда я запускаю команду дважды (во второй раз запись уже есть, так что в этот раз только обновляется ее значение) и когда мы запускаем команду _UNDO, тогда вместо того, чтобы вернуть предыдущее значение записи NOD, она удаляется полностью.
Серилизация класса .NET в базу чертежа AutoCAD
Вопрос:Я хотел бы выполнить серилизацияю моего .NET класса в чертеж AutoCAD, так чтобы я мог воссоздать этот класс (десерилизация его), когда чертеж снова открывается. Как можно это сделать?
Ответ:
Вы можете использовать средства серилизации .NET вашего класса в двоичный поток, а затем можно сохранить в кучу бинарных кусков. Вы можете сохранить в XData объекта или в Xrecord.Data примитива или в объект в Словаря Именованных Объектов (NOD). DevNote TS2563 рассказывает нам отличия в использовании XData и Xrecord. Если вы сохраняете в XData, тогда ResultBuffer должен начинаться с имени зарегистрированного приложения REGAPP. Вот пример, который это показывает:
Сохранение и получение значений enum в ResBuf в .NET
Если вы сохраняете значение перечисления (enum) в resbuf как "ExtendedDataInteger16", тогда вы можете получить исключение неверного типа при попытке прочитать сохраненное значение из resbuf в перечисление.
Чтобы исключить эту ошибку, нужно сохранять значение как "ExtendedDataIneger32" или использовать "Enum.ToObject" как показано ниже:
Используем ActiveX API GetBoundingBox в .NET
Ниже код, показывающий как использовать activeX API GetBoundingBox в AutoCAD.NET. Так как GetBoundingBox возвращает точки, нам понадобится вызывать метод "InvokeMember" с параметром "ParameterModifier".Штриховка при помощи AutoCAD .NET API
Ниже код показывает процедуру создания ассоциативной штриховки с помощью .NET. Прежде чем сделать штриховку ассоциативной, она должна быть добавлена в базу.
Вызов PInvoke ObjectARX AcArray для Hatch.AppendLoop in C#
Это смешно, но иногда такие вещи встречаются. Совсем недавно общался с разработчиком, который рассказывал мне о проблемах использования смешанного (“mixed”) кода (C++) Ему приходилось привязываться к конкретной версии .NET, так как без этого не работали другие связанные с этой части программы.Изменения в графике в AutoCAD 2015
Ниже важные изменения в графике (модули Autodesk.AutoCAD.GraphicsSystem и Autodesk.AutoCAD.GraphicsInterface) произошедшие в AutoCAD 2015.
Создание выноски-сплайна при помощи Jig
Ниже код, который позволяет создать выноску-сплайн при помощи EntityJig. Это модифицированная версия из этой статьи в блоге Киана.
Перемещение выбранного примитива в центр вида
Ниже код, который позиционирует выбранный примитив в центр вида. Большая часть кода подобна тому, который используется при зумировании примитива, за исключением того, что не меняется ни высота, ни ширина вида. Меняется лишь центр вида в DCS.API для восстановления чертежа - новый API в AutoCAD 2015
В течении продолжительного времени сообщество программистов просило дать возможность восстановления чертежей с помощью API. Этот запрос наконец-то был реализован в AutoCAD 2015. Теперь класс коллекции документов (DocumentCollection) приобрел новый метод AppContextRecoverDocument, которому передается имя чертежа для восстановления. Этот API присутствует и в ObjectARX и в .NET. В ObjectARX используется метод AcApDocManager::appContextRecoverDocument().
API для проверки чертежа - новый в AutoCAD 2015
В AutoCAD 2015 вы можете программно проверить файл чертежа с использованием API для проверки чертежа. Вы можете даже попробовать исправить ошибки в чертеже если использовать соответствующий аргумент API. Это API появилось и в ObjectARX и в AutoCAD .NET API.
В ObjectARX используется функция Acad::ErrorStatus acedAudit(AcDbDatabase* , bool bFixErrors, bool bEcho).
SystemVariableEnumerator - новый класс в AutoCAD 2015
Новый класс SystemVariableEnumerator обеспечивает возможность пройтись по всем публичным системным переменным и получить их имена, типы данных, диапазон изменения (если есть), статус «только для чтения» и где они хранятся. В ObjectARX соответствующий класс называется AcEdSysVarIteratorПример использования:
Когда метод IsEffectivelyErased возвращает True
Для объектов, которые содержатся в базе данных и которые не были сами удалены может быть три причины по которым isEffectivelyErased() может вернуть true:
Создание блока с многострочным определением атрибута
Это пример кода, который создает определение блока с многострочным определением атрибута, а затем создает вставку блока из определения блока.