Массив по траектории в AutoCAD

Массив по траектории позволяет распределить элементы вдоль сколь угодно сложной полилинии.

Рассмотрим пример. Расставим отрезки вдоль полилинии.

В ленте нужно выбрать элемент “Массив по траектории”.



Читать далее «Массив по траектории в AutoCAD»

Прямоугольный массив в AutoCAD

Массив в AutoCAD позволяет создать несколько копий одного объекта с заданными параметрами копирования.

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

Прямоугольный массив может пригодится для распределения одинаковых объектов на площади – например, колонн. Работать будем со следующим объектом.

Читать далее «Прямоугольный массив в AutoCAD»

Привязка размеров в AutoCAD

Привязка позволяет ассоциировать размер с конкретными элементами, к которым он привязан. То есть если размер проставлен между двумя линиями и одну из этих линий перенести – размер удлинится и значение расстояния будет актуализировано.

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

В AutoCAD существует системная переменная, отвечающая за поведение размеров – DIMASSOC, имеющая возможность установки нескольких значений:

  • 0 – новые размеры будут представлять собой отдельные отрезки и текстовые элементы;
  • 1 – новые размеры не привязываются к элементам чертежа;
  • 2 – новые размеры привязываются к элементам чертежа.
Читать далее «Привязка размеров в AutoCAD»

Вставка документа PDF в AutoCAD

AutoCAD отлично работает не только с изображениями, но и с документами формата PDF.
Есть 2 способа вставить PDF файл в чертёж. Какой выбрать зависит от Ваших потребностей.

Читать далее «Вставка документа PDF в AutoCAD»

Включние/выключение окна сохранения AutoCAD

Встречается такая ситуация, что при нажатии кнопки “Сохранить” или “Сохранить как”, автокад не открывает диалоговое окно сохранения, а предлагает вписать путь сохранения в командную строку. Такая же ситуация наблюдается и с открытием чертежей непосредственно из программы.
За это отвечает переменная FILEDIA, значения которой означают следующее:
0 – сохранения и открытие файлов через командную строку;
1 – сохранение и открытие файлов через диалоговое окно.

Урок третий: первый взгляд на код (перевод)

На этом занятии мы более подробно разберём код, написанный на первом занятии. Если вы новичок в программировании, на этом занятии вы познакомитесь с множеством концепций программирования (особенно если вы новичок в объектно-ориентированном программировании). Эти понятия подробно описаны в разделе Дополнительные Материалы в конце этого урока. Вы можете сначала прочитать их или обращаться к ним по ходу занятия.
Запустите Visual Studio и откройте проект. Мы разберём код от начала и до конца.
Ключевые слова
Когда вы смотрите на код в Visual Studio (и в примерах к этому уроку), первое что вы заметите – это раскрашенный текст: для удобного чтения Visual Studio Community изменяет цвет определённых слов в коде. Слова, выделенные синим цветом, называются ключевыми словами, которые могут быть использованы только в определённых ситуациях. Например, вы не можете объявить переменную с именем Imports, так как она зарезервирована для обозначения чего-то специфического в Visual Basic .NET. Просмотрите код в Visual Studio Community и обратите внимание на то, какие слова выделены синим цветом.
Пространство имён
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Первые строки кода начинаются с ключевого слова Imports. При работе с различными сборками библиотек в вашем проекте Visual Basic .NET, часто для различных классов используется одно и тоже имя, например, может быть несколько версий класса Point в различных библиотеках. Чтобы избежать конфликта имён, .NET предоставляет концепцию пространства имён. Пространство имён – это способ организовать классы, объединяя их логически и помогает идентифицировать класс, который вы хотите использовать.
Например, предположим, что в одном районе живут два мальчик с именем Джон. Одним из способов идентификации может быть использование фамилии. Но если у обоих мальчиков фамилия Смит, этого будет недостаточно. Тогда нужно использовать дополнительный идентификатор, например, школу, в которой они учатся. В синтаксисе .NET это будет выглядеть как SchoolA.Smith.John для одного и SchoolB.Smith.John для другого.
Таким образом, вы можете определять использование определённых классов в Visual Basic .NET. Ключевое слово Imports даёт вам прямой доступ к классам, содержащимся в включённом пространстве имён, что позволяет не вводить полное пространство имён при вводе имён классов. Это так же является причиной добавления различных классов пространства имён в список, представленный функцией IntelliSence.
Например, если бы вы не добавили пространство имён Autodesk.AutoCAD.Runtime, вам пришлось бы написать такую строку:
<CommandMethod(“KeepStraight”)>
как
<Autodesk.AutoCAD.Runtime.CommandMethod(“KeepStraight”)>
Добавление пространств имён экономит много времени затрачиваемого на ввод кода.
Ключевое слово Imports – это директива, указывающая компилятору Visual Basic .NET предоставить доступ к содержимому указанного пространства имён из кода в этом исходном файле.
Строка, следующая за директивами Imports, так же связана с пространствами имён.
Namespace HorizontalAttributes
Это определение пространства имён классов, созданных в DLL сборке плагина. В данном руководстве это не важно, но, если кто-то захочет использовать вашу сборку в своём проекте, он импортирует пространства имён, которые вы определили, так же, как вы импортировали различные пространства имён Autodesk.AutoCAD.
Обратите внимание, что существует пространство имён конечных элементов в нижней части MyCommands.vb – такое же, как для классов и подпрограмм.
Класс Commands
Public Class Commands

End Class
Всё в .NET основано на классах. В ходе занятия вы создали два класса: класс Commands – класс, определяющий пользовательскую команду AutoCAD; скоро мы перейдём к классу KeepStraightOverrule.
Класс ваших команд имеет одну переменную – myOverrule – который используется для хранения нашего класса KeepStraightOverrule.
Private Shared myOverrule As KeepStraightOverrule
Это похоже на переменные, которые вы видели раньше, за исключением ключевого слоя Shared. Это ключевое слово означает, что вам не нужно создавать экземпляр вашего класса для доступа к переменной. Аналогично, каждый экземпляр вашего класса, который вы создадите, будет иметь одинаковое значение для этой переменной. Если переменная не была обобщена (shared), то её значение может быть различным в каждом экземпляре класса. На данный момент не нужно беспокоиться об этих деталях.
Обобщённую переменную можно рассматривать как библиотеку. Библиотека содержит информацию, которую каждый может найти при помощи поиска. Обобщённая переменная содержит информацию, которую может найти каждый экземпляр данного класса.
Атрибут CommandMethod
<CommandMethod(“KeepStraight”)>
Треугольные скобки вокруг CommandMethod означают, что это атрибут. Атрибуты определяют определённые свойства (или атрибуты) для сборки или метода. Атрибут CommandMethod сообщает AutoCAD, что он должен запускать метод, который следует за ним, всякий раз, когда пользователь вводит команду KEEPSTRAIFGT в командную строку AutoCAD. Если вы замените «KEEPSTRAIGHT» на «FLURBLE», AutoCAD запустит код в ответ на запрос «FLURBLE».
Подпрограмма ImplementOverrule
Public Shared Sub ImplementOverrule()
If myOverrule Is Nothing Then
myOverrule = New KeepStraightOverrule
Overrule.AddOverrule(
RXClass.GetClass(GetType(AttributeReference)),
myOverrule, False)
End If
Overrule.Overruling = True
End Sub
Подпрограмма ImplementOverrule создаёт новый экземпляр класса KeepStraightOverrule и сохраняет его в переменной класса. Поскольку мы добавили атрибут CommandMethod к этой подпрограмме, AutoCAD вызовет этот код, когда пользователь вызовет вашу пользовательскую команду, и управление будет передано в AutoCAD в конце подпрограммы.
Обратите внимание, что вы использовали ключевое слово Shared, для этой подпрограммы так же как для переменной. Причина этого кроется в том, как AutoCAD обрабатывает классы, которые определяют пользовательские команды. Если подпрограмма с атрибутом CommandMethod не используется совместно, AutoCAD создаст новый экземпляр класса для каждого документа, в котором запускается пользовательская команда. Нам это не нужно, поэтому мы используем наш командный метод (и любые другие методы, свойства или переменные, которые ему нужны). Это означает, что AutoCAD не создаёт лишние экземпляры нашего класса. (Он вообще не должен создавать экземпляр класса чтобы использовать общие методы).
If…Then…End if – это ключевые слова, формирующие условное выражение. Условное выражение позволяет определить, какая часть вашего кода будет выполняться в зависимости от определённых логических условий. Мы рассмотрим условные выражения ещё раз в этом уроке.
Логическое условие – это выражение, которое может быть истинными или ложным. Например, «1+1=2» истинно, но «1+1=3» ложно; ещё пример: «Рыба может плавать» – истина, но «Кирпич плавает» – ложь.
В вашем коде, вы проверяете, создан ли экземпляр класса KeepStraightOverrule и назначили его переменной myOverrule. Если вы первый раз запускаете эту команду после загрузки AutoCAD, значит вы ещё не назначили переменную, поэтому «myOverrule is nothing» истинно, и код инструкции If выполняется. Если же вы запускали эту команду ранее, myOverrule уже хранит экземпляр класса, поэтому «myOverrule is nothing» ложно, а код в операторе If не выполняется.
API AutoCAD содержит чрезвычайно мощный набор классов под названием Overrules. Использование Overrules позволяет изменять поведение стандартного объекта AutoCAD; таких как линия, круг или атрибут блока. Код в выражении If создаёт новый экземпляр класса KeepStrsightOverrule, сохраняя его в myOverrule к классу атрибутов AutoCAD AttributeReference (это класс, который отвечает за атрибут вставки блока).
Последняя строка кода в подпрограмме находится вне оператора If, поэтому она выполняется каждый раз, когда пользователь запускает нашу команду. Он просто гарантирует, что система пернаправления AutoCAD включена.
Класс KeepStraightOverrule.
Следующая часть кода определяет другой класс, но на этот раз мы используем наследование.
Public Class KeepStraightOverrule
Inherits TransformOverrule

