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

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

В каком списке надо проверять наличие в чертеже заданной штриховки?

Ответ
Поиск в этой теме
Непрочитано 07.12.2022, 10:01 #1
В каком списке надо проверять наличие в чертеже заданной штриховки?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,134

Бывает, что штриховка есть на чертеже, но при назначении в качестве активной штриховки её стиля возникает ошибка, так как описания данной штриховки в чертеже нет.
Как проверить наличие описания штриховки в чертеже?
Код может быть примерно таким:
Код:
[Выделить все]
 
(member (cons 3 NameHatch) (dictsearch (namedobjdict) «ACAD_HATCHSTYLE»))
Но эта функция возвращает ошибку: ; ошибка: неверный тип аргумента: stringp nil
И еще непонятно как с помощью функции member организовать цикл if в следующем коде:
Код:
[Выделить все]
 
		((eq TypeObj "HATCH");Назначим текущий стиль штриховки
		 	(member (cons 3 NameHatch) (dictsearch (namedobjdict) «ACAD_HATCHSTYLE»))
			(setq StyleName (cdr (assoc 2 dan)))
			(setvar "HPNAME" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль штриховки " (chr 34) StyleName (chr 34)))
		)
Просмотров: 2565
 
Непрочитано 07.12.2022, 11:07
1 | #2
name02


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


https://www.cadtutor.net/forum/topic...atch-patterns/
Пост от LeeMac.
Единственно там коды цветового форматирования вставлены в код - их надо убрать.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
И еще непонятно как с помощью функции member организовать цикл if в следующем коде:
Что именно ты хочешь организовать?
name02 вне форума  
 
Автор темы   Непрочитано 07.12.2022, 12:07
#3
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,134


Цитата:
Сообщение от name02 Посмотреть сообщение
Что именно ты хочешь организовать?
У меня работает команда настройки свойств интерфейса АвтоКада по свойствам выделенного объекта.
А когда выделяется штриховка, описание которой отсутствует в чертеже, то появляется ошибка и программа завершается (при отладке все зависает):
Код:
[Выделить все]
 
(defun C:SetProp ()
	(while (setq el (car (entsel "\n Выбери объект:")))
	;entsel выдает имя объекта и все остальное, car - Извлекает первый элемент из списка: имя объекта
	;команды которые должны выполняться в цикле пока не будет пустой ввод
	  (setq dan (entget el));получает список с характеристиками примитива
	  (setq name0 (assoc 0 dan)) ;получаем имя объекта
	  (setq name (cdr name0))
	  (princ (strcat " " name))
;;;	  (alert (strcat "Был выбран " name))
	  (princ (strcat (chr 10) "========================================================="))
	  (princ (strcat (chr 10) "Был выбран " name))
	  (setq cLayer0 (assoc 8 dan)) ;получаем имя объекта
	  (setq cLayer (cdr cLayer0))
	  (setq cLWeight0 (assoc 370 dan)) ;получаем текущий вес линии
	  (setq cLWeight (cdr cLWeight0))
	  (setq cLType0 (assoc 6 dan)) ;получаем текущий тип линии
	  (setq cLType (cdr cLType0))  
	  (setq cLTypeScale0 (assoc 48 dan)) ;получаем текущий масштаб типа линии
	  (setq cLTypeScale (cdr cLTypeScale0))
	  (setq cColor0 (assoc 62 dan)) ;получаем текущий цвет
	  (setq cColor (cdr cColor0))
	  (setq cThick0 (assoc 39 dan)) ;получаем текующую толщину
	  (setq cThick (cdr cThick0))
	  
	;Назначим текущим слой выбранного объекта (setvar "clayer" <имя слоя>)
	  (setvar "clayer" cLayer)
	  (princ (strcat (chr 10) "Был назначен текущий слой " (chr 34) cLayer (chr 34)))
	;Назначим текущий вес линий
	  (cond ((eq cLWeight nil)
			(setvar "CELWEIGHT" -1)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоСлою" (chr 34)))
			)
		((eq cLWeight -2)
			(setvar "CELWEIGHT" -2)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоБлоку" (chr 34)))
			)
		((eq cLWeight -3)
			(setvar "CELWEIGHT" -3)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоУмолчанию" (chr 34)))
			)
		(t 
			(setvar "CELWEIGHT" cLWeight)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) (rtos (/ cLWeight 100.0)) (chr 34)))
		)
	   )
	;Назначим текущий тип линии
	  (cond ((eq cLType nil)
			(setvar "CELTYPE" "ByLayer")
			(princ (strcat (chr 10) "Был назначен текущий тип линий " (chr 34) "ПоСлою" (chr 34)))
			)
		(t 
			(setvar "CELTYPE" cLType)
			(princ (strcat (chr 10) "Был назначен текущий тип линий " (chr 34) cLType (chr 34)))
		)
	   )
	;Назначим текущий масштаб типа линии
	  (cond ((eq cLTypeScale nil)
			(setvar "CELTSCALE" 1)
			(princ (strcat (chr 10) "Был назначен текущий масштаб типа линий " (chr 34) "1" (chr 34)))
			)
		(t 
			(setvar "CELTSCALE" cLTypeScale)
			(princ (strcat (chr 10) "Был назначен текущий масштаб типа линий " (chr 34) (rtos cLTypeScale) (chr 34)))
		)
	   )
	;Назначим ткущий цвет чертежа
	  (cond ((eq cColor nil)
			(setvar "CECOLOR" "ByLayer")
			(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) "ПоСлою" (chr 34)))
			)
		((eq cColor 0)
			(setvar "CECOLOR" "ByBlock")
			(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) "ПоБлоку" (chr 34)))
			)
		(t 
			(setvar "CECOLOR" (rtos cColor))
			(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) (rtos cColor) (chr 34)))
		)
	   )
	;Назначаем текущую толщину
	  (cond ((eq cThick nil)
			(setvar "THICKNESS" 0)
			(princ (strcat (chr 10) "Была назначена текущая толщина " (chr 34) "0" (chr 34)))
			)
		(t 
			(setvar "THICKNESS" cThick)
			(princ (strcat (chr 10) "Была назначена текущая толщина " (chr 34) (rtos cThick) (chr 34)))
		)
	   )
	;Назначим особые свойства для сложных объектов
	  (setq TypeObj (strcase name)) 
	  (cond 
		((eq TypeObj "ACAD_TABLE");Назначим текущий стиль таблиц
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "CTABLESTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль таблиц " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "MTEXT");Назначим текущий стиль текста
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "TEXTSTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль текста " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "MULTILEADER");Назначим текущий стиль мультивыносок
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "CMLEADERSTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль мультивыносок " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "MLINE");Назначим текущий стиль мультилинии
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "CMLSTYLE" StyleName);CMLSCALE CMLJUST
			(princ (strcat (chr 10) "Был назначен текущий стиль мультилиний " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "DIMENSION");Назначим текущий стиль размеров
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(command "_-dimstyle" "_r" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль размеров " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "HATCH");Назначим текущий стиль штриховки
;;;		 	(member (cons 3 NameHatch) (dictsearch (namedobjdict) «ACAD_HATCHSTYLE»))
			(setq StyleName (cdr (assoc 2 dan)))
			(setvar "HPNAME" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль штриховки " (chr 34) StyleName (chr 34)))
		)
	  )
	)
)
Хочется сделать обработчик этой ошибки, чтобы программа выводила сообщение: Описание штриховки "HatchName" в чертеже не найдено.
И чтобы программа не зависала на этой ошибке.

