ADN Open CIS
Сообщество программистов Autodesk в СНГ

06/09/2013

Использование Window.Focus в AutoCAD 2014

Среди новых API в AutoCAD 2014 включен метод Window.Focus. Этот метод очень полезен в том случае если вы используете палитры для вызова команд, которые заставляют AutoCAD запрашивать у пользователя информацию. В предыдущих версиях AutoCAD его редактор не получал фокус пока на нём не был активизирован. Это требовало дополнительного нажатия кнопки мыши. Чтобы избежать этого требовалось или вызвать функцию SetFocus из Win32 API посредством P/Invoke или использовать недокументированный метод Internal.Utils.SetFocusToDwgView.

Опубликовано 06.09.2013     Читать далее >>>
29/08/2013

Использование события выбора ячейки в таблице

В момент выбора ячейки вы можете захотеть узнать её номер ряда и колонки в таблице.

Подходящего события в публичном AutoCAD .NET API нет, но в пространстве имён "Autodesk.AutoCAD.Internal.Reactors" есть такое событие. Обратите внимание, что использование любых классов/методов из пространства имён "Internal" не поддерживается и они могут быть изменены в любое время. Так что если вы собираетесь их использовать, проверьте их полностью, чтобы убедиться что они работают корректно в вашем приложении.

Опубликовано 29.08.2013     Читать далее >>>
26/08/2013

Динамически блоки с операцией Растянуть (Stretch)

Средствами API невозможно создать динамический блок с операцией Растяни.

Одним из возможных путей обойти это ограничение – это создать набор чертежей с динамическими блоками. Эти чертежи должны быть созданы с использованием пользовательского интерфейса AutoCAD. Такие рисунки можно вставить при необходимости в любой другой чертеж с использованием AutoCAD API.

Опубликовано 26.08.2013     Читать далее >>>
23/08/2013

Две типичных ошибки работы с транзакциями

Возможно, это вырастет в целую серию о типичных ошибках.

Моя последняя статья была об обработке прерываний, и Adam написал замечание о неизвестных командах. Теперь две наиболее типичных ошибки людей работающих с транзакциями, когда они только начали использовать AutoCAD .NET API, которые могут потратить много часов для отладки и будут чувствовать себя крайне глупо, когда поймут в чем причина).

Опубликовано 23.08.2013     Читать далее >>>
14/08/2013

Изменение определения блока для одного вставленного блока

Ниже код, который меняет определение блока у конкретной вставки блока. Код просит у пользователя указать вставку блока и изменяет определение блока так, что вставка блока становится вставкой нового определения блока.

Опубликовано 14.08.2013     Читать далее >>>
12/08/2013

Использование 64-битного ActiveX компонента из .NET сборки

Вопрос:

Я использовал утилиты ADN (ADN utilities), которые включают несколько ActiveX компонентов. Теперь я портирую мой проект на 64-разрядную Windows и скачал 64-разрядные версии этих компонентов, однако я не могу поместить их на мою форму в Visual Studio.

Ответ:

Visual Studio - 32-разрядное приложение даже на 64-разрядной операционной системе, и она не поддерживает 64-разрядные ActiveX компоненты в Дизайнере форм (Form Designer). Но вы можете создать компонент программно в вашем коде.

Опубликовано 12.08.2013     Читать далее >>>
15/07/2013

Как найти все вставки динамического блока

В предыдущей статье Баладжи Рамамурти (Balaji Ramamoorthy) показал нам как найти имя динамического блока по одной из вставок блока. Эта статья показывает нам как двигаться в противоположном направлении – найти все вставки динамического блока.

Опубликовано 15.07.2013     Читать далее >>>
24/06/2013

AutoCAD 2014 API (.NET API)

Филипп Леефсма (Philippe Leefsma) создал презентацию (DevTV) о новшествах в AutoCAD 2014 API. Вы можете скачать её отсюда (на английском).

Опубликовано 24.06.2013     Читать далее >>>
22/06/2013

Как в своём коде используя AutoCAD .NET API переопределить команду ССЫЛРЕД (_REFEDIT)?Автор: Александр Ривилис

Как в своём коде используя AutoCAD .NET API переопределить команду ССЫЛРЕД (_REFEDIT)?

Вопрос: Мне нужно в своем коде переопределить команду _REFEDIT так, чтобы в некоторых случаях (например, имя чертежа содержало строку Test) вызывался мой код, а в некоторых стандартная команда _REFEDIT. Я проверил, что для команды ОТРЕЗОК (_LINE) работает такой код:

Опубликовано 22.06.2013     Читать далее >>>
19/06/2013

eInvalidInput при создании штриховки с пользовательским шаблоном

Если метод SetHatchPattern возбуждает исключение eInvalidInput при создании пользовательского шаблона штриховки, есть несколько моментов, которые стоит проверить:

Опубликовано 19.06.2013     Читать далее >>>
18/06/2013

Как установить путь к двум и более каталогам конфигурации принтеров (PrinterConfigPath) при помощи AutoCAD .NET API?Автор: Александр Ривилис

Как установить путь к двум и более каталогам конфигурации принтеров (PrinterConfigPath) при помощи AutoCAD .NETAPI?

