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

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

Автоматизация быстрого поиска

Ответ
Поиск в этой теме
Непрочитано 02.03.2016, 01:03 #1
Автоматизация быстрого поиска
shafal
 
проектировщик, монтажник систем отопления и водоснабжения
 
Минск
Регистрация: 20.11.2014
Сообщений: 41

Мне часто приходится пользоваться быстрым поиском. Ищу как правило мультивыноски по содержимому. Очень напрягает десятки раз выбирать "Тип объектов: мультивыноска" и "Свойства: содержимое". Как запилить эту последовательность в макрос? Чтобы после однократного нажатия кнопки переходить непосредственно к вводу значения содержимого. Жду ответов. Заранее благодарен!
Просмотров: 3950
 
Непрочитано 02.03.2016, 01:38
#2
Кулик Алексей aka kpblc
Moderator

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


Быстрым поиском или быстрым выбором?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.03.2016, 01:42
#3
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Написать свой быстрый поиск с блекджеком и феями.
Можно даже рекурсивный обход внутрь блоков сделать.
С планшета в быстром ответе:
(cdr (assoc 304 (entget (car (entsel)))))
Скопируй в командную строку и тыкни на мультивыноску.
Sleekka вне форума  
 
Автор темы   Непрочитано 02.03.2016, 01:57
#4
shafal

проектировщик, монтажник систем отопления и водоснабжения
 
Регистрация: 20.11.2014
Минск
Сообщений: 41


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Быстрым поиском или быстрым выбором?
Выбором! Извиняюсь описался, а что такое "быстрый поиск" не нашёл инфы на скорую руку видео глянул на ютубе, которое сразу на такой запрос в гугле выбивает
Increase Size Decrease Size Нажмите для просмотра
https://www.youtube.com/watch?v=4JSO7_aSn_s Так там попросту быстрый выбор человек и называет быстрым поиском о_О
shafal вне форума  
 
Непрочитано 02.03.2016, 02:11
#5
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Быстрый поиск - это _find
Молодежь
http://cadsetterout.com/autocad-tuto...-replace-text/
Sleekka вне форума  
 
Автор темы   Непрочитано 02.03.2016, 02:46
#6
shafal

проектировщик, монтажник систем отопления и водоснабжения
 
Регистрация: 20.11.2014
Минск
Сообщений: 41