Интересное решение нашел по вашей ссылке:
Код:
[Выделить все]
 
;collects names of all hatch patterns used in current drawing, including those used only inside blocks
(defun FHS (/ h l);FindHatchStyle Поиск Стиля Штризовки
  (vlax-for block (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (vlax-for 	obj block
      (if (and
		  (eq (vla-get-objectname obj) "AcDbHatch")
		  (not (member (setq h (vla-get-PatternName obj)) l))
	   )
	   (setq l (cons h l))
      );_end if
    )
  )
  (acad_strlsort l)
)
Но не понял ещё как приспособить эту подпрограмму к моей задаче
И ещё не могу запустить эту программу в АвтоКаде. После загрузки кода запускаю команду FHS и АвтоКад отвечает: Неизвестная команда FHS. Почему так происходит?

Последний раз редактировалось МишаИнженер, 07.12.2022 в 12:19.
МишаИнженер вне форума  
 
Непрочитано 07.12.2022, 12:31
#4
Кулик Алексей aka kpblc
Moderator

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


М-да... Разницу между функцией и командой знаешь? Еще раз повторю - либо чтение литературы, либо в тему "Научите лиспу на примере..."
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.12.2022, 14:53
#5
Кулик Алексей aka kpblc
Moderator

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


Еще один вопрос по ЯП - и топик гарантированно будет разделен. Все, что не касается, стартового поста, усвистает в другую тему.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > В каком списке надо проверять наличие в чертеже заданной штриховки?

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать дин.блок по имени, указав его на чертеже, а не ища в списке? shishoq Динамические блоки 2 10.04.2021 18:02
На одной ПК в одном чертеже есть шрифт, а в другом чертеже нет шрифта. Ruslan88 AutoCAD 11 14.06.2020 00:20
Надо или нет в списке ссылочных документов указывать что СП является актуализированной версией СНиП? brokman Организация проектирования и оформление документации 17 14.11.2017 20:00
Масштаб штриховки, указанный в свойствах, не соответствует масштабу на чертеже wepp AutoCAD 10 31.08.2016 09:16
Просмоторщик штриховки pat Mozgunov Программирование 4 18.02.2011 12:23