End Class
Перемещение или поворот объекта называется преобразованием, поэтому мы используем один из классов Overrule из API AutoCAD – TransformOverrule, чтобы изменить то, как ведёт себя наш атрибут при его преобразовании. API AutoCAD предоставляет нам набор классов Overrule, которые мы можем использовать, но разработчики API не могут знать, как именно мы хотим изменить стандартное поведение объекта. Поэтому они предоставляют нам набор классов Overrule, которые не делаю ничего. Мы добавляем наше стандартное поведение путём получения (наследования) из одного их этих классов и переопределения необходимых нам методов.
Когда AutoCAD хочет преобразовать объект, он вызывает метод TransformBy в экземпляре класса Entity, который он хочет преобразовать, поэтому вы переопределяете эту функцию в TransformOverrule и добавляете ей свой собственный вид поведения. Ключевое слово Overrides сообщает компилятору, что вы заменяете функцию, определяемой в родительском классе TransformOverrule, своей собственной реализацией.
Public Overrides Sub TransformBy(ByVal entity As Entity,
ByVal transform As Matrix3d)
MyBase.TransformBy(entity, transform)
Dim attRef As AttributeReference = entity
attRef.Rotation = 0.0
End Sub
Вы хотите остановить атрибут (класс AttributeReference) имеющий поворот, который отличается от положения параллельному оси X, поэтому сперва сообщите атрибуту AttribyteReference что необходимо запустить его метод TransformBy (MyBase.TransformBy), а затем установите значение Rotation равным 0, для AttributeReference (attRef.Rotation = 0.0).
Этот код также вводит концепцию подбора:
– AttributrReference выводится из Entity.
– TransformBy – это метод класса Entity, поэтому первый параметр, переданный функции TransformBy класса Overrule, имеет тип Entity (entity As Entity).
– Вращение – свойство AttribyteReference.
Как мы получаем доступ к свойству AttributeReference.Rotation, если наша переменная имеет тип Entity?
Ответ – через подбор. Вы можете присвоить экземпляр класса переменной, представляющей любой класс, который предшествует ей в иерархии наследования. Вы только переназначаете класс AttributeReference, поэтому вы знаете, что переменная объекта действительно должна хранить объект AttributeReference.Но пока вы используете параметра объекта в своём коде, вы можете получить доступ только к методам и свойствам класса Entity. Чтобы получить доступ к свойству наследуемого класса (AttributeReference), вы должны привести переменную к переменной нужного типа. В Visual Basic .NET вы можете сделать это просто объявив переменную переменной другого типа. Это вы делаете в строке:
Dim attRef As AttributeReference = entity
Иерархия наследования для атрибута AttributeReference следуюущая DBObject -> DBEntity -> DBText -> AttributeReference, поэтому вы можете аналогичным образом преобразовать переменную в DBObject или DBText.
Следует соблюдать осторожность при подборе, чтобы быть уверенным, что вы применяете переменные правильного типа. Если вы ошибётесь, ваш код приведёт к ошибке. Например, вы не можете использовать атрибут AttributeReference и Line если они не находятся в одной ветви наследования.
Ой! Это куча информации. Было бы легче пройти пробежать по коду по мере его запуска и посмотреть порядок выполнения каждой строки? К счастью это возможно – это называется отладка. Вы научитесь отладке в уроке 5.
Дополнительные материалы.
Объектно-ориентированное программирование.
Из предыдущего урока вы узнали, что программа представляет собой последовательность инструкций, которая сообщает компьютеру, как выполнять одну или несколько задач. Простые программы, обычно, состоят из последовательности или списка инструкций, работающих с переменными – данными, говорящими что происходит в программе по мере её выполнения. Но с увеличением сложности такие линейные последовательности инструкций (подход, также называемый процедурным программированием), могут стать неуправляемыми и в конечном итоге не подойдут для задач, для которых писался код.
Чтобы разрешить проблему сложности, было разработано объектно-ориентированное программирование (ООП), позволяющее по-разному структурировать исходный код, обеспечивая возможность включения его компонентов и повторного использования. ООП предлагает разрабатывать дискретные, многоразовые логические модули программирования, направленные на моделирование объектов из проблемной области и взаимосвязи между ними.
Хорошим примером является карта. Карту города можно рассматривать как модель или упрощённое представление о самом городе, предоставляющее абстрактную информацию, в которой вы нуждаетесь.
Ключом к хорошему объектно-ориентированному дизайну является моделирование элементов предметной области как отдельных объектов, отображающих соответствующее поведение вещей, которые они представляют и взаимодействия между ними.
Класс можно рассматривать как тип, который можно использовать для описания представления вещи. Класс может рассматривать как шаблон, который описывает детали объекта и используется для создания отдельных объектов. Таким образом, классы могут помочь определить общие характеристики объектов своего типа: атрибуты (свойства) и поведение (методы).
Объект является экземпляром класса. Это структурные блоки объектно-ориентированного программирования и могут рассматриваться как переменные – зачастую довольно сложные – которые включают в себя как данные, так и поведение.
Как пример, связь между классом и объектом просматривается в AutoCAD iFeatures. iFeature можно рассматривать как класс. Когда вы создаёт экземпляр iFeature, этот экземпляр может рассматриваться как объект. iFeature это модель или шаблон: каждый экземпляр iFeature имеет набор параметров, определённых iFeature, но имеет разные значения этих параметров. Например, они могут иметь разную длину или ширину.
Классы.
Основой объектно-ориентированного программирования является класс. Класс может рассматривать как шаблон, который описывает детали объекта и используется для создания отдельных объектов. Таким образом, классы могут помочь определить общие характеристики объектов своего типа: атрибуты (свойства) и поведение (методы).
API AutoCAD .NET является объектно-ориентированным, и представляет части AutoCAD, файл DWG и геометрию в DWG файле как набор классов. Вот некоторые классы, которые вы найдёте в API AutoCAD .NET:
– Класс Document – представляет собой документы, открываемые в приложении AutoCAD.
– Класс Database – представляет собой файл DWG просматриваемый в документе.
– Класс Line – представляет собой линии на чертеже.
– Класс Circle – представляет собой окружности на чертеже.
Объект это, экземпляр класса. Это структурные блока объектно-ориентированного программирования и могут рассматриваться как переменные – иногда довольно сложные – которые содержат как данные, так и взаимодействия.
Например, на вашем чертеже множество линий. Каждая линия имеет свою начальную и конечную точку (и цвет, слой, тип линии, вес линии и т.д.), и поэтому каждая линия на чертеже будет представлена собственным экземпляром класса Line в API. Каждая линия — это линейный объект.

