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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Ускорить вход/выход из режима редактирования блока

Ускорить вход/выход из режима редактирования блока

Ответ
Поиск в этой теме
Непрочитано 15.08.2013, 23:20 #1
Ускорить вход/выход из режима редактирования блока
EgorS
 
Архитектура, 3D
 
Минск, РБ
Регистрация: 16.01.2010
Сообщений: 65

Что хотелось бы ускорить:
1.При использование команды Edit Block In-place автоматически входить в блок без всплывающей таблички Reference Edit, если блок не содержит внутри себя другие блоки.
2.При выходе из режима редактирования и сохраняя изменения в блоке также миновать всплывающую табличку, автоматически жать кнопку ОК в ней.
Просмотров: 15802
 
Непрочитано 18.08.2013, 22:09
#2
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от EgorS Посмотреть сообщение
1.При использование команды Edit Block In-place автоматически входить в блок без всплывающей таблички Reference Edit...
Чтоб входить в редактор блока просто дважды кликнув на нем, надо прописать в Операциях при двукратном нажатии на блок (команда _cui) макрос
Код:
[Выделить все]
^C^C(command "_BEDIT")
Цитата:
Сообщение от EgorS Посмотреть сообщение
если блок не содержит внутри себя другие блоки.
- этого ограничения я не знаю, как добиться. А что должно случиться, если он всё-таки содержит внутри себя другие блоки?
Цитата:
Сообщение от EgorS Посмотреть сообщение
2.При выходе из режима редактирования и сохраняя изменения в блоке также миновать всплывающую табличку, автоматически жать кнопку ОК в ней.
Например, создать кнопку, повесить на нее макрос
Код:
[Выделить все]
^C^C(command "_BCLOSE" "_S")
и закрывать редактор этой кнопкой. Или горячие клавиши определить. В 2011-м так работает на ура.

Последний раз редактировалось skkkk, 19.08.2013 в 13:22.
skkkk на форуме  
 
Автор темы   Непрочитано 19.08.2013, 03:01
#3
EgorS

Архитектура, 3D
 
Регистрация: 16.01.2010
Минск, РБ
Сообщений: 65


Цитата:
Сообщение от skkkk Посмотреть сообщение
этого ограничения я не знаю, как добиться. А что должно случиться, если он всё-таки содержит внутри себя другие блоки?
Работать как это работает стандартно, выкидывать окно Reference Edit, где можно выбрать под-блок.

Цитата:
Сообщение от skkkk Посмотреть сообщение
Код:
[Выделить все]
(command "_BCLOSE" "_S")
и закрывать редактор этой кнопкой. Или горячие клавиши определить. В 2011-м так работает на ура.
сделал как ^C^C_refclose;_save ,но табличка все равно всплывает как и прежде, _BCLOSE команда это для выхода из Block Editor-а, я же захожу в редактирование через Edit Block In Place, тут задачу можно свести к тому - как макросом нажать кнопку OK ?

Последний раз редактировалось EgorS, 19.08.2013 в 03:12.
EgorS вне форума  
 
Непрочитано 19.08.2013, 13:16
1 | #4
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от EgorS Посмотреть сообщение
In-place
Проглядел про этот инплэйс.
Тогда так: для включения режима редактирования по месту на Операцию при двукратном нажатии на блок бьем макрос:
Код:
[Выделить все]
^C^C(command "_-REFEDIT" "_OK" "_ALL" "_Y")
или опции можно настроить как надо, а для закрытия с сохранением макрос:
Код:
[Выделить все]
^C^C(command "_REFCLOSE" "_S")
Обращаю внимание, что в данном случае нужно использовать не ^C^C_refclose, а именно лисповскую функцию command - она подавляет диалоговые окна при наличии в ее аргументах опций.
Чтобы обработать ситуацию с вложенными в блок другими блоками, надо подумать и покопаться, на что сейчас я времени пока не имею. Но это реально, например повесить на Операцию... лисп, который проверит, есть ли в блоке блоки, - и если есть, выдаст окно. Если все правильно понял, позже смогу посмотреть.

Последний раз редактировалось skkkk, 19.08.2013 в 13:23.
skkkk на форуме  
 
Автор темы   Непрочитано 19.08.2013, 15:24
#5
EgorS

Архитектура, 3D
 
Регистрация: 16.01.2010
Минск, РБ
Сообщений: 65


