Построение модели в API7

Автор Н. Игорь Николаевич, 19.10.16, 22:08:53

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

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

Н. Игорь Николаевич

Доброе время суток!

Пытаюсь разобраться где грабли... Есть функция запуска графической оболочки КОМПАС. В ней запускается сам КОМПАС, создаётся документ модели детали, и берутся интерфейсы ортогональных плоскостей. До 16-й версии всё работало!

В 16-й версии интерфейсы ортогональных плоскостей = nil ! Код процедуры приведён ниже. API5 вроде в 16-й версии присутствует...

function start():boolean;
var
  ks : KompasObject;                           
  iPart : ksPart;
  doc3D : ksDocument3D;                 
  PlaneXOY : ksEntity;                 
  PlaneXOZ : ksEntity;                 
  PlaneYOZ : ksEntity;                 
  iPartDetail : ksPart;
begin
  ks := nil; result := true;

  try
    // попытка подключения к КОМПАСу
    ks := KompasObject( GetActiveOleObject('Kompas.Application.5') );
    ks.Visible := true;
    except
    try
      // запуск КОМПАСа, если он не запущен
      ks := KompasObject( CreateOleObject('Kompas.Application.5') );
      ks.Visible := true;
      except
      // сообщение об ошибке подключениR
      result := false;
      exit;
    end;
  end;


  doc3D := ksDocument3D(ks.Document3D());
  if doc3D.Create(false, true) then begin
    doc3D.author := 'РЕПИН';
    doc3D.drawMode := 3;
    doc3D.perspective := true;
    doc3D.UpdateDocumentParam();
    end else begin
    ks.ksMessage('Не удалось создать документ!');
    result := false;
    exit;
  end;
  if (doc3D <> nil) then begin
    iPart := ksPart(doc3D.GetPart(pNew_Part));
    if (iPart <> nil) then begin
      // интерфейсы ортогональных плоскостей
      PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeXOY));             // ПОЧЕМУ здесь теперь NIL ??? В дальнейшем используются при различных построениях
      PlaneXOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeXOZ));             // ПОЧЕМУ здесь теперь NIL ??? В дальнейшем используются при различных построениях
      PlaneYOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ));             // ПОЧЕМУ здесь теперь NIL ??? В дальнейшем используются при различных построениях
      if (PlaneXOY = nil) or (PlaneXOZ = nil) or (PlaneYOZ = nil) then begin
        result := false;
        exit;
      end;
      end else begin
      result := false;
      exit;
    end;
  end;
end;


Стоит ли переделывать всё под API7? Ну и прошу не пинать сильно, если у кого есть вразумительный пример построения объекта допустим вращением под API7, просьба поделиться...

Почему не pTop_Part?
Судя по справке, Вы создаёте деталь, а используете pNew_Part который может быть у сборки.

Н. Игорь Николаевич

Спасибо, - всё заработало... Интересно, а как же это все работало в предыдущих версиях Компаса???  :)

Тогда вторая часть вопроса:
Стоит ли переделывать всё под API7 (будет ли API5 "вечным" по крайней мере до версий КОМПАСА этак 19-20)? Ну и если у кого есть вразумительный пример построения объекта допустим вращением под API7, просьба поделиться...

Как то работало.
Переделывать или нет решать Вам.
Примеры тут - SDK\Samples\Pascal\Delphi.