Всем привет!
Делаю вставку компонента в сборку программно. При этом точку встаки компонента в сборку не указываю и по-умолчанию компонент вставляется в ПСК (видимо) сборки. Если вставка компонента в сборку происходит не программно, а интерактивно в компасе, то вставляемому компоненту в сборку, можно указать точку вставки, перемещая сам компонент. Причем никаких команд, кроме одной - "Добавить из файла -> компонент" пользователю производить не надо.
Вставку в сборку я осуществляю так:
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); //вставка
... // и здесь как-то надо дать возможность пользователю переместить компонент
Как я понял за перемещение компонента отвечает интерактивная команда "разместить компонент". А как программно можно разместить компонент в сборке? какая команда отвечает за это. И, главное, можно ли при программном вызове этой команды дать пользователю интерактивно указать необходимую точку встаки, как это сделано в самом компасе?
Если процесс размещения компонента предполагалось дать пользователю, то:
Правильнее было бы дать пользователю соответствующую компасовую панель, со всеми возможностями размещения.
Сделать это можно запустив процесс KompasObject::ksExecuteKompasCommand(prAddPartFromFile, True).
После запуска этому процессу понадобится файл для вставки и процесс создаст событие BeginRequestFiles (на него надо будет предварительно подписаться).
В обработчике этого события подсовываем свой файл.
Имеем интерактивный процесс размещения компонента со всеми "наворотами".
ого) спасибо за информацию. Сейчас попробую.
а саму компасовую панель можно немного изменить: задать ей определенный каталог в пределах которого можно выбирать файлы, но перейти из каталога еще куда-нибудь нельзя. ?
нет, панели процессов КОМПАС приватные.
жаль. Спасибо еще раз.
Создайте свой диалог выбора файла в определённой директории, после выбора файла вставляете, выделяете компонент и запускаете процесс размещения компонента.
Так и сделал)
Подскажите пожалуйста как запустить процесс размещения компонента.
UserGetPlacementAndEntity
Спасибо.
А как вставить объект, чтобы внизу появилась панель свойств как на картинке.
В личную почту писать не нужно, Вы покажите код, где не получается.
PS. Запрос к сиcтеме (Интерфейсы ksRequestInfo3D, IRequestInfo) - processParam - Параметры процесса.
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. Вы сделайте правильный запрос, примеры на форуме есть.