Цитата:
Сообщение от Sleekka Посмотреть сообщение
Можно даже рекурсивный обход внутрь блоков сделать
К сожалению, понятия не имею, что это такое((( мне в идеале хотелось насколько это возможно автоматизировать заполнение спецификаций. Для создания монтажных схем я сделал множество динамических блоков, которые включают в себя сотни 3- 4 различных деталей. В блоках, как правило, одна лишь функция: видимость. Например: отвод ф20, ф25, ф32 и т.д. В среднем по 5 состояний, но есть и по 10- 15. Это значительно упрощает работу, но есть одна загвоздка. Когда мне надо выбрать к примеру краны 1/2", если я нажму на 1 из них пкм и затем "Выбрать подобные", то выберется данный блок во всех своих состояниях видимости(3/4", 1"...) На каждую деталь в монтажной схеме необходимо ставить выноску с её номером в спецификации. Когда все детали и выноски проставлены начинается муторный процесс создания спецификации: быстрый выбор- мультивыноска- содержание- ввод номера, после смотрю при помощи F2 сколько элементов было выбрано, вношу значение в спецификацию, перекрашиваю мультивыноски из зелёного(по слою) в красный. И так по весь экран не покраснеет. Затем выбираю все выноски и ставлю цвет по слою. В идеале я вижу эту ситуацию следующим образом: вставляю блок вместе с ним выскакивает выноска, я ввожу значение. На разные состояния видимости- разные значения. Оно автоматически вводится в таблицу спецификации. В последуещем при вставке или копировании данного блока(достаточно будет при копировании) это значение будет уже введено и в таблице спецификации автоматически будет изменяться ячейка количества данного блока В ДАННОМ СОСТОЯНИИ ВИДИМОСТИ. В случае если я изменю в нём состояние видимости значение мультивыноски и количества в спецификации так же будут должны автоматически измениться. Если изменю значение в самой выноске, то оно должно будет измениться над каждым таким блоком, в таком состоянии видимости и естественно измениться должны значения в спецификации. Скажите сколько бы стоил такой ЛИСП?

P.S.
Цитата:
Сообщение от Sleekka Посмотреть сообщение
(cdr (assoc 304 (entget (car (entsel)))))
После ввода команды курсор меняется на квадратный и в строке отображается запрос выбрать объект. При выборе объекта ничего не происходит. Абсолютно ничего: он даже не становится выбранным.
shafal вне форума  
 
Непрочитано 02.03.2016, 05:50
1 | #7
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Скажите сколько бы стоил такой ЛИСП?
Здесь есть раздел, поиск исполнителей. http://forum.dwg.ru/forumdisplay.php?f=33
Цитата:
Мне часто приходится пользоваться быстрым поиском. Ищу как правило мультивыноски по содержимому. Очень напрягает десятки раз выбирать "Тип объектов: мультивыноска" и "Свойства: содержимое". Как запилить эту последовательность в макрос? Чтобы после однократного нажатия кнопки переходить непосредственно к вводу значения содержимого. Жду ответов. Заранее благодарен!
Я себе накидал вот такой простенький лиспик, сам пользуюсь каждый день. Может и мультивыноски по содержимому выбирать.
Код:
[Выделить все]
(defun c:ss (/ ss ss1 ent keyword typeent entity)
  (setq keyword t
	ss1 (ssadd))
  (if (setq ss (ssget))
  (while keyword
  (initget 128 "Layer Block Text Color Object coNtents")
  (if (setq keyword (getkword "Что выбираем? [Layer (По слою), Block (По блоку), Text (Текст), Color (По цвету), Object (По объекту), coNtents (По содержанию текста)] <Выход> : "))
    (progn
  
;(setq ent (Kr_entsel "\nВыберите объект" nil nil))
  (cond
    ((eq keyword "Layer") (setq ent (Kr_entsel "\nВыберите объект" nil nil) typeent (assoc 8 (entget ent))))
    ((eq keyword "Block") (setq ent (Kr_entsel "\nВыберите объект" '("INSERT") nil) typeent (assoc 2 (entget ent))))
    ((eq keyword "Text") (setq ent (Kr_entsel "\nВыберите объект" '("TEXT" "MTEXT") nil) typeent (assoc 0 (entget ent))))
    ((eq keyword "Color") (setq ent (Kr_entsel "\nВыберите объект" nil nil) typeent (assoc 62 (entget ent))))
    ((eq keyword "Object") (setq ent (Kr_entsel "\nВыберите объект" nil nil) typeent (assoc 0 (entget ent))))
    ((eq keyword "coNtents") (setq ent (Kr_entsel "\nВыберите содержание текста" '("TEXT" "MTEXT" "MULTILEADER") nil)
				   typeent (if
					     (or (eq (cdr (assoc 0 (entget ent)))  "TEXT")
						 (eq (cdr(assoc 0 (entget ent)))  "MTEXT"))
					     (assoc 1 (entget ent))
					     (assoc 304 (entget ent)));if
				   );setq
     )
    );cond
(foreach entity (ssnamex ss) (if (eq (type (cadr entity)) 'ENAME) (if (member typeent (entget (cadr entity))) (ssadd (cadr entity) ss1))))
(sssetfirst nil ss1)
(command "_regen")
;(command "_.pselect" ss1 "" "_regen")
  );progn
    );if
    );while
    );if
  )

;|Функция Kr_entsel
*** Автор Морозов С.В. aka Krieger ***
Еденичный выбор объекта, замена функции entsel
Возвращает entity name выбранного примитива или nil, точку указки запоминает в переменной LASTPOINT
Параметры:
promt - предложение выбрать объект (string)
filter - фильтр объектов для выбора вида '("LINE" "LWPOLYLINE")
entlist - список примитивов которые не надо выбирать (либо список entity name, либо PICKSET)

Примеры:
(Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") nil)
(Kr_entsel "\nВыберите объекты" nil nil)
(setq aa nil) (Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (while (setq a (car (entsel))) (setq aa (append aa (list a)))))
(Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (ssget))

|;

(defun Kr_entsel (promt filter entlist / key n newentlist ent_point promt)
  
  (setq key T n 0 newentlist nil)
  (if (eq (type entlist) 'PICKSET)
    (progn
    	(while (setq a (ssname entlist n)) (setq newentlist (append newentlist (list a)) n (1+ n)))
    	(setq entlist newentlist)
    );progn
   );if
    (while key
    	(if (or (setq ent_point (entsel promt)) (= (getvar "ERRNO") 7))
	  	(if (or (eq (type ent_point) 'LIST) (not ent_point))
		  (if ent_point
		    (if (member (setq ent (car ent_point)) entlist)
		      (princ "\nПримитив уже выбран")
		      (if filter
			      (if (not (member (cdr (assoc 0 (entget ent))) filter))
				(progn (setq str "\nНе верный выбор, выберите: ")
				  (princ (substr (setq str (foreach n filter (setq str (strcat str n ", ")))) 1 (- (strlen str) 2)))
				);progn
				(setq key nil)
			      );if
				(setq key nil)
			);if
		    );if
		    (setq key T)
		  );if
	    	(setq key nil)
	    );if
	  (setq key nil)
      	);if
     );while
  (if (eq (type ent_point) 'LIST)
    (progn (setvar "LASTPOINT" (cadr ent_point)) ent)
    ent_point
  );if
);defun
Сначала нужно выбрать все объекты, где есть интересующие тебя выноски. Потом команда SS, потом выбрать опцию, что из всего этого добра тебе выделить, в твоем случае "coNtents", т.е. нажать N. Потом ткнуть по выноске с интересующим содержимым. Выделятся все выноски с таким же текстом.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 02.03.2016, 08:13
#8
hexD

КМД
 
Регистрация: 26.03.2013
Я ЖЫВУ В РОССИИ.
Сообщений: 506
<phrase 1=


Offtop: в нормальных кадах это называется "выбрать подобные"
hexD вне форума  
 
Непрочитано 02.03.2016, 08:30
#9
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от hexD Посмотреть сообщение
Offtop: в нормальных кадах это называется "выбрать подобные"
Это мне?

_selectsimilar (или "выбрать подобные") работает со всем чертежом, а мне нужно выбирать только из ограниченного предварительно выбранного списка элементов, ну и по содержимому текста она не выбирает в принципе.

Offtop:
Цитата:
Я ЖЫВУ В РОССИИ.
Еще бы в слове РОССИИ одну букву С написал, вообще бы круто было...
__________________
Делай хорошо, плохо само получится.

Последний раз редактировалось Krieger, 02.03.2016 в 08:36.
Krieger вне форума  
 
Непрочитано 02.03.2016, 09:39
#10
Ilez

Техник АС, КЖ
 
Регистрация: 24.09.2013
Ingushetiya
Сообщений: 392


Цитата:
Сообщение от shafal Посмотреть сообщение
ля создания монтажных схем я сделал множество динамических блоков, которые включают в себя сотни 3- 4 различных деталей. В блоках, как правило, одна лишь функция: видимость. Например: отвод ф20, ф25, ф32 и т.д. В среднем по 5 состояний, но есть и по 10- 15. Это значительно упрощает работу, но есть одна загвоздка. Когда мне надо выбрать к примеру краны 1/2", если я нажму на 1 из них пкм и затем "Выбрать подобные", то выберется данный блок во всех своих состояниях видимости(3/4", 1"...) На каждую деталь в монтажной схеме необходимо ставить выноску с её номером в спецификации. Когда все детали и выноски проставлены начинается муторный процесс создания спецификации: быстрый выбор- мультивыноска- содержание- ввод номера, после смотрю при помощи F2 сколько элементов было выбрано, вношу значение в спецификацию, перекрашиваю мультивыноски из зелёного(по слою) в красный. И так по весь экран не покраснеет. Затем выбираю все выноски и ставлю цвет по слою.
Насколько я Вас понял, всё это можно сделать через ИЗВЛЕЧЕНИЕ ДАННЫХ(_DATAEXTRACTION) или блоков или мультивыносок. В списке будет количество, соответствующее выбранным свойствам, причём при удалении будет обновляться количество в вставленной таблице извлечённых данных.
Если к каждому блоку есть выноска, не лучше ли сделать эту выноску внутри блока с атрибутом, значение которого соответствует состоянию видимости?
Ilez вне форума  
 
Автор темы   Непрочитано 02.03.2016, 15:47
#11
shafal

проектировщик, монтажник систем отопления и водоснабжения
 
Регистрация: 20.11.2014
Минск
Сообщений: 41


Всем спасибо за ответы! Вечером буду вникать.
shafal вне форума  
 
Автор темы   Непрочитано 19.05.2016, 00:31
#12
shafal

проектировщик, монтажник систем отопления и водоснабжения
 
Регистрация: 20.11.2014
Минск
Сообщений: 41


Нашёл самый простой и грамотный способ решения поставленного вопроса. Всё в этом видео https://www.youtube.com/watch?v=sosqEN62CJ8начиная с 2:30 основная суть. Но я не могу ввести быстрый выбор в прозрачном режиме. -БВЫБОР пишет, что неизвестная команда, а без тире всё вводится и запускается

Последний раз редактировалось shafal, 19.05.2016 в 00:41.
shafal вне форума  
 
Непрочитано 19.05.2016, 08:59
#13
kp+

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


Видео с ютюба сейчас посмотреть не могу Если можно, залейте как приложение к посту.
Цитата:
Сообщение от shafal Посмотреть сообщение
Но я не могу ввести быстрый выбор в прозрачном режиме
И не сможете. Варианта для ком. строки нет. А при попытке вызова в прозрачном режиме Акад 2010 пишет:
Цитата:
Команда: _'qselect
** Эту команду нельзя вызывать прозрачно **
Не думаю, что в новейших версиях стало лучше
Вообще есть классная команда _filter, которую как раз можно вызывать прозрачно. Но т.к. она родом из очень старых версий, то с мультивыносками не работает

Последний раз редактировалось kp+, 19.05.2016 в 09:06.
kp+ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автоматизация быстрого поиска

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для поиска большого количества слов и фраз HYPERBALLOiD Программирование 16 07.02.2016 18:56
Я. Буда, В. Гановский, В. Вихман: Автоматизация процессов в машиностороении balabaev_as Поиск литературы, чертежей, моделей и прочих материалов 0 08.11.2012 17:55
Проблема с параметром поиска в динамических блоках Нечаев Андрей Динамические блоки 4 17.12.2007 12:20