UserGetPlacementAndEntity

Автор freestyler, 21.08.25, 16:09:26

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

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

freestyler

Коллеги-программисты, прошу помощи. Добавляю в сборку модель детали из файла. Ее расположение указываю через UserGetPlacementAndEntity. И вроде почти все работает, но не понимаю как завершить выбор точки вставки. То есть фантом вставляемого объекта появился, вместе с мышкой двигается, геометрия подсвечивается, но при клике ничего не происходит. А если жму зеленую галочку, то вставляется туда, где в этот момент была мышка.
Пробовал играться с DynamicFiltering, но тоже не понял как оно работает.
Как при использовании UserGetPlacementAndEntity подтвердить выбор точки вставки? Хочется чтобы было как при вставке из файла стандартной командой: фантом вставляемой детали "висит" на мышке, и куда я кликнул - туда он и вставился.

Вот код:
KompasObject ikompas = (KompasObject)System.Runtime.InteropServices.Marshal.GetActiveObject("Kompas.Application.5");
ksDocument3D idoc = ikompas.ActiveDocument3D();

ksPart part2 = (ksPart)idoc.GetPart((int)Part_Type.pNew_Part);
part2.fileName = filename;

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

info.CreatePhantom();

if (idoc.UserGetPlacementAndEntity(3))
{
    ksPlacement place = (ksPlacement)info.GetPlacement();

    part2.SetPlacement(place);
    part2.UpdatePlacementEx(true);

    idoc.SetPartFromFileEx(filename, part2, true, true);

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

    ikompas.ksResultNULL();
}

Miroshnyk


freestyler

А как делают? Грубо говоря, мне бы получить координаты клика мышкой, а дальше я в них вставлю деталь. Ничего более подходящего не нашел (

Miroshnyk

#3
Подписка на события или функция обратной связи.

Doom2

В других САПРах в такой же задаче при клике происходит всплывающее окно которое реагирует на правую кнопку мыши как выбор точки.

p3452

Если лень искать на Форуме, глянте STEP4 (в примерах) - там 2D, но принцип, надеюсь, поймете...

Miroshnyk

Можно посмотреть STUDS3D — пример построения модели стандартного изделия (шпильки) для С#.

p3452

ИМХО: Для ТС, в его нынешнем состоянии, STUDS3D - вред! :um:

freestyler

#8
Цитата: p3452 от 21.08.25, 18:03:59Если лень искать на Форуме, глянте STEP4 (в примерах) - там 2D, но принцип, надеюсь, поймете...
Цитата: Miroshnyk от 22.08.25, 07:10:23Можно посмотреть STUDS3D — пример построения модели стандартного изделия (шпильки) для С#.

Спасибо, посмотрел и то и другое, проблески понимания появились :-)

Как я понял:
1. UserGetPlacementAndEntity сама не завершится, даже если наберет entityCount выбранных объектов (да и судя по всему если entityCount>1 то не наберет, добавление объектов в коллекцию должен описать я). Я должен эту логику сам написать в отдельной функции и задать через SetCallBackEx.
2. Также нужна Callback функция для фильтра, аналогично пишется и задается через SetFilterCallBackEx.

Отредактировано: задал следующий вопрос и как часто бывает, пока формулировал - сам разобрался. Спасибо за наводки :-)