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

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

Как определить, что блок находится в пространстве листа?

Ответ
Поиск в этой теме
Непрочитано 26.05.2021, 19:42
Как определить, что блок находится в пространстве листа?
Алёшка
 
Регистрация: 10.02.2011
Сообщений: 41

Вопрос знатокам:
В одном файле dwg имеется три одинаковых блока, с разным заполнением атрибутов, расположенные в координатах x=0, y=0, z=0.
Один блок расположен в пространстве модели, второй в пространстве "Лист 1", а третий в пространстве "Лист 2".
Какую магию необходимо применить, дабы по результату "извлечения данных" можно было определить, какой именно блок в каком пространстве расположен?
Просмотров: 22723
 
Непрочитано 09.06.2021, 10:16
#41
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от koMon Посмотреть сообщение
зачем лиспом прикручивать блоку атрибут с пространством
Очевидно, потому что:
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Автор - занимается троллингом
Ответ на вопрос автора:
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Какую магию необходимо применить, дабы по результату "извлечения данных" можно было определить, какой именно блок в каком пространстве расположен?
Нужно применить магию программирования, штатными средствами автокада это не сделать.
Дальше, добро пожаловать в соответствующие разделы форума.
Boxa вне форума  
 
Непрочитано 09.06.2021, 10:25
1 | #42
Oleg T


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Нужно применить магию программирования, штатными средствами автокада это не сделать.
Дальше, добро пожаловать в соответствующие разделы форума.
В принципе, выше я уже выложил лиспик (совсем простенький), который решает поставленную в топике задачу. Дальше осталось только прописать имя блока и вперед: DATAEXTRACTION.
Однако у автора аппетит разыгрался, а это действительно уже не сюда
Oleg T вне форума  
 
Автор темы   Непрочитано 09.06.2021, 13:42
#43
Алёшка


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
да можете, конечно, становиться в позу обиженного, ваше право) Но вы сами задали планку не новичка в программировании

после чего ваши следующие посты, а так же игнорирование советов практически занимающихся программированием, вызывает определенное... удивление вашим подходом к решению весьма несложной задачи
Я ещё раз дико извиняюсь, но вы забываете про мой уровень... ранее вы упомянули, что я "сам задал планку не новичка в программировании", но я вроде достаточно ясно обозначил, что вопрос "будет решаться в c++, которым я с горем пополам умею оперировать и даже уже имею некоторый опыт разбора извлечённых из чертежей данных". Вы увидели, что я упомянул ActiveX, .net и решили, что я и в этих вопросах разбираюсь? Значт у вас сложилось ложное впечатление.

Большая часть сочетаний букв, которые мелькают в советах мне, я просто не понимаю (уверен, советы наверняка весьма дельные, но я в виду своей необразованности зачастую я не могу их понять).. а советы перейти на С# или VBA не могу воспринимать в серьёз, потому как объём изучаемого там материала для меня не ясен и хотелось бы всё же решить моё первичную задачу (приведённую в старте топика) посредством автокада или на крайняк встроенного в него лиспа (коль скоро выяснилось, что решение таким способом вполне возможно).

----- добавлено через ~9 мин. -----
Цитата:
Сообщение от Oleg T Посмотреть сообщение
В принципе, выше я уже выложил лиспик (совсем простенький), который решает поставленную в топике задачу. Дальше осталось только прописать имя блока и вперед: DATAEXTRACTION.
Спасибо вам ещё раз огромное!.. я надеюсь, что управлюсь с чуть более расширенной задачей. Для меня было немного неожиданным, что если блок динамический, то имя блока, приводимое в
(2 . "<вот тут>") не соответствует имени определения блока Придётся, видимо, пытаться искать атрибут по его уникальному имени во всех блоках, не зная имени блока заранее...
Так пожалуй даже более универсальное решение получится

Цитата:
Сообщение от Oleg T Посмотреть сообщение
Однако у автора аппетит разыгрался, а это действительно уже не сюда
Увы, я не всегда чувствую ту самую грань, когда нужно бросать старый топик и заводить новый топик по близко связанным вопросам
Вы полагаете уже пора?
Алёшка вне форума  
 
