Не могу вставить деталь в сборку :(

Автор himik, 27.09.09, 16:43:42

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

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

himik

Добрый день!

Бьюсь неделю безрезультатно со вставкой детали в сборку из файла (КОМПАС V11 SP1). Проблема в том, что по левой кнопке мыши (или Enter) ничего не происходит. Деталь вставляется только по Ctrl+Enter, причем в место, указанное по нажатию левой кнопки мыши или Enter ранее. Как добиться нормального поведения библиотеки? Код ниже.


library SetPartFromFile;

uses SysUtils, Windows, Classes, Forms, LDefin2D, LDefin3D, ksAuto, ksTLB, ksConstTLB;


{$E rtw}

{$R *.res}

var iKompas: KompasObject;

function SELECTCALLBACKPROC(iEntity: ksEntity;
  iRequestInfo3D: ksRequestInfo3D): Integer; stdcall; export;
begin
  Result := 1;
end;

function LibraryName: PChar; pascal;
begin
  Result := 'Вставить деталь в сборку';
end;

procedure LibraryEntry(command: WORD); pascal;
var
  iDoc3D: ksDocument3D;
  iPart: ksPart;
  iRequestInfo3D: ksRequestInfo3D;
begin
    iKompas := KompasObject(CreateKompasObject);

    Forms.Application.Handle := iKompas.ksGetHWindow;

    iDoc3D := ksDocument3D(iKompas.ActiveDocument3D);
    iPart := ksPart(iDoc3D.GetPart(pNew_Part));
    iPart.fileName := 'D:\1.m3d';
    iRequestInfo3D := ksRequestInfo3D(iDoc3D.GetRequestInfo(iPart));
    iRequestInfo3D.SetCallBack('SELECTCALLBACKPROC', hInstance, nil);
    iRequestInfo3D.CreatePhantom;
    ksPart(iRequestInfo3D.GetIPhantom).standardComponent := True;
    if iDoc3D.UserGetPlacementAndEntity(0) then
    begin
      iPart.SetPlacement(iRequestInfo3D.GetPlacement);
      iDoc3D.SetPartFromFile('D:\Work\Delphi\KOMPAS\Projects\В006.m3d', iPart, True);
      iPart.UpdatePlacement;
    end
    else
      iKompas.ksMessage('Fail!');
end;

exports
  SELECTCALLBACKPROC name 'SELECTCALLBACKPROC',
  LibraryName name 'LIBRARYNAME',
  LibraryEntry name 'LIBRARYENTRY';

begin
end.