Тема: Как программно установить ручки на объекте?

Как программно выбрать (установить ручки) на объекте?

Re: Как программно установить ручки на объекте?

ручки - это что ?

Re: Как программно установить ручки на объекте?

> callisto
grips, такие синие квадратики на объектах ;)

Re: Как программно установить ручки на объекте?

Я надеялся ответ на свой вопрос ответ увидеть... Незнаю, увидел ли его автор вопроса, но мне непонятно, как ручки отобразить на объектах в конкретной выборке (SelectionSet). Я нашел только какое-то непонятное выделение (что-то на "H..." и управление показыванием ручек вообще в автокаде (показывать/непоказывать). А как их показать/убрать на конкретном объекте?

Re: Как программно установить ручки на объекте?

GRIPS предназначены для интерактивной работы. Выделить ручки программно нельзя.
В объектной модели (а только через нее можно работать из Delphi) возможно управлять видимостью ручек, их размером и цветом, но выделять - нельзя.

Re: Как программно установить ручки на объекте?

Может, конечно, и не совсем ?красивое? решение нашел, но ничего другого придумать не смог. А делаю следующее
1.Создаю слой в чертеже, предназначенный только для вспомогательных функций, напр, SetGrips.
2.Потом переношу необходимый объект на данный слой
3.С помощью Lisp выбираю перенесенный объект, находящиеся на данном слое и устанавливаю на нем ?ручки?
4.Переношу объект на исходный слой
Временный слой я использую только для того, чтобы однозначно определить объект для выбора Lisp-ом. В первом приближении процедурка получается такая:
procedure SetGripsOnAcadEntity(AcadDocument: TAcadDocument; AcadEnt: AcadEntity);
var
  tmpLayer : WideString;
begin
  tmpLayer:=AcadEnt.Layer;
  AcadEnt.Layer := 'SetGrips';
  AcadDocument.SendCommand('(setq tmpSS (ssget "_x" '((8 . "SetGrips")))) ');
  AcadDocument.SendCommand('(sssetfirst nil tmpSS) ');
  AcadEnt.Layer:=tmpLayer;
end;
У меня задача была устанавливать ручки на одном объекте, но идея подходит и для группы объектов, только передавать в процедуру не AcadEntity, а SelectionSet, все его объекты переносить на временный слой, ну а Lisp-овские команды остаются без изменений.

Re: Как программно установить ручки на объекте?

> Сергей
Если каким-то образом известен "необходимый объект", то его незачем переносить по слоям. Достаточно просто подсветить. На Lisp
(redraw ent_name 3).
Или из Delphi-программы обратиться к
object.Highlight HighlightFlag
Перенос на другой слой и ненужен и опасен (при сбое объект там и останется). Зачем слой-то менять, если объект (примитив) уже известен?
Просто (sssetfirst nil (ssadd ent_name)) - вот и будут ручки.
Но установка ручек не "ручками пользователя" тоже опасна - нажатие клавиши и все можно стереть.

Re: Как программно установить ручки на объекте?

Но подсветка и выделение ручками не одно и то же. Если я программой нажожу объекты и дальше хочу работать с ними в автокаде визуально, как это можно сделать? Ведь для этого и нужны "ручки". В LISP'е это можно сделать, а как это сделать БЕЗ лиспа, из дельфи? Неужели это невозможно?

Re: Как программно установить ручки на объекте?

> Sheeff
Используя только Delphi, у меня не получилось. В подтверждение > ShaggyDoc (2005-07-04 06:12:37), из Delphi доступна только объектная модель AutoCAD, а через нее нет возможности установить ручки, только выделить объект - object.Highlight. А вообще послать пару строк Lisp-кода в командную строку не смертельно главное, чтобы работало!

Re: Как программно установить ручки на объекте?

> Сергей
Спасибо. Идея про копирование на временный слой интересна, но неподходит, если объекты находятся на разных слоях. Хотя и с этим можно разобраться. Все-таки как же так получается, что не предусмотрена визуальная работа с найденными в Delphi объектами? И зачем нужно Highlight? Пробовал я подсветить объекты, и чего? Ни передвинуть их, ни свойств по Ctrl+1 посмотреть, ни еще чего-нибудь... А если всего объектов много, а выделено два-три, то их и вообще незаметить можно. Какой в этом практический смысл?

Re: Как программно установить ручки на объекте?

Sheeff пишет:

Пробовал я подсветить объекты, и чего? Ни передвинуть их, ни свойств по Ctrl+1 посмотреть, ни еще чего-нибудь... А если всего объектов много, а выделено два-три, то их и вообще незаметить можно. Какой в этом практический смысл?

А почему бы не сделать "мигание" выбранных примитивов? Т.е. несколько раз с задержкой по времени подсветить их и снять подсветку. Вряд ли это мигание можно не заметить...

Все-таки как же так получается, что не предусмотрена визуальная работа с найденными в Delphi объектами?

А по поводу этого обратись в Autodesk... Может специально для тебя они эту возможность добавят. biggrin
А если серьезно, то в этой теме из уст очень авторитетных специалистов прозвучала информация о том что можно делать на Delphi, и что нельзя. Если хочешь изобретать велосипед - вперед!

Re: Как программно установить ручки на объекте?

Я-таки нашел способ выделять объекты "ручками". Ничего никуда не копируя и ничего нового не создавая.

Re: Как программно установить ручки на объекте?

Я-таки нашел способ выделять объекты "ручками". Ничего никуда не копируя и ничего нового не создавая.
Что за способ, если можно по подробней

Re: Как программно установить ручки на объекте?

Метод с помощью sendcommand.