Вопросы для самостоятельного контроля знаний

 

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.

 

Практическая часть

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: