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

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

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

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

Вопрос знатокам:
В одном файле dwg имеется три одинаковых блока, с разным заполнением атрибутов, расположенные в координатах x=0, y=0, z=0.
Один блок расположен в пространстве модели, второй в пространстве "Лист 1", а третий в пространстве "Лист 2".
Какую магию необходимо применить, дабы по результату "извлечения данных" можно было определить, какой именно блок в каком пространстве расположен?
Просмотров: 22683
 
Непрочитано 07.06.2021, 08:15
#21
Oleg T


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Теперь надо осознать, как бы это хозяйство научиться вписывать в атрибут блока
Понадобятся entnext, subst и entmod.
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Я хочу сторонним приложением (которое наколдую сам) проанализировать извлечение данных из группы чертежей (считаем для простоты, что эта группа чертежей есть выпускаемая книга) и создавать перечень всех документов, попутно проконтролировав содержимое атрибутов блоков на следующие признаки:
- соответствуют ли проставленные в основной надписи подписи - фамилиям, фамилии должностям, сочетания фамилия/должность/видимость подписи текущему составу сотрудников отдела;
- для наглядности получение перечня должностей-фамилий с количеством упоминаний, что бы обратить внимание на редко встречающиеся подписи, или подписи людей в проекте не участвовавших,
- нет ли в нумерации документов пропущенных номеров листов,
- нет ли в нумерации документов лишних номеров листов,
- нет ли ошибок со сквозной нумерацией,
В финале создать перечень включенных в книгу документов, возможно перечня документов основного комплекта рабочих чертежей и/или содержания...
Смело. Я с отрисовки линии обрыва начинал

Последний раз редактировалось Oleg T, 07.06.2021 в 09:28.
Oleg T вне форума  
 
Автор темы   Непрочитано 07.06.2021, 23:04
#22
Алёшка


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
1. Извлечение данных здесь вообще не причем - вы путаете понятия. Читайте справку Автокада - Извлечение данных.
2. То что вам надо это - Ведомость чертежей. См. ГОСТ
3. Как я и говорил задача совершенно другая.
4. Это надо в ветку - Программирование.
5. Или использовать готовое, но с получением всех ваших (причудливых) требований я не встречал.
по п. 1. Чтож я тут такого напутал? Я хочу анализировать извлечённые данные. Вопрос в том, как сделать так, чтобы "можно было определить, какой именно блок в каком пространстве расположен?" Где тут напутано??

по п. 2. Если бы просто ведомость нужна была, без описанного в #16 контроля, то тема эта заведена бы не была, а так нужно именно то, что заявлено в первом сообщении.

по п. 3. Задача не другая, вопрос к знатокам именно тот, что обозначен в начале темы.

по п. 4. Может быть и да, но до получения ответов от знатоков это было не достаточно очевидно.

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от Oleg T Посмотреть сообщение
Смело. Я с отрисовки линии обрыва начинал
тут такое дело, я ведь не мечтаю о том, чтобы всецело погрузиться в лисп... и перечень вопросов, который Вы процитировали будет решаться в c++, которым я с горем пополам умею оперировать и даже уже имею некоторый опыт разбора извлечённых из чертежей данных...

Потому, на данный момент вижу решением своего вопроса код на лисп, который обойдёт в dwg файле все блоки и в имеющих атрибут с характерным именем (например "ПРОСТРАНСТВО") пропишет туда результат полученный по результатам выполнения кода, аналогичного "(cdr (assoc 410 (entget (car (entsel)))))"... разумеется в том его варианте, когда не ручками в каждый блок тыкать надобно

----- добавлено через ~34 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
скорее лишний костыль - если решать задачу программными методами, то информацию можно собрать напрямую.
тогда и не нужен будет
я, было дело, глянул на варианты взаимодействовать с автокадом программно и нашёл там несколько нетривиальных для меня сейчас вариантов..
В .net и c# я неумею совсем. Посылать в запущенный экземпляр автокада команды ActiveX можно, но не уверен, что через это дело есть возможность получать информацию из автокада обратно в своё приложение. Был ещё вариант с ObjectARX, но там под каждую версию автокада нужно устанавливать отдельную древнюю версию вижуалстудии, и очень похоже делать это необходимо в хронологическом порядке, а это те ещё пляски.... А потому мне вот вариант с получением данных через извлечение "понравился" больше всего. Там ведь окажутся исключительно готовые сухие данные, где одна строка - информация об одном блоке, а не база данных всех примитивов с которой ещё чёртзнаеткакработать.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
но решать на лиспе задачу

попутно изучая лисп - это отважно) А это еще ТС не "обнаружил" - что без дополнительных телодвижений лисп работает только внутри документа.
И всё же вы путаете, я эту задачу на c++ решать намерен, а лисп мне нужен только, для того, чтобы нормально данные извлечь. В моём случае это путь наименьшего сопротивления.
А на счёт "только внутри документа", таки если заведётся эта тема на одном чертеже, тогда я и буду думать об этом и дурацкие вопросы дальше задавать
Алёшка вне форума  
 
Непрочитано 07.06.2021, 23:59
#23
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
В .net и c# я неумею совсем
если знаете С++ - синтаксис базовый похож) Весь Net фреймворк изучать совсем не обязательно, только базовые вещи - на что в инете огромное количество обучающего материала - от картинок до видео.

Цитата:
Сообщение от Алёшка Посмотреть сообщение
Был ещё вариант с ObjectARX, но там под каждую версию автокада нужно устанавливать отдельную древнюю версию вижуалстудии, и очень похоже делать это необходимо в хронологическом порядке, а это те ещё пляски...
да не нужен ObjectARX под подобные задачи)

Цитата:
Сообщение от Алёшка Посмотреть сообщение
Посылать в запущенный экземпляр автокада команды ActiveX можно, но не уверен, что через это дело есть возможность получать информацию из автокада обратно в своё приложение
посмотрите в инете - как например, делают автоматизацию на связке акад-эксель. Есть ограничения, например с событиями - но взаимодействие можно обеспечить определенное.. и небыстрое)
Сергей812 вне форума  
 
Непрочитано 08.06.2021, 07:34
#24
doctorraz

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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
А потому мне вот вариант с получением данных через извлечение "понравился" больше всего
Из того же экселя через vba по очереди открываешь файлы, селектом ( selectionset) по имени блока выбираешь блоки, можно еще другие условия выбора задать , дергаешь из них атрибуты и прочие данные в массив или коллекцию, потом обрабатываешь массив или колекцию на дубликаты и прочее, если лом аналмзировать программно, выгружаешь полученное в таблицу эксель и его средствами делаешь анализ
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 08.06.2021, 10:35
#25
Алёшка


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


Цитата:
Сообщение от doctorraz Посмотреть сообщение
Из того же экселя через vba по очереди открываешь файлы, селектом ( selectionset) по имени блока выбираешь блоки, можно еще другие условия выбора задать , дергаешь из них атрибуты и прочие данные в массив или коллекцию, потом обрабатываешь массив или колекцию на дубликаты и прочее, если лом аналмзировать программно, выгружаешь полученное в таблицу эксель и его средствами делаешь анализ
А среди тех прочих данных окажутся данные о пространстве расположения конкретного блока? Будет понятно, в модели он, или в пространстве листа?

Вот только-только начал пытаться что-то читать про lisp, как вдруг возникает необходимость освоить и VBA, и C#

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
если знаете С++ - синтаксис базовый похож) Весь Net фреймворк изучать совсем не обязательно, только базовые вещи - на что в инете огромное количество обучающего материала - от картинок до видео.
То есть, намекаете, что C# всё же для этой цели нужен? Средствами Lisp задачу простановки атрибутов не осилить?
Алёшка вне форума  
 
Непрочитано 08.06.2021, 10:57
#26
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


Алёшка, посмотрите
http://www.lee-mac.com/updatetitleblock.html
Offtop: может подтолкнёт в нужном направлении
kacugu вне форума  
 
