Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: aurum от 18.11.12, 07:44:42

Название: Java + КОМПАС
Отправлено: aurum от 18.11.12, 07:44:42
Доброго времени суток.
В рамках учебного проекта возникла задача: на Java построить дерево элементов 3D документа КОМПАС'а. А вот как работать с КОМПАС'ом в Java я не знаю. Может есть у кого-нибудь примеры, как это делается?
Название: Re: Java + КОМПАС
Отправлено: Sabahs от 18.11.12, 10:51:50
А может Вам нужно построить, что то типа этого?
(https://forum.ascon.ru/proxy.php?request=http%3A%2F%2Fwww.mariupolsapr.narod.ru%2FAPI7_3D.png&hash=31e2d199fd8220d37a02e62c0e1c094f729398c7)
Название: Re: Java + КОМПАС
Отправлено: aurum от 18.11.12, 11:02:42
Нет. В общем, будет дан эталонный 3D документ и измененный. Задание в том, что бы сравнить эти документы и получить в результате отчет, который показывает различия этих документов.
Есть реализация построения такого дерева на C#, но я не представляю как это делать на Java.
Выглядит это примерно так:
Название: Re: Java + КОМПАС
Отправлено: Sabahs от 18.11.12, 11:18:49
На Java реализации экспортных функций Компаса нет.
Название: Re: Java + КОМПАС
Отправлено: aurum от 04.12.12, 12:31:27
В общем такая проблема.
запускаю экземпляр компаса
ActiveXComponent kompas = new ActiveXComponent("KOMPAS.Application.5");

открываю документ
ActiveXComponent doc3D = kompas.invokeGetComponent("Document3D");
doc3D.invoke("Open", new Variant(name), new Variant(false));

получаю из документа ksPart
ActiveXComponent ksPart = doc3D.invokeGetComponent("GetPart", new Variant((short) 1));

и когда пытаюсь вызвать какие-либо методы или получить свойства
String fileName = ksPart.getProperty("fileName").getString();

то получаю NullPointerException.

Никак не пойму почему так происходит.

Использую JACOB.
Название: Re: Java + КОМПАС
Отправлено: Sabahs от 04.12.12, 14:24:59
ksPart - интерфейс Dispatch.

Нашёл пример с Excel, может чем поможет.

public class DispatchTest {
public static void main(String[] args)
{
   ActiveXComponent xl = new ActiveXComponent("Excel.Application");
   Object xlo = xl.getObject();
   try {
     System.out.println("version="+xl.getProperty("Version"));
     System.out.println("version="+Dispatch.get(xlo, "Version"));
     xl.setProperty("Visible", new Variant(true));
     Object workbooks = xl.getProperty("Workbooks").toDispatch();
     Object workbook = Dispatch.get(workbooks,"Add").toDispatch();
     Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch();
     Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                 new Object[] {"A1"},
                                 new int[1]).toDispatch();
     Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                 new Object[] {"A2"},
                                 new int[1]).toDispatch();
     Dispatch.put(a1, "Value", "123.456");
     Dispatch.put(a2, "Formula", "=A1*2");
     System.out.println("a1 from excel:"+Dispatch.get(a1, "Value"));
     System.out.println("a2 from excel:"+Dispatch.get(a2, "Value"));
     Variant f = new Variant(false);
     Dispatch.call(workbook, "Close", f);
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     xl.invoke("Quit", new Variant[] {});
   }
}
}
Название: Re: Java + КОМПАС
Отправлено: aurum от 06.12.12, 10:37:10
Ни черта не понимаю. делаю через Dispatch так
Dispatch ksPart = Dispatch.call(doc3D, Dispatch.getIDOfName(doc3D, "GetPart"), pTop_Part).getDispatch();

Где
Dispatch doc3D = kompas.invokeGetComponent("Document3D").getObject();
Dispatch.getIDOfName(doc3D, "GetPart") - получает id метода

и когда пытаюсь получить таким же образом из ksPart id методов или свойств то все равно получаю NullPointerException
Может я что-то не так делаю?
Название: Re: Java + КОМПАС
Отправлено: Sabahs от 06.12.12, 10:49:58
Цитата: aurum от 04.12.12, 12:31:27
В общем такая проблема.
запускаю экземпляр компаса
ActiveXComponent kompas = new ActiveXComponent("KOMPAS.Application.5");

В диспетчере задач процесс Компаса появляется?
Если нет, то дальше можно не продолжать.
Название: Re: Java + КОМПАС
Отправлено: aurum от 06.12.12, 10:53:39
Да, появляется, и документ открывается, и методы в doc3D вызываются, но дальше нифига
Название: Re: Java + КОМПАС
Отправлено: aurum от 06.12.12, 11:30:30
Никаких мыслей на этот счет нет?
Название: Re: Java + КОМПАС
Отправлено: Sabahs от 06.12.12, 11:35:48
Сразу говорю, что в Java я не спец.
На Delphi выглядит так iPart:=ksPart(iDocument3D.GetPart( pTop_Part ));
где:
ksPart - интерфейс iDispatch
GetPart - метод iDispatch
pTop_Part - значение передаваемое методу.
Название: Re: Java + КОМПАС
Отправлено: aurum от 06.12.12, 15:29:44
Проблема явно не в библиотеки. При использовании jawin рушится все на том же месте.