Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г

.pdf
Скачиваний:
182
Добавлен:
09.04.2015
Размер:
9.06 Mб
Скачать

Visual Basic для приложений

601

где

[точка] — базисная точка, начальная точка отрезка типа “резиновая нить” (необязательно);

[подсказка] — приглашение на ввод координат, отображаемое на экране (необязательно).

Введите координаты с клавиатуры или выберите точку на чертеже.

Примеры

pnt1 = ThisDrawing.Utility.GetPoint("Enter 1st point")

Этот код генерирует приглашение на ввод координат первой точки. Введенные значения присваиваются переменной pnt1.

pnt2 = ThisDrawing.Utility.GetPoint("Enter 2nd point")

Этот код генерирует приглашение на ввод координат первой точки. Введенные значения присваиваются переменной pnt2.

Метод GetDistance

Метод GetDistance позволяет определить расстояние между двумя точками при вводе соответствующего значения в командную строку. Введенное значение затем возвращается в виде числа двойной точности. Этот метод применяется после метода GetPoint. Метод GetDistance имеет следующий формат:

d = ThisDrawing.Utility.GetDistance([точка], [подсказка])

где

[точка] — точка отсчета, начальная точка отрезка типа “резиновая нить” (необязательно);

[подсказка] — приглашение на ввод координат, отображаемое на экране (необязательно).

Примеры

d1 = ThisDrawing.Utility.GetDistance(cen, "Specify radius")

Этот код генерирует приглашение на ввод данных, с помощью которых вы сможете построить точку, находящуюся на определенном расстоянии от уже существующей точки. Величина расстояния между двумя точками присваивается переменной d1.

x = ThisDrawing.Utility.GetDistance(p1, "Specify the height")

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

Метод GetAngle

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

602

Глава 17

Метод GetAngle имеет следующий формат:

ang = ThisDrawing.Utility.GetAngle([точка], [подсказка])

где

ang — величина угла, выраженная в радианах;

[точка] — координаты вершины угла (необязательно);

[подсказка] — текст приглашения, позволяющего выбрать способ определения угла (необязательно).

Примеры

a1 = ThisDrawing.Utility.GetAngle(, "Enter taper angle in degrees")

Этот код генерирует приглашение и позволяет ввести величину угла, определив ее относительно существующей точки. Величина угла, ограниченного двумя точками, присваивается переменной a1.

ang3 = ThisDrawing.Utility.GetAngle(p1, "Specify the center point")

Этот код генерирует приглашение и позволяет ввести координаты, определяющие положение вершины угла. Введенные значения присваиваются переменной ang3.

Примечание

Введенное значение зависит от заданных единиц измерения угловых величин. Чтобы перейти к другим единицам измерения, вам придется изменить значения системных переменных ANGBASE и ANGDIR. По умолчанию измерение угловых величин выполняется следующим образом.

Угол измеряется относительно положительной оси X (направление нулевого угла совпадает с направлением часовой стрелки, указывающей на число 3). Направление оси X соответствует текущему значению системной переменной ANGBASE, которая равна 0. Системной переменной ANGBASE может быть присвоено значение, соответствующее направлению одному из 90-градусных квадрантов.

Угол, измеряемый против часовой стрелки, считается положительным, а угол, измеряемый по часовой стрелке — отрицательным. Значение, определяющее направление отсчета углов, хранится в системной переменной ANGDIR. Метод GetOrientation имеет такой же синтаксис, как и метод GetAngle, но игнорирует значения системных переменных ANGBASE и ANGDIR. В этом случае направление нулевого угла всегда совпадает с направлением часовой стрелки, указывающей на число 3, а положительным считается угол, измеряемый против часовой стрелки.

Пример 2

Напишите программу, которая построит треугольник с вершинами P1, P2 и P3, как показано на рис. 17.13. В этой программе должны использоваться методы GetPoint и AddLine. На рис. 17.14 показана форма пользователя, созданная для этого примера.

1.Запустите программу AutoCAD и откройте новый файл, выбрав режим Start from Scratch (Простейший шаблон) и установив английские единицы измерения (футы и дюймы).

