Пытаюсь сделать программу, которая бы считывала ряд параметров из штампа чертежа (Visual Basic.NET 2005).
Вот кусок кода (здесь пытаюсь проверить, открыт ли чертеж):
Private Sub FromKOMPAS() 'открыть чертеж Компас и взять из него данные
Try 'есть открытый документ Компас
Dim iKompas As Kompas6API5.KompasObject = Marshal.GetActiveObject ("KOMPAS.Application.5")
'Здесь буду считывать данные
Exit Sub
Catch ex As Exception 'возникла ошибка
'Сообщение об ошибке
Exit Sub
End Try
End Sub
С профессиональным Компасом все проходит на "ура", а вот с версией LT проблема: возникает ошибка "A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll".
Если заменить Kompas6API5 на Kompas6LTAPI5, перестает работать и с учебной версией Компаса.
Заранее спасибо.
P.S. Не подскажите, как "добраться" до обозначения, наименования и массы детали в штампе? :)
Забыл добавить: проверял на Компас 3D V 11 (все работает), Компас 3D LT V11 (не работает) и Компас 3D LT V10 (тоже не работает).
Вопрос про то, как получить обозначение, наименование и массу из штампа, уже неактуален и снимается.
Но с Компасом LT по-прежнему проблемы. Может, подскажет кто? :)
Сам Компас LT запущен, чертеж в нем открыт, процесс "KOMPASLT" имеет место быть.
Если версия LT, то ("KOMPASLT.Application.5") ,
не LT, то ("KOMPAS.Application.5")
Не работает.
...
Variant ActiveDocument2D, KompasObject;
...
try
{
KompasObject=GetActiveOleObject("KOMPASLT.Application.5"); // Подключение к открытому KOMPAS LT
}
catch (...)
{ // Ошибка, KOMPAS LT либо не открыт, либо не установлен
try
{ // Открываем KOMPAS LT
KompasObject=CreateOleObject("KOMPASLT.Application.5");
}
catch (...)
{ // Ошибка, KOMPAS LT не установлен
MessageBox(Form1->Handle,
"Ошибка подключения или запуска приложения КОМПАС LT",
"Сообщение об ошибке", MB_OK);
return;
}
}
KompasObject.OlePropertySet("Visible", true);
ActiveDocument2D=KompasObject.OlePropertyGet("ActiveDocument2D"); // Подключение к активному документу 2D
if (ActiveDocument2D.operator IDispatch *() == (IDispatch*)NULL)
{ // Нет открытых документов, надо загризить или создать
...
}
...
Может ты ещё пишешь
...
Document2D=KompasObject.OlePropertyGet("Document2D"); (1)
...
вместо
...
ActiveDocument2D=KompasObject.OlePropertyGet("ActiveDocument2D"); (2)
...
У меня выражение (1) не работало.
Спасибо, все работает.
Единственная проблема - не могу получить массу 3D модели.
Использую такой код:
Dim iKompas As Kompas6LTAPI5.KompasObject = Marshal.GetActiveObject("KOMPASLT.Application.5")
Dim iDoc3D As ksDocument3D = iKompas.ActiveDocument3D
Dim Massa As String
If iDoc3D IsNot Nothing Then
Dim iPart As ksPart = iDoc3D.GetPart(-1)
If iPart IsNot Nothing Then
Massa = Part.GetMass
End If
End If
Строка Dim iPart As ksPart = iDoc3D.GetPart(-1) вызывает ошибку (модель открыта в Компас V11 LT).
Может, все-таки подскажет кто-нибудь? Как добраться до детали в Компасе LT?
Код для профессионального Компаса (все отлично работает):
Dim iKompas As Kompas6API5.KompasObject = Marshal.GetActiveObject("KOMPAS.Application.5")
Dim iDoc3D As Kompas6API5.ksDocument3D = iKompas.ActiveDocument3D
Dim iPartLT As Kompas6LTAPI5.ksPart = iDoc3DLT.GetPart(Kompas6Constants3D.Part_Type.pTop_Part)
Код для Компаса LT:
Dim iKompasLT As Kompas6LTAPI5.KompasObject = Marshal.GetActiveObject("KOMPASLT.Application.5")
Dim iDoc3DLT As Kompas6LTAPI5.ksDocument3D = iKompasLT.ActiveDocument3D
Dim iPartLT As Kompas6LTAPI5.ksPart = iDoc3DLT.GetPart(Kompas6Constants3D.Part_Type.pTop_Part) 'в этой строке возникает ошибка
Пробовал добраться до детали через Компас АПИ 7-й версии, однако и здесь проблемы:
Код для профессионального Компаса (все работает):
Dim iKompas7 As KompasAPI7.IApplication = Marshal.GetActiveObject("KOMPAS.Application.7")
Код для Компаса LT (не работает):
Dim iKompasLT7 As KompasLTAPI7.IApplication = Marshal.GetActiveObject("KOMPASLT.Application.7")
Проверял на профессиональном Компасе 12-й версии и Компасе LT 11-й версии.