- •Методические указания
- •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
Лабораторная работа №1 Введение в параметрическое моделирование в Solid Edge с использование api
Цель работы: получить практические навыки интеграции прикладных подпрограмм и Solid Edge; научиться создавать простейшие программы и запускать их на выполнение в Solid Edge.
1. Теоретическая часть
Для разработки прикладных пользовательских программ для Solid Edge коллектив авторов предлагает использовать среду разработку Microsoft Visual Studio 2010.
Создание проекта для Solid Edge
Создаем проект в Visual Studio. Выбираем в установленных шаблонах Visual C# – Приложение Windows Form. Указываем имя проекта:
Рисунок 7 – Создание проекта
Для начала работы с Solid Edge необходимо добавить ссылки на типы библиотек, которые он использует. Для этого выбираем Проект/Добавить ссылку:
Рисунок 8 – Добавление ссылки
У нас появится диалоговое окно, в котором нужно выбрать вкладку COM. Находим библиотеки Solid Edge Type Libraries и добавляем:
Рисунок 9 – Необходимые библиотеки
Добавим на форму кнопку, двойным нажатием по которой создадим метод:
private void button1_Click(object sender, EventArgs e)
{
}
Начинаем изменять код программы. Для начала добавим следующие строки в раздел using:
Рисунок 10 – добавление строк в using
Для соединения и начала работы в Solid Edge в метод button1_Click добавим:
// Объявление переменных
SolidEdgeFramework.Application application = null;
SolidEdgeFramework.Documents documents = null;
SolidEdgePart.PartDocument part = null;
Type type = null;
try
{
//получаем тип от Solid Edge ProgID
type = Type.GetTypeFromProgID("SolidEdge.Application");
// начало в Solid Edge
application = (SolidEdgeFramework.Application)
Activator.CreateInstance(type);
// делаем Solid Edge видимым
application.Visible = true;
// отключение отображение сварных деталей
application.DisplayAlerts = false;
// создание ссылки для документов
documents = application.Documents;
// создание документа "Деталь"
part = (SolidEdgePart.PartDocument)documents.Add("SolidEdge.PartDocument");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (part != null)
{
Marshal.ReleaseComObject(part);
part = null;
}
if (documents != null)
{
Marshal.ReleaseComObject(documents);
documents = null;
}
if (application != null)
{
Marshal.ReleaseComObject(application);
application = null;
}
}
При интеграции с Solid Edge могут возникнуть ошибки. Класс OleMessageFilter необходим для их обработки:
class OleMessageFilter : IOleMessageFilter
{
public static void Register()
{
IOleMessageFilter newFilter = new OleMessageFilter();
IOleMessageFilter oldFilter = null;
if (Thread.CurrentThread.GetApartmentState() ==
ApartmentState.STA)
{
CoRegisterMessageFilter(newFilter, out oldFilter);
}
else
{
throw new COMException("Unable to register message filter because the current thread apartment state is not STA.");
}
}
public static void Revoke()
{
IOleMessageFilter oldFilter = null;
CoRegisterMessageFilter(null, out oldFilter);
}
int IOleMessageFilter.HandleInComingCall(
int dwCallType,
System.IntPtr hTaskCaller,
int dwTickCount,
System.IntPtr lpInterfaceInfo)
{
return (int)SERVERCALL.SERVERCALL_ISHANDLED;
}
int IOleMessageFilter.RetryRejectedCall(
System.IntPtr hTaskCallee,
int dwTickCount,
int dwRejectType)
{
if (dwRejectType == (int)SERVERCALL.SERVERCALL_RETRYLATER)
{
return 99;
}
return -1;
}
int IOleMessageFilter.MessagePending(
System.IntPtr hTaskCallee,
int dwTickCount,
int dwPendingType)
{
return (int)PENDINGMSG.PENDINGMSG_WAITDEFPROCESS;
}
[DllImport("Ole32.dll")]
private static extern int CoRegisterMessageFilter(
IOleMessageFilter newFilter,
out IOleMessageFilter oldFilter);
}
enum SERVERCALL
{
SERVERCALL_ISHANDLED = 0,
SERVERCALL_REJECTED = 1,
SERVERCALL_RETRYLATER = 2
}
enum PENDINGMSG
{
PENDINGMSG_CANCELCALL = 0,
PENDINGMSG_WAITNOPROCESS = 1,
PENDINGMSG_WAITDEFPROCESS = 2
}
[ComImport(), Guid("00000016-0000-0000-C000-000000000046"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
interface IOleMessageFilter
{
[PreserveSig]
int HandleInComingCall(
int dwCallType,
IntPtr hTaskCaller,
int dwTickCount,
IntPtr lpInterfaceInfo);
[PreserveSig]
int RetryRejectedCall(
IntPtr hTaskCallee,
int dwTickCount,
int dwRejectType);
[PreserveSig]
int MessagePending(
IntPtr hTaskCallee,
int dwTickCount,
int dwPendingType);
}
}
В предыдущем пункте был добавлен только новый класс. Для его работы необходимо исправить метод button1_Click:
Добавить строку OleMessageFilter.Register() после try;
Изменить код в finally на OleMessageFilter.Revoke().
Выбираем в меню Visual Studio Построение/Построить решение и Отладка/Запуск без отладки. Появляется созданная нами форма с единственной кнопкой. При ее нажатии откроется Solid Edge.
Рисунок 11 – Создание «Обычной детали» в Solid Edge
