Из Фрагмента в Чертёж

Автор Fischer, 20.03.08, 06:35:34

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

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

Fischer

Добрый день всем!!!
Пишу в Delphi для Kompas 9. Столкнулся с такой проблемой. У меня имеется несколько файлов *.frw. Я создаю новый чертеж. Как вставить фрагмент в новый чертеж зная путь и имя фрагментов? Посоветуйте чтонить. Буду рад увидеть кусочек кода.

AndreySt

Вставка фрагмента на чертеж(правда сделано для компас 5.11 но думаю и для 9го будет нормально)
procedure InsertFragment;
var
    phan: ksPhantom;
    type1: ksType1;
    frag: ksFragment;
    x, y, ang: double;
    par: ksPlacementParam;
    docPar: ksDocumentParam;
    doc        : ksDocument2D;
    KompasApi  : KompasObject;
begin
  KompasApi := KompasObject(Kompas.KompasAPI);
  doc := ksDocument2D(kompasAPI.ActiveDocument2D);
  docPar := ksDocumentParam(KompasApi.GetParamStruct(ko_DocumentParam));
  phan := ksPhantom(KompasApi.GetParamStruct(ko_Phantom));
  frag := ksFragment(doc.GetFragment);
  par := ksPlacementParam(KompasApi.GetParamStruct(ko_PlacementParam));
  par.Init;
  phan.phantom := 1;
  type1 := ksType1(phan.GetPhantomParam);
  type1.xBase := 0;type1.yBase := 0;
  type1.angle := 0;
  type1.scale_ := 1;
  type1.gr := frag.ksReadFragmentToGroupEx('C:\WorkFolder\temp.frw', false, par, false);
  if type1.gr = 0 then
    exit;
  phan.phantom := 1;
  doc.ksCursor(nil, x, y,phan);
  if type1.gr <> 0 then begin
    doc.ksMoveObj(type1.gr,x,y);
    doc.ksStoreTmpGroup(type1.gr);
  end;
  DeleteFile('C:\WorkFolder\temp.frw');
end;
//если что не понятно пиши

Fischer

Всё работает спасибо! Но не совсем то что хотелось. Если использовать контекстное меню "Вставить внешний фрагмент" наш фрагмент вращаеться. А в коде такого нет. Как это можно организовать???И вообще возможно ли это?
Буду очень рад получить кусочек кода. :shu:

AndreySt

попробуй вместо ksCursor использовать  ksPlacement

Fischer

Спасибо Большое всё работает!!!!!
Очень благодарен тебе!!! :o:

AndreySt

Всегда пожалуйста! :) Рад помочь

Fischer

Добрый день! Есть такой вопрос. В приведенной выше процедуре использую doc.ksRotateObj вместо doc.ksMoveObj вставляемый фрагмент поворачивается как надо, но ставится не в том месте в котором кликаю. Что не так?
И еще вопросик. У doc.ksRotateObj есть параметр "angle", что это за параметр? Очень жду ответа.

Fischer

Добрый день!!! <<<Очень жду ответа>>>. Вопрос задан выше...

Taro

Цитата: Fischer от 21.03.08, 12:56:58
Добрый день! Есть такой вопрос. В приведенной выше процедуре использую doc.ksRotateObj вместо doc.ksMoveObj вставляемый фрагмент поворачивается как надо, но ставится не в том месте в котором кликаю. Что не так?
И еще вопросик. У doc.ksRotateObj есть параметр "angle", что это за параметр? Очень жду ответа.

ksRotateObj  - поворот объекта вокруг точки, соответственно angle угол поворота
ksMoveObj - сдвиг объекта, координаты x, y - вектор сдвига

Эти процедуры можнл использовать совместно.
Например, сначала сдвинули объект, а затем повернули его

Fischer

Спасибо огромное!!! Получилось!!!

Galush

Здравсвуйте! А как сделать чтобы с помощью этой процедуры фрагмент вставлялся как единое целое? :shu:

Fischer

Очень жду ответа!!!

Fischer

Добрый день всем!!!
Возник такой вопрос??? Как можно сделать чтобы с помощью процедуры указанной выше фрагмент вставлялся как единое целое?
Хотелось бы кусочек рабочего кода :shu:
Очень нужен ответ!

chelkar

Нужно создать макроэлемент ksMacro и добавить туда группу ksAddObjectToMacro.

Fischer

А можно подробнее... Очень нужен ответ!

Fischer

Подскажите кто - нибудь Плиззз!!!!!!!!!!!1

Taro

Цитата: Fischer от 28.03.08, 11:14:06
А можно подробнее... Очень нужен ответ!
Уважаемый, а справкой sdk.hlp не пробывали воспользоваться?
В часности разделами ksMacro и ksAddObjectToMacro? Там есть и описания и примеры  :o:

Fischer


Fischer


Taro

Цитата: Fischer от 28.03.08, 13:05:55
Возьми и почитай
Вобще-то так регулярно и делаю, и не совсем поняла Вашего негатива.
Если конкретнее, что именно вам не понятно?
Функциями ksMacro /EndObj создаете пустой именованный макрообъект. Например так:
ksMacro (1);
reference macro=EndObj();

Ваш фрагмент добавляете в этот макрообъект
ksAddObjectToMacro (macro,type1.gr);

Я бы еще посоветовала пользваться функциями  SetMacroParam и  GetMacroParam, при необходимости запоминать какие-то доболнительные параметры. Например, тот же путь к файлу