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

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

Автоматический перенос размеров на слой размеры. Break макро

Ответ
Поиск в этой теме
Непрочитано 01.03.2005, 12:58
Автоматический перенос размеров на слой размеры. Break макро
Piton
 
Инженер строитель
 
Москва
Регистрация: 24.02.2005
Сообщений: 396

Подскажите макрос на кнопку чтоб команда break разрывала в двух указанных точках (First point, second break point). ACAD2005
---
Добавлено (спасибо VVA): Рабочие варианты
#25
#190
#272
#273

Последний раз редактировалось Кулик Алексей aka kpblc, 16.11.2012 в 13:42.
Просмотров: 171282
 
Непрочитано 08.04.2020, 11:55
#341
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Offtop: holy fucking shitty shit
Offtop: сказал илон маск, и начал строить ракеты

Последний раз редактировалось koMon, 08.04.2020 в 12:04.
koMon вне форума  
 
Непрочитано 08.04.2020, 13:29
#342
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
и начал строить ракеты
90% этих ракет запускаются в космос штатным функционалом
еще 8% ракет построены дабы подстроиться под кривые бизнесс процессы пользователей, либо пользователи не подозревают, что в базе это уже сделано
но без 2% не обойтись.. надо запускать)))
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 08.04.2020 в 13:36.
doctorraz вне форума  
 
Непрочитано 08.04.2020, 14:04
#343
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665



Offtop: соглашусь согласиться
koMon вне форума  
 