2.Выберите из строки меню команду Tools Macro Visual Basic Editor (Сервис Макрос Редактор Visual Basic).

3.Выберите команду Insert Module (Вставка Модуль).

Visual Basic для приложений

603

Рис. 17.13. Треугольник с вершинами, определяе-

Рис. 17.14. Интерфейсная

пользовательская форма

мыми пользователем

для примера 2

4.Создайте форму пользователя, выбрав в строке меню команду Insert UserForm (Вставка Форма).

5.Создайте интерфейсную форму, показанную на рис. 17.14. Для этого введите в форму метку и командную кнопку, перетащив эти элементы из панели инструментов

Toolbox.

6.Откройте кодовое окно, дважды щелкнув на командной кнопке, и введите код, представленный в следующем листинге.

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

'Эта подпрограмма предназначена для построения треугольника

1

'по трем точкам, определяемым пользователем.

2

'Выполнение подпрограммы происходит по щелчку мышью

3

'на командной кнопке с надписью Start. По умолчанию

4

'вершинами треугольника являются точки pnt1, pnt2 и pnt3.

5

'Возвращает точку в мировую систему координат (МСК).

6

Private Sub CommandButton1_Click()

7

UserForm1.Hide

8

pnt1=ThisDrawing.Utility.GetPoint(,"Provide the First Point:")

9

'Возвращает вариантный вектор, когда GetPoint возвращает точку

10

'в МСК и строит отрезок типа "резиновая нить" из первой точки

11

pnt2 = ThisDrawing.Utility.GetPoint(pnt1, "Second Point?")

12

'Постройте первую сторону треугольника

13

ThisDrawing.ModelSpace.AddLine pnt1, pnt2

14

pnt3 = ThisDrawing.Utility.GetPoint(pnt2, "3rd Point?")

15

ThisDrawing.ModelSpace.AddLine pnt2, pnt3

16

ThisDrawing.ModelSpace.AddLine pnt3, pnt1

17

Unload Me

18

End Sub

19

604 Глава 17

Пояснения

Строки 1–6, 11 и 13

