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

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

Мои макрокоманды

Ответ
Поиск в этой теме
Непрочитано 19.05.2008, 15:20 1 |
Мои макрокоманды
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,511

Предлагаю в данной теме выкладывать используемые макрокоманды.
Выкладывать прошу с описанием, что данная макрокоманда выполняет и как. Если можно, то и рисунки к кнопкам соотвественно.

Выкладываю 4 своих макрокоманды.

Улучшенная команда _Break, разрыв в одной точке с повтором по правой клавише мышки.
Цитата:
^C^C^P(defun c:break2 () (vl-cmdf "_break" pause "f" pause "@")(princ));break2;
ps. Макрокоманда не моя. Рисунок со старой кнопки.


Объект Xline строится горизонтально
Цитата:
^C^C_xline;_h;
Объект Xline строится вертикально
Цитата:
^C^C_xline;_v;

Объект Xline строится по объекту (не работает по примитивам блока и arx объектов сторонних навесок на автокад).
Цитата:
*^C^C_xline;_offset;_Through;_nea;\_none;@;;
Макрокоманда зациклена, выход по Esc.
ps. Макрокоманда не моя.


Объект Xline строится по объекту, с поворотом в указанной точке на 90 градусов (не работает по примитивам блока и arx объектов сторонних навесок на автокад)
Цитата:
^C^C_xline;_offset;_Through;_nea;\_none;@;^C^C_rotate;_last;;\90;
ps. Макрокоманда доработана из предыдущей.

Соотвественно и кнопочки
Button.rar

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 343610
 
Непрочитано 08.07.2019, 17:59
#921
Наталья Катаева


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


Спасибо еще раз! А если нужно оставить только действие с выносками и убрать все остальные? Просто стереть строчки 1, 3 и 4? Или нужно искать дальше относящиеся к ним тексты и их тоже стирать?
Наталья Катаева вне форума  
 
Непрочитано 09.07.2019, 09:39
1 | #922
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 955


Цитата:
Сообщение от Наталья Катаева Посмотреть сообщение
А если нужно оставить только действие с выносками и убрать все остальные?
Я думаю будет достаточно откорректировать только эти действия и оставить одну строку
Код:
[Выделить все]
 
(*LEADER"        "ВАШЕИМЯСЛОЯ"     "Dimension Layer"              3        "Continuous"           -3                 1                 nil         )
AlexCondor вне форума  
 
Непрочитано 09.07.2019, 15:49
#923
Vova

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


Цитата:
Сообщение от Наталья Катаева Посмотреть сообщение
Так вроде написала... Хочу сделать команду, которая задавала бы слой по умолчанию для выносок и .... В макросах и лиспах я не бум-бум, потому решила, что проще всего будет найти макрос этой команды и поменять в нем что-нибудь, если пойму - что. Наверное, я слишком просто это себе представляла, но изучать программирование из-за одной удобной фишки как-то времени не хватает. Нашла такой вот макрос: *^C^C_mleader;\\Ваш текст;_change;_l;;_p;_la;Примечание;; он должен создавать выноску в нужном слое (точнее, переносить в него созданную), но там есть текст по умолчанию. Если его убрать, будет работать вот такая аброкадабра? *^C^C_mleader;\_change;_l;;_p;_la;; Боюсь даже пробовать, так как не знаю, как вернуть потом все назад, то есть чтобы другой переменной выноски снова создавались в текущем слое. Если это не очень сложно, можете подсказать, как такое сделать?

Припоминаю, я писал статью на эту тему, и может даже так быть, приведенный в цитате макрос мой. (правда, млидеров тогда еще не было, но обычные конечно были). Но не могу найти на сайте раздела "статьи", или что-то в этом роде. Подскажите пож.
Vova вне форума  
 
Непрочитано 10.07.2019, 18:12
#924
Vova

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


Цитата:
Сообщение от Наталья Катаева Посмотреть сообщение
В макросах и лиспах я не бум-бум, потому решила, что проще всего будет найти макрос этой команды и поменять в нем что-нибудь, если пойму - что
Наталья, макрос который вы нашли, действительно оказался (изначально) мой, из этой статьи, опубликованной когда-то здесь https://dwg.ru/pub/7
Если вы ее (статью) освоите, не так страшно окажется не только подредактировать готовый макрос, но и создать свой.
Vova вне форума  
 
Непрочитано 12.07.2019, 07:23
#925
Наталья Катаева


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


Vova Большое спасибо за интересные и понятные статьи. Обязательно попробую разобраться.



Цитата:
Сообщение от AlexCondor Посмотреть сообщение
Я думаю будет достаточно откорректировать только эти действия и оставить одну строку
Ура, получилось!!! Спасибо огромное!
Наталья Катаева вне форума  
 
Непрочитано 19.02.2020, 13:15
#926
kolemba


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


Добрый день. Необходимо вставить в выноски с различными текстами в конце из буфера обмена текст одинаковый.
Какой символ необходимо использовать для клавиши <end> записывая команду? Так - ^C^C_textedit;_end;_paste - при выборе выноски только курсор в тексте появляется. Как правильно написать? Спасибо
kolemba вне форума  
 
Непрочитано 19.02.2020, 13:32
#927
skkkk


 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,490


Боюсь, макросами тут не обойтись. Они-то посылают команды в командную строку, а при активном редакторе текста командная строка не воспринимает ничего.
skkkk на форуме  
 
Непрочитано 19.02.2020, 13:33
#928
kolemba


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Боюсь, макросами тут не обойтись. Они-то посылают команды в командную строку, а при активном редакторе текста командная строка не воспринимает ничего.
Спасибо и на том)
kolemba вне форума  
 