Непрочитано 09.06.2021, 14:21
1 | #44
Oleg T


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Вы полагаете уже пора?
Просто здесь, как я понимаю, больше принято обсуждать стандартные средства автокада. Может, в ветке про программирование больше помогут.
А динамические блоки действительно определяются как анонимные, так что тут и правда лучше искать по имени атрибута. Можно еще свой слой для этих блоков создать, но тут человеческий фактор больше влиять будет.
Oleg T вне форума  
 
Непрочитано 09.06.2021, 14:51
1 | #45
Сергей812


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


тыц от Кулика Алексея)
Сергей812 вне форума  
 
Непрочитано 09.06.2021, 16:25
1 | #46
doctorraz

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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Придётся, видимо, пытаться искать атрибут по его уникальному имени во всех блоках, не зная имени блока заранее...
Не придется, селсетом за один раз со всего чертежа забираешь все блоки с нужным эффективе нэйме, потом в цикле разбираешь коллекцию.. атрибуты, пространство
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 10.06.2021, 00:57
#47
Алёшка


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


Спасибо большое всем кто помог разобраться.
Без помощи Oleg T, чую, возиться пришлось бы неизмеримо дольше.
Спасибо Сергей812 за деятельное участие в обсуждении и ряд толковых подсказок, пусть и с подколками.

Код предоставленный Oleg T и немного доработанный напильником, который полностью перекрывает мои потребности:

Код:
[Выделить все]
(defun C:SPSET ()
 (progn
  (setq def_target_attr "SPACENAME")
  (princ "\n \n  Сейчас мы весело проставим в блоки с атрибутами имена пространств их расположения!\n")
  (setq target_attr (getstring 1 (strcat "Введите имя атрибута и нажмите ввод <" def_target_attr ">: ")))
  (if (< (strlen target_attr) 1) (setq target_attr def_target_attr) )
  (princ (strcat "\nУстановка имени пространства в атрибут \"" target_attr "\" для блоков...\n"))
  (setq nabor (ssget "X" '( (0 . "INSERT") )))
  (setq kol (sslength nabor))
  (setq n 0) 
  (setq case_count 0)
  (repeat kol
    (setq block_name 	(ssname nabor n))
    (setq space_name 	(cdr (assoc 410 (entget block_name))))
    (setq atr_prog_name (entnext block_name))
	(setq cnt 0)
	(while (and (/= atr_prog_name nil) (< cnt 3))
		(setq atr_full_data (entget atr_prog_name))
		(if (= (cdr(assoc 2 atr_full_data)) target_attr)
			(progn
				(setq case_count	(1+ case_count))
				(setq old_value		(assoc 1 atr_full_data))
				(setq new_value		(cons  1 space_name))
				(setq atr_full_data (subst new_value old_value atr_full_data))
				(entmod atr_full_data)
			) ; end of progn
		) ;end of if
		(setq atr_prog_name (entnext atr_prog_name))
		(setq cnt (1+ cnt))
	) ;end of while
	(setq n (1+ n))
  ); end of repeat
  (princ (strcat "\n  ...найдено и изменено "(rtos case_count) " атрибута(ов).\n"))
  (command "_REGENALL")
  (princ)
 ) ; end of main progn
); end of defun
Алёшка вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как определить, что блок находится в пространстве листа?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вписать определенный элемент модели в ВЭ в пространстве листа Sanbl4 AutoCAD 5 02.12.2015 14:00
Чудеса с размерами в пространстве листа Dmitry2004 AutoCAD 9 28.05.2014 12:02
Не отображается заливка в пространстве листа. Софико AutoCAD 7 20.04.2013 00:02
Пропадание объектов в пространстве листа. 1Sasha1 AutoCAD 4 11.01.2010 14:02
На каком лайоуте находится выбранный блок? DonVik Программирование 30 29.08.2008 17:20