Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: SerGoVec от 03.12.15, 11:06:37

Название: Вставка в сборку компонента и ее позиционирование
Отправлено: SerGoVec от 03.12.15, 11:06:37
Всем привет!

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

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

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); //вставка

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

Как я понял за перемещение компонента отвечает интерактивная команда "разместить компонент". А как программно можно разместить компонент в сборке? какая команда отвечает за это. И, главное, можно ли при программном вызове этой команды дать пользователю интерактивно указать необходимую точку встаки, как это сделано в самом компасе?
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: Slaviation от 03.12.15, 13:16:11
Если процесс размещения компонента предполагалось дать пользователю, то:
Правильнее было бы дать пользователю соответствующую компасовую панель, со всеми возможностями размещения.
Сделать это можно запустив процесс KompasObject::ksExecuteKompasCommand(prAddPartFromFile, True).
После запуска этому процессу понадобится файл для вставки и процесс создаст событие BeginRequestFiles (на него надо будет предварительно подписаться).
В обработчике этого события подсовываем свой файл.
Имеем интерактивный процесс размещения компонента со всеми "наворотами".
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: SerGoVec от 03.12.15, 13:26:52
ого) спасибо за информацию. Сейчас попробую.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: SerGoVec от 03.12.15, 13:41:07
а саму компасовую панель можно немного изменить: задать ей определенный каталог в пределах которого можно выбирать файлы, но перейти из каталога еще куда-нибудь нельзя. ?
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: Slaviation от 03.12.15, 13:46:35
нет, панели процессов КОМПАС приватные.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: SerGoVec от 03.12.15, 13:52:01
жаль. Спасибо еще раз.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: Sabahs от 03.12.15, 17:19:11
Создайте свой диалог выбора файла в определённой директории, после выбора файла вставляете, выделяете компонент и запускаете процесс размещения компонента.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: SerGoVec от 07.12.15, 16:33:43
Так и сделал)
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: x от 03.12.16, 11:37:57
Подскажите пожалуйста как запустить процесс размещения компонента.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: Sabahs от 03.12.16, 16:06:39
UserGetPlacementAndEntity
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: x от 03.12.16, 16:28:49
Спасибо.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: x от 03.12.16, 16:36:31
А как вставить объект, чтобы внизу появилась панель свойств как на картинке.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: Sabahs от 03.12.16, 19:03:38
В личную почту писать не нужно, Вы покажите код, где не получается.
PS. Запрос к сиcтеме (Интерфейсы ksRequestInfo3D, IRequestInfo) - processParam - Параметры процесса.
Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: x от 03.12.16, 20:12:44
            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();
            }


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

Название: Re: Вставка в сборку компонента и ее позиционирование
Отправлено: Sabahs от 03.12.16, 20:30:50
Вы, внимательно  посчитайте мой PS, Ваш код я даже не хочу комментировать.
PS. Вы сделайте правильный запрос, примеры на форуме есть.