Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
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 |
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.
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: ")
