Применением SelectionManager

Автор сверлый, 07.03.16, 19:37:11

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

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

сверлый

Подскажите как пользоваться SelectionManager.

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,KsTLB,LDefin2D,LDefin3D,ksAuto,ComObj,ComCtrls,ActiveX;
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
pTop_Part = -1;
o3d_planeXOY = 1;
o3d_sketch = 5;
o3d_planeOffset = 14;
o3d_baseExtrusion = 24;
o3d_bossExtrusion = 25;
etBlind = 0;
vm_Shaded = 3;

var
Form1: TForm1;
kompasHandle:THandle;
kompas: KompasObject;
Document3D: ksDocument3D;
Part: ksPart;
edge:ksEdgeDefinition;
edge_ent: ksEntity;
edgelen:Double;
Res : Integer;
count:Integer;

begin
  CoInitialize( Nil );

kompas:=KompasObject(GetActiveOleObject('Kompas.Application.5'));
Document3D:=ksDocument3D(kompas.ActiveDocument3D());
selectionMgr:=ksSelectionMng(Document3D.GetSelectionMng());
count:=    selectionMgr.GetObjectType(1); //возвращает всегда ноль
Application.MessageBox(PChar('Hello how do you do'),PChar(IntToStr(count)),MB_YESNOCANCEL + MB_ICONQUESTION);
// получение объекта выделенного ребра
edge:=  ksEdgeDefinition(selectionMgr.GetObjectByIndex(1) );
edge_ent := ksEntity(edge.getEntity());//выдает ошибку
edgelen:=edge.GetLength(0);              //выдает ошибку
end.

Вы уверены, что в данный момент активен 3D документ?
Document3D:=ksDocument3D(kompas.ActiveDocument3D());

PS. edge:=  ksEdgeDefinition(selectionMgr.GetObjectByIndex(1) ); - Все массивы начинаются с нуля, если выделено одно ребро, это - автоматическая ошибка.