Непрочитано 09.04.2020, 02:04
#344
skkkk


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


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Файл создаю новый, каждый раз загружаю КАД заново. А слой нужен просто, чтобы был. Не для "автоматики".
Так есть ли смысл использовать программу, которая использует РЕАКТОРЫ и "заставляет" новые размеры независимо от текущего слоя попадать на слой "Размеры" (условно), новые штриховки - на слой "Штриховки" и т.д. - использовать просто для создания набора слоев в новом чертеже автоматически? Можно просто использовать функцию create_layer и задать нужных слоев сколько влезет с нужными настройками. Или все-таки нужен этот функционал для переброски размеров на слой размеры? Просто я попробовал в коде из #333 поудалять "свои" фрагменты - слой не восстанавливается, и
Цитата:
Сообщение от SergAM243 Посмотреть сообщение
После отработки лиспа добросовестно выводится "Команда: CMD-END"
То есть, мой код в этом никак не участвует (и, вообще-то не должен по задумке).

Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Слой "АР_Оси" с цветом 255,1,1 в новом чистом файле создается, но если в файле уже есть слой "АР_Оси" с цветом 10, то он так 10-кой и остается.
Исправил свою функцию create_layer, чтобы она принудительно изменяла настройки слоя, если он уже существует, на указанные в аргументах:
Код:
[Выделить все]
 (defun create_layer 
;;; Функция создания слоя. При наличии слоя в чертеже меняет ему настройки (цвет, тип, вес линий) на указанные в аргументах
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	 entlist entlay
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(setq entlist
		(list 
			(vl-list* 0   "LAYER") 
			(vl-list* 100 "AcDbSymbolTableRecord") 
			(vl-list* 100 "AcDbLayerTableRecord") 
			(vl-list* 2 layer_name)
			(vl-list* 70 0)
			(if	(listp color)
				(vl-list* 420 
					(+
						(lsh (car  color) 16) ; R
						(lsh (cadr color)  8) ; G
						(caddr color)	      ; B
					) 
				) 
				(vl-list* 62 color)
			)
			(if	linetype
				(vl-list* 6 linetype)
				(vl-list* 6 "Continuous")
			)
			(if lineweight		 
				(vl-list* 370 (fix (* lineweight 100)))
				(vl-list* 370 -3); вес по умолчанию	
			)
			(if no_print
				(vl-list* 290 0) ; непечатаемый
				(vl-list* 290 1) ; печатаемый
			)
		)
	)
	
	
	(if	(null (setq entlay (tblobjname "LAYER" layer_name)))
		(entmakex entlist)
		(entmod (append (list (assoc -1 (entget entlay))) entlist))
	)
)
В общем, если от проги нужно просто создание слоев, добавляете в автозапуск этот код, и дописываете туда сколько надо слоев по примеру:
Код:
[Выделить все]
 (create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15
Код:
[Выделить все]
 (create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 "Continuous" 0.40 nil)     ;_Создаем слой "АР_ЧТО_ТО_ЕЩЕ" и задаем цвет "7" тип линии Continuous вес 0,40
Код:
[Выделить все]
 (create_layer "АР_NOPRINT" 5 "Continuous" 0.40 T)     ;_Создаем слой "АР_NOPRINT " и задаем цвет "5" тип линии Continuous вес 0,40 "НЕПЕЧАТАЕМЫЙ"
и т.д.

Если все же нужны реакторы, то рекомендую еще раз внести нужные изменения в код из #25 повнимательнее - очевидно, там произошла ошибка при редактировании "под себя", вникать в которую не хочется.
Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Но если есть желание и возможность решать и решить эту задачку на программном уровне,
то обязуюсь быть ответственным тестером до получения удовлетворяющих не только меня результатов.
Дополнить парой строчек свой код мне не сложно. Тем более, что я его не писал с нуля, а поделился тем, что уже было. Лучше, конечно, если ТЗ изначально и сразу подразумевает решение всех задач (например, менять цвет слоя, если он уже существует), однако, я мог бы и сам догадаться в такой нужде. Просто, никак не смог предположить интуитивно, что командные методы при наличии слоя в чертеже меняют-таки его настройки на прописанные в коде (не пользовался таким методом никогда). Это я так - просто поворчать - на будущее .


Цитата:
Сообщение от koMon Посмотреть сообщение
да как бы нет
Поленился в свое время лезть в RGB через VLA, поэтому, спасибо за шпаргалочку .

Последний раз редактировалось skkkk, 09.04.2020 в 12:04.
skkkk вне форума  
 
Непрочитано 09.04.2020, 10:10
#345
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от skkkk Посмотреть сообщение
сегодня в 02:12

Цитата:
Сообщение от skkkk Посмотреть сообщение
спасибо за шпаргалочку
koMon вне форума  
 
Непрочитано 10.04.2020, 23:37
#346
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 40
<phrase 1=


skkkk писал:
Цитата:
Так есть ли смысл использовать программу...
Да, этот функционал для переброски размеров &K на свои слои мне нужен. Все и затевалось из-за этого. Просто попутно создаю еще дополнительные слои. АР_Оси в том числе.

Попробовал новый вариант кода. Да, это то, что мне было нужно. Ошибку в своем коде нашел. Закопипастил одну лишнюю строчку, т.е. затер ее. Сравнил с исходным и нашел разницу.
На всякий случай выкладываю свою последнюю версию, Вдруг кому-то пригодится.

Код:
[Выделить все]
   ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
;;;Команда в Палитре_Инструментов:
;;;^C^C^P(load "01_Zagr_layer_АР-018.lsp")
(vl-load-com)
(setq *OldLayer* (getvar "CLAYER")) 
;;;----------------------------------------
 (defun create_layer 
;;; Функция создания слоя. При наличии слоя в чертеже меняет ему настройки (цвет, тип, вес линий) на указанные в аргументах
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	 entlist entlay
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(setq entlist
		(list 
			(vl-list* 0   "LAYER") 
			(vl-list* 100 "AcDbSymbolTableRecord") 
			(vl-list* 100 "AcDbLayerTableRecord") 
			(vl-list* 2 layer_name)
			(vl-list* 70 0)
			(if	(listp color)
				(vl-list* 420 
					(+
						(lsh (car  color) 16) ; R
						(lsh (cadr color)  8) ; G
						(caddr color)	      ; B
					) 
				) 
				(vl-list* 62 color)
			)
			(if	linetype
				(vl-list* 6 linetype)
				(vl-list* 6 "Continuous")
			)
			(if lineweight		 
				(vl-list* 370 (fix (* lineweight 100)))
				(vl-list* 370 -3); вес по умолчанию	
			)
			(if no_print
				(vl-list* 290 0) ; непечатаемый
				(vl-list* 290 1) ; печатаемый
			)
		)
	)
	
	
	(if	(null (setq entlay (tblobjname "LAYER" layer_name)))
		(entmakex entlist)
		(entmod (append (list (assoc -1 (entget entlay))) entlist))
	)
)

;;;----------------------------------------
(vl-cmdf "_layer" "_make" "АР_Размеры" "_color" 150 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры и задаем цвет 150 
(vl-cmdf "_layer" "_make" "АР_Размеры осевые" "_color" 26 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры осевые и задаем цвет 26
(vl-cmdf "_layer" "_make" "АР_Штриховка" "_color" 176 "" "_lw" 0.09 "" "") ;_Создаем слой Штриховка и задаем цвет 176 
(vl-cmdf "_layer" "_make" "АР_Основ" "_color" 2 "" "_lw" 0.60 "" "") ;_Создаем слой АР_Осн и задаем цвет 2
(vl-cmdf "_layer" "_make" "АР_Армат" "_color" 1 "" "_lw" 0.15 "" "") ;_Создаем слой Армат и задаем цвет 1
(vl-cmdf "_layer" "_make" "АР_Окна_двери" "_color" 5 "" "_lw" 0.15 "" "") ;_Создаем слой Окна_двери и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Перегородки" "_color" 73 "" "_lw" 0.15 "" "") ;_Создаем слой Перегородки и задаем цвет 73
(vl-cmdf "_layer" "_make" "АР_Стены" "_color" 115 "" "_lw" 0.35 "" "") ;_Создаем слой Стены и задаем цвет 115
(vl-cmdf "_layer" "_make" "АР_Земля" "_color" 155 "" "_lw" 0.90 "" "") ;_Создаем слой АР_Земля и задаем цвет 155
(vl-cmdf "_layer" "_make" "АР_Текст" "_color" 5 "" "_lw" 0.15 "" "")     ;_Создаем слой Текст и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Штрихдветочки" "_color" 42 "" "_lt"  "ACAD_ISO12W100" "" "_lw" 0.15 "" "")     ;_Создаем слой штрихдветочки и задаем цвет 42 тип линии ACAD_ISO12W100 вес 0,15
(vl-cmdf "_layer" "_make" "АР_Пунктир" "_color" 5 "" "_lt"  "Штриховая" "" "_lw" 0.15 "" "")     ;_Создаем слой Пунктир и задаем цвет 5 тип линии штриховая вес 0,15
(vl-cmdf "_layer" "_make" "АР_Рамка" "_color" 151 "" "")     ;_Создаем слой Рамка и задаем цвет 151
(vl-cmdf "_layer" "_make" "АР_Непечат" "_color" 205 "" "_lw" 0.15 "" "_plot" "_n" "" "")   ;_Создаем слой АР_Непечат и задаем цвет 205 непечатаемый
(vl-cmdf "_layer" "_make" "АР_Таблицы" "_color" 33 "" "")   ;_Создаем слой Таблицы и задаем цвет 33
(vl-cmdf "_layer" "_make" "АР_Сантехника" "_color" 6 "" "_lw" 0.15 "" "")   ;_Создаем слой Сантехника и задаем цвет 6
(vl-cmdf "_layer" "_make" "АР_Выноски" "_color" 5 "" "_lw" 0.15 "" "")   ;_Создаем слой Выноски и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Оборуд" "_color" 3 "" "_lw" 0.40 "" "")   ;_Создаем слой Оборуд и задаем цвет 3
(create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15(setvar "clayer" *OldLayer*) 
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil)
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(if (not *vlr-cmd*)
  (setq	*vlr-cmd* (vlr-command-reactor "cmd"
		    '((:vlr-commandwillstart . cmd-start)
		      (:vlr-commandended . cmd-end)
		      (:vlr-commandcancelled . cmd-end)
		      (:vlr-commandfailed . cmd-end)))))
;;;;;;------------------------------------------------------------- 
(defun cmd-start (calling-reactor startcommandInfo / thecommandstart) 
   (setq thecommandstart (nth 0 startcommandInfo))
  (if (null *OldLayer*)(setq *OldLayer* (getvar "CLAYER")))
  (cond 
 ;;;_Реакция на начало команды DIM* (DIMALIGNED DIMLINEAR и все что начинается с DIM)    
    ((wcmatch thecommandstart "DIM*")  ;_Если выполняется команда DIM* 
     (setvar "clayer" "АР_Размеры")       ;_Слой размеры должен быть создан выше (vl-cmdf "_layer" ... 
    ) 
 ;;; Конец реакции на DIM*    
    ((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда *HATCH* 
     (setvar "clayer" "АР_Штриховка") 
    ) 
    ((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (setvar "clayer" "АР_Текст") 
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
     (setvar "clayer" "АР_Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда *QLEADER MLEADER
     (setvar "clayer" "АР_Выноски") 
    )
	   ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*RAY") ;_Если выполняется команда_ray RAY -ЛУЧ-
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*ЛУЧ") ;_Если выполняется команда ЛУЧ
     (setvar "clayer" "АР_Непечат")
    )
    (t (setq *OldLayer* nil)) ;;_Если не наша команда, чистим список текущих слоев
;;;См http://forum.dwg.ru/showpost.php?p=318806&postcount=139
;;;и http://forum.dwg.ru/showpost.php?p=318806&postcount=143
    )
  (princ)) 
 ;;;------------------------------------------------------------- 
(defun cmd-end (calling-reactor cmd / cmd_name)
(setq cmd_name (strcase (car cmd)))
(if (or
      (wcmatch cmd_name "*HATCH*") ;_Если выполняется команда DIM*
      (wcmatch cmd_name "DIM*")    ;_Если выполняется команда *HATCH*
      (wcmatch cmd_name "*TEXT")   ;_Если выполняется команда *TEXT (TEXT DTEXT)
      (wcmatch cmd_name "*TABLE")   ;_Если выполняется команда ТАБЛИЦА
      (wcmatch cmd_name "*LEADER")   ;_Если выполняется команда *QLEADER или MLEADER
	  (wcmatch cmd_name "*XLINE") ;_Если выполняется команда XLINE
	  (wcmatch cmd_name "*RAY") ;_Если выполняется команда RAY
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
;;;----------------------------------------
Функцию принудительного изменения настройки слоя, если он уже существует, на указанные в аргументах в лиспе применяю для исправления своих старых чертежей.
Еще использую эту функцию для изменения цветов слоев под белый или черный экран. Для черчения использую черный экран, но начальник любит смотреть на белом.
Приходится выкручиваться. Благо дело на форуме Апельсинов выкладывал лисп для быстрой смены цвета экрана.
Вот так меняешь цвет экрана, меняешь цвета слоев и начальнику нравится. Как только отошел, возвращаешь все в исходное.

Вопрос!
Можно ли в строчке:

(create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 "Continuous" 0.40 nil)

сделать такие изменения: (create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 nil 0.40 nil)

Судя по коду лиспа - можно, но лучше спросить!

skkkk
В любом случае еще раз благодарю за оказанную помощь

----- добавлено через ~25 мин. -----
doctorraz
LayerDirector посмотрел. Попытался вникнуть, но там не такое очевидное создание слоев и отработки команд.
Моих познаний не хватает для его подгонки под свои нужды.
Он,LayerDirector, очень похож на код от Кулик Алексей aka kpblc, которым я пользовался раньше.
Но в том коде у меня не получилось впихнуть штриховую линию. И хоть есть у Алексея функция подгрузки линий, но не пошла она,не пошла.
Получилось на этом коде №25. Вот я и пользуюсь им.
Может LayerDirector и лучше, но я не знаю и не понимаю ЧЕМ? Поэтому меня этот вопрос и не парит.
Еще раз спасибо за помощь, но пользоваться буду программным вариантом. Что такое ФОРМКОМПЛЕКТ практически никто не знает и не пользуется.
Мой переделаный Монохром канет в лету.
SergAM243 вне форума  
 
Непрочитано 11.04.2020, 04:02
#347
skkkk


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


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Вопрос!
Можно ли в строчке:

(create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 "Continuous" 0.40 nil)

сделать такие изменения: (create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 nil 0.40 nil)
Можно. В данном контексте эти две строки равнозначны. В коде прописано, что если тип линий не задан (nil), то использовать "Continuous".


Код:
[Выделить все]
 			(if	linetype ;если задан тип линий в аргументе (3-й аргумент)
				(vl-list* 6 linetype) ; то назначаем слою этот тип линии
				(vl-list* 6 "Continuous")  ; если нет (т.е. nil), то "Continuous"
			)
skkkk вне форума  
 
Непрочитано 11.04.2020, 13:05
#348
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 40
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
если тип линий не задан (nil), то использовать "Continuous"
Да, на это я и ссылался.
Просто хотелось понять для чего вместо 3-х символов набрано 12. Вдруг хитрость какая?
SergAM243 вне форума  
 
Непрочитано 11.04.2020, 17:50
#349
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Что такое ФОРМКОМПЛЕКТ практически никто не знает и не пользуется.
Мой переделаный Монохром канет в лету.
об этом и речь.. любая эффективная технология убивается об "мы так всегда делали"
без административного поджопника ничо не взлетит
__________________
Мастерская СПДС
doctorraz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматический перенос размеров на слой размеры. Break макро

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

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