Читайте также: |
|
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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Методические указания | | | Теоретическая часть |