Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Создание проекта для Solid Edge

Читайте также:
  1. CONSOLIDATION
  2. Effects of fiscal consolidation
  3. Emphasizing solidarity
  4. EVOLUTION - LA CONSOLIDATION DES FRACTURES
  5. Gt;■ < ' ol" '. 5 ■* создание ряда
  6. II. Создание глоссария по теме занятия
  7. III. Составление проекта федерального бюджета и отчета о его исполнении

1. Создаем проект в Visual Studio. Выбираем в установленных шаблонах Visual C# – Приложение Windows Form. Указываем имя проекта:

 

Рисунок 7 – Создание проекта

 

2. Для начала работы с Solid Edge необходимо добавить ссылки на типы библиотек, которые он использует. Для этого выбираем Проект/Добавить ссылку:

Рисунок 8 – Добавление ссылки

 

У нас появится диалоговое окно, в котором нужно выбрать вкладку COM. Находим библиотеки Solid Edge Type Libraries и добавляем:

 

Рисунок 9 – Необходимые библиотеки

3. Добавим на форму кнопку, двойным нажатием по которой создадим метод:

 

private void button1_Click(object sender, EventArgs e)

{

 

}

 

4. Начинаем изменять код программы. Для начала добавим следующие строки в раздел using:

 

Рисунок 10 – добавление строк в using

 

5. Для соединения и начала работы в 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;

}

}

 

6. При интеграции с 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);

}

}

 

7. В предыдущем пункте был добавлен только новый класс. Для его работы необходимо исправить метод button1_Click:

- Добавить строку OleMessageFilter.Register() после try;

- Изменить код в finally на OleMessageFilter.Revoke().

 

8. Выбираем в меню Visual Studio Построение/Построить решение и Отладка/Запуск без отладки. Появляется созданная нами форма с единственной кнопкой. При ее нажатии откроется Solid Edge.

 

Рисунок 11 – Создание «Обычной детали» в Solid Edge

 


 


Дата добавления: 2015-10-29; просмотров: 256 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Методические указания| Теоретическая часть

mybiblioteka.su - 2015-2024 год. (0.01 сек.)