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

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

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

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

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


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


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


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


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

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

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


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


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


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


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


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

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


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


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


Цитата:
Сообщение от Сергей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
Сообщений: 33


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

----- добавлено через ~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
Сообщений: 9,404


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


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


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


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


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

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


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


Можно в 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,261


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


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


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


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


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 38,265


Offtop: Что-то у меня подозрения, что достаточно изучить понятие подшивки и начать с ним работать...
__________________

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


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


Цитата:
Сообщение от 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,470
Отправить сообщение для maratovich с помощью Skype™


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


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


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

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