Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы API Solid Edge Часть 1.doc
Скачиваний:
13
Добавлен:
22.11.2019
Размер:
1.89 Mб
Скачать

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

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

  1. Что такое API?

  2. Что такое динамичесие библиотеки?

  3. Основные отличия внешних и внутренних прикладных подпрограмм для Solid Edge?

  4. Для чего необходим класс OleMessageFilter??

2.2. Задание на лабораторную работу

Задание выдается преподавателем по вариантам.

2.3. Содержание отчета по лабораторной работе

  1. Название и цель работы

  2. Скриншоты с кратким описанием, соответствующие основным шагам выполненной работы

  3. Скриншоты, демонстрирующие работоспосбоность созданной библиотеки

  4. Листинг прграммы с комментариями на русском или английском языке

  5. Выводы

Лабораторная работа №2 Создание детали с помощью операции «Вращение» средствами Solid Edge api на примере поршня пневматического цилиндра

Цель работы: освоить основы твердотельного моделирования в Solid Edge посредствам API функций, изучить методику создания 3D модели, работу с отдельными 2D примитивами при работе с эскизами, освоить операцию «Вращение».

1. Теоретическая часть

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

Рисунок 12 - Упрощенная модель поршня

Для создания рассматриваемой модели необходимо выполнить операцию «Вращение» для эскиза, представленного на рисунке 13 относительно оси Z.

Рисунок 13 - Эскиз для операции «Вращение»

Начало работы по созданию данной библиотеки аналогично лабораторной работе №1. Программный код приведен в полном объеме с подробными комментариями. Последовательность описания кода соответствует действительности. При корректном копировании программного кода из текущего описания в создаваемую билиотеку, будет получена работающая пользовательская подпрограмма.

При параметрическом 3D моделировании одним из первых шагов является создание двумерного профиля (эскиза).

Переменные необходимые для создания профиля:

SolidEdgePart.ProfileSets profileSets = null;

SolidEdgePart.ProfileSet profileSet = null;

SolidEdgePart.Profiles profiles = null;

SolidEdgePart.Profile profile = null;

Далее приведен пример создания профиля:

// создаем ссылку на коллекцию наборов профилей

profileSets = part.ProfileSets;

// создаем один набор профилей

profileSet = profileSets.Add();

// в наборе профилей создаем коллекцию профилей

profiles = profileSet.Profiles;

// создаем плоскость в документе Part (деталь)

refplanes = part.RefPlanes;

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

profile = profiles.Add(...);

С помощью метода Add можно создать профиль в конкретной плоскости. Например:

// создаем один профиль в плоскости XZ

profile = profiles.Add(refplanes.Item(3));

// создаем один профиль в плоскости параллельной плоскости XY

profile = profiles.Add(refplanes.AddParallelByDistance(

refplanes.Item(1), 0.025, SolidEdgePart. ReferenceElementConstants.igReverseNormalSide));

Solid Edge позволяет использовать различные двухмерные геометрические объекты. К таким объектам относят: дуга, b-сплайновая кривая, окружность, эллипс, эллиптическая дуга, линия.

После создания профиля необходимо объявить, что в нем будут использоваться какие-либо объекты 2D геометрии. Например:

// добавляем коллекцию линий в профиль

lines2d = profile.Lines2d;

// добавляем коллекцию дуг в профиль

arcs2d = profile.Arcs2d;

// добавляем коллекцию b-сплайновых кривых в профиль

BSplines2d = profile.BSplineCurves2d;

Объявление переменной для построения отрезка:

SolidEdgeFrameworkSupport.Lines2d lines2d = null;

Существует три метода для того, чтобы ее построить.

  1. AddBy2Points –задание двух точек.

lines2d.AddBy2Points (double x1, double y1, double x2, double y2)

Параметры:

  • x1 и y1 – это координаты начала прямой;

  • x2 и y2 – это координаты конца прямой.

  1. AddByPointAngleLength – создание линии, определяемой начальной точкой, углом и длинной.

lines2d.AddByPointAngleLength (double x, double y,

double Angle,

double Length)

Параметры:

  • x и y – координата точки;

  • Angle – определяет угол новой линии;

  • Length – определяет длину линии.

  1. AddAsChamfer – создается линия, которая соединяет два пересекающихся объекта.

lines2d.AddAsChamfer (object Obj1, object Obj2,

double xDirection, double yDirection,

double SetBackA, double SetBackB)

Параметры:

  • Obj1 и Obj2 – графические объекты для создания фаски;

  • xDirection и yDirection – определяет X и Y координату соответственно, через которую пройдет линия фаски;

  • SetBackA – определяет смещение от конца первого объекта;

  • SetBackB – определяет смещение от конца первого объекта.

