Как программно определить объект, к которому прицепился рисуемый примитив согласно объектной привязке ?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно определить объект, к которому прицепился рисуемый примитив согласно объектной привязке ?

Как программно определить объект, к которому прицепился рисуемый примитив согласно объектной привязке ?

Ответ
Поиск в этой теме
Непрочитано 07.03.2013, 10:58 #1
Как программно определить объект, к которому прицепился рисуемый примитив согласно объектной привязке ?
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

Вопрос в теме.
Просмотров: 3573
 
Непрочитано 07.03.2013, 11:06
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


посмотреть какой есть объект в выбранной точке
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 07.03.2013, 11:12
#3
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Из простых способов посмотреть мне известен (ssget point), но он не работает, если пользователь после привязки изменит экран таким образом, что point будет не видна.
swkx вне форума  
 
Непрочитано 07.03.2013, 12:06
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Цитата:
Сообщение от swkx Посмотреть сообщение
Из простых способов посмотреть мне известен (ssget point), но он не работает, если пользователь после привязки изменит экран таким образом, что point будет не видна.
Тогда нужна тяжелая артиллерия - ObjectARX
Вариант: сама привязка тоже срабатывает только в видимой области экрана. Здесь может помочь реактор на срабатывание привязки (есть ли такой?), чтобы узнать, к чему она приклеилась, не дожидаясь, пока пользователь шевельнет мышью.
kp+ вне форума  
 
Автор темы   Непрочитано 07.03.2013, 12:14
#5
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от kp+ Посмотреть сообщение
Тогда нужна тяжелая артиллерия - ObjectARX
Неее, это сложно. Артиллерист из меня хреновый((

Вопрос решен, тему можно закрыть.

Последний раз редактировалось swkx, 07.03.2013 в 13:52.
swkx вне форума  
 
Непрочитано 07.03.2013, 14:45
#6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вопрос ни хрена не решен. В данном контексте рисуемый примитив ни к какому объекту вообще не прицепился, он "прицепился" к геометрической точке с какими-то координатами.
Profan вне форума  
 
Непрочитано 07.03.2013, 17:43
#7
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Что-то мне кажется, что вопрос неверно поставлен. Как это "прицепился"? Сам, что ли? Такого допускать вообще нельзя.

А вот получать точку на указанном примитиве нужно часто. Вот тут бывают проблемы, например при указании на широкую полилинию.
Например я делаю так
Код:
[Выделить все]
 
(defun ru-get-point-on-ent (msg  / ent_selected  old_aperture   om  result)
;;; Выбор точки на примитиве. Возвращает (list примитив  точка)
    ;|
 (ru-get-point-on-ent "Укажи точку на отрезке или полилинии")
 Command: (ru-get-point-on-ent "Укажи точку на отрезке или полилинии")
Укажи точку на отрезке или полилинии <Выход>: (<Entity name: 4008f2b0> (898.383 
270.931 0.0))
ВОЗВРАЩАЕТ ТОЧКУ В WCS!!!
|;

    (setq om           (getvar "OSMODE")
          old_aperture (getvar "aperture")
    ) 
    (setvar "OSMODE" 512)
    (setvar "aperture" (getvar "pickbox"))
    (if (setq ent_selected
                 (ru-get-entsel-by-type
                     msg
                     "Это не ОТРЕЗОК и не ПОЛИЛИНИЯ"
                     (list "LINE" "LWPOLYLINE")
                     t
                 ) 

        ) 
        (setq result (list (car ent_selected)
                           (trans (osnap (trans (cadr ent_selected) 0 1) "_nea") 1 0)
                     )
        ) 
    ) 
    (setvar "OSMODE" om)
    (setvar "aperture" old_aperture)
    result
) 
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 07.03.2013, 21:06
#8
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Похоже, я ввёл в заблуждение массу уважаемых людей)). Но я этого не хотел.
Изначально была задача: определить объект, к которому окажется привязанным отрисованный пользователем отрезок. Если такой объект, конечно, вообще есть.
Я почему-то решил, что определить этот объект нужно непременно после указания пользователем обеих точек. Конечно, в этом случае задача сильно осложняется тем, что после выбора 1-й точки она может оказаться вне зоны видимости.

Совершенно очевидно, что определять объект привязки нужно после каждого указания точки. В этом случае всё элементарно.
Если бы я сегодня меньше думал о бабах, эта мысль тоже пришла бы сразу и до этого топика дело не дошло бы.

ShaggyDoc,

чем (ru-get-point-on-ent) отличается от (entsel) ? В двух словах...

Последний раз редактировалось swkx, 07.03.2013 в 21:33.
swkx вне форума  
 
Непрочитано 08.03.2013, 07:28
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Совершенно очевидно, что определять объект привязки нужно после каждого указания точки.
Вот я и показал такую функцию - для случаев, когда точка должна лежать именно на объекте. Например, если надо "врезать" какое-нибудь условное обозначение в линию, а потом его автоматически сориентировать по его направлению.

Цитата:
чем (ru-get-point-on-ent) отличается от (entsel) ? В двух словах...
Так в тексте функции всё написано.
1. Точку можно указать только на примитиве заданных типов LINE или LWPOLYLINE, остальные будут проигнорированы
2. Если будет промах или примитив другого типа - функция вернет NIL
3. Если будет нажата ESC, программа не прервется, функция вернет NIL
4. Точка будет получена, даже если указать на LWPOLYLINE с WIDTH не равной нулю.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 08.03.2013, 08:27
#10
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
4. Точка будет получена, даже если указать на LWPOLYLINE с WIDTH не равной нулю.
(setvar "OSMODE" 512) - именно для выполнения 4-го пункта ?
swkx вне форума  
 
Непрочитано 08.03.2013, 11:15
#11
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от swkx Посмотреть сообщение
(setvar "OSMODE" 512) - именно для выполнения 4-го пункта ?
Нет, там в комплексе влияет
(setvar "aperture" (getvar "pickbox")) и (osnap (trans (cadr ent_selected) 0 1) "_nea")
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно определить объект, к которому прицепился рисуемый примитив согласно объектной привязке ?