Вопрос: Я пытаюсь установить два пути к каталогам конфигурации принтеров, но AutoCAD завершается с FATAL Error:

Dim pref As AcadPreferences = Autodesk.AutoCAD.ApplicationServices.Application.Preferences
pref.Files.PrinterConfigPath = "T:\wPlotters;T:\Plotters"

Если указан только один каталог, то всё работает нормально, а при двух и больше – аварийное завершение AutoCAD.

Ответ: Предыдущие версии AutoCAD не позволяли использовать более одного каталога в качестве пути доступа к файлам конфигурации принтеров. Поэтому метод, использующий AcadPreferences, не работает. Вместо него можно использовать метод чтения/установки переменной окружения PrinterConfigDir при помощи функций acedGetEnv/acedSetEnv (из состава ObjectARX). Для того, чтобы воспользоваться ими в AutoCAD .NET API используем P/Invoke. Ниже приведён код на C# и VB.NET:

Опубликовано 18.06.2013     Читать далее >>>
12/06/2013

.NET DllImport метода определенного в C++

Предположим, что есть функция voidMyFunc() на C++, которую нужно вызвать из .NET. Вызов DllImport может распознавать только функции, объявленные с модификатором dllexport.

Опубликовано 12.06.2013     Читать далее >>>
10/06/2013

ObjectId.GetObject()

Большинство примеров для AutoCAD .NET API созданы с использованием метода Transaction.GetObject() для открытия объектов, содержашихся в базе чертежа. Код, который использует этот метод, обычно выглядит приблизительно так:

Опубликовано 10.06.2013     Читать далее >>>
10/06/2013

Как получить идентификаторы всех объектов (ObjectId), вставленных через буфер обмена.Автор: Александр Ривилис

Вопрос: Как средствами AutoCAD .NET API получить массив идентификаторов объектов, вставленных при помощи команды ВСТБУФЕР (_PASTECLIP).

Ответ: Для этой цели следует подписаться на два типа событий:

1) события начала и завершения команды.

2) события базы данных (добавление / удаление объекта в базу).

Опубликовано 10.06.2013     Читать далее >>>
07/06/2013

System.IO. FileNotFoundException: Невозможно загрузить файл или сборку 'Autodesk.AutoCAD. Interop, Version=18.0.0.0

Вопрос:

Моё .NET-приложение ссылается на версию Autodesk.AutoCAD.Interop 18.0.0.0 сборки из ObjectARX 2010 SDK, так что он должен работать с AutoCAD 2010, 2011 и 2012. К сожалению, если мое приложение выполняется на компьютере, где установлен только AutoCAD 2011 я получаю FileNotFoundException

System.IO.FileNotFoundException: Невозможно загрузить файл или сборку 'Autodesk.AutoCAD.Interop, Version=18.0.0.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b' или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: 'Autodesk.AutoCAD.Interop, Version=18.0.0.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b'

Ответ:

Опубликовано 07.06.2013     Читать далее >>>
30/05/2013

Чтение Таблицы Свойств Блока для динамического блока

Для динамического блока мы можем создать Таблицу Свойств Блока, которая определяет и управляет параметрами и свойствами. Она доступна, когда запущена команда БЛОКРЕД (BEDIT) для динамического блока, как показано ниже.

Опубликовано 30.05.2013     Читать далее >>>
30/05/2013

Чтение и изменение настроек AutoCAD (.NET)

Изменение настроек AutoCAD возможно при помощи прямого изменения реестра или с использованием ActiveX объекта Preferences. Заметим, что прямое изменение реестра не влияет на настройки текущей сессии AutoCAD. ActiveX объект Preferences

Опубликовано 30.05.2013     Читать далее >>>
30/05/2013

Точки останова в пользовательской форме не обрабатываются при отладке .NET - приложения для AutoCAD 2012 в Visual Studio 2010

Вопрос:

Я пытаюсь создать .NET – приложение для AutoCAD 2012 в Visual Studio 2010. Точки останова в общих классах обрабатываются (то есть при отладке на них происходит остановка), а вот в пользовательских формах не обрабатываются. Я прочитал эту статью: http://through-the-interface.typepad.com/through_the_interface/2010/04/hitting-breakpoints-in-net-class-libraries-while-debugging-with-visual-studio-2010.html. Но она не помогла. Я пробовал и “Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(oForm)” и “oForm.ShowDialog()”, но результат один и тот же. Что еще можно сделать?

Ответ:

Отладчик VS2010 достаточно плохо работает с фиберами (fiber); решение заключается в том, чтобы отключить фибера в AutoCAD .

Опубликовано 30.05.2013     Читать далее >>>
30/05/2013

Список определений подложек DWF в чертеже

Каждое определение DWF-подложки хранится в словаре именованных объектов (NOD) в словаре с именем "ACAD_DWFDEFINITIONS". Следующий код показывает как можно пройтись по словарю "ACAD_DWFDEFINITIONS" и распечатать все определения всех DWF-подложек.

Опубликовано 30.05.2013     Читать далее >>>
30/05/2013

Создание новой ViewTableRecord с камерой и целью

Этот пример на C# запрашивает точки цели и камеры. Положение камеры может быть вычислено как сумма вектора направления ViewTableRecord и точки цели.

Опубликовано 30.05.2013     Читать далее >>>