Ошибка при проверке, открыт ли чертеж Компас LT

Автор ainis, 04.06.10, 19:35:45

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ainis

Пытаюсь сделать программу, которая бы считывала ряд параметров из штампа чертежа (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. Не подскажите, как "добраться" до обозначения, наименования и массы детали в штампе?  :)



ainis

Забыл добавить: проверял на Компас 3D V 11 (все работает), Компас 3D LT V11 (не работает) и  Компас 3D LT V10 (тоже не работает).

ainis

#2
Вопрос про то, как получить обозначение, наименование и массу из штампа, уже неактуален и снимается.
Но с Компасом LT по-прежнему проблемы. Может, подскажет кто?  :)
Сам Компас LT запущен, чертеж в нем открыт, процесс "KOMPASLT" имеет место быть.

Альянс

Если версия LT, то ("KOMPASLT.Application.5") ,
не LT, то ("KOMPAS.Application.5")

ainis


Альянс

...
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) не работало.

ainis

Спасибо, все работает.
Единственная проблема - не могу получить массу 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).

ainis

Может, все-таки подскажет кто-нибудь? Как добраться до детали в Компасе 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-й версии.