Непрочитано 08.06.2021, 11:09
#27
doctorraz

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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Будет понятно, в модели он, или в пространстве листа?
Конечно.
Выше Сергей намекнул, что лиспом обработка нескольких файлов решается не совсем тривиально.
А на чем решать задачу на vba, c# или vb.net непринципиально, средств activeX вполне достаточно
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 08.06.2021, 11:47
#28
Oleg T


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Средствами Lisp задачу простановки атрибутов не осилить?
Вполне осилить.
Вот для блока с одним атрибутом (назначение имени листа, в одном файле, само собой). Если атрибутов несколько, то каждый следующий атрибут в блоке - (setq atr (entnext atr))
Код:
[Выделить все]
 (setq nab (ssget "X" '((0 . "INSERT") (2 . "NAME_INSERT"))))
(setq kol (sslength nab))
(setq n 0)
(repeat kol
	(setq pr (ssname nab n))
	(setq 410_ (cdr (assoc 410 (entget pr))))
	(setq atr (entnext pr))
	(setq atr_ (entget atr))
	(setq 1_old (assoc 1 atr_))
	(setq 1_new (cons 1 410_))
	(setq atr_ (subst 1_new 1_old atr_))
	(entmod atr_)
	(setq n (+ n 1))
)

Последний раз редактировалось Oleg T, 08.06.2021 в 12:50.
Oleg T вне форума  
 
Непрочитано 08.06.2021, 15:46
#29
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
А среди тех прочих данных окажутся данные о пространстве расположения конкретного блока? Будет понятно, в модели он, или в пространстве листа?
большая часть того, что в этой книге - можно сделать через COM из того же Excel. Просто вместо ThisDrawing будет ссылка на документ приложения акад, полученный через GetObject(, "AutoCAD.Application"). Фактически можно сделать в экселе формы ввода на листах/WinForms и управлять содержимым блоков по чертежам - возглавить бардак зачастую проще, чем анализировать)

Цитата:
Сообщение от Алёшка Посмотреть сообщение
То есть, намекаете, что C# всё же для этой цели нужен? Средствами Lisp задачу простановки атрибутов не осилить?
осилить можно, просто зная плюсы - городить набор костылей, которые рано или поздно наложатся на человеческий фактор - тупиковый путь, имхо.
Сергей812 вне форума  
 
Непрочитано 08.06.2021, 18:08
| 1 #30
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Алёшка Посмотреть сообщение
по п. 1. Чтож я тут такого напутал?
1. Извлечение данных - это DATAEXTRACTION
Мастер извлечения данных
И это не сопоставимо с вашей задачей. Есть терминология и неверное её использование приводит к неверному результату.
2. Как и ранее говорил вам нужна ведомость документов, с дополнительными параметрами.
3. Практически всё что вам надо (выдрать информацию из штампа чертежа) вы можете получить при использовании - Реверс
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 08.06.2021, 21:50
#31
Алёшка


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
1. Извлечение данных - это DATAEXTRACTION
Мастер извлечения данных
И это не сопоставимо с вашей задачей. Есть терминология и неверное её использование приводит к неверному результату.
2. Как и ранее говорил вам нужна ведомость документов, с дополнительными параметрами.
3. Практически всё что вам надо (выдрать информацию из штампа чертежа) вы можете получить при использовании - Реверс
1. Ну смешно чесслово... именно dataextraction меня и интересует и я вроде прямо об этом говорил в первом же сообщении выделив "извлечение данных" кавычками Вас видимо возмущает, что я написал это определение по-русски или, очевидно, Вы и впрямь думаете, что знаете что мне нужно сильно лучше меня ))
3. Нет. Я описал что мне нужно, уже дважды, в третий раз вы меня не заставите повторять )))
Уважаемый, я дико извиняюсь, но не тратьте пожалуйста на меня своё время я бестолковый и не могу понять то, что Вы пишете ))) Всего Вам доброго, светлый Вы человек
Алёшка вне форума  
 
Непрочитано 08.06.2021, 21:58
| 1 #32
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Алёшка Посмотреть сообщение
1. Ну смешно чесслово... именно dataextraction
вам и разу и написали - НЕЛЬЗЯ т.к. задача у вас другая.
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Всего Вам доброго, светлый Вы человек
и вам не хворать.
p.s. осталось немного подождать и...
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 08.06.2021, 23:18
#33
Алёшка


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


