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

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

Найти объект в чертеже

Ответ
Поиск в этой теме
Непрочитано 13.07.2008, 17:34 #1
Найти объект в чертеже
Алиевич
 
Регистрация: 05.07.2008
Сообщений: 9

Найти блок в чертеже по значению атрибута
Просмотров: 4638
 
Непрочитано 13.07.2008, 18:20
#2
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


_find
Vova вне форума  
 
Непрочитано 14.07.2008, 00:21
#3
Кулик Алексей aka kpblc
Moderator

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


Алиевич, это - не готовые программы, а неизвестно что. Топик перемещен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.07.2008, 23:56
#4
Алиевич


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


А если тзгов с десяток?. Спасибо за оперативный ответ.
Алиевич вне форума  
 
Непрочитано 18.07.2008, 00:16
#5
Кулик Алексей aka kpblc
Moderator

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


Алиевич, а если расписать задачу пополнее?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.07.2008, 20:19
#6
Алиевич


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


Задача.
В чертеже 114 разнообразных блоков;
- с разными или с одинаковыми именами
- с разным количеством тэгов
- атрибуты создавались на разных слоях
- атрибуты имеют различный режим отображения
- блоки могут находится на невидимых слоях
Найти блок с указанным именем по значению выбранного тэга и зуммировать его.
Если блоков с указанными параметрами более одного, то показать их по нажатию любой клавиши (листать)...

Есть еще что расписать, но думаю это будет сверх нахальством.

Спасибо еще раз за оперативный ответ.
Алиевич вне форума  
 
Непрочитано 19.07.2008, 20:34
#7
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,296


Может _filter поможет ?
Там можно вручную прописать название тэга.
А для удобства работы с большим количеством объектов можно создать именованные фильтры (named filters) и по очереди их использовать...
пока не запутаешся окончательно
bernata вне форума  
 
Непрочитано 19.07.2008, 23:01
#8
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Алиевич Посмотреть сообщение
Задача.
В чертеже 114 разнообразных блоков;
- с разными или с одинаковыми именами
- с разным количеством тэгов
- атрибуты создавались на разных слоях
- атрибуты имеют различный режим отображения
- блоки могут находится на невидимых слоях
Найти блок с указанным именем по значению выбранного тэга и зуммировать его.
Если блоков с указанными параметрами более одного, то показать их по нажатию любой клавиши (листать)...

Есть еще что расписать, но думаю это будет сверх нахальством.

Спасибо еще раз за оперативный ответ.
Делал для себя нечто похоже
думаю для основы подойдет
Переделывай под свои нужды сам -
у меня времени нет

Код:
[Выделить все]
;; local defun
;; extract blocks by desired tag and particular value of an attribute
(defun get-blocks-by-attvalue (bname tag value / catch data elist ent flag ss ss2)
  (if
  (setq ss (ssget "_X" (list (cons 0 "INSERT")
			     (cons -4 "<AND")
			     (cons 410 (getvar "CTAB"))
			     (cons 2 bname)
			     (cons 66 1)	     
			     (cons -4 "AND>"))))
  (progn
    (setq ss2 (ssadd))
  (while
    (setq ent (ssname ss 0) catch ent)
    (setq flag nil)
    (setq data (entget ent))
    (while (not (eq (cdr (assoc 0 data)) "SEQEND"))
     (setq ent (entnext ent))
     (setq data (entget ent))
     (if
      (and
       (= (cdr (assoc 0 data)) "ATTRIB")
       	 (eq (strcase (cdr (assoc 2 data)))(strcase tag))
	 (eq (cdr (assoc 1 data)) value)
      )
      (setq flag T)
      )
      )
    (if flag
      (ssadd catch ss2)
      )
    (ssdel catch ss)
    )
  )
  )
  ss2
  )

;;=================main part================;;

(defun c:demo (/ )
(if
  ;|"MyBlock" - block name
    "TAG1" - tag name
    "Value1" - attribute value|;
(setq ss (get-blocks-by-attvalue "MyBlock" "TAG1" "Value1"))
(progn
  (alert "Press any key to zoom\nobjects one by another\ntill the loop end up")
(setq i 0)
 (while (< i (sslength ss))
    (setq ent (ssname ss i))
    (if (read-char)
      (command "_.zoom" "_Object" ent "")
      )
   (setq i (1+ i))
   )
  )
)
  (command "_.zoom" "_Extents")
(princ)
)
;|autorun|; (c:demo)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 20.07.2008, 23:22
#9
Алиевич


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


fixo, если бы я умел "переделывать под себя"....
Т=-274 град/С - абсолютный нуль.
-281 град/С - мое умение программировать.
Алиевич вне форума  
 
Непрочитано 29.03.2011, 15:28
1 | #10
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


вот мой вариант
Код:
[Выделить все]
(defun zod40 (zz / i ss1 ss2)
(princ "\nИщет текст в атирибутах блоков и выделяет блоки")
(setq	i	0
	ss2 	(ssadd)
	ss1	(ssget "_X" '((0 . "INSERT")))
)
(repeat (sslength ss1)
(if	(numberp(vl-catch-all-apply 'length(list(setq Att_s (vl-catch-all-apply 'vlax-safearray->list(list(vlax-variant-value(vla-GetAttributes (vlax-ename->vla-object (ssname ss1 i))))))))))
	(progn	(mapcar	'(lambda (name)
			(if	(equal (vla-get-TextString name) zz)
				(ssadd (ssname ss1 i) ss2)
			)
			)
		Att_s)
	)
)
(setq i (1+ i))
)
(sssetfirst nil ss2)
(princ)
)
лисп ищет текст во всех блоках(в модели и в листах,не удивляетесь если у вас выделено несколько блоков,а вы их не видете в модели) чтобы запустить наберите (zod40 "искомый текст")
Composter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Найти объект в чертеже



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отслеживание таблиц на чертеже [программно] TwoZero Программирование 15 13.05.2024 09:51
SCAD Office 11.1 Новые возможности EUDGEN SCAD 632 20.02.2013 17:13
Как найти определенный объект в чертеже? Shoorup Программирование 7 27.03.2008 09:11
Главспец на один объект по трудовому договору - возможно ли? Jull Профессии и трудовые отношения 7 24.08.2007 08:09