Подскажите как пользоваться 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) ); - Все массивы начинаются с нуля, если выделено одно ребро, это - автоматическая ошибка.