Как подключиться к Компасу, API интерфейсов, версия 7? Компас 8...

Автор themaster, 01.10.14, 10:59:14

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

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

themaster

Вопрос кажется элементарным, но мне приходится работать в древней-древней версии Компаса. Программа на Delphi. Даже подключить модули - уже не получается. Пишу так:

uses
  ksTLB, LtDefine, ksApi7, ksConstTLB;

Уже получаю ошибку: Kompas6Constants_TLB не найден! Он требуется для ksAPI7. Такой файл действительно отсутствует в поставке компаса 8.
Посмотрел SDK 13 компаса - там перечисление модулей ksAPI7 не требует такого модуля. Переписал как там - компилируется.

Дальше пишу код:

  newKompasAPI : KompasObject; // Компилируется без проблем;
...
  newKompasAPI := ksGetApplication7; // Не знает, что такое ksGetApplication7!

Этот ksGetApplication7 указан в файле ksTLB.pas, и я его указал в списке модулей! Он даже в справке есть. А всё равно - не знаю, что такое, компилировать не буду, хоть стреляй.
Долго проверял всякие-разные варианты, смотрел примеры, но так и не сообразил, какой должен быть "правильный ответ". Может, кто-нибудь подскажет?

Для Dll см. пример c:\Program Files\ASCON\KOMPAS-3D V15\SDK\Pascal\Delphi\Step1_API7_2D\
//-------------------------------------------------------------------------------
// Получить доступ к новому API
// ---
procedure GetNewKompasAPI;
var
  disp : IDispatch;
begin
  if newKompasAPI = nil then
   begin
     disp := IDispatch(CreateKompasApplication);
     newKompasAPI := disp As IApplication;
   end;
end;

themaster

Undeclared identifier: 'CreateKompasApplication'
Не знает компилятор Delphi, что такое этот CreateKompasApplication.
ksGetApplication7 - это вроде то ли обёртка, то ли новое имя для этого самого CreateKompasApplication...


themaster

Ну надо же - действительно, знает :-)

themaster

Не хочет работать - и всё тут :-(
Код соответствует приведённому примеру. Запускаю на выполнение - получаю сначала кучу жалоб на отсутствующие dll-ки. Скопировал всё, на отсутствие чего оно жалуется, из папки Компаса bin в папку запуска программы. Запустилось, при вызове disp := IDispatch(CreateKompasApplication) - возвращает disp, равный nil. Если бы хоть код ошибки какой-нибудь, а так - вообще не понятно, что ему не нравится и куда рыть дальше...


themaster

Спасибо, интерфейс получил, колупаюсь дальше :-)

themaster

Пришёл на работу, порыл справку - и понял ужасное: я, кажется, не смогу в компасе версии через API v. 7 добраться до начинки двухмерного графического документа. Потому что соответствующих методов там просто (ещё) нет! В смысле, нельзя взять все отрезки документа, выбрать из них нужный и передвинуть его на 10 миллиметров вверх. В 5 версии - запросто, в API v. 7 Компаса 13 - не проблема, а в API v. 7 Компаса 8 - нельзя, потому что интерфейса ILine в нём нет!
Или я всё-таки не прав и просто что-то не вижу?

Не сможете.
ILineSegment – Интерфейс отрезка - появился в Компас V10.
ILine - Интерфейс линии - появился в Компас V12.


themaster

Поколупал я справку API v. 5 восьмого компаса - и чё-то не вижу того, что мне надо. А надо мне открыть документ, найти определённую таблицу и прочитать из неё содержимое.
В рассматриваемых документах таблиц будет - четыре - пять, максимум десяток. Меня интересует одна конкретная. Если попросить пользователя указать эту таблицу - никаких проблем, findObject (или как-то так) и запускай на редактирование. А перебрать все и тихо найти нужную, не привлекая внимание пользователя - можно? И если да, то как?