В этих строках содержатся комментарии или замечания, описывающие функции различных фрагментов данной программы. Комментарии упрощают понимание и редактирование программы и должны использоваться как можно чаще. Строки комментариев начинаются оператором Rem или знаком апострофа ('). При выполнении программы эти строки игнорируются.

Строка 7

Private Sub CommandButton1_Click()

С этой строки начинается подпрограмма Sub CommandButton1_Click(), выполняемая при выборе кнопки CommandButton1.

Строка 8

UserForm1.Hide

Этот оператор скрывает интерфейсную форму пользователя и переносит фокус в программу AutoCAD. Если форма UserForm, созданная в предыдущем примере, не была загружена, то текущая форма по умолчанию получает имя UserForm1. В этом случае код, содержащийся в строке 8, будет иметь вид UserForm1.Hide.

Строки 9, 12 и 15

pnt1 = ThisDrawing.Utility.GetPoint(, "Provide the First Point:") pnt2 = ThisDrawing.Utility.GetPoint(pnt1, "Second Point?")

pnt3 = ThisDrawing.Utility.GetPoint(pnt2, "3rd Point?")

В строке 15 метод GetPoint применяется без использования опорной точки. Положение точки может быть определено с помощью клавиатуры или координатно-ука- зательного устройства. При применении метода GetPoint с использованием опорной точки, на экране появится линия типа “резиновая нить”, соединяющая опорную точку с перекрестием курсора.

Строки 14, 16 и 17

ThisDrawing.ModelSpace.AddLine pnt1, pnt2

ThisDrawing.ModelSpace.AddLine pnt2, pnt3

ThisDrawing.ModelSpace.AddLine pnt3, pnt1

Для использования метода AddLine требуются две предварительно определенные точки, координаты которых являются векторными значениями двойной точности. Обратите внимание на пробел перед первой точкой.

Строки 18 и 19

Unload Me

End Sub

Эти строки удаляют форму UserForm1 из памяти, возвращают фокус в программу AutoCAD и завершают работу подпрограммы.

Visual Basic для приложений

605

Код Module2

Следующий код введен в кодовое окно Module2.

Option Explicit

1

Sub Triangle()

2

UserForm1.Show

3

End Sub

4

Пояснения

Строка 1

Option Explicit

Наличие этой строки обеспечивает явное объявление всех типов переменных. Это позволяет минимизировать появление ошибок, связанных с несовместимостью типов данных, и уменьшить количество орфографических ошибок, выявляемых во время прогона программы. По умолчанию все необъявленные переменные имеют тип Variant.

Строки 2–4

Sub Triangle()

UserForm1.Show

End Sub

Эта функция присваивает макросу имя Triangle, которое отображается в текстовом окне Macro name (Имя макроса) диалогового окна Macros (Макрос). Чтобы открыть это диалоговое окно, выберите команду Macro Macros (Макрос Макросы) из меню Tools (Сервис). Строки 1–4 программного кода принадлежат объекту Module2. Остальные строки являются частью объекта UserForm2. Опять-таки, если форма UserForm1, созданная в предыдущем примере, не была загружена, то этим объектам по умолчанию будут присвоены имена Module1 и UserForm1, соответственно. В противном случае необходимо внести в строки 2–4 соответствующие изменения.

Пример 3

Постройте твердотельный цилиндр красного цвета, определив радиус основания и высоту.

1.Запустите программу AutoCAD и откройте новый файл, выбрав режим Start from Scratch (Простейший шаблон) и установив английские единицы измерения (футы и дюймы).

2.Выберите из строки меню команду Tools Macro Visual Basic Editor (Сервис Макрос Редактор Visual Basic).

3.Выберите команду Insert Module (Вставка Модуль). Если текстовый редактор закрывает весь экран, попробуйте его уменьшить, щелкнув на кнопке Restore Window, которая находится в правом верхнем углу окна.

4.Щелкните на кнопке Properties Window, находящейся на панели инструментов

Standard.

5.Перейдите в окно Properties и измените имя модуля, заданное по умолчанию, введя выражение CreateCylinder.

606Глава 17

6.Закройте окно Properties и разверните окно CreateCylinder (Code) до максимального размера, если это необходимо.

7.Введите в окно CreateCylinder (Code) следующий код:

Public Sub DrawCylinder() Dim cen As Variant

Dim r As Double Dim h As Double

Dim cyl As Acad3Dsolid

cen = ThisDrawing.Utility.GetPoint(, "Specify center point: ") r = ThisDrawing.Utility.GetDistance(cen, "Specify radius: ") h = ThisDrawing.Utility.GetDistance(, "Specify height: ")

Set cyl = ThisDrawing.ModelSpace.AddCylinder(cen, rad, ht) ThisDrawing.SendCommand ("VPOINT -1,-1,1 SHADEMODE GOURAUD ") ThisDrawing.SendCommand ("CHPROP ")

ThisDrawing.SendCommand ("LAST ") ThisDrawing.SendCommand ("C RED ") ThisDrawing.SendCommand ("UCSICON ") ThisDrawing.SendCommand ("NOO ") End Sub

8.Щелкните на кнопке Save (Сохранить), которая находится на панели Standard (Стандартная). На экране появится диалоговое окно Save As (Сохранить как). Сохраните файл программы под именем cylinder.dvb.

9.Выйдите из интегрированной среды разработки VBA, щелкнув на кнопке View AutoCAD.

10.Откройте диалоговое окно Macros (Макрос), выбрав команду Tools Macro Macros (Сервис Макрос Макросы).

11.Текстовое окно Macro name (Имя макроса) в диалоговом окне Macro (Макрос) содержит полное путевое имя проекта.

12.Щелкните на кнопке Run.

13.Определите радиус и высоту цилиндра, используя приглашения, появляющиеся в командной строке, и постройте твердотельный цилиндр. Числовые значения можно вводить с помощью клавиатуры или определять, указывая точки на чертеже.

VBA построит затушеванный цилиндр красного цвета. При этом автоматически изменится направление взгляда и на экране появится изометрическое (ЮЗ) изображение цилиндра.

Методы PolarPoint и AngleFromXAxis

Метод PolarPoint

Метод PolarPoint используется для определения точки, лежащей на линии, которая проходит под данным углом, и находящейся на данном расстоянии от указанной точки. Этот метод имеет следующий формат:

P = ThisDrawing.Utility.PolarPoint (точка, угол, расстояние)

Visual Basic для приложений

607

где

точка — указанная точка, начальная точка линии “резиновая нить”;

угол — угол в радианах, число двойной точности;

расстояние — расстояние от указанной точки, число двойной точности.

Метод AngleFromXAxis

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

ang = ThisDrawing.Utility.AngleFromXAxis(точка1, точка2)

где

точка1 — начальная точка линии;

точка2 — конечная точка линии.

Упражнение 1

Напишите программу, которая построит линию, проходящую через две указанные точки (рис. 17.15). Пользователь может ввести координаты с клавиатуры или выбрать нужные точки на чертеже с помощью координатно-указательного устройства. Если вторая точка определяется с помощью мыши, в окне графического редактора должна появиться “резиновая” линия, соединяющая первую точку с перекрестьем курсора. Кроме этого создайте интерфейсную форму пользователя по образцу, показанному на рис. 17.16.

 

Рис. 17.16. Интерфейсная

Рис. 17.15. Линия, проходящая через точки,

пользовательская форма

определяемые пользователем

для упражнения 1

Пример 4

Напишите программу Visual Basic, с помощью которой вы сможете построить треугольник по одной стороне (т.е. по отрезку, соединяющему точки P1 и P2) и прилежащему углу (рис. 17.17). Известна также длина второй стороны треугольника. Для создания формы пользователя с двумя текстовыми окнами (рис. 17.18) используется элемент управления TextBox. Командная кнопка и надписи на форме создаются перетаскиванием соответствующих элементов из панели инструментов Toolbox.

1.Создайте новый файл чертежа и откройте редактор Visual Basic.

2.Создайте новый модуль и форму пользователя, выбрав соответствующие команды из меню Insert.

3.Создайте форму пользователя, которая показана на рис. 17.18, а затем откройте кодовое окно, дважды щелкнув мышью на кнопке Draw SAS Triangle. Введите в это окно следующий код.

608 Глава 17

Рис. 17.17. Треугольник, построенный по

Рис. 17.18. Интерфейсная

одной стороне и прилежащему углу (SAS —

пользовательская форма

Side Angle Side)

для примера 3

Ниже представлен листинг программы для примера 4. Номера строк, показанные в

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

'Общие объявления

1

Const PI = 3.141592654

2

Public IncludedAngle As Double 'π-конвертированный угол

3

Public Angle As Double 'величина прилежащего угла

4

Public Dist As Double 'длина второй стороны

5

'Построение треугольника по двум сторонам и прилежащему углу.

6

7

'Программа запускается по щелчку на кнопке "Draw SAS Triangle"

8

'Текстовые окна — для ввода прилежащего угла и второй стороны

9

'Прилежащим называется угол между основанием и второй стороной

10

Private Sub CommandButton1_Click()

11

12

UserForm1.Hide

13

'p1 — первая точка основания; по умолчанию вариантный тип

14

'p2 — вторая точка основания; по умолчанию вариантный тип

15

p1 = ThisDrawing.Utility.GetPoint(, "Enter or select 1st base point:")

16

p2 = ThisDrawing.Utility.GetPoint(p1, "Enter or select 2nd base point: ")17

ThisDrawing.ModelSpace.AddLine p1, p2 'построение основания

18

If TextBox1.Text = "" Then

19

Angle = ThisDrawing.Utility.GetAngle(p2, "Enter angle from horiz.

20

or select included angle: ")

Else

21

Angle = ThisDrawing.Utility.AngleFromXAxis(p1, p2) + IncludedAngle

22

End If

23

If TextBox2.Text = "" Then

24

Dist = ThisDrawing.Utility.GetDistance(p2, "Enter or select dist.

25

from base point: ")

End If

26

p3 = ThisDrawing.Utility.PolarPoint(p2, Angle, Dist)

27

ThisDrawing.ModelSpace.AddLine p2, p3

28

ThisDrawing.ModelSpace.AddLine p1, p3

29

Unload Me

30

End Sub

31

 

32

Visual Basic для приложений

609

Private Sub TextBox1_Change()

33

IncludedAngle = PI - Val(TextBox1.Text)*PI/180 'в радианах

34

End Sub

35

Private Sub TextBox2_Change()

36

37

Dist = Val(TextBox2.Text)

38

End Sub

39

Пояснения

Строка 2

Const PI = 3.141592654

Объявление постоянной pi (π), используемой в подпрограмме. Эта строка является примером использования операторов подобного типа.

Строки 3–5

Public IncludedAngle As Double

Public Angle As Double

Public Dist As Double

Переменные, объявленные в этих строках, — общие. Это означает, что процедуры могут обращаться к этим переменным из любого модуля, имеющегося в данном проекте (файле), без передачи аргументов в список параметров. Также объявлено, что эти переменные имеют тип Double, который требуется для использования методов AutoCAD, в которых они применяются.

Строки 7–12

'Эта программа построит треугольник по двум сторонам и прилежащему углу 'Программа запускается по щелчку на кнопке "Draw SAS Triangle" 'Текстовые окна — для ввода прилежащего угла и второй стороны 'Прилежащим называется угол между основанием и второй стороной

Private Sub CommandButton1_Click()

В этих строках описывается назначение и способ запуска процедуры CommandButton1_ Click(), определение которой начинается со строки 12. Комментарии подобного рода следует использовать во всех событийно-управляемых подпрограммах.

Строка 13

UserForm1.Hide

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

Строки 14–17

'p1 — первая точка основания; по умолчанию вариантный тип 'p2 — вторая точка основания; по умолчанию вариантный тип

p1 = ThisDrawing.Utility.GetPoint(, "Enter or select 1st base point: ") p2 = ThisDrawing.Utility.GetPoint(p1, "Enter or select 2nd base point: ")

610

Глава 17

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

Строки 19–23 и 33–35

If TextBox1.Text = "" Then

Angle = ThisDrawing.Utility.GetAngle(p2, "Enter angle from horiz. or select included angle: ")

Else

Angle = ThisDrawing.Utility.AngleFromXAxis(p1, p2) + IncludedAngle End If

Private Sub TextBox1_Change()

IncludedAngle = PI - Val(TextBox1.Text)*PI/180 End Sub

Оператор If ... Then ... Else проверяет наличие данных в текстовом окне TextBox1. Если соответствующее окно формы UserForm не содержит никаких данных, то величина угла определяется с помощью метода GetAngle. Если же в текстовое окно было введено числовое значение, вызывается подпрограмма TextBox1_Change(), которая преобразует его в радианы. Добавление углового расстояния в радианах, возвращенного методом AngleFromXAxis, обеспечивает получение полярных координат, определяющих положение третьей вершины треугольника.

Строки 24–26

If TextBox2.Text = "" Then

Dist = ThisDrawing.Utility.GetDistance(p2, "Enter or select dist. from base point: ")

End If

Если длина второй стороны треугольника не была введена в соответствующее окно пользовательской формы, то для ее определения используется метод GetDistance.

Строки 37–39

Private Sub TextBox2_Change()

Dist = Val(TextBox2.Text)

End Sub

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

Строки 18, 28 и 29

ThisDrawing.ModelSpace.AddLine p1, p2

ThisDrawing.ModelSpace.AddLine p2, p3

ThisDrawing.ModelSpace.AddLine p1, p3

Метод AddLine позволяет построить основание, а также вторую и третью стороны треугольника.

Соседние файлы в папке Книги_AutoCad_2