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

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

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

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

Вопрос знатокам:
В одном файле dwg имеется три одинаковых блока, с разным заполнением атрибутов, расположенные в координатах x=0, y=0, z=0.
Один блок расположен в пространстве модели, второй в пространстве "Лист 1", а третий в пространстве "Лист 2".
Какую магию необходимо применить, дабы по результату "извлечения данных" можно было определить, какой именно блок в каком пространстве расположен?
Просмотров: 22749
 
Непрочитано 26.05.2021, 22:07
#2
Сергей812


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


решение в лоб - добавить скрытый атрибут, куда занести Модель, Лист 1, Лист 2
Сергей812 вне форума  
 
Автор темы   Непрочитано 26.05.2021, 23:52
#3
Алёшка


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
решение в лоб - добавить скрытый атрибут, куда занести Модель, Лист 1, Лист 2
Подошло бы, если не вручную заносить... а ежели не вручную, то как?

PS: В примере сказано о трёх объектах, но это, разумеется допущение для простоты, а в реальности листов могут быть десятки, документов десятки, объектов на каждом листе по нескольку...
Алёшка вне форума  
 
Непрочитано 26.05.2021, 23:54
#4
kacugu

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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
а ежели не вручную, то как?
В этот атрибут вставить поле
%<\AcVar ctab>%
kacugu вне форума  
 
Автор темы   Непрочитано 27.05.2021, 22:09
#5
Алёшка


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


Цитата:
Сообщение от kacugu Посмотреть сообщение
В этот атрибут вставить поле
%<\AcVar ctab>%
Увы, этот атрибут возвращает лишь текущее значение переменной, хранящей название открытого в данный момент пространства. Потому при извлечении для всех объектов это поле будет одинаковым...
Алёшка вне форума  
 
Непрочитано 27.05.2021, 22:35
#6
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
а в реальности листов могут быть десятки, документов десятки, объектов на каждом листе по нескольку...
когда хочется, чтобы было быстро и удобно - программирование. Акад лишь базовая платформа. Можно было бы к подшивке попробовать подцепиться - но вы что-то свое изобретаете же...)
Сергей812 вне форума  
 
Непрочитано 28.05.2021, 00:10
#7
РастОК

Конструктор-Проектировщик
 
Регистрация: 24.12.2008
Сообщений: 2,588


Ответ - никак. Как вы определите то на чём я сейчас стою - на ламинате или на паркете?
Ну а больше по теме: определитесь в каком виде вы хотите видеть это "извлечение данных"?
__________________
Если невнятное ТЗ, то результат получится ХЗ.
РастОК вне форума  
 
Непрочитано 28.05.2021, 07:55
#8
Oleg T


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


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

