• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Добавление фрагмента на лист

Автор sorockinalex, 19.11.07, 18:02:48

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

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

sorockinalex

Почему-то фрагмент не добавляется. Взял пример откуда-то... Открывает библиотеку поделей, при вставке заново переоткрывает окно выбора модели, но модель не вставляется.  Нажимал F9 (показать всё) - нет добавленного фрагмента...
Помогите найти ошибку!
unit InsertLibFragmentForm;

interface

uses
  LDefin2D,
  ksAuto,
  KsTLB,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  GlobalVariables,
  IniFile;

type
  TForm4 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

procedure Demo_InsertLibFragment( iKompas: KompasObject;iDoc : ksDocument2D );
implementation
// Добавление в текущий графический документ фрагментов из библиотеки
procedure Demo_InsertLibFragment( iKompas: KompasObject;iDoc : ksDocument2D );
var iFrgLib : ksFragmentLibrary;
    iFrg : ksFragment;
    iPhan : ksPhantom;
    iType1 : ksType1;
    iPlaceParms : ksPlacementParam;
    libName,frgName : string;
    refDefFrg, refInsRef : Reference;
    resCode : Longint;
    x, y, ang : Double;
    code : Integer;
begin
    iDoc := ksDocument2D ( iKompas.ActiveDocument2D );
  // Интерфейс для работы с фрагментами
  iFrg := ksFragment(iDoc.GetFragment);
  // Интерфейс для работы с библиотеками фрагментов
  iFrgLib := ksFragmentLibrary(iKompas.GetFragmentLibrary);
  // Выбор библиотеки фрагментов
if obraztype='scheme' then
begin
  If ReadIni ('PATHS','LibraryObrazScheme')='NotExist' then
    begin
    libName := iKompas.ksChoiceFile( '*.lfr', 'Библиотеки фрагментов(*.lfr)|*.lfr|', TRUE );
    WriteIni ('PATHS','LibraryObrazScheme',libName);
    end
  else
    begin
    libName:=ReadIni ('PATHS','LibraryObrazScheme');
    end;
  if libName='' then
    Exit;
end
else
begin
  If ReadIni ('PATHS','LibraryObrazMontazh')='NotExist' then
    begin
    libName := iKompas.ksChoiceFile( '*.lfr', 'Библиотеки фрагментов(*.lfr)|*.lfr|', TRUE );
    WriteIni ('PATHS','LibraryObrazMontazh',libName);
    end
  else
    begin
    libName:=ReadIni ('PATHS','LibraryObrazMontazh');
    end;
  if libName='' then
    Exit;
end;

  // Цикл для выбора/вставки произвольного количества
  // фрагментов из библиотеки libName
  while True do
  begin
    frgName := iFrgLib.ksChoiceFragmentFromLib( libName, resCode );
    // Проверка на то, что был выбран именно фрагмент (код 3)
    if resCode=0 then
      break      // Выход из цикла в случае ошибки
    else if resCode<>3 then
      continue;

    // Описание варианта типа 1 (произвольная группа)
    iPhan := ksPhantom(iKompas.GetParamStruct(6));  //6=ko_Phantom
    iPhan.Init;
    iPhan.phantom := 1;
    iType1 := ksType1(iPhan.GetPhantomParam);
    iType1.Init;
    iType1.scale_ := 1;

    // Описание объекта "вставка фрагмента"
    // Указывается имя фрагмента, имя вставки фрагмента и способ
    // вставки (1 - внешней ссылкой, 0-импортировать в документ)
    refDefFrg := iFrg.ksFragmentDefinition( frgName, 'вставка фрагмента', 0 );
    if refDefFrg=0 then
      iKompas.ksError( 'Ошибка вставки фрагмента' )
    else
    begin
      // Создание временной группы для вариантного отображения
      // Во временную группу поместим вставку фрагмента из
      // библиотеки фрагментов
      iType1.gr := iDoc.ksNewGroup(1);
      iPlaceParms := ksPlacementParam(iKompas.GetParamStruct(7));  //7=ko_PlacementParam
      iPlaceParms.Init;
      iPlaceParms.scale_ := 1;
      refInsRef := iFrg.ksInsertFragment( refDefFrg, FALSE, iPlaceParms );
      iDoc.ksEndGroup;

      // Получение параметров местоположения и ориентации для вставки
      // произвольного количества экземпляров фрагмента
      repeat
        code := iDoc.ksPlacement(nil, x, y, ang, iPhan);
        if code<>0 then
          iDoc.ksCopyObj( refInsRef, 0, 0, x, y, 1, ang );
      until code=0;

      // Удаление временной группы, использовавшейся для
      // вариантного отображения
      iDoc.ksDeleteObj( iType1.gr );
    end;
  end;
end;
{$R *.dfm}

end.