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

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

Как назначить масштаб типа линии из свойств блока?

Ответ
Поиск в этой теме
Непрочитано 13.02.2022, 12:40 #1
Как назначить масштаб типа линии из свойств блока?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,134

Существует ли способ редактирования масштаба типа линии блока из свойств этого блока? Этот способ необходим для быстрой и удобной настройки отображения штриховых и штрихпунктирных линий блока не заходя в блок. Масштаб типа линий должен назначаться цифрой в свойствах блока. Этот способ особенно необходим для настройки отображения штрихпунктирных и штриховых линий динамических блоков, так как "контекстное редактирование" динамических блоков не разрешается. И удобная настройка отображения штрихпунктирных и штриховых типов линий динамических блоков возможна только способом настроек свойств динамического блока.
Просмотров: 1769
 
Непрочитано 13.02.2022, 16:50
#2
koui


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


если таких масштабов несколько, может, через видимость?
а сам блок можно? может, через настройку масштаба и сделать для ассоциативной штриховки?
koui вне форума  
 
Непрочитано 17.02.2022, 20:29
#3
skkkk


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


Код:
[Выделить все]
 (defun C:CHLTSCALE ( / ltypescale ent vla_obj)
	(setq ltypescale 
		(getreal 
			(strcat 
				"\nВведите масштаб типа линии: "
				(if *LTYPESCALE* (strcat "<" (rtos *LTYPESCALE* 2 1) ">") "")
			)
		)
	)
	(if (null ltypescale)
		(setq ltypescale *LTYPESCALE*)
		(setq *LTYPESCALE* ltypescale)
	)
	(if ltypescale (setq ent (car (nentsel))))
	(if (and ltypescale ent)
		(progn
			(setq vla_obj (vlax-ename->vla-object ent))
			(if (and vla_obj (vlax-property-available-p vla_obj 'LinetypeScale T))
				(vla-put-LinetypeScale vla_obj ltypescale) 
				(princ "\nНевозможно изменить масштаб типа линий указанного объекта")
			)
		)
		(princ "\nОбъект не выбран")
	)
	(princ)
)
Правда, не понял пока, как победить необходимость регенерации после каждого назначения масштаба - без неё изменения не отображаются.
skkkk на форуме  
 
Автор темы   Непрочитано 18.02.2022, 04:55
#4
МишаИнженер


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
skkkk
Замечательная программа! Просто супер!
Надо только немного доработать:
1)Начинаться программа должна запросом: "Выделите объект:"
2)Затем выводится сообщение: "Текущий масштаб типа линии 50, укажи новый масштаб типа линии <50>:
3)Затем надо выполнить изменение масштаба типа линии
4)и выполнить регенерацию чертежа.
Ничего страшного, что регенерация займет время, лучше сразу её выполнить в программе, чем вручную искать команду в меню для регенерации чертежа
Доработайте пожалуйста код этой программы по плану выше и я вам буду очень признателен
МишаИнженер вне форума  
 
Непрочитано 18.02.2022, 12:03
1 | #5
skkkk


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


