• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Java + КОМПАС

Автор aurum, 18.11.12, 07:44:42

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

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

aurum

Доброго времени суток.
В рамках учебного проекта возникла задача: на Java построить дерево элементов 3D документа КОМПАС'а. А вот как работать с КОМПАС'ом в Java я не знаю. Может есть у кого-нибудь примеры, как это делается?

А может Вам нужно построить, что то типа этого?

aurum

Нет. В общем, будет дан эталонный 3D документ и измененный. Задание в том, что бы сравнить эти документы и получить в результате отчет, который показывает различия этих документов.
Есть реализация построения такого дерева на C#, но я не представляю как это делать на Java.
Выглядит это примерно так:

На Java реализации экспортных функций Компаса нет.

aurum

В общем такая проблема.
запускаю экземпляр компаса
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.

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[] {});
   }
}
}

aurum

Ни черта не понимаю. делаю через 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
Может я что-то не так делаю?

Цитата: aurum от 04.12.12, 12:31:27
В общем такая проблема.
запускаю экземпляр компаса
ActiveXComponent kompas = new ActiveXComponent("KOMPAS.Application.5");

В диспетчере задач процесс Компаса появляется?
Если нет, то дальше можно не продолжать.

aurum

Да, появляется, и документ открывается, и методы в doc3D вызываются, но дальше нифига

aurum

Никаких мыслей на этот счет нет?

Сразу говорю, что в Java я не спец.
На Delphi выглядит так iPart:=ksPart(iDocument3D.GetPart( pTop_Part ));
где:
ksPart - интерфейс iDispatch
GetPart - метод iDispatch
pTop_Part - значение передаваемое методу.

aurum

Проблема явно не в библиотеки. При использовании jawin рушится все на том же месте.