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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как изменить штриховку с помощью lisp приложения?

Как изменить штриховку с помощью lisp приложения?

Ответ
Поиск в этой теме
Непрочитано 18.12.2021, 19:24 #1
Как изменить штриховку с помощью lisp приложения?
unchiej
 
Регистрация: 18.12.2021
Сообщений: 1

Доброго времени суток. Хочется менять штриховку, ее масштаб, прозрачность, угол и т.д с помощью запуска лисп приложения. Чтобы на листе выбирать сразу большое количество объектов, группировать, вызывать лисп команду и сразу присваивать какой-то конкретный штрих. Может быть кто-то занимался подобным? Пытался написать что-то по типу _hatchedit (ANSI37) (0.3) (90) и так далее, но как-то не получается. Я в лиспе совсем зеленый. Буду рад помощи.
Просмотров: 4652
 
Непрочитано 27.10.2022, 09:26
#2
TiDi


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


http://www.lee-mac.com/programs.html нашел в темах форума, может из этого что-то подойдет
Решили задачу?
Тоже интересует взаимодействие с блоками через lisp
TiDi вне форума  
 
Непрочитано 27.10.2022, 14:04
#3
name02


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


Вот такой лисп сегодня сварганил, не без использования KpbIcа конечно же.
Надо понимать, что в данном виде он корректно будет обрабатывать статические блоки и те динамические блоки, которые попали в выделение.
Т.е. если в чертеже несколько вхождений одного динамического блока у которых уже были выставлены какие-то свойства, то Автокад воспринимает их как разные блоки
и данный лисп поменяет штриховку только в выделенном вхождении данного динамического блока.
Динамические блоки в которых свойства не менялись Автокадом воспринимаются все еще как вхождения одного и того же блока и штриховки в них поменяются аналогично статическим блокам.

Если надо чтобы лисп запускался как обычная команда Автокада то можно заменить в первой строке _changePattern_ на любое другое вида C:НАЗВАНИЕ_КОМАНДЫ (C - английская, НАЗВАНИЕ_КОМАНДЫ - без пробелов, можно английские и русские буквы, регистр букв значения не имеет)

Название штриховки пишет сам пользователь

Код:
[Выделить все]
 (defun _changePattern_ ( / 
							ss pat_name pat_scale pat_angle pat_transp 
							i
							
							ent obj
							
							set_hatch_props
							change_block_hatches
						
						)
	(vl-load-com)
	
	;Установка свойств vla-объекта штриховки
	(defun set_hatch_props ( obj )

		;Задание выбранной штриховке имени, масштаба, угла поворота и прозрачности
		(vla-setpattern obj acHatchPatternTypeUserDefined pat_name)
		(vla-put-PatternScale obj pat_scale)
		(vla-put-PatternAngle obj pat_angle)
		(vla-put-EntityTransparency obj pat_transp)

	)	
	
	;Определение штриховки в блоке
	(defun change_block_hatches ( obj / block_def block_cont result_ent )
	
		;;; Получить vla-указатель на описание блока
		(setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
								  (vla-get-name obj)
						) ;_ 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

		;;; Отфильтровать все примитивы, из состава указанного блока, которые не являются штриховкой
		(setq result_ent (vl-remove-if-not
						   (function
							 (lambda (x)
							   (= (vla-get-objectname x) "AcDbHatch")
							   ) ;_ end of lambda
							 ) ;_ end of function
						   block_cont
						   ) ;_ end of vl-remove-if-not
		) ;_ end of setq
		
		;Установка свойств штриховки
		(foreach hatch_obj result_ent

			(set_hatch_props hatch_obj)
		
		)

			  
	)

	(setq *acad* (vlax-get-acad-object))
	(setq *adoc* (vla-get-ActiveDocument *acad*))
		
	;Выбор только штриховок
	(setq ss (ssget '((0 . "HATCH,INSERT"))))
	
	(setq pat_name (getstring "\nУкажите название штриховки: "))
	(setq pat_scale (getreal "\nУкажите масштаб штриховки <1.0>: "))
	(setq pat_angle (getreal "\nУкажите угол поворота штриховки <0>: "))
	(setq pat_transp (getint "\nУкажите прозрачность штриховки в % <0>: "))
	
	
	(if (null pat_scale) (setq pat_scale 1))
	
	
	(if (null pat_angle) 
			(setq pat_angle 0)
			(setq pat_angle (* pat_angle (/ pi 180)))
	)
	
	(if (null pat_transp) 
		(setq pat_transp "0")
		(setq pat_transp (itoa pat_transp))
	)
	
	(setq i 0)	
	
	(vla-startundomark *adoc*)
	
	;Обход всех выделенных объектов
	(repeat (sslength ss)
			
			(setq ent (ssname ss i))
			
			(setq obj (vlax-ename->vla-object ent))

			(cond
				((= (cdr (assoc 0 (entget ent))) "HATCH") (set_hatch_props obj)) 
				(T (change_block_hatches obj))
			)

			(setq i (1+ i))
			
	)
	
	;Обновляем текущий вьюпорт чтобы обновить изображение блоков
	(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports)

	(vla-endundomark *adoc*)	
			
			
	(princ)
	
)

Последний раз редактировалось name02, 27.10.2022 в 14:30.
name02 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как изменить штриховку с помощью lisp приложения?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение полилинии нужной ширины без изменения глобального значения PLINEWID с помощью lisp Tesan LISP 3 14.07.2020 11:03
Как с помощью Lisp скопировать значение размера в буфер обмена xdrivers LISP 9 15.12.2019 21:34
LISP. Необходимо изменить координаты вершин сплайна. Yura Agafonov Программирование 1 08.05.2017 15:55
LISP. Как добраться до формулы поля атрибута дин. блока и изменить её? kacugu LISP 10 21.06.2016 13:07