Работа с группой объектов

Автор Борис_С, 06.12.18, 15:04:35

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

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

Борис_С

Мне нужно объединить несколько элементов чертежа в одну группу для того, чтобы
потянув за один элемент группы перемещались все остальные элементы этой группы.

Написал такой код:

gr := Doc.ksNewGroup(0); //создание группы

//добавление элементов в группу
Doc.ksLineSeg(10, 10, 10, 20, 1);
Doc.ksLineSeg(10, 20, 40, 20, 1);

Doc.ksEndGroup();         // закончить формирование группы
Doc.ksLightObj(gr, 1);    // подсветить группу
Doc.ksSaveGroup(gr, '1'); // сохранение группы


Элементы группы подсвечиваются, но перемещаются они не вместе, а по отдельности.
Где я не прав?


Подсвечивать нужно через SelectionManager - менеджер выделенных объектов.
Тоже действие можно получить добавляя методом AddObjGroup в нулевую группу.

Борис_С

С подсветкой все хорошо. Проблема в том, что элементы, объединенные в группу,
не двигаются все вместе.

У Вас сделана подсветка через интерфейс менеджера выбора (подсветки) объектов - IChooseManager, а это разные вещи.

Борис_С

Подсветка мне не нужна. Я ее сделал для того, чтобы увидеть элементы группы.
В программе ее не будет.


Борис_С

Мне не нужно программно сдвигать объект. Двигать объект будет пользователь руками, после того,
как график будет сформирован.

Вам нужно делать Dll, смотрите пример Step4, т.к. нужно будет работать с функций обратной связи.

DesignЯR

ЦитироватьМне нужно объединить несколько элементов чертежа в одну группу для того, чтобы
потянув за один элемент группы перемещались все остальные элементы этой группы.
ЦитироватьМне не нужно программно сдвигать объект. Двигать объект будет пользователь руками, после того,
как график будет сформирован.
Doc.ksNewGroup - это как раз для программной работы с объектами. Для ручной работы попробуйте IMacroObject.AddObjects

Борис_С

А без Dll эту проблему нельзя решить?
Я работаю на Delphi7 и использую 64-разрядную версию Компас.
Как я понимаю, DLL в этом случае работать не будет.
Переходить на другую версию Delphi пока нет возможности.

Что такое макрообъект и чем он может мне помочь?

Макроэлемент может Вам и помочь, если при перемещении ничего меняться не должно, кроме положения.

DesignЯR

ЦитироватьА без Dll эту проблему нельзя решить?...
Что такое макрообъект и чем он может мне помочь?

Макрообъект создается и без dll  На чертеже выделить объекты-> ПКМ-> Создать макроэлемент, но это тема не для этого форума(Азбуку надо читать). Тут все решается через dll(rtw).

tramp_m

Цитата: Борис_С от 06.12.18, 15:04:35
Мне нужно объединить несколько элементов чертежа в одну группу для того, чтобы
потянув за один элемент группы перемещались все остальные элементы этой группы.

Написал такой код:

gr := Doc.ksNewGroup(0); //создание группы

//добавление элементов в группу
Doc.ksLineSeg(10, 10, 10, 20, 1);
Doc.ksLineSeg(10, 20, 40, 20, 1);

Doc.ksEndGroup();         // закончить формирование группы
Doc.ksLightObj(gr, 1);    // подсветить группу
Doc.ksSaveGroup(gr, '1'); // сохранение группы


Элементы группы подсвечиваются, но перемещаются они не вместе, а по отдельности.
Где я не прав?



Чертеж (сборочный чертёж из составных частей), полученный из объединения нескольких элементов (составных частей) в одну группу, вроде как называется макроэлемент в 2D....
А, если в 3D сборочная модель, движение составных частей поддерживают сопряжения, вроде так....
Прошу прощения если что не так....


Борис_С