Cпасибо! С обоими макросами разобрался, пока что сделал 2 разных вхождения в блок, стандартное и макросовое, повесил на разные хоткеи.
Цитата:
Сообщение от skkkk Посмотреть сообщение
Чтобы обработать ситуацию с вложенными в блок другими блоками, надо подумать и покопаться, на что сейчас я времени пока не имею. Но это реально, например повесить на Операцию... лисп, который проверит, есть ли в блоке блоки, - и если есть, выдаст окно. Если все правильно понял, позже смогу посмотреть.
все правильно! тут как я понимаю самое сложное проверить лиспом наличие подблоков у блока, а дальше все просто. Сам скачал книгу по лиспу, буду потиху ковырять.
EgorS вне форума  
 
Непрочитано 19.08.2013, 21:38
#6
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от EgorS Посмотреть сообщение
тут как я понимаю самое сложное проверить лиспом наличие подблоков у блока, а дальше все просто
С использованием этого кода от Алексея Кулика сложного вообще ничего нет - всё просто
Код:
[Выделить все]
 (defun block-double-click ( / ss)
(vl-load-com)
	(defun get-block-vla-obj-list (vla-block_ref / block_def block_cont res)
		(setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
								  (vla-get-effectivename vla-block_ref)
						) ;_ end of vla-item
		) ;_ end of setq
		(setq block_cont ((lambda (/ res)
							(vlax-for sub block_def
							  (setq res (cons sub res))
							  ) ;_ end of vlax-for
							(reverse res)
							) ;_ end of lambda
						  )
		) ;_ end of setq
		block_cont
	)
	(if (setq ss (ssget "_I"))
		(if (vl-some
				(function 
					(lambda (x) (= (vla-get-ObjectName x) "AcDbBlockReference")))
					(get-block-vla-obj-list (vlax-ename->vla-object (ssname ss 0)))

			)
			(command "_REFEDIT")
			(command "_-REFEDIT" "_OK" "_ALL" "_Y")
		)
		(princ "\nБлок не выбран")
	)
	(princ)
)
Сохраняем лисп-файл как обычно в папку, прописанную в путях доступа, а на Операцию... ставим макрос
Код:
[Выделить все]
^C^C(if(null (block-double-click))(Load "block-double-click.lsp"));(block-double-click)
Но это выражение каждый раз при двойном клике на блоке будет появляться в командной строке. Если раздражает, то добавляем лисп-файл в автозагрузку, а на кнопку пишем макрос
Код:
[Выделить все]
^C^C(block-double-click)
skkkk на форуме  
 
Автор темы   Непрочитано 19.08.2013, 23:08
#7
EgorS

Архитектура, 3D
 
Регистрация: 16.01.2010
Минск, РБ
Сообщений: 65


Cупер- все работает великолепно!
но появились пожелания: нельзя ли добавить условие, чтоб находясь в режиме редактирования блока можно было бы залазить в его под-блоки этим же кодом (хоткеем соотвествено)?

По теме: http://forums.autodesk.com/t5/Visual...k/td-p/3454228 - быстрое создание блока, для тех кто не заботится по именам блоков )
EgorS вне форума  
 
Непрочитано 20.08.2013, 05:00
#8
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от EgorS Посмотреть сообщение
нельзя ли добавить условие, чтоб находясь в режиме редактирования блока можно было бы залазить в его под-блоки этим же кодом (хоткеем соотвествено)?
Методом сканирования системных переменных по ключевому запросу "REF" я обнаружил переменую REFEDITNAME (только чтение). Если она не равна "" (т.е. пустой строке), то это означает, что мы сейчас находимся в режиме редактирования блока или внешней ссылки с именем, совпадающим со значением этой переменной. Попробуем этим воспользоваться, добавив еще одно условие. Если REFEDITNAME = "", то все по-старому: вложенных блоков нет - открывается контекстное редактирование блока, есть - видим окно со списком вложенных блоков. Иначе - происходит закрытие редактирования с сохранением, а затем контекстное редактирование блока второго уровня
Пока получилось вот что: находясь в режиме Edit Block In-place основного блока, делаем тройной клик на блоке второго уровня и вот мы уже редактируем его. Не выходит пока ликвидировать третий клик. Он запрашивает вхождение блока. Не прокатывает вариант, как с блоком первого уровня, когда _-REFEDIT сам понимает, какой блок ему открыть. А как его (это вхождение) программно определить по даблклику на блоке - ума не приложу. Попытка вычленить его из набора (ssget "_I") успехом не венчается.
Код:
[Выделить все]
 (defun block-double-click ()
(vl-load-com)
	(defun get-block-vla-obj-list (vla-block_ref / block_def block_cont res)
		(setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
								  (vla-get-effectivename vla-block_ref)
						) ;_ end of vla-item
		) ;_ end of setq
		(setq block_cont ((lambda (/ res)
							(vlax-for sub block_def
							  (setq res (cons sub res))
							  ) ;_ end of vlax-for
							(reverse res)
							) ;_ end of lambda
						  )
		) ;_ end of setq
		block_cont
	)
	(if (ssget "_I")
		(if (= (getvar "REFEDITNAME") "")
			(if (vl-some
					(function 
						(lambda (x) (= (vla-get-ObjectName x) "AcDbBlockReference")))
						(get-block-vla-obj-list (vlax-ename->vla-object (ssname (ssget "_I") 0)))

				)
				(command "_REFEDIT")
				(command "_-REFEDIT" "_OK" "_ALL" "_Y")
			)
			(command "_REFCLOSE" "_S" "_-REFEDIT" pause "_NEXT" "_OK" "_ALL" "_Y")
		)
	)
	(princ)
)
Но я нашел во всем этом одно удобство: находясь в режиме контекстного редактирования, делаем даблклик по любому блоку и нажимаем Escape. Что произойдет, как думаете? Мы выйдем из режима контекстного редактирования в обычный режим модели, сохранив изменения в блоке.
skkkk на форуме  
 