Приведем пример использования этих методов.

profileSets = part.ProfileSets;

profileSet = profileSets.Add();

profiles = profileSet.Profiles;

refplanes = part.RefPlanes;

profile = profiles.Add(refplanes.Item(3));

lines2d = profile.Lines2d;

lines2d.AddBy2Points(0, 0, D2 / 2,0);

lines2d.AddBy2Points(D2 / 2, 0, D2 / 2,h);

lines2d.AddBy2Points(D2 / 2, h, D3 / 2,h);

lines2d.AddBy2Points(D3 / 2, h, D3 / 2,0);

lines2d.AddBy2Points(D3 / 2, 0, D5 / 2,0);

lines2d.AddBy2Points(D5 / 2, 0, D5 / 2,L - h3 - b);

lines2d.AddBy2Points(D5 / 2, L - h3 - b, D1 / 2,L-h3-b);

lines2d.AddBy2Points(D1 / 2, L - h3 - b, D1 / 2,L - h3);

lines2d.AddBy2Points(D1 / 2, L - h3, D / 2, L - h3);

lines2d.AddBy2Points(D / 2, L - h3, D / 2, h3);

lines2d.AddBy2Points(D / 2, h3, D1 / 2, h3);

lines2d.AddBy2Points(D1 / 2, h3, D1 / 2, h3 + b);

lines2d.AddBy2Points(D1 / 2, h3 + b, D5 / 2, h3 + b);

lines2d.AddBy2Points(D5 / 2, h3 + b, D5 / 2, L);

lines2d.AddBy2Points(D5 / 2, L, D3 / 2, L);

lines2d.AddBy2Points(D3 / 2, L, D3 / 2, L - h);

lines2d.AddBy2Points(D3 / 2, L - h, D2 / 2, L - h);

lines2d.AddBy2Points(D2 / 2, L - h, D2 / 2, L);

lines2d.AddBy2Points(D2 / 2, L, 0, L);

lines2d.AddBy2Points(0, L, 0, 0);

Тип переменных – массив вещественных чисел. Заполнение массивов осуществляется парами чисел, являющимися координатами точек в 2D пространстве; координаты указываются в порядке X, Y.

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

relations2d = (SolidEdgeFrameworkSupport.Relations2d)

profile.Relations2d;

relation2d = relations2d.AddKeypoint(lines2d.Item(1),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(2),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(2),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(3),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(3),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(4), (int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(4),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(5),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(5),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(6),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(6),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(7),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(7),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(8),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(8),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(9),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(9),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(10),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(10),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(11),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(11),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(12),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(12),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(13),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(13),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(14),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(14),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(15),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(15),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(16),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(16),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(17),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(17),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(18),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(18),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(19),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint(lines2d.Item(19),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(20),

(int)KeypointIndexConstants.igLineStart, true);

relation2d = relations2d.AddKeypoint( lines2d.Item(20),

(int)KeypointIndexConstants.igLineEnd, lines2d.Item(1),

(int)KeypointIndexConstants.igLineStart, true);

profile.End(

SolidEdgePart.ProfileValidationType.igProfileClosed);

profile.Visible = false;

Выходная информация, представляющая тэг каждого отрезка, записывается поэлементно в массив Item() .

Перейдем непосредственно к вращению.

Команда операции вращения имеет вид:

model = models.AddFiniteRevolvedProtrusion (int NumberOfProfiles, ref Array ProfileArray, SolidEdgePart.RefAxis RefAxis,

SolidEdgePart.FeaturePropertyConstants ProfilePlanSide, double AngleofRevolution, [object KeyPointOrTangentFace = Type.Missing], [object KeyPointFlags = Type.Missing])

Параметры:

  • RefAxis – определяет ось вращения;

  • NumberOfProfiles – номер профиля, используемого для вращения

  • AngleofRevolution – определяет угол вращения эскиза

  • SolidEdgePart.FeaturePropertyConstants – определяет напрвление вращения

  • AngleofRevolution – угол вращения в радианах.

Для выполнения данной команды необходимо объявить переменную для оси вращения:

SolidEdgePart.RefAxis RefAxis = null;

Рассмотрим на примере вращения описанного выше эскиза.

aProfiles = Array.CreateInstance(typeof(SolidEdgePart.Profile), 1);

aProfiles.SetValue(profile, 0);

models = part.Models;

model = models.AddFiniteRevolvedProtrusion(1,

ref aProfiles,

RefAxis,

SolidEdgePart.FeaturePropertyConstants.igLeft,

Math.PI * 2);

Строка

part.SaveAs(s);

сохраняет деталь.