- •Методические указания
- •230104 «Системы автоматизированного проектирования»
- •Часть 1
- •Введение
- •Лабораторная работа №1 Введение в параметрическое моделирование в Solid Edge с использование api
- •1. Теоретическая часть
- •2. Практиеская часть
- •2.1. Вопросы для самостоятельного контроля знаний
- •2.2. Задание на лабораторную работу
- •2.3. Содержание отчета по лабораторной работе
- •Лабораторная работа №2 Создание детали с помощью операции «Вращение» средствами Solid Edge api на примере поршня пневматического цилиндра
- •1. Теоретическая часть
- •2. Практическая часть
- •2.1. Вопросы для самостоятельного контроля знаний
- •2.2. Задание на лабораторную работу
- •2.3. Содержание отчета по лабораторной работе
- •Выдавливание с удалением материала из модели
- •2. Практическая часть
- •1.2. Программная реализация операции «Выдавливание»
- •2.1 Вопросы для самопроверки
- •2.2 Задания для выполнения лабораторной работы
- •2.3. Содержание отчета по лабораторной работе
- •230104 «Системы автоматизированного проектирования»
- •Часть 1
- •394026 Воронеж, Московский просп., 14
2. Практиеская часть
2.1. Вопросы для самостоятельного контроля знаний
Что такое API?
Что такое динамичесие библиотеки?
Основные отличия внешних и внутренних прикладных подпрограмм для Solid Edge?
Для чего необходим класс OleMessageFilter??
2.2. Задание на лабораторную работу
Задание выдается преподавателем по вариантам.
2.3. Содержание отчета по лабораторной работе
Название и цель работы
Скриншоты с кратким описанием, соответствующие основным шагам выполненной работы
Скриншоты, демонстрирующие работоспосбоность созданной библиотеки
Листинг прграммы с комментариями на русском или английском языке
Выводы
Лабораторная работа №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;
Существует три метода для того, чтобы ее построить.
AddBy2Points –задание двух точек.
lines2d.AddBy2Points (double x1, double y1, double x2, double y2)
Параметры:
x1 и y1 – это координаты начала прямой;
x2 и y2 – это координаты конца прямой.
AddByPointAngleLength – создание линии, определяемой начальной точкой, углом и длинной.
lines2d.AddByPointAngleLength (double x, double y,
double Angle,
double Length)
Параметры:
x и y – координата точки;
Angle – определяет угол новой линии;
Length – определяет длину линии.
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);
сохраняет деталь.