Цитата:
Сообщение от Oleg T Посмотреть сообщение
Вполне осилить.
Вот для блока с одним атрибутом (назначение имени листа, в одном файле, само собой). Если атрибутов несколько, то каждый следующий атрибут в блоке - (setq atr (entnext atr))
Код:
[Выделить все]
 (setq nab (ssget "X" '((0 . "INSERT") (2 . "NAME_INSERT"))))
(setq kol (sslength nab))
(setq n 0)
(repeat kol
	(setq pr (ssname nab n))
	(setq 410_ (cdr (assoc 410 (entget pr))))
	(setq atr (entnext pr))
	(setq atr_ (entget atr))
	(setq 1_old (assoc 1 atr_))
	(setq 1_new (cons 1 410_))
	(setq atr_ (subst 1_new 1_old atr_))
	(entmod atr_)
	(setq n (+ n 1))
)
+100 в карму, товарищ! Код завёлся сразу после того, как я исключил из первой строки (2. "NAME_INSERT")... без этого действа - множество было "nil"
Сразу во всех блоках, в каких надо и в каких не надо, первые атрибуты приравнялись имени пространства в котором они расположены!
Прям уже прям почти то, что надо.

Кстати, что за признак такой (2. "NAME_INSERT")?
Алёшка вне форума  
 
Непрочитано 08.06.2021, 23:34
#34
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Код завёлся сразу после того, как я исключил из первой строки (2. "NAME_INSERT")... без этого действа - множество было "nil"
Сразу во всех блоках, в каких надо и в каких не надо, первые атрибуты приравнялись имени пространства в котором они расположены!
Прям уже прям почти то, что надо.
на плюсах тоже так пишете - методом исключения того, что мешает скомпилировать?)) Тогда проще, действительно, через костыли с извлечением данных...
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Кстати, что за признак такой (2. "NAME_INSERT")?
читайте про DXF коды -> 2: Имя (тег атрибута, имя блока и т.д.)
Сергей812 вне форума  
 
Автор темы   Непрочитано 08.06.2021, 23:45
#35
Алёшка


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


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

читайте про DXF коды -> 2: Имя (тег атрибута, имя блока и т.д.)
По всякому бывает.. и да, через костыли тоже, собственно как и все... или вам часто встречаются те, кто рождаются и сразу знают чё где лежит, да где что взять нужно, чтоб впервые встреченную задачу решать безошибочно и сразу? Везёт вам )))

За наводку на DXF коды спасибо )
Алёшка вне форума  
 
Непрочитано 08.06.2021, 23:53
#36
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
или вам часто встречаются те, кто рождаются и сразу знают чё где лежит, да где что взять нужно, чтоб впервые встреченную задачу решать безошибочно и сразу? Везёт вам )))
т.е. вы даже не попытались загуглить - что за функция ssget в лиспе, когда словили ошибку времени исполнения. А это именно
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Сразу во всех блоках, в каких надо и в каких не надо
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.06.2021, 00:26
#37
Алёшка


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
т.е. вы даже не попытались загуглить - что за функция ssget в лиспе, когда словили ошибку времени исполнения. А это именно
Чёт по началу подумалось накидать встречных вопросов, типа: Вам не доводилось пользоваться "методом тыка"? Не жмёт ли, в таком случае Вам нимб?? ))
а потом понял, что подустал и хочу сказать следующее:

Уважаемый, я дико извиняюсь, но не тратьте пожалуйста на меня своё время я бестолковый и не могу понять то, что Вы пишете ))) Всего Вам доброго, светлый Вы человек
Алёшка вне форума  
 
Непрочитано 09.06.2021, 00:41
| 2 #38
Сергей812


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


да можете, конечно, становиться в позу обиженного, ваше право) Но вы сами задали планку не новичка в программировании
Цитата:
Сообщение от Алёшка Посмотреть сообщение
я эту задачу на c++ решать намерен, а лисп мне нужен только, для того, чтобы нормально данные извлечь. В моём случае это путь наименьшего сопротивления.
после чего ваши следующие посты, а так же игнорирование советов практически занимающихся программированием, вызывает определенное... удивление вашим подходом к решению весьма несложной задачи
Сергей812 вне форума  
 
Непрочитано 09.06.2021, 07:09
1 | #39
baksconstructor


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


Автор - занимается троллингом
Всех кто ему реально пытается помочь - отправляет погулять, одним словом Алёшка
baksconstructor вне форума  
 
Непрочитано 09.06.2021, 09:48
#40
koMon


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


Алёшка, зачем лиспом прикручивать блоку атрибут с пространством, когда можно тем же лиспом пройтись по всем целевым блокам всех пространств и собрать интересующую информацию в каком нужно формате для дальнейшего анализа? А если использовать ODBX, так и можно это делать пакетно.
koMon вне форума  
Ответ
Вернуться   Форум 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