Вставка в сборку компонента и ее позиционирование

Автор SerGoVec, 03.12.15, 11:06:37

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

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

SerGoVec

Всем привет!

Делаю вставку компонента в сборку программно. При этом точку встаки компонента в сборку не указываю и по-умолчанию компонент вставляется в ПСК (видимо) сборки. Если вставка компонента в сборку происходит не программно, а интерактивно в компасе, то вставляемому компоненту в сборку, можно указать точку вставки, перемещая сам компонент. Причем никаких команд, кроме одной - "Добавить из файла -> компонент" пользователю производить не надо.

Вставку в сборку я осуществляю так:

procedure TEventAssembly.InsertPartToAssemby(pathToFile: string);
var
  part: IPart7;
  doc3D: IKompasDocument3D;
  kompasAPI: IApplication;
begin

  KompasAPI := IDispatch(CreateKompasApplication) as IApplication;

  doc3d := KompasAPI.ActiveDocument as KompasDocument3D;
  part := doc3D.TopPart;

  part := part.Parts.AddFromFile(pathToFile,False,true); //вставка

  ... // и здесь как-то надо дать возможность пользователю переместить компонент

Как я понял за перемещение компонента отвечает интерактивная команда "разместить компонент". А как программно можно разместить компонент в сборке? какая команда отвечает за это. И, главное, можно ли при программном вызове этой команды дать пользователю интерактивно указать необходимую точку встаки, как это сделано в самом компасе?

Slaviation

Если процесс размещения компонента предполагалось дать пользователю, то:
Правильнее было бы дать пользователю соответствующую компасовую панель, со всеми возможностями размещения.
Сделать это можно запустив процесс KompasObject::ksExecuteKompasCommand(prAddPartFromFile, True).
После запуска этому процессу понадобится файл для вставки и процесс создаст событие BeginRequestFiles (на него надо будет предварительно подписаться).
В обработчике этого события подсовываем свой файл.
Имеем интерактивный процесс размещения компонента со всеми "наворотами".
+ Благодарностей: 1

SerGoVec

ого) спасибо за информацию. Сейчас попробую.

SerGoVec

а саму компасовую панель можно немного изменить: задать ей определенный каталог в пределах которого можно выбирать файлы, но перейти из каталога еще куда-нибудь нельзя. ?

Slaviation


SerGoVec


Создайте свой диалог выбора файла в определённой директории, после выбора файла вставляете, выделяете компонент и запускаете процесс размещения компонента.


x

Подскажите пожалуйста как запустить процесс размещения компонента.


x


x

А как вставить объект, чтобы внизу появилась панель свойств как на картинке.

В личную почту писать не нужно, Вы покажите код, где не получается.
PS. Запрос к сиcтеме (Интерфейсы ksRequestInfo3D, IRequestInfo) - processParam - Параметры процесса.

x

            ksDocument3D idoc = (ksDocument3D)ikompas.ActiveDocument3D();


            ksPart part = (ksPart)idoc.GetPart((int)Part_Type.pNew_Part);
            part.fileName = path;

            //ksRequestInfo3D ksRequestInfo3D = (ksRequestInfo3D)idoc.GetRequestInfo(part);

            ksRequestInfo3D info = (ksRequestInfo3D)idoc.GetRequestInfo(part);
            info.prompt = "Укажите точку для вставки модели";


            IApplication application = (IApplication)ikompas.ksGetApplication7();
            IProcessParam iproc = application.CreateProcessParam();
            iproc.DefaultControlFix = DefaultFixTypeEnum.ksPointFix;
            iproc.SpecToolbar = SpecPropertyToolBarEnum.pnEscSaveSearchHelp;

            info.SetProcessParam(iproc);


            info.CreatePhantom();
            ksPart phantom = (ksPart)info.GetIPhantom();

            if (idoc.UserGetPlacementAndEntity(3))
            {
                ksPlacement place = (ksPlacement)info.GetPlacement();
                part.SetPlacement(place);
                // Изменм положение детали
                part.UpdatePlacementEx(true);

                idoc.SetPartFromFileEx(path, part, true, true);

                part.RebuildModel();
                part.Update();
                idoc.RebuildDocument();

                idoc.Save();

                ikompas.ksMessageBoxResult();
                ikompas.ksResultNULL();
            }


Видна спец. панель. Как сделать панель свойств видимой?


Вы, внимательно  посчитайте мой PS, Ваш код я даже не хочу комментировать.
PS. Вы сделайте правильный запрос, примеры на форуме есть.