Автор темы   Непрочитано 20.08.2013, 12:01
#9
EgorS

Архитектура, 3D
 
Регистрация: 16.01.2010
Минск, РБ
Сообщений: 65


Цитата:
Сообщение от skkkk Посмотреть сообщение
Не выходит пока ликвидировать третий клик. Он запрашивает вхождение блока. Не прокатывает вариант, как с блоком первого уровня, когда _-REFEDIT сам понимает, какой блок ему открыть. А как его (это вхождение) программно определить по даблклику на блоке - ума не приложу. Попытка вычленить его из набора (ssget "_I") успехом не венчается.
то есть не получается в самом начале кода запомнить выделенный блок (записать в переменную) - а потом при запросе выделения(третьего клика) подставить ту переменную?
но уже и так очень классно получилось! работать становиться намного приятнее !
EgorS вне форума  
 
Непрочитано 21.08.2013, 14:08
#10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от EgorS Посмотреть сообщение
то есть не получается в самом начале кода запомнить выделенный блок (записать в переменную) - а потом при запросе выделения(третьего клика) подставить ту переменную?
Не совсем. В переменную-то всё записывается. При входе в режим контекстного редактирования из обычного режима (когда REFEDITNAME = "") Автокад сам определяет нужный блок (по двойному щелчку не нем) и переменную ему скармливать не нужно. А когда мы пытаемся это сделать, находясь уже в режиме конт.редактирования, надо сначала его закрыть (этот режим), а потом входить заново в другой блок и вот тут-то Автокад уже не понимает по двойному клику, что от него хотят (потому как сначала происходит _REFCLOSE, а затем _REFEDIT), а я пока не понимаю, какой аргумент хочет он на запрос "Выберите вхождение". Набор не ест, ename - тоже. Позже еще посмотрю.
skkkk на форуме  
 
Непрочитано 18.10.2016, 11:36
#11
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 388


вот что выдает автокад при закрытии контекстного редактирования блока...
Команда: ССЫЛЗАКР
** Команда не разрешена, если вхождение не забрано с помощью команды ССЫЛРЕД **
как это получилось: при команде ССЫЛРЕД создал объект в блоке, отсутствующий в блоке до этого
как закрыть, не фаталив автокад?редактор не висит, но курсор пропадает, удалить добавленный объект не получается(его не выбрать)
***
закрыл - файл сохранился с висящим редактором, при открытии висит так же)) восстановление dwg не помогает, восстановил из bak предыдущее сохранение.
P/S^
вот такой вот баг - объект создать в режиме ссылред позволяет, а выйти из редактора нет)))

Последний раз редактировалось Linkshunter, 18.10.2016 в 11:53.
Linkshunter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Ускорить вход/выход из режима редактирования блока



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический блок внутри другого блока Engineer_Sergii Динамические блоки 5 12.07.2018 09:42
Находясь в режиме редактирования основного блока выделить и зайти во второстепенный EgorS AutoCAD 10 03.02.2012 21:22
Странное поведение динамического блока высотной отметки hwd Динамические блоки 12 08.09.2011 11:15
После редактирования блока автокад начинает подтормаживать asii AutoCAD 1 12.04.2011 00:38
Как перенести в чертеж блок из файла библиотеки блоков Main Urod Программирование 8 03.02.2010 14:15