Получить активный документ от TKGAX

Автор mr. Tim, 19.11.20, 08:39:07

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

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

mr. Tim

Добрый день.
Необходимо открыть чертеж в своем окошке с возможностью кликать по его элементам и получать какую-либо информацию по выбранному элементу.
Попробовали добраться через TKGAX, но не получается взять активный документ, чтобы дальше уже обращаться к ViewAndLayersManager и т.д. Компас версия 13. Чертеж выводим на обычную панель TPanel.
var
kompas : TKGAX;

begin
     kompas := TKGAX.Create(nil);
     kompas.Parent := Panel1;
     kompas.Align := alClient;
     kompas.AddDocument('D:\Чертеж.cdw');

end;
:w:
Сам документ загружается, нормально отображается и даже можно по нему кликать, но дальнейшие все попытки взять с kompas активный документ и какую-либо информацию не увенчались успехом. Нужна помощь  :!:

Функции должны работать:
ActiveDocument3D - Получить указатель на интерфейс текущего документа трехмерной модели;
ActiveDocument2D - Получить указатель на интерфейс текущего графического документа;
ActiveDocumentTxt - Получить указатель на интерфейс текущего текстового документа.
Чтобы добраться до IViewAndLayersManager нужно получить API7, а дальше все одинаково, примеры на форуме есть.
Kompas7:=Kompas.ksGetApplication7 as IApplication;
Doc:=Kompas7.ActiveDocument;

mr. Tim

Цитата: Sabahs от 19.11.20, 09:02:47Kompas7:=Kompas.ksGetApplication7 as IApplication;
Doc:=Kompas7.ActiveDocument;
Наша строчка выглядит так:
iApp := kompas.GetKompasObject.ksGetApplication7 as IApplication;
iKompasDoc := iApp.ActiveDocument;

переменная iKompasDoc типа IKompasDocument.

В итоге она у нас остается nil, а iApp не nil. В этом то и проблема. Не берется активный документ :( Все примеры с форума уже попробовали.

Самим TKGAX получите.
GetActiveDocumentIndex - Получить индекс активного документа.
GetDocumentByIndex - Получить указатель на документ по индексу.

mr. Tim

Цитата: Sabahs от 19.11.20, 09:31:12GetActiveDocumentIndex - Получить индекс активного документа.
GetDocumentByIndex - Получить указатель на документ по индексу.

В нашем TKGAX'е таких методов нет. Вот всё что там имеется:

public
    function GetDocumentInterface(index: OleVariant; newAPI: Integer): IDispatch;
    function GetActiveDocumentID: Integer;
    function GetKompasObject: KompasObject;
    procedure ZoomWindow(type_: KZoomType);
    procedure StopCurrentProcess(cancel: WordBool);
    function RemoveDocument(index: OleVariant): WordBool;
    function InsertNewDocument(type_: KDocumentType; index: OleVariant): Integer;
    function AddDocument(const fileName: WideString): Integer;
    function AddNewDocument(type_: KDocumentType): Integer;
    function GetDocumentType(index: OleVariant): KDocumentType;
    function GetDocumentsCount: Integer;
    function InsertDocument(const fileName: WideString; index: OleVariant): Integer;
    procedure OrientationDocument;
    function InvalidateActiveDocument(erase: WordBool): WordBool;
    function ActivateDocument(index: OleVariant): WordBool;
    function CloseAll: Integer;
    procedure ZoomEntireDocument;
    procedure MoveViewDocument;
    procedure PanoramaViewDocument;
    procedure SetGabaritModifying;
    function GetDocumentID(index: OleVariant): Integer;
    function DrawToDC(dc: OLE_HANDLE; left: Integer; top: Integer; width: Integer; height: Integer): WordBool;
    function TestLoadDocument(const fileName: WideString): SYSINT;
    procedure RotateViewDocument;
    procedure SetCurrentLibManager(t: Integer);
    property  ControlInterface: _DKGAX read GetControlInterface;
    property  DefaultInterface: _DKGAX read GetControlInterface;
  published
    property Anchors;
    property  TabStop;
    property  Align;
    property  DragCursor;
    property  DragMode;
    property  ParentShowHint;
    property  PopupMenu;
    property  ShowHint;
    property  TabOrder;
    property  Visible;
    property  OnDragDrop;
    property  OnDragOver;
    property  OnEndDrag;
    property  OnEnter;
    property  OnExit;
    property  OnStartDrag;
    property Document3DWireframeShadedMode: WordBool index 4 read GetWordBoolProp write SetWordBoolProp stored False;
    property Document3DDrawMode: TOleEnum index 3 read GetTOleEnumProp write SetTOleEnumProp stored False;
    property DocumenFileName: WideString index 2 read GetWideStringProp write SetWideStringProp stored False;
    property DocumentType: TOleEnum index 1 read GetTOleEnumProp write SetTOleEnumProp stored False;
    property Text: WideString index -517 read GetWideStringProp write SetWideStringProp stored False;
    property Caption: WideString index -518 read GetWideStringProp write SetWideStringProp stored False;
    property OnKgMouseDown: TKGAXOnKgMouseDown read FOnKgMouseDown write FOnKgMouseDown;
    property OnKgMouseUp: TKGAXOnKgMouseUp read FOnKgMouseUp write FOnKgMouseUp;
    property OnKgMouseDblClick: TKGAXOnKgMouseDblClick read FOnKgMouseDblClick write FOnKgMouseDblClick;
    property OnKgStopCurrentProcess: TNotifyEvent read FOnKgStopCurrentProcess write FOnKgStopCurrentProcess;
    property OnKgCreate: TKGAXOnKgCreate read FOnKgCreate write FOnKgCreate;
    property OnKgPaint: TKGAXOnKgPaint read FOnKgPaint write FOnKgPaint;
    property OnKgCreateGLList: TKGAXOnKgCreateGLList read FOnKgCreateGLList write FOnKgCreateGLList;
    property OnKgAddGabatit: TKGAXOnKgAddGabatit read FOnKgAddGabatit write FOnKgAddGabatit;
    property OnKgErrorLoadDocument: TKGAXOnKgErrorLoadDocument read FOnKgErrorLoadDocument write FOnKgErrorLoadDocument;
    property OnKgKeyDown: TKGAXOnKgKeyDown read FOnKgKeyDown write FOnKgKeyDown;
    property OnKgKeyUp: TKGAXOnKgKeyUp read FOnKgKeyUp write FOnKgKeyUp;
    property OnKgKeyPress: TKGAXOnKgKeyPress read FOnKgKeyPress write FOnKgKeyPress;

Так это методы интерфейса _DKGAX.
SDK откройте, там все расписано.

mr. Tim

Цитата: Sabahs от 19.11.20, 10:05:46Так это методы интерфейса _DKGAX.
SDK откройте, там все расписано.
Пока вроде бы всё получается, предварительно: код мы писали правильный, просто без установленного в делфи компонента TKGAX он не работал, хотя мы его Create'или... как-то странно, но ладно...

Взяли все размеры, вывели в таблицу, тыкаем на любой размер - подсвечиваем соответствующую размерную выноску. Это всё отлично работает, но можно ли подсветить сам объект, на котором закреплена эта выноска?


mr. Tim

Цитата: Sabahs от 19.11.20, 16:51:31Я, думаю, сможете.
Большое спасибо! В целом понятно как действовать теперь