: (entget (car (entsel)))
Укажите объект: ((-1 . <Entity name: 3807f030>) (0 . "INSERT") (5 . "4F43") (330 . <Entity name: 3807d830>) (100 . "AcDbEntity") (67 . 1) (410 . "Лист 12") (8 . "__Форматки") (48 . 100.0) (100 . "AcDbBlockReference") (66 . 1) (2 . "Штамп угловой форма 3") (10 836.0 5.00000000000003 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Oleg T вне форума  
 
Автор темы   Непрочитано 28.05.2021, 21:16
#9
Алёшка


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


Цитата:
Сообщение от РастОК Посмотреть сообщение
Ну а больше по теме: определитесь в каком виде вы хотите видеть это "извлечение данных"?
Я создал этих три блока в разных пространствах, попробовал извлечь данные отметив галками все предлагаемые поля. В результате в "извлечённых данных" не увидел ни где упоминания о пространстве в котором объект расположен, хотя присутствуют и три координаты, и имя файла и даже путь к файлу...
Заподозрил, что возможно интересующую меня информацию можно получить в атрибут, созданный в блоке, и в результате "извлечь данные" уже с ним.. но как правильно создать поле с искомым? Я не знаю, потому и любопытствую...

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Oleg T Посмотреть сообщение
: (entget (car (entsel)))
Укажите объект: ((-1 . <Entity name: 3807f030>) (0 . "INSERT") (5 . "4F43") (330 . <Entity name: 3807d830>) (100 . "AcDbEntity") (67 . 1) (410 . "Лист 12") (8 . "__Форматки") (48 . 100.0) (100 . "AcDbBlockReference") (66 . 1) (2 . "Штамп угловой форма 3") (10 836.0 5.00000000000003 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Вот сейчас вообще ничего непонятно было, можно поподробнее, что тут к чему?
Алёшка вне форума  
 
Непрочитано 29.05.2021, 00:59
#10
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Вот сейчас вообще ничего непонятно было, можно поподробнее, что тут к чему?
если введете в комстроке акада код
Код:
[Выделить все]
  (entget (car (entsel)))
и выберите свой блок, то это и увидите - dxf коды (группы) с информацией об примитиве. В частности 410 : layout tab name. А дальше дело техники - написать надстройку, которая будет выбирать блоки по определенным критериям и обновлять у них скрытый атрибут с именем лейаута - если руками это делать не хотите.
Сергей812 вне форума  
 
Автор темы   Непрочитано 30.05.2021, 15:24
#11
Алёшка


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
если введете в комстроке акада код
Код:
[Выделить все]
  (entget (car (entsel)))
и выберите свой блок, то это и увидите - dxf коды (группы) с информацией об примитиве. В частности 410 : layout tab name. А дальше дело техники - написать надстройку, которая будет выбирать блоки по определенным критериям и обновлять у них скрытый атрибут с именем лейаута - если руками это делать не хотите.
здорово-то как... не порекомендуете ли достойную книжку по Lisp?
Алёшка вне форума  
 
Непрочитано 30.05.2021, 16:01
1 | #12
Сергей812


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
достойную книжку по Lisp?
"AutoLISP и Visual LISP в среде AutoCAD" от Полещука - как источник ключевых слов для поиске в инете)

----- добавлено через 35 сек. -----
и информации везде полно, включая и тут на форуме
Сергей812 вне форума  
 
Непрочитано 30.05.2021, 23:08
1 | #13
LenidSN


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


Можно в VBA
Код:
[Выделить все]
     Dim bl As AcadBlockReference
    Dim OwnerID As LONG_PTR
    Dim tempObj As AcActiveSpace
    
    OwnerID = bl.ObjectID
    Set tempObj = ThisDrawing.ObjectIdToObject(OwnerID)
LenidSN вне форума  
 
Непрочитано 31.05.2021, 08:53
#14
Oleg T


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
не порекомендуете ли достойную книжку по Lisp
Ещё можно с древней книжки Бугрименко начать:
http://kappasoft.narod.ru/info/acad/lisp/a_lisp.htm
Oleg T вне форума  
 
Непрочитано 31.05.2021, 17:01
#15
maratovich


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
PS: В примере сказано о трёх объектах, но это, разумеется допущение для простоты, а в реальности листов могут быть десятки, документов десятки, объектов на каждом листе по нескольку...
Конечная цель не понятна, сдаётся мне что она совершенно не связана с извлечением данных.
Приложите пример что есть и какой результат нужен.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 04.06.2021, 21:19
#16
Алёшка


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
Конечная цель не понятна, сдаётся мне что она совершенно не связана с извлечением данных.
Приложите пример что есть и какой результат нужен.
Конечная цель по моему замыслу связана с извлечением данных непосредственно.
Это создание перечня всех документов входящих в набор DWG файлов и попутный контроль заполнения основных надписей и полей с нумерацией листов.

Чуть детальней:
Имеется дин. блок с атрибутами - рамка чертежа,
Имеется блок с атрибутами - основная надпись,
Имеется дин. блок с подписями сотрудников...
Во все эти блоки, вижу необходимость добавить атрибут, который будет хранить пространство в котором он расположен.

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

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Oleg T Посмотреть сообщение
Ещё можно с древней книжки Бугрименко начать:
http://kappasoft.narod.ru/info/acad/lisp/a_lisp.htm
Спасибо огромное, изучил, весьма познавательно, при этом кратко! Несмотря на то, что там очень много опечаток, по видимому являющихся следствием распознания печатного текста чем-то вроде FineReader
Алёшка вне форума  
 
Непрочитано 04.06.2021, 21:35
1 | #17
Кулик Алексей aka kpblc
Moderator

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


Offtop: Что-то у меня подозрения, что достаточно изучить понятие подшивки и начать с ним работать...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.06.2021, 21:39
#18
Алёшка


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


Цитата:
Сообщение от Oleg T Посмотреть сообщение
Точно. У нас ведомость чертежей реализована чисто по-своему через лисп. ))
В списке блока точно указано его месторасположение

: (entget (car (entsel)))
Укажите объект: ((-1 . <Entity name: 3807f030>) (0 . "INSERT") (5 . "4F43") (330 . <Entity name: 3807d830>) (100 . "AcDbEntity") (67 . 1) (410 . "Лист 12") (8 . "__Форматки") (48 . 100.0) (100 . "AcDbBlockReference") (66 . 1) (2 . "Штамп угловой форма 3") (10 836.0 5.00000000000003 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Не могу не поделиться "достижением", после беглого ознакомления с творчеством Бугрименко:
конструкция: (cdr (assoc 410 (entget (car (entsel)))))
возвращает чисто имя пространства

Теперь надо осознать, как бы это хозяйство научиться вписывать в атрибут блока

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Offtop: Что-то у меня подозрения, что достаточно изучить понятие подшивки и начать с ним работать...
Вам не удастся помешать мне забивать мелкоскопом гвозди
Алёшка вне форума  
 
Непрочитано 04.06.2021, 22:45
#19
maratovich


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


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Конечная цель по моему замыслу связана с извлечением данных непосредственно.
1. Извлечение данных здесь вообще не причем - вы путаете понятия. Читайте справку Автокада - Извлечение данных.
2. То что вам надо это - Ведомость чертежей. См. ГОСТ
3. Как я и говорил задача совершенно другая.
4. Это надо в ветку - Программирование.
5. Или использовать готовое, но с получением всех ваших (причудливых) требований я не встречал.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 05.06.2021, 11:41
#20
Сергей812


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
Извлечение данных здесь вообще не причем - вы путаете понятия. Читайте справку Автокада - Извлечение данных.
скорее лишний костыль - если решать задачу программными методами, то информацию можно собрать напрямую.

тогда и не нужен будет
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Во все эти блоки, вижу необходимость добавить атрибут, который будет хранить пространство в котором он расположен.
но решать на лиспе задачу
Цитата:
Сообщение от Алёшка Посмотреть сообщение
Это создание перечня всех документов входящих в набор DWG файлов и попутный контроль заполнения основных надписей и полей с нумерацией листов.
попутно изучая лисп - это отважно) А это еще ТС не "обнаружил" - что без дополнительных телодвижений лисп работает только внутри документа.
Сергей812 вне форума  
 
Непрочитано 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,052


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

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

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

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для 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,295
Отправить сообщение для 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,052


Цитата:
Сообщение от Алёшка Посмотреть сообщение
А среди тех прочих данных окажутся данные о пространстве расположения конкретного блока? Будет понятно, в модели он, или в пространстве листа?
большая часть того, что в этой книге - можно сделать через 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,052


Цитата:
Сообщение от Алёшка Посмотреть сообщение
Код завёлся сразу после того, как я исключил из первой строки (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,052


Цитата:
Сообщение от Алёшка Посмотреть сообщение
или вам часто встречаются те, кто рождаются и сразу знают чё где лежит, да где что взять нужно, чтоб впервые встреченную задачу решать безошибочно и сразу? Везёт вам )))
т.е. вы даже не попытались загуглить - что за функция 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,052


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


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


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


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


Алёшка, зачем лиспом прикручивать блоку атрибут с пространством, когда можно тем же лиспом пройтись по всем целевым блокам всех пространств и собрать интересующую информацию в каком нужно формате для дальнейшего анализа? А если использовать ODBX, так и можно это делать пакетно.
koMon вне форума  
 
Непрочитано 09.06.2021, 10:16
#41
Boxa

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


Цитата:
Сообщение от 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,052


тыц от Кулика Алексея)
Сергей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