Код:
[Выделить все]
 (defun C:CHLTSCALE ( / ltypescale ent vla_obj)
	(vl-load-com)
	(setq ent T)
	(while ent
		(setq ent (car (nentsel)))
		(cond
		  (	(and ent (= (type ent) 'ENAME))
			(setq vla_obj (vlax-ename->vla-object ent))
			(setq ltypescale 
				(getreal 
					(strcat
						"\nВведите масштаб типа линии (текущий "
						(rtos (vla-get-LinetypeScale vla_obj) 2 1)
						"): " 
						(if *LTYPESCALE* (strcat "<" (rtos *LTYPESCALE* 2 1) ">") "")
					)
				)
			)
			(if (null ltypescale)
				(setq ltypescale *LTYPESCALE*)
				(setq *LTYPESCALE* ltypescale)
			)
			(if ltypescale (vla-put-LinetypeScale vla_obj ltypescale))
		  )
		  ( T	
			(princ "\nОбъект не выбран")
		  )
		)
		(princ)
	)
	(vl-cmdf "_REGENALL")
)
Если не нужен зацикленный ввод (до нажатия правой кнопки на запрос выбора объекта), то надо удалить или закомментить строки 3, 4 и 30

Последний раз редактировалось skkkk, 18.02.2022 в 12:09.
skkkk на форуме  
 
Автор темы   Непрочитано 18.02.2022, 12:25
#6
МишаИнженер


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


Все замечательно skkkk!
Немного поменял запуск команды регенерации чертежа и все очень хошо работает!
Код:
[Выделить все]
 (defun C:CHLTSCALE ( / ltypescale ent vla_obj)
	(vl-load-com)
	(setq ent T)
	(while ent
		(setq ent (car (nentsel)))
		(cond
		  (	(and ent (= (type ent) 'ENAME))
			(setq vla_obj (vlax-ename->vla-object ent))
			(setq ltypescale 
				(getreal 
					(strcat
						"\nВведите масштаб типа линии (текущий "
						(rtos (vla-get-LinetypeScale vla_obj) 2 1)
						"): " 
						(if *LTYPESCALE* (strcat "<" (rtos *LTYPESCALE* 2 1) ">") "")
					)
				)
			)
			(if (null ltypescale)
				(setq ltypescale *LTYPESCALE*)
				(setq *LTYPESCALE* ltypescale)
			)
			(if ltypescale (vla-put-LinetypeScale vla_obj ltypescale))
		  (vl-cmdf "_REGENALL")
		  )
		  ( T	
			(princ "\nОбъект не выбран")
		  )
		)
		(princ)
	)
)
Но почему-то изменяется масштаб линии только в выбранном блоке, а остальные блоки с этим же именем отображаются со старыми масштабами этих же линий
Можно сделать так чтобы все блоки с одинаковым именем в чертеже меняли масштаб выбранной линии?
Посмотрите пример в прикреплённом файле.
Блоки одинаковые, а линии отображаются с разным масштабным коэффициентом. Это очень странный эффект AutoCAD. Наверное при обновлении блоков AutoCAD не задумывается над масштабными коэффициентами типов линий блока. Если зайти в редактор блоков и выйти с сохранением из редактора, то все линии начинают отображаться с одинаковым масштабом. Наверное только при выходе из редактора блоков AutoCAD один раз настраивает отображение типов линий в блоке, а потом на это не обращает внимания. Может я и не прав, не понятно
Миниатюры
Нажмите на изображение для увеличения
Название: Линии блоков отображаются по разному.png
Просмотров: 25
Размер:	20.6 Кб
ID:	245519  
Вложения
Тип файла: dwg
DWG 2007
План балок моста.dwg (3.25 Мб, 3 просмотров)

Последний раз редактировалось МишаИнженер, 18.02.2022 в 13:23.
МишаИнженер вне форума  
 
Непрочитано 18.02.2022, 15:30
#7
skkkk


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


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Но почему-то изменяется масштаб линии только в выбранном блоке, а остальные блоки с этим же именем отображаются со старыми масштабами этих же линий
Это странно, потому что у меня обновляется на всех (на обоих блоках в файле "План балок моста", третий там другой блок). Может, переменная подгаживает какая... Я причем оба варианта кода попробовал

Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Немного поменял запуск команды регенерации чертежа и все очень хошо работает!
Думаю, зря. После каждого выбранного объекта в цикле будет регенерировать теперь, на загруженных чертежах будет жестко тупить. В том и смысл, чтоб реген был после всех выбранных блоков. Другой вопрос, что их неплохо было бы подсвечивать в таком случае, наверное, чтоб обозначить выбор. Либо просто убрать цикл, как я выше описал, и для каждого блока вызывать команду заново. Но реген в коде на каждой итерации цикла - это неправильно.
skkkk на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как назначить масштаб типа линии из свойств блока?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция чтения свойств и их значений динамического блока Supermax Библиотека функций 11 16.03.2020 09:11
Можно ли назначить красные линии, имея только КПТ? Modis Прочее. Архитектура и строительство 13 15.09.2016 08:55
Как отключить отображение параметров атрибутов блока на палитре свойств. Amiskey AutoCAD 2 03.11.2015 20:36
Создание линии типа "_______текст_______ " с возможностью изменение текста xabraxabra AutoCAD 18 03.10.2011 02:35
VBA, Масштаб типа линии для текста? Vildar Программирование 1 28.07.2008 16:40