1. Что такое API?
2. Что такое динамичесие библиотеки?
3. Основные отличия внешних и внутренних прикладных подпрограмм для NX?
4. Что такое Entry Points?
Задание на лабораторную работу
Задание выдается преподавателем по вариантам.
Содержание отчета по лабораторной работе
1. Название и цель работы
2. Скриншоты с кратким описанием, соответствующие основным шагам выполненной работы
3. Скриншоты, демонстрирующие работоспосбоность созданной библиотеки
4. Листинг прграммы с комментариями на русском или английском языке
5. Выводы
Лабораторная работа №2
Создание детали с помощью операции “Вращение” средствами NXOpen/API на примере крышки пневмоцилиндра
Цель работы: освоить основы твердотельного моделирования в NX 7.5 посредствам API функций, изучить методику создания 3D модели, работу с отдельными 2D примитивами, освоить операцию “Вращение”.
Теоретическая часть
В данной лабораторной работе предлагается выполнить крышку, представленную на рис. 3 с некоторыми упрощениями: на текущем этапе из детали исключаются фаски и скругление. Таким образом, деталь приобретает вид, показанный на рис. 2.1.
|
|
Рисунок 2.1 - Упрощенная модель крышки
Для создания рассматриваемой модели необходимо осуществить выполнить операцию “Вращение” для эскиза, представленного на рис. 2.2 относительно оси X.
Рисунок 2.2 - Эскиз для операции “Вращение”
Начало работы по созданию данной библиотеки аналогично лабораторной работе №1. Вместо строки, ответственной за вывод сообщения, предлагается вставить программный код, представленный далее. Программный код приведен в полном объеме с подробными комментариями. Последовательность описания кода соответствует действительности. При корректном копировании программного кода из текущего описания в создаваемую библиотеку, будет получена работающая пользовательская подпрограмма.
Рассматриваемая библиотека начинается со следующей конструкции:
Tag UFPart1;
string name1 = "model_k";
int units1 = 1;
theUfSession.Part.New(name1, units1, out UFPart1);
Первые 3 строки текста применяются для описания переменных. В данном контексте переменная UFPart1 является деталью, ее тип задается как тэг (типовой объект NX). name1 - строковая переменная, которая задает имя файла детали. units1 – переменная целочисленного типа, определяющая тип системы мер (1 – метрическая система, 2 – английская). Четвертая строка отвечает за создание новой детали. Переменные name1 и units1 для нее являются входными, а UFPart1 выходными данными.
В последующем блоке описываются 12 однотипных переменных, соответствующих конечным точкам отрезков эскиза.
|
|
double[] l1_endpt1 = { 0, 5, 0.00 };
double[] l1_endpt2 = { 2, 5, 0.00 };
double[] l2_endpt1 = { 2, 5, 0.00 };
double[] l2_endpt2 = { 2, 32.5, 0.00 };
double[] l3_endpt1 = { 2, 32.5, 0.00 };
double[] l3_endpt2 = { -18, 32.5, 0.00 };
double[] l4_endpt1 = { -18, 32.5, 0.00 };
double[] l4_endpt2 = { -18, 30.5, 0.00 };
double[] l5_endpt1 = { -18, 30.5, 0.00 };
double[] l5_endpt2 = { 0, 30.5, 0.00 };
double[] l6_endpt1 = { 0, 30.5, 0.00 };
double[] l6_endpt2 = { 0, 5, 0.00 };
Тип переменных – массив вещественных чисел. Заполнение массивов осуществляется тройками чисел, являющимися координатами точек в 3D пространстве; координаты указываются в порядке X, Y, Z. Так как эскиз плоский, координата по третьей оси (Z) постоянна (в данном случае равна 0).
Последующий блок создает 6 новых структур.
UFCurve.Line line1 = new UFCurve.Line();
UFCurve.Line line2 = new UFCurve.Line();
UFCurve.Line line3 = new UFCurve.Line();
UFCurve.Line line4 = new UFCurve.Line();
UFCurve.Line line5 = new UFCurve.Line();
UFCurve.Line line6 = new UFCurve.Line();
Структуры line1 – line6 относятся к специальному типу NX, соответствующему такому объекту, как отрезок.
В последующем фрагменте программного кода задаются конечные точки отрезков.
line1.start_point = new double[3];
line1.start_point[0] = l1_endpt1[0];
line1.start_point[1] = l1_endpt1[1];
line1.start_point[2] = l1_endpt1[2];
line1.end_point = new double[3];
line1.end_point[0] = l1_endpt2[0];
line1.end_point[1] = l1_endpt2[1];
line1.end_point[2] = l1_endpt2[2];
line2.start_point = new double[3];
line2.start_point[0] = l2_endpt1[0];
line2.start_point[1] = l2_endpt1[1];
line2.start_point[2] = l2_endpt1[2];
line2.end_point = new double[3];
line2.end_point[0] = l2_endpt2[0];
line2.end_point[1] = l2_endpt2[1];
line2.end_point[2] = l2_endpt2[2];
line3.start_point = new double[3];
line3.start_point[0] = l3_endpt1[0];
line3.start_point[1] = l3_endpt1[1];
line3.start_point[2] = l3_endpt1[2];
line3.end_point = new double[3];
line3.end_point[0] = l3_endpt2[0];
line3.end_point[1] = l3_endpt2[1];
line3.end_point[2] = l3_endpt2[2];
line4.start_point = new double[3];
line4.start_point[0] = l4_endpt1[0];
line4.start_point[1] = l4_endpt1[1];
line4.start_point[2] = l4_endpt1[2];
line4.end_point = new double[3];
line4.end_point[0] = l4_endpt2[0];
line4.end_point[1] = l4_endpt2[1];
line4.end_point[2] = l4_endpt2[2];
line5.start_point = new double[3];
line5.start_point[0] = l5_endpt1[0];
line5.start_point[1] = l5_endpt1[1];
line5.start_point[2] = l5_endpt1[2];
line5.end_point = new double[3];
line5.end_point[0] = l5_endpt2[0];
line5.end_point[1] = l5_endpt2[1];
line5.end_point[2] = l5_endpt2[2];
line6.start_point = new double[3];
line6.start_point[0] = l6_endpt1[0];
line6.start_point[1] = l6_endpt1[1];
line6.start_point[2] = l6_endpt1[2];
line6.end_point = new double[3];
line6.end_point[0] = l6_endpt2[0];
line6.end_point[1] = l6_endpt2[1];
line6.end_point[2] = l6_endpt2[2];
Первая и аналогичные ей строки создают массивы вещественных чисел, в которые будут записываться тройки координат точек отрезка. Строки 2 – 4 и аналогичные им задают координаты по X, Y, Z начальных точек отрезков. Строки 6 – 8 и аналогичные им соответствующим образом задают конечные точки отрезков.
Текст, приведенный ниже, отвечает за создание отрезков в 3D пространстве.
Tag[] objarray1 = new Tag[7];
theUfSession.Curve.CreateLine(ref line1, out objarray1[0]);
theUfSession.Curve.CreateLine(ref line2, out objarray1[1]);
theUfSession.Curve.CreateLine(ref line3, out objarray1[2]);
theUfSession.Curve.CreateLine(ref line4, out objarray1[3]);
theUfSession.Curve.CreateLine(ref line5, out objarray1[4]);
theUfSession.Curve.CreateLine(ref line6, out objarray1[5]);
Первая строка создает переменную objarray1, представляющую собой массив тэгов из 7 элементов. Каждая последующая строка создает отрезок в 3D пространстве с последующим его отображением на экране. В качестве входных данных используются координаты конечных точек отрезка. Выходная информация, представляющая тэг каждого отрезка, записывается поэлементно в массив objarray1.
Дальнейший элемент задает переменные и их значения.
double[] ref_pt1 = new double[3];
ref_pt1[0] = 0.00;
ref_pt1[1] = 0.00;
ref_pt1[2] = 0.00;
double[] direction1 = { 1.00, 0.00, 0.00 };
string[] limit1 = { "0", "360" };
Tag[] features1;
Строки 1 – 4 создают массив из 3 вещественных чисел и заполняют его нулями. В дальнейшем он будет использоваться для задания точки с нулевыми координатами, относительно которой будет осуществляться вращение. direction1 – аналогичный массив из трех элементов. В данной программе он отвечает за вектор (точнее его конечную точку), относительно которого осуществляется вращение. Начало вектора находится в начале координат. Переменная limit1 – массив строкового типа, в который заносится начальный и конечный угол для операции вращения, features1 – массив тэгов, выходной информации для операции “Вращение”.
|
|
Последующая строка отвечает за операцию “Вращение”
theUfSession.Modl.CreateRevolved(objarray1, limit1, ref_pt1, direction1, FeatureSigns.Nullsign, out features1);
Аргументами данной операции являются:
1. objarray1 – массив элементов эскиза операции;
2. limit1 – начальный и конечный угол вращения;
3. ref_pt1 – базовая точка;
4. direction1 – вектор, относительно которого осуществляется вращение;
5. FeatureSigns.Nullsign – задает булеву операцию, в данном случае операция отсутствует.
Строка
theUfSession.Part.Save();
сохраняет деталь в файл с именем, заданным переменной name1, по умолчанию путь к сохраненному файлу находится по адресу: C:\Program Files\UGS\NX7.5\UGII.
Практическая часть