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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор блоков по точке

Выбор блоков по точке

Ответ
Поиск в этой теме
Непрочитано 21.04.2007, 09:31 #1
Выбор блоков по точке
bivis333
 
студент
 
Регистрация: 26.08.2005
Сообщений: 41

Всем добрый день!
Имеется такая задача: есть координты точки. Необходимо проверить, есть ли в этой точке блок (точка вставки блока совпадает с исходной - то T, если нет - F). Далее необходимо получить угол поворота данного блока.
В Лиспе я начинающий, поэтому решил обратится на форум за помощью... Поиск тем ничего не дал...
Просмотров: 3043
 
Автор темы   Непрочитано 21.04.2007, 09:42
#2
bivis333

студент
 
Регистрация: 26.08.2005
Сообщений: 41


А да, товарищи, небольшое, но, думаю, важное дополнение. Выбираемые блоки - с именами "nv*", где * - номера от 00 до 99.
bivis333 вне форума  
 
Непрочитано 21.04.2007, 13:35
#3
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Можно так:
Код:
[Выделить все]
 ; пример вызова (fff '(0 0 0) "nv##" 1.0) или (fff '(0 0 0) "nv*" 1.0)
(DEFUN fff (xyz ; 	координаты проверяемой точки 
	    templete ;	шаблон имени блока "nv##" ("*" - все блоки)
	    +- ; 	погрешность координаты при поиске 
	    / tab_ins tab_ins_eq mspace	str)
  (setq	tab_ins	 '()
	templete (strcase templete)
	mspace	 (vla-get-ModelSpace
		   (vla-get-ActiveDocument (vlax-get-acad-object))
		   ) ;_ конец vla-get-ModelSpace
	) ;_ конец setq
  (vlax-for item mspace
    (if	(and (= (vla-get-ObjectName item) "AcDbBlockReference")
	     (wcmatch (strcase (vla-get-name item)) templete)
	     ) ;_ конец and
      (setq tab_ins (cons (list (vlax-get item "InsertionPoint") item) tab_ins))
      ) ;_ конец it
    ) ;_ конец vlax-for
  (if (setq tab_ins_eq (VL-REMOVE-IF-NOT
			 (FUNCTION
			   (LAMBDA (la)
			     (equal (car la) xyz +-)
			     ) ;_ конец LAMBDA
			   ) ;_ конец FUNCTION
			 tab_ins
			 ) ;_ конец VL-REMOVE-IF-NOT
	    ) ;_ конец setq
    (foreach str tab_ins_eq
      (princ "\nT: ")
      (princ (car str))
      (princ "\t insert name \t\"")
      (princ (vla-get-name (cadr str)))
      (princ "\"  \trotation = ")
      (princ (rtos (vla-get-Rotation (cadr str)) 2 3))
      ) ;_ конец foreach
    (progn
      (princ "\nF: ")
      (princ xyz)
      (princ " - no insert ")
      (princ templete)
      ) ;_ конец progn
    ) ;_ конец if
  ) ;_ конец DEFUN
Евгений А. вне форума  
 
Непрочитано 23.04.2007, 09:06
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,433


ИМХО надо просто смотреть на фильтры (ssget) - этого зачастую достаточно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор блоков по точке