Тема: Как программно установить ручки на объекте?
Как программно выбрать (установить ручки) на объекте?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Как программно установить ручки на объекте?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как программно выбрать (установить ручки) на объекте?
> callisto
grips, такие синие квадратики на объектах ;)
Я надеялся ответ на свой вопрос ответ увидеть... Незнаю, увидел ли его автор вопроса, но мне непонятно, как ручки отобразить на объектах в конкретной выборке (SelectionSet). Я нашел только какое-то непонятное выделение (что-то на "H..." и управление показыванием ручек вообще в автокаде (показывать/непоказывать). А как их показать/убрать на конкретном объекте?
GRIPS предназначены для интерактивной работы. Выделить ручки программно нельзя.
В объектной модели (а только через нее можно работать из Delphi) возможно управлять видимостью ручек, их размером и цветом, но выделять - нельзя.
Может, конечно, и не совсем ?красивое? решение нашел, но ничего другого придумать не смог. А делаю следующее
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-овские команды остаются без изменений.
> Сергей
Если каким-то образом известен "необходимый объект", то его незачем переносить по слоям. Достаточно просто подсветить. На Lisp
(redraw ent_name 3).
Или из Delphi-программы обратиться к
object.Highlight HighlightFlag
Перенос на другой слой и ненужен и опасен (при сбое объект там и останется). Зачем слой-то менять, если объект (примитив) уже известен?
Просто (sssetfirst nil (ssadd ent_name)) - вот и будут ручки.
Но установка ручек не "ручками пользователя" тоже опасна - нажатие клавиши и все можно стереть.
Но подсветка и выделение ручками не одно и то же. Если я программой нажожу объекты и дальше хочу работать с ними в автокаде визуально, как это можно сделать? Ведь для этого и нужны "ручки". В LISP'е это можно сделать, а как это сделать БЕЗ лиспа, из дельфи? Неужели это невозможно?
> Sheeff
Используя только Delphi, у меня не получилось. В подтверждение > ShaggyDoc (2005-07-04 06:12:37), из Delphi доступна только объектная модель AutoCAD, а через нее нет возможности установить ручки, только выделить объект - object.Highlight. А вообще послать пару строк Lisp-кода в командную строку не смертельно главное, чтобы работало!
> Сергей
Спасибо. Идея про копирование на временный слой интересна, но неподходит, если объекты находятся на разных слоях. Хотя и с этим можно разобраться. Все-таки как же так получается, что не предусмотрена визуальная работа с найденными в Delphi объектами? И зачем нужно Highlight? Пробовал я подсветить объекты, и чего? Ни передвинуть их, ни свойств по Ctrl+1 посмотреть, ни еще чего-нибудь... А если всего объектов много, а выделено два-три, то их и вообще незаметить можно. Какой в этом практический смысл?
Пробовал я подсветить объекты, и чего? Ни передвинуть их, ни свойств по Ctrl+1 посмотреть, ни еще чего-нибудь... А если всего объектов много, а выделено два-три, то их и вообще незаметить можно. Какой в этом практический смысл?
А почему бы не сделать "мигание" выбранных примитивов? Т.е. несколько раз с задержкой по времени подсветить их и снять подсветку. Вряд ли это мигание можно не заметить...
Все-таки как же так получается, что не предусмотрена визуальная работа с найденными в Delphi объектами?
А по поводу этого обратись в Autodesk... Может специально для тебя они эту возможность добавят.
А если серьезно, то в этой теме из уст очень авторитетных специалистов прозвучала информация о том что можно делать на Delphi, и что нельзя. Если хочешь изобретать велосипед - вперед!
Я-таки нашел способ выделять объекты "ручками". Ничего никуда не копируя и ничего нового не создавая.
Я-таки нашел способ выделять объекты "ручками". Ничего никуда не копируя и ничего нового не создавая.
Что за способ, если можно по подробней
Метод с помощью sendcommand.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Как программно установить ручки на объекте?
Форум работает на PunBB, при поддержке Informer Technologies, Inc