Вы будете пользоваться классами двумя способами года будете использовать AutoCAD .NET API. Вы будете использовать предопределённые классы, предоставленные API AutoCAD .NET и NET. Framework, и вы создадите ваши собственные классы для представления логических объектов, используемых в ваших плагинах. Давайте посмотрим, как вы определяете класс в Visual Basic .NET.
Важной концепцией объектно-ориентированного программирования является наследование, которое позволяет настроить или расширить существующий класс, а не писать собственный класс с нуля. Мы затронули эту концепцию ранее в этом уроке и рассмотрим её более подробно позднее.
Следующий фрагмент кода показывает пример простого объявления класса в Visual Basic .NET. При изучении этого вы более подробно ознакомитесь с синтаксисом языка Visual Basic .NET.
Public Class Point
Private mXCoord As Integer
Private mYCoord As Integer

Public Sub SetLocation(ByVal x As Integer, ByVal y As Integer)
Me.mXCoord = x
Me.mYCoord = y
‘ Do some calculations
End Sub
End Class
Первое слово, Public, даёт доступ к классу. Создание доступного класса означает, что любой программист может получить доступ к этому классу в своём собственном приложении. Так API AutoCAD определяет классы (такие как класс Line) для вас чтобы использовать в ваших плагинах. Остальные параметры будут внутренними (если они используются только в этом проекте) или частными (если их использовать только в том контексте, в котором они объявлены). По мере роста ваших навыков программирования вы узнаете, как лучше всего использовать уровни доступности. Пока вы учитесь, используйте доступные классы, если сомневаетесь.
Следующее слово, Class, сообщает компилятору что далее идёт объявление класса. Следующее слово, Point, это имя вашего класса. Обратите внимание, что в конце кода есть инструкция End Class. Весь код между Public Class Point и End Class – это исполнение класса.
Объявление переменных.
Переменные – это места для хранения информации, которую вы можете получить позже. Это программный эквивалент записи того, что вы не хотите забыть.
Private mXCoord As Integer
Private mYCoord As Integer
Эти две строки определяют два переменных члена класса. Переменные члены содержат данные, которые могут использоваться в разных частях кода вашего класса. Вы определяете переменные члены в одном месте и потом можете использовать их в разных местах. Они хранят информацию, заключённую в них, в течении всего жизненного цикла экземпляра класса, но каждый экземпляр класса может иметь различную информацию, хранящуюся в его переменных членах.
Ключевое слово Private применяется для установки доступности для этих переменных, чтобы к ним можно было получить доступ только из класса.
Слово Integer ссылается на тип «Integer», который сообщает компилятору, что вы хотите зарезервировать некоторое пространство для хранения целого числа. Наиболее распространёнными типами, обрабатываемыми Visual Basic .NET, являются числа с плавающей точкой (т. е. десятичные), целые числа и текст (известные как строки). mXCoord и mYCoord являются уникальными именами для идентификации этих переменных.
Примечание: по соглашению большинства программистов префикс имён переменных членов выглядит как `m` или `-m`.
Методы.
Следующий блок кода носит название – метод.
Public Sub SetLocation(ByVal x As Integer, ByVal y As Integer)
Me.mXCoord = x
Me.mYCoord = y
Do some calculations
End Sub
Каждый блок кода в классе, выполняющий определённую задачу (или действие), называется методом. Объявление метода начинается со слова Pyblic, так как мы хотим, чтобы тот, кто будет использоваться наш класс в собственном проекте, мог вызвать этот метод.
Следующее слово – Sub, что означает подпрограмму. Методы в Visual Basic .NET. могут быть либо подпрограммами, либо функциями. Мы обсудим разницу позднее. Обратите внимание, что ключевое слово Sub используется с ключевыми словами End Sub далее в коде. Как и для Class и End Class, выполнение метода содержится между этими строками.
Слово SetLocation – это уникальное имя, которое вы используете для идентификации и использования этого метода.
Часть инструкции, заключённая в скобки () содержит параметры метода. Параметр (или набор параметров) – это вход, предоставляемый методу для использования и работы. Вы должны передать два целочисленных параметра методу SetLocation, когда вы его вызываете. Целые числа, которые мы передаём, называются x и y – мы используем эти имена в коде внутри метода для доступа к параметрам в которые мы вошли.
Внутри метода содержаться такие строки:
Me.mXCoord = x
Me.mYCoord = y
Слово Me идентифицирует текущий экземпляр вашего класса. В первой строке вы получаете доступ к переменной – члену mXCoordэтого экземпляра и поэтому используете выражение Me.mXCoord. Символ «=» называется оператором присваивания и означает, что переменная слева от оператора будет иметь своё значение, изменённое на значение, указанное в справа от оператора. В этом случае вы устанавливаете значение переменной члена mXCoord текущего экземпляра вашего класса Point (используя Me) равного значению, переданному в метод через параметр x.
Следующая строка делает то же самое, но для mYCoord и y.
Строки, начинающиеся с апострофа «`», игнорируются Visual Basic .NET. С помощью них вы добавляете комментарии к вашему коду – комментарий – это текст, который вы пишете простым языком, чтобы описать, что делает ваш код. Вы также можете использовать комментарии, чтобы скрыть часть кода от компилятора, который вы не хотите встроить в свою DLL-версию .NET плагина.
Создание объектов класса.
Теперь у вас есть простой класс, определённый с помощью Visual Basic .NET. Следующий вопрос…
Как вы создаёте объекты этого класса?
Как обсуждалось ранее, объект является экземпляром класса. В приведённом ниже коде показано, как создать объект определённого класса. Эти строки обычно содержаться в реализации другого класса (почти весь код в программе Visual Basic .NET содержится в классах – вы увидите, как AutoCAD запускает ваш код позднее).
Dim pt As Point = New Point
pt.SetLocation(10,10)
В первой строке вы определили новую переменную с именем pt, которая определена как тип Point. Затем вы используете оператор присваивания, чтобы установить его начальное значение как новый экземпляр класса Point, созданный при помощи ключевого слова New. Во второй строке показано, как вызвать метод SetLocation (), передавая значения параметров (x=10 и y=10). Когда эта строка будет выполнена, управление будет передано в указанную выше функцию SetLocation, а она установит mXCoord и mYCoord в значение 10 для экземпляра класса Point, который вы создали и сохранили в переменной pt.
Подпрограммы и функции.
Метод SetLocation () был определён с использованием ключевого слова Sub. Мы определяем метод через Sub, если мы не хотим возвращать какую-либо информацию их этого метода. Но что, если вы хотите создать метод, который взял два параметра, выполнил некоторые вычисления с ними и вернул результат в код, который вызвал метод?
Тогда нужно использовать ключевое слово Function. Мы могли бы добавить функцию к нашему классу Point.
Public Function Multiply(ByVal a As Integer, ByVal b As Integer)As Integer
Return a * b
End Function
Мы изменили ключевое слово Sub на Function; добавление As Integer сообщает компилятору, что этот метод (функция) вернёт значение Integer вызывающему и Return a*b возвращает значение «а» умноженное на «b».
Мы бы вызвали эту функцию следующим образом:
Dim theResult As Integer = pt.Multiply(6 * 7)
После выполнения этой строки кода, переменная theResult будет иметь значение 42.
Обратите внимание, что theResult является пременной, он она не является переменной-членом. В отличие от переменной-члена (которая хранит запись о данных, которые она хранит, до тех пор, пока экземпляр класса, к которому он принадлежит, существует), theResult имеет область, ограниченную методом, в котором она определена, и к ней можно получить доступ только изнутри метода, в котором она содержится. Вот почему в определении theResult использовано ключевое слово Dim вместо Public или Private. Для переменных-членов вы будете использовать только Public или Private. И переменная внутри такой функции не запоминает её значения между вызовами функций (если вы не используете ключевое слово Static – но это выходит за рамки этого урока).
В этом уроке вы будете писать и вызывать подпрограммы и функции.
Свойства.
Основной особенностью Visual Basic .NET и других языков .NET является способность классов иметь свойства. Свойство – это просто способ обеспечения доступа к переменной-члену класса. Вы будете использовать свойства двумя способами:
– Вы получите доступ к свойствам для получения и установки информации для существующих объектов (например, настройки свойств StartPoint и EndPoint для объекта Line);
– Изредка вы будете создавать свойства в своих классах.
Начните с создания своего собственного свойства, а затем вы увидите, как использовать его вне вашего класса. Дописывая код, вот как можно добавить свойство к одному из классов:
Public Class Point
Private mXCoord As Integer
Private mYCoord As Integer

Public Sub SetLocation(ByVal x As Integer, ByVal y As Integer)
Me.mXCoord = x
Me.mYCoord = y
Do some calculations next
End Sub

Public Property X() As Integer
Get
Return Me.mXCoord
End Get
Set(ByVal value As Integer)
Me.mXCoord = value
End Set
End Property
End Class
Вышеприведённый код, выделенный жирным шрифтом, показывает, как вы можете добавить свойство своему классу, будь то для использования в собственном проекте или для использования другими программистами в своих проектах.
Объявление свойства начинается с ключевого слова Public – вы уже знаете, что оно означает. Затем мы сообщим компилятору, что свойство называется X и является целочисленным (Integer).
Get … End Get часть объявления свойства описывающая что происходит когда кто-то считывает значение свойства, а часть Set … End Set делает то же самое когда кто-то пишет или задаёт значение свойства.
В этом примере, наша реализация Set просто устанавливает значение mXCoord в значение параметра value. Обычно вы должны включать код для проверки того, что значение передано допустимо и не устанавливать переменную-член в новое значение если это не так.
Когда кто-то пытается получить доступ к вашему свойству для определённого объекта Point, выполняется функция Get-часть свойства исполняется, и оператор Return возвращает значение вашего внутреннего элемента данных – точно так же, как и для функции.
Давайте посмотрим, как это свойство можно использовать:
Dim pt As Point = New Point
pt.SetLocation(10, 10)
Dim xVal As Integer = pt.X
pt.X = 9
Вы начинаете с создания нового объекта Point, названного pt, как вы видели ранее.
Строки, выделенные жирным, показывают вам, как читать (или получать) свойство X вашего объекта pt, присваивая его значение переменной xVal, а затем как записать (или установить) его на новое значение 9.
Большое количество кода, который вы пишите, будет использовать такие свойства, как это показано в AutoCAD API и библиотеке классов .NET Framework.
Хорошая практика – сохранять переменные члены (или переменные данных) частными и разрешать доступ к ним за пределами вашего класса с использованием свойств. Это связано с тем, что ваше свойство может проверить, не пытается ли кто-то установить переменную член в действительное значение до того, как действительно установит значение члена-переменной (Аналогично, вы можете проверить, что переменная была правильно инициализирована, прежде чем передать её значение обратно вызывающему).
Например, если у вас есть переменная-член, которая содержит значение AutoCAD Color Index (ACI), вы не хотите разрешать кому-либо устанавливать его на значение больше 255.
Не менее важной причиной использования свойств является то, что они скрывают детали реализации вашего класса от посторонних.
Например, возможно вы изначально разработали класс, чтобы иметь переменную член, называемую «Area». Позже вы поняли, что вам не нужно сохранять значение «Area», потому что вы можете легко вычислить его, когда вам это нужно, используя переменные-члены «Length» и «Width». Если ваша переменная-член была общедоступной, тогда любой код, который использует ваш класс, был бы нарушен вашими изменениями. Если бы вы не внедрили свойство вместо этого, вы могли бы изменить свой Get для возвращения «Length*Width» вместо «Area».
Наследование.
В объектно-ориентированном программировании класс представляет собой просто набор данных (переменные-члены), методы и свойства (и события, которые мы не рассматриваем в этом учебнике). Методы и свойства класса содержат весь код, который выполняется при компиляции и запуске вашего плагина. Существует ещё одна чрезвычайно мощная концепция объектно-ориентированного программирования, которую вы должны знать, поскольку она составляет основу большей части API AutoCAD .NET. Это наследование.
Наследование – это метод, который позволяет настраивать или расширять (или специализировать) поведение существующего класса путём изменения или добавления его переменных-членов, методов и свойств. Самый подходящий способ объяснить это – объяснить, как AutoCAD использует классы для представления объектов в DWG-файле. Давайте посмотрим на иерархию наследования для классов AutoCAD Line и Arc.
Думайте, что наследование походе на эволюционное дерево. Более специализированные и сложные классы наследуют от («производные от») более простых менее специализированных классов, подобно тому, как более сложные организмы развиваются из более простых организмов (например, амфибии образовались из рыб, а рептилии эволюционировали из земноводных). Аналогичным образом, два сложных класса огут быть получены из одного и того же более простого класса, как и два современных животных могут иметь одного предка (например, люди и шимпанзе).
Всё что находится внутри чертежа AutoCAD – это своего рода DBObject. Это значит, что DBObject – это класс, который предоставляет данные, методы и свойства, общие для всего, что сохранено в DWG-файле. Например, DBObject имеет свойство ObjectId. ObjectId – уникальный идентификатор для каждого объекта в открытом чертеже.
Некоторые виды DBObject – это объекты, которые имеют графическое представление. Это подмножество BDObjects представлено классом Entity. Класс Entity получен из класса DBObject. Это означает, что Entity наследует все данные, методы и свойства из DBObject и добавляет новые данные, методы и собственные свойства. Например, Entity наследует свойство Objectld из DBObject. Каждый объект, который нарисован AutoCAD, имеет слой, поэтому одно из свойств, которое Entity добавляет к свойствам DBObject, является свойством Layer.
Некоторые типы Entity очень похожи – все они являются некоторого рода кривыми. Поэтому класс Curve наследует все данные, методы и свойства Entity и добавляет такие свойства, как StartPoint и EndPoint.
Наконец, Line и Arc – оба они типы кривых. Они наследуют все свойства от Curve и добавляют свои собственные. Например, Arc добавляет свойства StartAngle и EndAngle; Line добавляет свойство Delta (вектор, представляющий длину и направление линии).
Вот диаграмма, для лучшего понимания, показывающая только те свойства, о которых мы упоминали в приведённых выше примерах. Стрелки показывают направление наследования – переход к большей сложности / специализации.

Вы будете пользоваться наследованием в этом пособии, поэтому давайте посмотрим, как вы можете наследовать из класса Point, с которым вы только что работали. Класс Point – это простая двумерная точка (она имеет только координаты X и Y). Чтобы создать трёхмерный точечный класс, вы можете наследовать от вашего текущего класса Point и добавить дополнительную переменную член и свойство для представления своей координаты Z, например, так:
Public Class NewPoint
Inherits Point

Private mZCoord As Integer

Public Property Z() As Integer
Get
Return Me.mZCoord
End Get
Set(ByVal value As Integer)
Me.mZCoord = value
End Set
End Property
End Class
Когда мы создаём экземпляр этого нового класса, мы можем получить доступ ко всем свойствам, унаследованным от Point, а также к тем, которые добавлены NewPoint, например:
Dim pt As NewPoint = New NewPoint
pt.SetLocation(10, 10)
Dim xVal As Integer = pt.X
pt.X = 9
pt.Z = 12
Чтобы увидеть полное дерево наследования в API AutoCAD, откройте чертёж карты классов, который был установлен с вашим ObjectARX SDK ( \ classmap \ classmap.dwg). Большой, не правда ли?

Урок второй: знакомство со средой разработки (перевод)

На предыдущем уроке вы узнали, как повысить производительность AutoCAD, подключив плагин, созданный из короткого кода Visual Basic .NET.
.NET (или .NET Framework) – это технология, созданная Microsoft, позволяющая программистам создавать и расширять приложения. Программист может использовать .NET Framework для создания нового приложения с нуля, для реализации связи или взаимодействия между двумя приложениями или для расширения приложения путём подключения плагинов (как мы делаем для AutoCAD). Если вы хотите узнать больше, вы можете найти информацию в разделе «Дополнительные темы».
А сейчас мы более подробно рассмотрим построение и выполнение кода из предыдущего урока.
Что значит «строить» код?
Код написанный в Visual Studio в уроке 1, представляет собой набор понятных человеку инструкций (исходный код), который необходимо преобразовать в код, который может быть понят и выполнен компьютером. Выполняемая операция «build» делает именно это: она упаковала полученный исполняемый код в библиотеку DLL (Dynamic-Link Library), которая может быть загружена в AutoCAD.
На изображении показан итоговый файл в формате DLL вместе с соответствующей базой данных отладки программы (она предоставляет дополнительную информацию при устранении проблем работы DLL), которую вы создали с помощью Visual Studio в уроке 1. Путь к папке, в которую компилируется DLL прописан в Visual Studio и по умолчанию записывается в подпапку bin\Release или bin\Debug в папке Visual Studio (в зависимости от того выполняли ли вы операцию «Debug» – об этом мы поговорим далее).

Выбор языка программирования и инструмента разработки.
Так же как люди общаются на разных языках, вы доступна возможность написать плагин для AutoCAD на нескольких языках: в этом руководстве мы остановимся на Visual Basic .NET – это мощный язык программирования общего назначения. Visual Basic .NET особенно популярен среди людей, которые учатся программировать, так как синтаксис языка проще, чем у многих других языков (например C# или С++).
Для написания кода Visual Basic .NET существует ряд инструментов. Их множество: от инструментов с открытым исходным кодом, таких как SharpDeveloper и MonoDeveloper до профессиональной среды разработки Microsoft Visual Studio. Это руководство предполагает, что вы используете Visual Studio Community, бесплатную версию Visual Studio для создания приложений Visual Basic .NET.
Visual Studio Community – это интегрированная среда разработки (IDE – Integrated Development Environment), поскольку она состоит из различных инструментов, меню и панелей инструментов, которые облегчают создание и управление кодом.
Система проекта в Visual Studio Community содержит файлы решений (Solution) и проектов (Project files), а также элементы проекта (Project items), отдельные файлы, относящиеся к проектам. Решение (Solution) представляет из себя контейнер для одного или нескольких проектов. Каждый проект, в свою очередь, может считаться контейнером для элементов проекта, таких как исходные фалы, иконки и т.д. – большинство из которых скомпилируется в результирующий исполняемый файл (EXE или DLL). Visual Studio Community представляет собой обозреватель решений, который организует и отображает содержимое загруженного решения в формате дерева.

Интерфейс Visual Studio Community содержит текстовый редактор и редактор интерфейсов. Они отображаются в главном окне в зависимости от типа редактируемого файла. В текстовом редакторе вы вводите код Visual Basic .NET для своего плагин для AutoCAD. Этот редактор предоставляет расширенные функции, такие как IntelliSense и разборка кода на разделы, а также классические возможности редактирования текста, такие как закладки (метки) и отображение номеров строк.
IntelliSence – важнейшая функция программ Visual Studio, которая значительно повышает производительность программиста: она автоматически предлагает варианты написания кода на основе набираемых объектов кода и букв. Вы уже видели IntelliSence в работе, когда вводили код в уроке 1. Это одна из причин, по которой мы не просто копировали и вставляли текст.
Очевидно, что одной из ключевых особенностей Visual Studio Community является его способность записывать код Visual Basic .NET в исполнительный файл. Во время процесса сборки файла компилятор языка выполняет различные проверки и анализирует код. Одна из проверок – соответствие кода синтактическим правилам языка Visual Basic .NET. Компилятор также выполняет и другие проверки, например, была ли определена переменная или нет. Обнаруженные ошибки выводятся в специализированное окно, которое находится в нижней части экрана. Если вы допускали ошибки при вводе кода из первого урока, то видели работу этого окна, когда собрать ваш плагин.

Обзор Visual Studio Community.
Здесь пойдёт речь о тех действиях, которые вы выполняли в Visual Studio Community на предыдущем уроке. Однако мы рассмотрим их в контексте того, что вы только что узнали о программировании в целом и о создании кода.
1. В первом шаге вы просто запустили Visual Studio Community.
2. Далее вы создали новый проект Visual Basic .NET для плагинов AutoCAD.
3. Поскольку язык программирования, используемый в этом руководстве – Visual Basic .NET, вы работаете с Visual Basic в Visual Studio Community, и поэтому вы увидите Visual Basic в разделе Installed Templates в диалоговом окне New Project. Шаблон для создания плагинов AutoCAD представляет собой шаблон библиотеки классов с некоторыми дополнительными настройками.
В центре диалогового окна вы видите различные типы приложений, которые вы можете создать; Вы выбираете шаблон в соответствии с типом приложения, которое вы хотите создать.
Имя, введённое в нижней части экрана, используется для идентификации проекта.
3. Был создан пустой проект, содержащий стандартные ссылки на основные компоненты .NET и ссылки на три файла, определяющие API AutoCAD (AcCoreMgd.dll, AcMgd.dll и AcDbMgd.dll). Также в проект включены два файла Visual Basic .NET ((MyCommands.vb и MyPlugin.vb), вероятно вы удалили файл MyPlugin.vb из проекта, так как в данном руководстве он не нужен). Эти файлы содержат простой шаблонный код. Щелчок по одному из этих фалов в Solution Explorer отобразит содержащийся в нём код в окне текстового редактора.
4. Вы просмотрели раздел References в My Project и проверили правильно ссылок на AcCoreMgd.dll, AcMgd.dll и AcDbMgd.dll (Примечание: AcCoreMdg.dll нужен для AutoCAD версии 2013 и выше).
5. Во время сохранения были созданы физические файлы на жёстком диске компьютера, что даёт возможность открывать и редактировать их в дальнейшем. Вы закрыли и повторно открыли проект, чтобы Visual Studio Community правильно проанализировал файлы проекта.
6. AcCoreMgd.dll, AcMgd.dll и AcDbMgd.dll содержат определения API AutoCAD, которые наиболее часто используются в плагинах. Вы всегда будете ссылаться на эти файлы в ваших проектах плагинов для AutoCAD. Конечно иногда придётся ссылаться и на другие файлы.
– AcMgd.dll содержит API для управления самим приложением AutoCAD – определение пользовательских команд для открытия, закрытия документов, печати и т.д.
– AcDbMgd.dll содержит API для создания, редактирования или запроса содержимого файла DWG.
– Начиная с AutoCAD 2013 API находившиеся в файле AcMdg.dll были разделены между AcMdg.dll и AcCoreMgd.dll. AcCoreMgd.dll содержит API-интерфейсы, связанные с регистрацией приложений AutoCAD (такие как выбор рабочего пространства, команды и ключевые слова), а AcMgd.dll содержит связанные с пользовательским интерфейсом API (такие как диалоги).
Когда вы создали проект плагина AutoCAD, в диалоговом окне AutoCAD.NET Wizard Configurator эти файлы были выбраны по умолчанию (их нельзя исключить из выбора). Также там были предоставлены варианты включения других файлов определения API, но мы их проигнорировали.
7. Затем вы добавили код Visual Basic .NET, используя API AutoCAD в свой проект. Другими словами, вы предоставили AutoCAD инструкции о том, как изменять поведение атрибутов блока при его повороте.
При написании кода, не плохо бы создавать сборки (Build) чтобы проверить, есть ли ошибки в коде. При этом не обязательно чтобы код был полным или функциональным. Такой подход поможет избежать длительного исправления кода в последующем, а также у вас всегда будут сохранённые файлы перед началом сборки.
Чтобы создать сборку внутри Visual Studio Community, выберете Build Solution в раскрывающемся меню Build.
Если процесс сборки прошёл успешно, в нижнем левом углу приложения Visual Studio Community появиться сообщение build Succeeded. Если в коде будут найдены ошибки, Visual Studio Community отобразит список ошибок с пояснениями. Так же ошибки в коде будут подчёркнуты синим цветом. Вот пример выделения ошибки, специально добавленной в код, написанный вами на уроке.

В этом уроке вы познакомились с тем, что происходит, когда вы создаёте проект, а также изучили справочную информацию о Visual Basic .NET и Visual Basic Community.
Дополнительные материалы.
Visual Studio Community и Visual Studio Professional.
Для целей этого руководства вы используете Visual Studio Community. Это бесплатная версия Visual Studio, и поэтому это отличный инструмент для начала обучения. Microsoft позиционирует Microsoft Visual Community как решение для студентов, и людей для кого программирование является дополнительным заработком или хобби. Хотя эта версия и предоставляет большинство функций Visual Studio Professional, таких как IntelliSence, но имеет и ряд ограничений. Например, в базовой версии меньше шаблонов проектов и имеются ограничения возможностей отладки и устранения неполадок кода. Если вы собираетесь вплотную заняться разработкой плагинов, в том числе коммерческих, мы рекомендуем вам инвестировать средства в более функциональную версию Visual Studio.
*Существует несколько «профессиональных» версий Visual Studio. Посетите сайт Microsoft посвящённый Visual Studio для получения дополнительной информации.
Что такое .NET?
Оставшаяся часть урока насыщена техническим жаргоном. Не волнуйтесь, если не поймёте что-то при первом прочтении. ВЫ начнёте разбираться в терминах, когда познакомитесь с .NET после написания нескольких собственных плагинов.
.NET Framework – это программная среда, ставящаяся поверх операционной системы Windows и представляет собой базовую платформу с библиотеками и службами для всех приложений .NET. Она включает в себя функции управления памятью, сбора мусора, общая система типов, библиотеки классов и т. д.
* Разновидности .NET также доступны и в других операционных системах, будь то проект с открытым исходным кодом Mono или Microsoft Silverlight, но мы не будем углублять в этот вопрос.
Из чего состоит .NET Framework?
В основе framework лежит два основных компонента:
1. Common Language Runtime (CLR) – это механизм выполнения в .NET Framework, ответственный за управление выполнением кода. Именно поэтому код, написанный для этой среды, также известен как управляемый код. Все управляемые коды выполняются под контролем CLR, но что это значит? CLR управляет кодом, предоставляю основные функции, такие как управление памятью (в том числе автоматическое освобождение памяти компьютера для нужд других задач, когда она уже больше не требуется), обработку ошибок (или исключений), управление использованием нескольких потоков выполнения программы и обеспечение правила использования разных типов объектов. CLR является фундаментом .NET Framework.
2. Библиотека классов .NET Framework. Как следует из названия, это библиотека типов объектов, которые могут быть использованы на основании кода приложения .NET. Приложения .NET предназначены для Windows (будь то командная строка или графический интерфейс пользователя), WEB или мобильные устройства. Эта библиотека доступна для всех языков, использующих .NET Framework.
Как упоминалось выше, CLR повышает надёжность кода, гарантируя, что код соответствует системе общих типов (CTS). CTS гарантирует, что весь код .NET – независимо от языка – использует один набор типов объектов и может работать в одной среде. Именно эта функция позволяет вам писать приложения на выбранном вами языке, и при этом использовать компоненты кода, написанные программистами с использованием языков .NET.
Исполняемые файлы
Когда вы собираете код в exe-файл, он компилируется в код Common Intermediate Language (CIL, также именуемый MSIL) с использованием компилятора. CIL – это независимый от процессора набор команд, который может быть выполнен CLR в операционных системах Windows. CIL переносится в 32 и 64-разрядные системы и в некоторой степени в не Windows операционные системы. Код CIL, сгенерированный из вашего из исходного кода VB, затем был упакован в сборку .NET. Эта сборка представляет собой библиотеку кода CIL, хранящуюся в формате Portable Executable (PE) (который содержит как CIL, так и связанные с ним метаданные). Сборки могут быть либо сборками процессов (EXE), либо сборками библиотек (DLL).
В этом руководстве вы сосредоточитесь на разработке определённого вида плагина AutoCAD: сборка процессов (EXE), которая связана с AutoCAD. Из-за трудоёмкости, связанной с их разработкой, вы не будете тратить время на просмотр AutoCAD Addlns, которые обычно являются сборками библиотек (DLL), которые загружаются и исполняются в памяти AutoCAD. Одна из причин того, что внедрение EXE для работы с AutoCAD проще, чем разработка Addln, связана с его пользовательским интерфейсом: исполняемые файлы не нужно интегрировать в пользовательский интерфейс AutoCAD, например, добавляя кнопки в ленту.
Запуск исполняемых файлов
Во время выполнения сборки .NET, CIL (находящийся в сборке) передаётся компилятором CLR just-in-time (JIT) для генерации собственного (или машинного) кода. Компиляция JIT CIL в собственный код происходит во время выполнения приложения. Поскольку во время выполнения не требуется весь код, компилятор JIT преобразует CIL только тогда, когда это требуется для экономии времени и памяти. Также он сохраняет все сгенерированные коды в памяти, делая их доступными в дальнейшем без необходимости перекомпиляции.
В конце этого процесса собственный код запускается процессором компьютера.
Если вы хотите получить более подробную информацию о процессе создания приложений .NET, обратитесь к библиотеке MSDN.

Урок первый: простейший плагин (перевод)

На этом занятии вы создадите свой первый простейший плагин для сохранения атрибутов блока направленными по оси Х в мировой системе координат.
Все демонстрационные видеоролики записаны для AutoCAD 2013, но при этом отлично подойдут и для более поздних версий.
для более поздних версий.
Шаги по созданию первого плагина.
1. Запустить среду разработки Visual Basic.
Откройте Visual Studio 2015. Примечание: Вы также можете использовать Visual Basic 2008/2010 Express если вы работает с AutoCAD 2012, но для AutoCAD 2013 требуется Visual Basic 2010 Express. Для работы с проектами под AutoCAD 2014-2016 необходим Visual Studio 2012 Express.
2. Создать проект в библиотеке классов.
В программе Visual Studio во вкладке «File» выбрать «New» и дальше выбрать «Project*» На вкладке «Templates» в левом окне выберете «Visual Basic» и далее «Autodesk». В среднем окне выберете «AutoCAD 2018 VB plug-in» (если вы не видите этого пункта в своём списке шаблонов, обязательно посмотрите необходимое программное обеспечение в вводной статье). В поле «Name:» введите KeepAttributesHorizontal. Затем нажмите «Ок».
* Если вы используете готовые примеры проектов, а не начинаете с нуля, как предлагает это руководство, предполагается, что вы установили AutoCAD в папку C: \ Program Files \ Autodesk \ AutoCAD 2018. Если папка установки отличается, то для того, чтобы отлаживать проекты, прочтите пункт «AutoCAD не установлен в папку по умолчанию».

3. Появилось диалоговое окно «AutoCAD .NET Wizard Configurator». Нажмите кнопку с изображением многоточия рядом с верхним текстовым полем; В диалоговом окне выберите папку, в которую извлекли содержимое SDK ObjectARX 2018, и выберете папку «inc». Во втором текстовом поле выберете папку установки AutoCAD – по умолчанию C: \ Program Files \ Autodesk \ AutoCAD 2018. Остальные параметры оставьте как есть и нажмите «Ок».

Visual Studio создаст шаблон проекта кода и отобразит код в коне.
4. Сохранить проект.
Во вкладке меню «File» выберите пункт «Save All».
5. Закрыть и снова открыть проект.
Во вкладке «File» выберите «Close Solution»; Затем снова в меня «File» выберите «Open», затем «Project/Solution» и выберите ваш файл. Эти действия необходимы, чтобы Visual Studio правильно проанализировал файлы проекта для функции IntelliSence.
6. Проверить ссылки.
В окне «Solution Explorer», находящемся справа, дважды кликните по «My project».

7. Visual Studio открыл настройки проекта. Перейдите во вкладку «References» и убедитесь, что файлы AcCoreMgd, AcDbMgd и AcMgd есть в списке и их пути заданы правильно.

Если названные выше фалы не указаны, нажмите галочку рядом с кнопкой «Add» и выберите «Reference» и затем добавьте нужные файлы. Затем выберите каждую ссылку в списке и проверьте, чтобы в окне «Properties» в правом нижнем углу для значения «Copy local» стояло значение «False».
8. Добавить код.
Дважды кликните по «myCommands.vb» в окне «Solution Explorer», чтобы отобразить окно редактирования кода. Удалите всё в этом окне. Чтобы освоить Visual Studio, включая использование таких функций как IntelliSense, рекомендуется самостоятельно переписать код из этого руководства в программу, а не копировать и вставлять его. Однако, если вы ограничены во времени вы можете просто скопировать и вставить код или загрузить готовый файл. Но это не даст практического опыта, поэтому не рекомендуется следовать этому пути.

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
 
Namespace HorizontalAttributes
 
    Public Class Commands
 
        ' Class variable to store the instance of our overrule
        Private Shared myOverrule As KeepStraightOverrule
 
        <CommandMethod("KeepStraight")>
        Public Shared Sub ImplementOverrule()
 
            'We only want to create our overrule instance once, 
            ' so we check if it already exists before we create it
            ' (i.e. this may be the 2nd time we've run the command)
             If myOverrule  Is Nothing Then
                'Instantiate our overrule class
                myOverrule = New KeepStraightOverrule
                'Register the overrule
                Overrule.AddOverrule(
                  RXClass.GetClass(GetType(AttributeReference)),
                  myOverrule, False)
            End If
            'Make sure overruling is turned on so our overrule works
            Overrule.Overruling = True
 
        End Sub
    End Class
 
    'Our custom overrule class derived from TransformOverrule
    Public Class KeepStraightOverrule
        Inherits TransformOverrule
 
        'We want to change how an AttributeReference responds to being
        ' transformed (moved, rotated, etc.), so we override its
        ' standard TransformBy function.
        Public Overrides Sub TransformBy(ByVal entity As Entity,
                                         ByVal transform As Matrix3d)
 
            'Call the normal TransformBy function for the attribute
            ' reference we're overruling.
            MyBase.TransformBy(entity, transform)
            'We know entity must be an AttributeReference because 
            ' that is the only entity we registered the overrule for.
            Dim attRef As AttributeReference = entity
            'Set rotation of attribute reference to 0 (horizontal)
            attRef.Rotation = 0.0
 
        End Sub
    End Class
End Namespace

При желании вы также можете удалить файл «MyPlugin.vb» из проекта. Это не имеет значения – код внутри файла не производит никаких действий.
Не беспокойтесь о деталях кода, вы подробно изучите их в 3-м уроке. Сейчас достаточно знать, что зелёный текст – это комментарии. Это не сам программный код – это текст, объясняющий, что делает код. Крайне важно писать подробные комментарии в ваших проектах – даже лучшие программисты забывают, что их код должен был делать, когда возвращаются к нему через полгода. Если вы сейчас прочитаете комментарии, то получите представление о том, что делает код.
9. Сохраните файл.
Во вкладке «File» нажмите «Save All».
10. Постройте проект.
Код, который вы написали, выполнен в форме, понятной человеку. Чтобы код стал понятным для компьютера, вам нужно его перевести или построить.
В программе во вкладке «Build» выберите «Build KeepAttributesHorizontal», чтобы скомпилировать и создать плагин. Осле успешного создания кода появится сообщение «Build Succeeded».

Вот оно! Вы только что создали свой первый плагин для AutoCAD. Давайте запустим его, чтобы посмотреть, что он делает.
Запуск плагина
1. Запустите AutoCAD.
2. Откройте файл. blockswithattributes
3. Загрузите ваш плагин в AutoCAD.
Наберите «NETLOAD» в командной строке AutoCAD и нажмите Enter. С помощью диалогового окна навигации найдите файл, который вы построили в Visual Studio (с расширением .dll) и нажмите «Открыть».

4. Протестируйте плагин.
Наберите «KEEPSTRAIGHT» в командной строке и нажмите «Enter» – эта команда запускает программу, записанную в плагине. Теперь поведение всех атрибутов блоков во всех чертежах, открытых в AutoCAD определяется плагином. Чтобы увидеть это, поверните или используйте команду «ROTATE», для поворота блоков в BlockWithAttributes.dwg. Когда вы вращаете блок, вы видите, что атрибуты блока остаются параллельными оси X в МСК.
Примечание: все изменения атрибутов являются постоянными. Не сохраняйте чертёж, если вы не хотите сохранить изменения.

Поздравляю! Вы только что написали свой первый плагин для AutoCAD. Код вы подробно рассмотрите в уроке 3.
Прежде чем перейти к следующим урокам, давайте вернёмся к вещам, которые мы пропустили ранее, начиная с базовых концепций программирования и преимуществ, которые оно даёт в повседневной работе.
Дополнительные темы
Введение в программирование
Код Visual Basic .NET, который вы только что выполнили для изменения атрибутов блоков на чертеже, составляет менее 30 строк (без учёта пустых строк и комментариев). Это небольшой код, работающий аналогично любой внутренней команде AutoCAD. Если кто-то другой увидит ка работает ваш плагин, он подумает, что это новая функция AutoCAD. Программирование позволяет записать логику определённого действия один раз, а затем каждый раз, при новом выполнении операции получать преимущество во времени и трудозатратах.
Что такое программирование?
Простой ответ таков: компьютерное программирование – это процесс создания последовательности инструкций, чтобы заставить компьютер что-то сделать. Вы можете рассматривать свою программу как последовательность инструкций. В последующих уроках вы научитесь интерпретировать то, что различные строки кода говорят компьютеру.
Если вам нужно объяснить, что такое компьютер маленькому ребёнку, можете сказать: компьютер – это инструмент, который выполняет предоставленные ему инструкции. Программирование – это один из способов дать инструкции компьютеру. Внутри компьютер видит эти инструкции в виде числового ряда (машинный код). Набор понятных человеку инструкций, который вы видели в начале урока, называется исходным кодом, и компьютер преобразует этот код в машинный код, который он может читать и исполнять. Последовательность таких инструкций (или кода), написанных для выполнения конкретной задачи, называется программой, а набор таких программ и соответствующих данных называется программным обеспечением. AutoCAD – один из таких программных продуктов.
Исходный код может быть написан на разных языках, так же как люди используют разные языки для общения. Язык, который вы будете использовать при изучении данного руководства называется Visual Basic .NET, который так же называют VB.NET для сокращения (.NET).
Примечание: Visual Basic .NET – это новейшая версия Microsoft Visual Basic. Не путайте его с Visual Basic 6 или Visual Basic для приложения (VBA), который намного старше и не настолько мощный, как Visual Basic .NET.
Что такое API?
API – это аббревиатура интерфейса прикладного программирования (Application Programming Interface): способ, которым программист может общаться с программным продуктом. Например AutoCAD API – это способ, которым программисты могут работать с AutoCAD, и устанавливает, какие функции программист может использовать в AutoCAD. Например, вы можете запрограммировать AutoCAD, чтобы добавить строку в чертёж, поскольку AutoCAD предоставляет функциональность для этого через свой API.

Коммерческие компании – разработчики программного обеспечения, такие как Autodesk, часто распространяют набор библиотек, которые пользователи могут использовать в своих собственных программах для взаимодействия с определённым программным продуктом, таким как AutoCAD, и расширять его функционал. Этот набор известен как API программного продукта.
Тип программы, которую вы пишите для взаимодействия с программным продуктом и расширяющей его функциональность, будет зависеть от того, как был разработан API и какие возможности были вам предоставлены (посредством API).
Что такое плагин?
Программный плагин – это тип программного модуля (или файла), который добавляет функциональность программному продукту, как правило в форме команды автоматизирующей выполнение задач или настраивающей поведение программы. Когда речь идёт о плагине для AutoCAD, вы также можете услышать термин «аддон» или «приложение» – имеется в виду модуль, содержащий код, который использует API AutoCAD. AutoCAD загружает такие плагины и использует их для настройки своего поведения при определённых условиях, например, когда выполняется конкретная команда пользователем плагина.
AutoCAD не установлен в папку по умолчанию.
Предполагается что вы установили AutoCAD в папку C: \ Program Files \ Autodesk \ AutoCAD 2018. Если папка установки AutoCAD отличается, то для отладки проектов вы должны сделать следующее:
– Создайте новый проект с помощью шаблона AutoCAD .NET Wizard (как описано в уроке 1) и скопируйте код из завершённого проекта в новый проект.
– Отредактируйте фалы проекта вручную, как описано ниже.
Ручное редактирование файлов проекта.
Ограничением Visual Studio является то, что некоторые параметры проекта недоступны для редактирования посредством пользовательского интерфейса. Одной из этих скрытых настроек является расположение исполняемого файла AutoCAD (acad.exe), в который вы загружаете подключаемый модуль .NET, для отладки. Чтобы это исправить нужно сделать следующее:
– Откройте папку проекта и найдите файл .vbproj.user. Для примера с названием MyBonusPlugin вам нужен файл: MyBonusPlugin \ MyBonusPlugin \ MyBonusPlugin.vbproj.user.
– Откройте этот файл в блокноте или в любом другом текстовом редакторе.
– Найдите строку с текстом: «C: \ Program Files \ Autodesk \ AutoCAD 20xx \ acad.exe»
– Везде, где встречается этот текст, замените его на фактический путь к файлу acad.exe.
– Сохраните файл. Теперь вы можете запустить AutoCAD из своего отладчика, как и для нового проекта, созданного с помощью AutoCAD .NET Wizard.
Ниже приведён пример содержимого файла .vbproj.user, в котором показана строка, которую необходимо заменить (убедитесь, что вы обновили путь к фалу в соответсвии с версией AutoCAD, в которой вы работаете):

<?xml  version=”1.0″ encoding=”utf-8″?>

<Project  ToolsVersion=”4.0″ xmlns=”http://schemas.microsoft.com/developer/msbuild/2003″>

<PropertyGroup>

<ReferencePath>C:\ObjectARX 20xx\inc;C:\ObjectARX 20xx\inc\inc-win32</ReferencePath>

<PublishUrlHistory />

<InstallUrlHistory />

<SupportUrlHistory />

<UpdateUrlHistory />

<BootstrapperUrlHistory />

<ErrorReportUrlHistory />

<FallbackCulture>en-US</FallbackCulture>

<VerifyUploadedFiles>false</VerifyUploadedFiles>

</PropertyGroup>

<PropertyGroup  Condition=”‘$(Configuration)|$(Platform)’ == ‘Debug|AnyCPU'”>

 

StartProgram>C:\Program Files\Autodesk\AutoCAD 20xx\acad.exe</StartProgram>

<StartAction>Program</StartAction>

</PropertyGroup>

<PropertyGroup  Condition=”‘$(Configuration)|$(Platform)’ == ‘Release|AnyCPU'”>

<StartAction>Program</StartAction>

<StartProgram>C:\Program Files\Autodesk\AutoCAD 2017\acad.exe</StartProgram>
</PropertyGroup>

</Project>

Файлы для скачивания:
lesson1_AutoCAD_2018_projects
lesson1_archive_2017_and_earlier_project_files
Оригинал статьи: http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=18162797

Руководство по созданию первого плагина для AutoCAD (перевод)

Обзор руководства по созданию первого плагина для AutoCAD.
Являетесь ли вы продвинутым пользователем AutoCAD заинтересованным в повышении производительности? Хотели бы вы автоматизировать или расширить возможности AutoCAD, но являетесь новичком в программировании? Тогда это руководство для вас.
Данная инструкция предназначено для самостоятельного обучения и плавного входа в мир программирования. Это универсальный путь для пользователей, которые знают продукты Autodesk, но абсолютные новички в программировании. Вы будете работать с интерфейсом программирования AutoCAD.NET (API) и языком программирования Visual Basic.NET для создания плагина – модуля, загружаемого в AutoCAD для расширения его функциональности. По завершению этого руководства вы поймёте основы программирования .NET и способы их применения в AutoCAD.
Продукт: AutoCAD 2018*
Язык программирования: Visual Basic.NET
Программный интерфейс (API): AutoCAD.NET API
*Это руководство разработано для стандартного AutoCAD 2018. Однако все эти этапы применимы к любому вертикальному продукту, построенному на базе AutoCAD (AutoCAD Architecture, AutoCAD Civil 3D и т.д.). API AutoCAD.NET является общим для всех этих продуктов; каждая вертикаль добавляет собственный специализированный API поверх API AutoCAD.NET. Прилагаемый код будет работать и в AutoCAD 2013, 2014, 2015, 2016 и 2017.
Обзор
В интернете множество ресурсов, на которых можно узнать о API AutoCAD.NET. Однако эти ресурсы предназначены для людей знакомых с программированием. Это руководство отличается: оно не требует никаких дополнительных знаний о программировании и тем не менее помогает быстро создать свой первый плагин, не загружая вас деталями. У вас будет работающее приложение в течении часа с момента начала знакомства с этим материалом, независимо от вашего нынешнего уровня знаний о программировании.
Руководство начнётся с описания преимуществ кастомизации программного обеспечения Autodesk, прежде чем перейти к занятиям, посвящённым использованию API AutoCAD.NET. Занятия начнутся с создания рабочего плагина, затем будут даны подробные объяснения основополагающих принципов и будущего развития функциональности плагина.
Преимущества кастомизации AutoCAD
Время – деньги! Чем эффективнее вы выполняете рутинные операции, тем более конкурентоспособны на рынке. В этом кроется ключевое преимущество кастомизации: адаптация программного обеспечения с целью оптимизации или автоматизации рабочих процессов. Autodesk предоставляет мощные API и SDK (комплекты разработки программного обеспечения), которые позволяют вам получить большую отдачу от ваших инвестиций в программное обеспечение Autodesk, адаптировав его к потребностям вашего бизнеса – кастомизацией существующих функций или добавлением новых.
AutoCAD имеет четыре разных API – .NET, LISP, ActiveX и ObjectARX (С++). В этом руководстве используется .NET, так он предоставляет самую мощную и современную среду программирования – сочетание всеобъемлющий API AutoCAD .NET с самыми современными средствами программирования (Microsoft .NET Framework и Microsoft Visual Studio). .NET даёт вам доступ к любому из языков программирования совместимых с .NET (Visual Basic .NET, С#, F# и т.д.) для разработки плагинов. Хотя у каждого языка программирования есть свои сильные стороны, Visual Basic .NET является наилучшим выбором для новичков: он прост в изучении и использовании; он является наиболее удобочитаемым для человека; и (как и любой другой язык .NET), он даёт вам полный доступ к базе Microsoft .NET Framework. Как только вы освоите это руководство и наберётесь опыта работы с Visual Basic .NET, вы сможете перейти к решению более сложных задач, связанных с языком программирования.
Программирование может быть очень полезным. Надеемся, что вы тоже это почувствуете по завершению этих уроков. Наслаждайтесь!
Краткое описание плагина.
Данная инструкция описывает команду, которая позволяет вставлять в чертёж блок с атрибутами, которые всегда остаются параллельны оси Х независимости от угла поворота блока. То есть атрибуты блока всегда остаются горизонтальными в МСК (мировая система координат).
Горизонтальное положение текста для читателя является общим требованием, и этот простой плагин облегчает его выполнение. Готовый плагин можно легко расширить, чтобы охватить другие объекты аннотаций, такие как однострочный и многострочный текст; и отображать текст всегда горизонтально по отношению к видовому экрану, а не только к МСК.
Необходимое программное обеспечение.
1. AutoCAD.
Или любой другой продукт на базе AutoCAD. Данное руководство применимо ко всем продуктам на основе AutoCAD.
2. Microsoft® Visual Studio® Community.
В данном руководстве будет использоваться Visual Basic Express, но вы можете использовать любую профессиональную версию Visual Studio 2015. Некоторые элементы пользовательского интерфейса могут отличаться в зависимости от версии.
3. ObjectARX SDK.
ObjectARX SDK включает в себя документацию для AutoCAD .NET API и некоторые важные файлы, на которые будет ссылаться наш проект Visual Studio. Он также включает в себя ряд примеров проектов .NET (SDK содержит документацию и файлы для API ObjectARX (C++) b .NET API. Не стоит беспокоиться о всей документации для С++ – .NET намного проще).
4. Мастер-файлы AutoCAD.NET.
Мастер-файлы – это простые шаблоны, которые можно использовать для быстрого создания новых проектов AutoCAD .NET (Visual Basic или С#). Важно отметить что пользователи Visual Basic Express настраивают проект для запуска AutoCAD из отладчика – но это невозможно сделать из пользовательского интерфейса Visual Studio Express.

Оригинал статьи: http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=18162650

Новые возможности AutoCAD 2018 (особенности релиза 2018.0.2)

Autodesk продолжает радовать нас новыми версиями своих продуктов, хотя и ходили слухи, что дальнейшие улучшения будут выпускаться исключительно в виде патчей. Тем не менее, релиз AutoCAD 2018 состоялся.
1. Добавлена полноценная поддержка разрешения 4К.
2. Диалоговые окна навигации файлов (открыть, сохранить и вставить) сохраняют порядок навигации столбцов.
3. В меню быстрого доступа добавилась возможность добавить выпадающий список слоёв. Это значительно повышает производительность при работе с лентой.


4. Добавилась возможность изменения размера диалогового окна “Режимы рисования”.

5. Новая версия файлов чертежей “Чертёж AutoCAD 2018”. Разработчик обещает значительно ускорение процесса сохранения и открытия больших чертежей в этом формате, а так же чертежей с большим количеством слоёв и внешних ссылок.
6. Улучшены функции выбора объектов. При выполнении операции выбора теперь можно выполнять зуммирование и панарамирование для удлинения рамки выбора и выбрать объекты, находящиеся за пределами экрана. За включение этой возможности отвечает новая системная переменная SELECTIONOFFSCREEN (при значении 0 – функция включена).
7. Добавлена возможность преобразования текста, написанного шрифтами shx, вставленного в чертёж из файла PDF в многострочный текст. За это отвечает команда ПДФГЕОМТЕКСТ.
8. Функция ExpressTools ТЕКСТВМТЕКСТ теперь преобразовывает множество выбранных блоков однострочного текста в один объект многострочного текста.
9. При вставке внешних ссылок в чертёж теперь по умолчанию задаётся “относительный”, а не “полный” путь.