Непрочитано 20.02.2020, 15:31
#929
skkkk


 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,490


Цитата:
Сообщение от kolemba Посмотреть сообщение
вставить в выноски с различными текстами в конце из буфера обмена текст одинаковый
kolemba, поигрался в перерыве - получился на тему небольшой лисп несложный.
Offtop: ощущение возникло, будто словом обмолвился с богатырём русским
Код:
[Выделить все]
;;; Добавление текстового содержимого буфера обмена в конец Мтекста, выноски, мультивыноски (через пробел)
;;; Использована функция VVA mip:entsel
(vl-load-com)
(defun C:TEST ( / last_ent paste_str txt_ent)
	(setq last_ent (entlast))
	(vl-cmdf "_PASTECLIP" '(0 0 0))
	(if (not (eq last_ent (entlast)))
		(if (= (cdr (assoc 0 (entget (entlast)))) "MTEXT")
			(progn
				(setq paste_str (cdr (assoc 1 (entget (entlast)))))
				(entdel (entlast))
				(while (setq txt_ent (mip:entsel "\nВыберите текстовый объект для добавления к нему текста из буфера:" '("MTEXT" "LEADER" "MULTILEADER") nil))
					(vla-put-TextString 
						(vlax-ename->vla-object txt_ent)
						(strcat (vla-get-TextString (vlax-ename->vla-object txt_ent)) " " paste_str)
					)
				)
			)
			(princ "\nВ буфере обмена не текст")
		)
		(princ "\nБуфер обмена пуст")
	)
	(princ)
)
	
	(defun mip:entsel (promt filter entlist / key n newentlist ent_point promt)
	;;;Функция mip:entsel
	;;;Еденичный выбор объекта, замена функции entsel
	;;;Возвращает entity name выбранного примитива или nil, точку указания запоминает в переменной LASTPOINT
	;;;Параметры:
	;;;promt - предложение выбрать объект (string)
	;;;filter - фильтр объектов для выбора вида '("LINE" "LWPOLYLINE")
	;;;entlist - список примитивов которые не надо выбирать (либо список entity name, либо PICKSET)
	;;;
	;;;Примеры:
	;;;(mip:entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") nil)
	;;;(mip:entsel "\nВыберите объекты" nil nil)
	;;;(setq aa nil) (mip:entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (while (setq a (car (entsel))) (setq aa (append aa (list a)))))
	;;;(mip:entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (ssget))
	  (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
	(princ "\nКоманда \"TEST\" загружена")
	(princ)

На всякий случай: Как использовать лисп, опубликованный на форуме
Миниатюры
Нажмите на изображение для увеличения
Название: 2020-02-20 at 15-17-08.gif
Просмотров: 31
Размер:	676.5 Кб
ID:	223337  

Последний раз редактировалось skkkk, 21.02.2020 в 16:42. Причина: (vl-load-com)
skkkk на форуме  
 
Непрочитано 21.02.2020, 14:19
#930
koMon


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


а не удобнее ли будет визуализировать сдержимое буфера обмена, вставив его, например, в диалог?
koMon вне форума  
 
Непрочитано 21.02.2020, 14:33
#931
skkkk


 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,490


koMon, не знаю. ТЗ получилось весьма лаконичное и размытенькое - я как понял, так и сделал. Может, ты понял как-то иначе. Просто никак не возьму в толк: зачем диалог туда вплетать? Обычно, если человек хочет чего-то куда-то вставить, он предварительно это откуда-то копирует. Скопировал фрагмент текста откуда угодно, вызвал команду - и вставляй во всё подряд сколько влезет. А так еще дополнительные нажатия на закрытие диалога. Но что-то мне подсказывает, что фигню ты вряд ли посоветуешь.
Поэтому, хоть ни фига и не понял, но очень интересно.

----- добавлено через ~5 мин. -----
А вот то, что тексты сейчас захочется скопом выбирать - это уж наверняка
skkkk на форуме  
 
Непрочитано 21.02.2020, 16:27
#932
koMon


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


skkkk, а если скопировал в буфер не всё, например. накопировал всё это добро, а потом где-то оно вылезет...
koMon вне форума  
 
Непрочитано 21.02.2020, 16:32
#933
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 8,267


а за диалогом выбора пойдет поиск в скопированном, маски, шаблоны и пошло-поехало монструозное вместо функции с одним определенным функционалом)
Сергей812 вне форума  
 
Непрочитано 21.02.2020, 16:47
#934
koMon


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


так-то оно конечно и будет) но поскольку суть сводится с прилеплению к текстам выносок какого-то аппендикса, который каким-то образом окажется в буфере, но имхо я бы сделал так:
1. простейший диалог с редактируемой строкой и кнопкой выбора выносок
2. пастим в строку диалога буфер, проверяем чего там на пастили
3. выбираем выноски
4. лепим аппендикс
koMon вне форума  
 
Непрочитано 21.02.2020, 16:50
#935
skkkk


 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,490


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и пошло-поехало монструозное вместо функции с одним определенным функционалом
Offtop: koMonCAD


Цитата:
Сообщение от koMon Посмотреть сообщение
а если скопировал в буфер не всё, например. накопировал всё это добро, а потом где-то оно вылезет...
Предлагаю подождать фидбэка. Может, вообще уже человек выполнил работу и ему уже не нужно. А мы тут блин, разводим обсуждение, к тому же - оффтопим. Если будет потребность, можно продолжить, заодно и попросить тему отделить
skkkk на форуме  
 
Непрочитано 21.02.2020, 16:56
#936
koMon


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


вот ещё, можно из буфера сразу в диалог загнать строку, поплясав слегка

----- добавлено через ~3 мин. -----
Offtop:
Цитата:
Сообщение от skkkk Посмотреть сообщение
koMonCAD

Offtop: неа Autodeskkkk
koMon вне форума  
 
Непрочитано 06.04.2020, 06:29
#937
gumel


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


Добрый день! Возможно ли сделать переименование блока при клике по нему? Или это уже из области Лиспа?
В чертеже имеется добрая сотня блоков со своеобразными именами. Хотелось бы переименовать большинство. Rename работает но уж очень неудобно пользоваться.

Заранее благодарен.
gumel вне форума  
 
Непрочитано 06.04.2020, 10:59
#938
Alex.gomel


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


Цитата:
Сообщение от gumel Посмотреть сообщение
Rename работает но уж очень неудобно пользоваться.
А если так:
^C^P_rename;_b;(vla-get-effectivename (vlax-ename->vla-object (car(entsel))));
Alex.gomel вне форума  
 
Непрочитано 06.04.2020, 11:44
#939
gumel


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


Цитата:
Сообщение от Alex.gomel Посмотреть сообщение
А если так:
^C^P_rename;_b;(vla-get-effectivename (vlax-ename->vla-object (car(entsel))));
Спасибо!

немного поправил:

^C^P-rename;_b;(vla-get-effectivename (vlax-ename->vla-object (car(entsel))));

и заработало!
gumel вне форума  
 
Непрочитано 06.04.2020, 12:07
#940
Кулик Алексей aka kpblc
Moderator

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


gumel, забыл "_" перед -rename.
__________________

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

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мои динамические блоки Shoorup Динамические блоки 2713 21.04.2011 23:34
Повторение выполнения макрокоманды по циклу. КАК? Kostinok AutoCAD 12 05.12.2007 15:40
Мои проекты Vova Разное 10 08.10.2007 23:18
Мои палитры инструментов на соседний компьютер Pave1 AutoCAD 4 27.06.2006 09:45