• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Как программно выделить объект

Автор Intech, 18.09.12, 23:57:47

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

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

Intech

Подскажите, как можно программно выделить объект.
Не подсветить LightObj, а именно выделить (чтоб ручки появились)
Ну соответственно снять выделение и узнать объект выделен или нет.

СПАСИБО.

Вы имеете в виду, чтобы появились характерные точки и панель с параметрами?

Intech

Без панели.
Эквивалент выделения мышкой (или мышка + шифт).
Выполнили некий кусок программы, выделились объекты, далее интерактивно нажали ДЕЛ - они пропали (к примеру.)

Тогда, чем Вас не устраивает DeleteObj? Выделять при этом не обязательно. Также можете почитать в SDK про функции работы с группами объектов.

Intech

DeleteObj меня устраивает.
LightObj - совсем не устраивает.

Задача стоит программно найти объекты с заданными признаками, выделить их и все. Дальше пользователь интерактивно сам решает, что с ними делать хоть удалять хоть копировать хоть, что но ИНТЕРАКТИВНО!
Вопрос только как выделить программно и все!!!

Если можно интерактивно ВЫДЕЛИТЬ подсвеченные объекты LightObj - то тоже пойдет хотя и нежелательно.
Неужели нет такой простой команды?

IDrawingContainer
И ищите нужный объект, по нужным Вам свойствам.
Для примера можете посмотреть Библиотеку нахождения объектов, писал девять месяцев.

obesov

Цитата: Sabahs от 19.09.12, 10:11:13
IDrawingContainer
И ищите нужный объект, по нужным Вам свойствам.
Для примера можете посмотреть Библиотеку нахождения объектов, писал девять месяцев.

Новорожденный без отклонений, развивается в духе современного развития инженерной мысли. :-)))

Intech

Уважаемый Sabahs, Вы наверное очень умный человек,
возможно я совсем тупой НО!!!  >:(
Я не спрашиваю как что найти и узнать какие свойства, как удалить и все такое.
И мне не надо чтоб объект стал розового цвета!!!

CreateIterator и MoveIterator я уже перебрал все объекты, GetObjParam я узнал какие у них свойства.
И определился какие меня интересуют. Мне надо сделать их ЗЕЛЕНЫМИ!!! не РОЗОВЫМИ!!! а ЗЕЛЕНЫМИ!!!

Или (что тоже самое). Результат работы интерактивного окна "Выделение объектов по свойствам"
Мне надо сделать несколько объектов зелеными - и все!!! :um:
Нужна одна команда, если она есть.

#8
IChooseManager - Интерфейс менеджера выбора (подсветки) объектов
ISelectionManager - Интерфейс менеджера выделенных объектов.
P.S. То, что Вам нужно ISelectionManager::Select

Цитата: Intech от 19.09.12, 09:38:03
...
LightObj - совсем не устраивает.
...
Чем, не устраивает LightObj?

Intech

А что можно сделать с объектом подсвеченным LightObj ?
Кроме того что он выделяется цветом, чем он обладает?
Да и как интерактивно отменить выделение после LightObj?

До этого я работал только с LibTool,LtDefine,ldefin2d и пока не знаю что такое IChooseManager ISelectionManager. Я так понимаю это Компас-Автоматизация.

#10
Ни чем подсвеченный объект не обладает, кроме признака, что он подсвечен, но у Вас есть указатель на объект и Вы по нему можете сделать с ним, что угодно.
IChooseManager ISelectionManager интерфейсы API7. Здесь есть ролик работы с API7 http://forum.ascon.ru/index.php/topic,22788.msg157712.html#msg157712

Цитата: Intech от 19.09.12, 14:04:57
Да и как интерактивно отменить выделение после LightObj?
ISelectionManager::Unselect или  LightObj(Obj,0)


PS

Цитировать
Подскажите, как можно программно выделить объект.
Не подсветить LightObj, а именно выделить (чтоб ручки появились)
Ну соответственно снять выделение и узнать объект выделен или нет.
Для выделения объекта его нужно поместить в группу селектирования, а для снятия селектирования с объекта его нужно исключить из группы селектирования.
Для того что бы узнать выделен или нет объект нужно проверить находится ли он в группе селектирования.
Группа селектирования имеет указатель 0.
AddObjGroup( 0, obj ) - добавить в группу селектирования.
ExcludeObjGroup( 0, obj ) - исключить из группы селектирования.
ClearGroup( 0 ) - очистить группу селектирования.



Мне лично удобнее пользоваться ISelectionManager::SelectedObjects, получил массив выделенных объектов в виде SAFEARRAY | VT_DISPATCH и разбирайся со всеми выделенными объектами, если нужно проверить конкретный объект на предмет выделения, то использую ISelectionManager::IsSelected.


PS

ЦитироватьМне лично удобнее пользоваться ISelectionManager::SelectedObjects, получил массив выделенных объектов в виде SAFEARRAY | VT_DISPATCH и разбирайся со всеми выделенными объектами, если нужно проверить конкретный объект на предмет выделения, то использую ISelectionManager::IsSelected.
По вопросу видно что используют функции, а не интерфейсы, тем более в большенстве случаев это работает быстрее, чем через интерфейс, а с защищенными массивами нужно еще уметь работать.

Работа с объектами в API7, тесно завязана на SAFEARRAY массивах и ничего сложного там нет.

Intech

Дорогой Человек PS !
Я знал, что это не сложнее чем у ребенка конфетку отобрать.

Последний вопрос.
Как узнать, что объект состоит в этой самой группе? Ну то что он выделен.
Спасибо.

Уже писал, если нужно проверить конкретный объект на предмет выделения, то использую для API7 ISelectionManager::IsSelected, для API5 ksSelectionMng::IsSelected.

Intech


ExistGroupObj(0) проверить есть ли выделенные объекты документа.

Intech

Уважаемый Sabahs!
Я не сомневаюсь в Вашей компетенции, но вы вообще меня не слышите. :o:
Прежде чем задавать вопрос сюда, я внимательно прочитал хеп по всем, относящимся к теме функциям.
Есть объекты O1,O2,O3 .. и т.д.
Есть група g=0 (спасибо PS)

AddObjGroup( 0, O1 )        - O1 добавили в группу.
ExcludeObjGroup( 0, O2 )  - O2 исключили из группы.
Вопрос!
Как узнать используя аналогичные функции O3 состоит в группе g=0  или нет?