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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Извлечение атрибутов блока в определенном порядке

Извлечение атрибутов блока в определенном порядке

Ответ
Поиск в этой теме
Непрочитано 20.08.2019, 09:03 #1
Извлечение атрибутов блока в определенном порядке
Raylond
 
Регистрация: 05.02.2016
Сообщений: 19

Доброго времени суток.
Появилась задача, к которой не знаю как подойти.
Имеется чертеж с большим количеством блоков с атрибутами, значения которых уникальны в рамках этого чертежа.
Необходимо ускорить следующий процесс: поочередное копирование атрибутов этих блоков в произвольном порядке в файл Excel.
При работе через извлечение данных - все получается, но в произвольном порядке.
По сути нужно реализовать следующее - тыкнул на блок -> значение атрибута записалось в ячейку открытого файла эксель и ячейка сдвинулась вправо, тыкнул на следующий -> операция повторилась.
Можно ли это сделать через макросы или еще каким-то образом?
Подскажите пожалуйста в какую сторону воевать.
Заранее спасибо.
Просмотров: 2299
 
Непрочитано 20.08.2019, 09:19
1 | #2
Кулик Алексей aka kpblc
Moderator

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


Насколько я помню, для работы _.attout важен порядок выбора блоков. Только непонятно, почему вопрос размещен в "Дин.блоках"?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.08.2019, 09:27
#3
baksconstructor


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


А если атрибутов несколько ?
baksconstructor вне форума  
 
Непрочитано 20.08.2019, 09:46
#4
Boxa

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


Цитата:
Сообщение от Raylond Посмотреть сообщение
При работе через извлечение данных - все получается, но в произвольном порядке.
Ну так может убрать эту произвольность... например добавив атрибут с номером, благо нумераторов навалом, и выполнять сортировку в извлечении по этому атрибуту.
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 20.08.2019, 09:58
#5
Сергей812


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


как появляются блоки на чертеже, как задаются им атрибуты? Порою проще контролировать процесс на "старте", чем придумывать костыли.
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.08.2019, 10:02
#6
Raylond


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Только непонятно, почему вопрос размещен в "Дин.блоках"?
Прошу прощения, если неправильно разместил тему. При необходимости прошу модераторов перенести в соответствующий раздел.


Цитата:
Сообщение от Boxa Посмотреть сообщение
Ну так может убрать эту произвольность... например добавив атрибут с номером, благо нумераторов навалом, и выполнять сортировку в извлечении по этому атрибуту.
Произвольность не убрать. Есть на чертеже тысяча одинаковых блоков с разными значениями атрибута "Имя" (пусть имя будет просто номерами от 1 до 1000). Есть таблица в экселе с № строк. Для каждой из № строк порядок атрибутов "Имя" будет различным.
Raylond вне форума  
 
Непрочитано 20.08.2019, 10:04
#7
trir


 
Регистрация: 18.12.2010
Сообщений: 3,437


извлечь и отсортировать
trir вне форума  
 
Непрочитано 20.08.2019, 10:07
#8
Сергей812


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Произвольность не убрать. Есть на чертеже тысяча одинаковых блоков с разными значениями атрибута "Имя" (пусть имя будет просто номерами от 1 до 1000). Есть таблица в экселе с № строк. Для каждой из № строк порядок атрибутов "Имя" будет различным.
чего вы так маскируете конечную цель сего действа.. никто здесь не украдет вашу идею) Если в блоке есть один атрибут "Имя", то порядок атрибутов для данного блока не играет никакой роли.
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.08.2019, 10:25
#9
Raylond


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
как появляются блоки на чертеже, как задаются им атрибуты? Порою проще контролировать процесс на "старте", чем придумывать костыли.
Блоки на чертеже появляются отдельно и вручную. Атрибуты задаются также вручную.
Если интересна прикладная часть. Пытаюсь ускорить раскладки кабелей на больших объектах. Есть такой способ прокладки - методом трасс. Каждый участок кабельной трассы - имеет свою уникальную маркировку.
1. Создается чертеж с этими самыми трассами, каждому участку присваивается уникальное имя. Для создания чертежа разработаны простейшие динамические блоки. По сути, каждый участок - просто линия с мультивыноской.
2. Через извлечение данных создается таблица с перечнем всех этих участков и их длиной.
3. Через эксель и аксесс реализована связь данных различных таблиц.
4. Исполнитель берет кабель и начинает в таблице экселя поочереди заполнять эти участки. Этот процесс повторяется многократно. Именно его хочется ускорить, потому что сейчас это происходит так: в автокаде тыкаем в блок, копируем руками из свойств - вставляем в эксель.

Потом формируется ряд выходных документов, но это не так важно.
Raylond вне форума  
 
Непрочитано 20.08.2019, 10:42
1 | #10
maratovich


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Можно ли это сделать через макросы или еще каким-то образом?
Вот так что ли ?
Вложения
Тип файла: zip Блок.zip (698.6 Кб, 21 просмотров)
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 20.08.2019, 10:46
#11
Raylond


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
Вот так что ли ?
Да. Очень похоже!



Цитата:
Сообщение от Сергей812 Посмотреть сообщение
чего вы так маскируете конечную цель сего действа.. никто здесь не украдет вашу идею) Если в блоке есть один атрибут "Имя", то порядок атрибутов для данного блока не играет никакой роли.
Нисколько не маскирую. Не хотел грузить профильными проблемами и попытался объяснить на пальцах. Написал сообщение подробнее, оно на модерации.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от maratovich Посмотреть сообщение
Вот так что ли ?
Вы не могли бы меня направить? Через что это реализуется и что можно почитать по данному вопросу?
Raylond вне форума  
 
Непрочитано 20.08.2019, 10:54
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 3,437


Цитата:
Через что это реализуется и что можно почитать по данному вопросу?
ObjectARX
trir вне форума  
 
Непрочитано 20.08.2019, 11:05
#13
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,289
Отправить сообщение для VitalyAF с помощью Skype™


Цитата:
Сообщение от Raylond Посмотреть сообщение
Имя" (пусть имя будет просто номерами от 1 до 1000).
...нафига? Я т.д., что имя должно оставаться именем, добавьте атрибут какой-нить типа number,
по нему потом отсортируете при ивлечении данных, его же (номер) можно и в табл. засунуть, удобнее читать будет, на чертеже находить
как номер поз. ...имхо
VitalyAF вне форума  
 
Непрочитано 20.08.2019, 11:11
#14
Сергей812


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


Цитата:
Сообщение от trir Посмотреть сообщение
ObjectARX
у maratovich через COM сделано скорее всего) Можно и из VBA экселя стучаться в акад, например - для данной задачи ObjectARX абсолютно избыточен.

Offtop:
Цитата:
Сообщение от VitalyAF Посмотреть сообщение
...нафига? Я т.д., что имя должно оставаться именем, добавьте атрибут какой-нить типа number,
вы хоть читайте посты, прежде чем лезть других учить)
Цитата:
Сообщение от Raylond Посмотреть сообщение
Есть на чертеже тысяча одинаковых блоков с разными значениями атрибута "Имя"
Сергей812 вне форума  
 
Непрочитано 20.08.2019, 11:12
#15
maratovich


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Через что это реализуется и что можно почитать по данному вопросу?
Ну... это на VB6.
Если есть призвание писать проги, то начните с изучения Lisp или VBA. Если нет, то лучше не засорять мозг, чтобы потом не исплеваться.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 20.08.2019, 11:15
#16
trir


 
Регистрация: 18.12.2010
Сообщений: 3,437


Цитата:
у maratovich через COM сделано скорее всего) Можно и из VBA экселя стучаться в акад, например - для данной задачи ObjectARX абсолютно избыточен.
зато смешнее

Цитата:
Ну... это на VB6.
я даже поверить не смог - это какого года?
trir вне форума  
 
Непрочитано 20.08.2019, 11:17
#17
maratovich


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


Цитата:
Сообщение от trir Посмотреть сообщение
зато смешнее
В отличие от других - это работает
Offtop:
Цитата:
Сообщение от trir Посмотреть сообщение
это какого года?
1978
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 20.08.2019, 11:22
#18
Raylond


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


Куда-то делось сообщение... Прикладной смысл таков. Я проектирую системы электроснабжения очень немаленьких объектов. Одной из задач является раскладка огромного числа кабелей.
Есть такой способ - прокладка методом трасс. Смысл в том, что каждому физическому отрезку кабельной трассы (куча металлоконструкций, на которых лежат кабели) присваивается уникальный номер. Далее для каждого кабеля перечисляются эти номера в порядке физической прокладки кабеля. Что реализовано сейчас:
1. Рисуется чертеж с кабельными трассами. Каждый участок выполнен динамическим блоком с изменяемой длиной. Имеет уникальный атрибут номера.
2. Через извлечение данных формируется таблица с перечнем этих трасс и соответствующими длинами.
3. Человек, раскладывающий кабели создает таблицу в экселе и начинает для каждого кабеля по очереди заполнять графы таблицы: в первом столбце - маркировка кабеля (тоже уникальная), в последующих столбцах - пресловутые отрезки трассы в соответствии с п.1;
4. Далее через костыли и подпорки обрабатываются данные в экселе, формируется кабельный журнал, считается длина и есть еще ряд планов по развитию этого безобразия.

Именно п.3 хочется ускорить. На данный момент человек ручками выбирает блок, копирует из него атрибут "имя", переходит в эксель и вставляет в ячейку. Считаем - минимум 4 действия.

Для информации - количество участков трасс - тысячи, количество кабелей - иногда десятки тысяч.
Raylond вне форума  
 
Непрочитано 20.08.2019, 11:23
#19
Сергей812


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


Цитата:
Сообщение от trir Посмотреть сообщение
зато смешнее
зато VBA в экселе доступно "из коробки" - для начинающих самое то) А если втянется в программирование - там уже выберет нормальный язык)
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.08.2019, 11:28
#20
Raylond


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
зато VBA в экселе доступно "из коробки" - для начинающих самое то) А если втянется в программирование - там уже выберет нормальный язык)
Мне собственно и интересно, на чем это можно сделать. Как Вы понимаете, профиль мой далек от программирования, но тот же эксель использую очень активно. VBA собирался осваивать как раз для развития тех вещей, которые делаю в экселе.
Но задача, описанная в теме - приоритетная.
Если ее реально реализовать через VBA - это прекрасно. Из пушки по воробьям стрелять нет никакого желания.
Raylond вне форума  
 
Непрочитано 20.08.2019, 11:29
#21
trir


 
Регистрация: 18.12.2010
Сообщений: 3,437


Это всё делается через БД: Map 3D, FDO
жалко только, что FDO не рисует 3D/4D объекты
trir вне форума  
 
Непрочитано 20.08.2019, 11:36
#22
Сергей812


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


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

1. В экселе ALT-F11 - вызываете редактор VBA
2. В меню Tools/Referenses находите и подключаете AutoCAD 20xx Type Library
3. В коде макроса Excel:

Код:
[Выделить все]
Dim lAcadApp As AcadApplication
Set lAcadApp = GetObject(, "AutoCAD.Application")
Dim lCurrDoc As AcadDocument
Set lCurrDoc = lAcadApp.ActiveDocument
И далее переменная lCurrDoc будет аналогом ThisDrawing в многочисленных примерах кода VBA для акада в инете.

----- добавлено через ~2 мин. -----
p.s. И попросите администрацию форума (через красный значок-треугольник) перенести тему в раздел "Программирование". К динблокам она никакого отношения не имеет)

И если знаете английский, то подчерпнете много интересного из книги

Последний раз редактировалось Сергей812, 20.08.2019 в 12:05.
Сергей812 вне форума  
 
Непрочитано 20.08.2019, 11:58
#23
maratovich


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Именно п.3 хочется ускорить. На данный момент человек ручками выбирает блок, копирует из него атрибут "имя", переходит в эксель и вставляет в ячейку. Считаем - минимум 4 действия.
Приложите пример чертежа с блоками и пример таблички в экселе.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 20.08.2019, 12:15
#24
Raylond


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
Приложите пример чертежа с блоками и пример таблички в экселе.
Прилагаю. Исходник в dwg и приблизительный итог, который хотелось бы получить
Вложения
Тип файла: dwg
DWG 2007
Блоки трасс.dwg (113.0 Кб, 17 просмотров)
Тип файла: xlsx Итог.xlsx (11.1 Кб, 13 просмотров)
Raylond вне форума  
 
Непрочитано 20.08.2019, 12:28
#25
maratovich


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
приблизительный итог, который хотелось бы получить
Да, тут только руками указывать в каком порядке получать. Полным автоматом не получится.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 20.08.2019, 12:38
#26
trir


 
Регистрация: 18.12.2010
Сообщений: 3,437


Цитата:
Да, тут только руками указывать в каком порядке получать. Полным автоматом не получится.
нужно строить граф и обходить все ветви
trir вне форума  
 
Автор темы   Непрочитано 20.08.2019, 13:22
#27
Raylond


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
Да, тут только руками указывать в каком порядке получать. Полным автоматом не получится.
В любом случае руками, я и не хочу это полностью автоматизировать. Может неправильно объяснил - задача только лишь ускорить этот процесс. В начале предложили через attout делать. И оно работает. И очень похоже на то, что нужно. Но получается я создаю для каждой ветви новый файл и потом их тяжело обрабатывать.

Пытаюсь разобраться с VBA.. Конечно с наскока без знаний тут тяжело.
Raylond вне форума  
 
Непрочитано 20.08.2019, 13:29
#28
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,289
Отправить сообщение для VitalyAF с помощью Skype™


Цитата:
Сообщение от Raylond Посмотреть сообщение
Пытаюсь разобраться с VBA.. Конечно с наскока без знаний тут тяжело.
Я т.д., что для VBA 1000 объектов много, и на нескольких сотнях уже будут тормоза.
VitalyAF вне форума  
 
Автор темы   Непрочитано 20.08.2019, 13:38
#29
Raylond


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


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Я т.д., что для VBA 1000 объектов много, и на нескольких сотнях уже будут тормоза.
Насколько я понимаю, VBA будет обрабатывать только те объекты, которые будут выбраны (по аналогии с attout). Их для каждой позиции будет не так много.
Raylond вне форума  
 
Непрочитано 20.08.2019, 14:04
#30
Сергей812


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Пытаюсь разобраться с VBA.. Конечно с наскока без знаний тут тяжело.
книжку из п.21 смотрите) Там и справка, и примеры сразу.

Цитата:
Сообщение от Raylond Посмотреть сообщение
VBA будет обрабатывать только те объекты, которые будут выбраны
метод GetEnity - выбираете блоки-кабели в той последовательности, в который они должны быть представлены на листе. Даже COM-интерфейс (если из экселя работать) успеет за ручным вводом - если сотрудники у вас по 100+ объектов в сек не выбирают, конечно)
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.08.2019, 14:19
#31
Raylond


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


Спасибо всем большое. Буду изучать. Тему попросил перенести.
Raylond вне форума  
 
Непрочитано 20.08.2019, 15:03
#32
Melx


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Куда-то делось сообщение... Прикладной смысл таков. Я проектирую системы электроснабжения очень немаленьких объектов. Одной из задач является раскладка огромного числа кабелей.
Есть такой способ - прокладка методом трасс. Смысл в том, что каждому физическому отрезку кабельной трассы (куча металлоконструкций, на которых лежат кабели) присваивается уникальный номер. Далее для каждого кабеля перечисляются эти номера в порядке физической прокладки кабеля. Что реализовано сейчас:
1. Рисуется чертеж с кабельными трассами. Каждый участок выполнен динамическим блоком с изменяемой длиной. Имеет уникальный атрибут номера.
2. Через извлечение данных формируется таблица с перечнем этих трасс и соответствующими длинами.
3. Человек, раскладывающий кабели создает таблицу в экселе и начинает для каждого кабеля по очереди заполнять графы таблицы: в первом столбце - маркировка кабеля (тоже уникальная), в последующих столбцах - пресловутые отрезки трассы в соответствии с п.1;
4. Далее через костыли и подпорки обрабатываются данные в экселе, формируется кабельный журнал, считается длина и есть еще ряд планов по развитию этого безобразия.

Именно п.3 хочется ускорить. На данный момент человек ручками выбирает блок, копирует из него атрибут "имя", переходит в эксель и вставляет в ячейку. Считаем - минимум 4 действия.

Для информации - количество участков трасс - тысячи, количество кабелей - иногда десятки тысяч.
На форуме четыре решения по трассам и КЖ:
https://forum.dwg.ru/showthread.php?t=128427
https://forum.dwg.ru/showthread.php?t=57484
https://forum.dwg.ru/showthread.php?t=141086&page=3
https://forum.dwg.ru/showthread.php?t=138086

Начать думаю стоит с их разбора.
Melx вне форума  
 
Непрочитано 20.08.2019, 16:28
#33
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,289
Отправить сообщение для VitalyAF с помощью Skype™


Цитата:
Сообщение от Raylond Посмотреть сообщение
Насколько я понимаю, VBA будет обрабатывать только те объекты, которые будут выбраны
Я проводами в Autocad MEP занимаюсь с 2000-го года, ~19-ть лет на всех Autocad начиная с 2000-ой версии, так вот могу доложить,
что относительно небольшой объект - 9-ти этажное здание ~350 комм. портов еле-еле шевелится только! на маркировке кабелей и портов.
Причём каждый этаж в отдельном файле... В голом акаде пытаться делать это - безумие...
Я вас предупредил, а дальше дело ваше...
VitalyAF вне форума  
 
Автор темы   Непрочитано 20.08.2019, 16:57
#34
Raylond


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


Именно из-за проблемы тормозов четыре решения форума мне не очень подходят.
У нас над объектом может работать приличное количество проектировщиков.
Соответственно раскладки кабелей, как правило, выполняются по системам.
То есть массив данных в связке Автокад-эксель в процессе раскладки одного кабельного журнала не очень большой.
А потом средствами СУБД вообще без участия автокада можно обрабатывать общий массив данных из большого количества разных кабельных журналов. Подключать дополнительные библиотеки со сведениями о сечениях, диаметрах и массах кабелей, анализировать заполняемость кабельных металлоконструкций и т.д.
У нас сейчас основной объем делается вообще вручную. Поэтому сверхзадач не ставлю. Нужно прорабатывать постепенно.
Raylond вне форума  
 
Непрочитано 20.08.2019, 17:08
#35
Сергей812


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Нужно прорабатывать постепенно.
логично, потихоньку уменьшать затраты подручной местной автоматизацией - чтобы появилась возможность двигаться дальше. Но сам подход неправильный, если планируете все-таки не стандартными средствами акада обходится, а переходить на программные. Для программного способа кабель-блок вообще не нужен, тем более если планируете использовать СУБД. Сильно упрощенно написал в этом посте.
Сергей812 вне форума  
 
Непрочитано 20.08.2019, 17:14
1 | #36
maratovich


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


Raylond
Если не получится освоить программирование - вот программа, которая показана на видео.
Сделано с минимальными требованиями за минимальный срок.
Вложения
Тип файла: zip AtriBlocksetup.zip (3.16 Мб, 100 просмотров)
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 20.08.2019, 18:21
#37
Raylond


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
Raylond
Если не получится освоить программирование - вот программа, которая показана на видео.
Сделано с минимальными требованиями за минимальный срок.

Спасибо огромное. Как минимум возьму за основу если получится разобраться.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Но сам подход неправильный,
Возможно, но пока приходится обходится тем, на что хватает опыта и мозгов
Raylond вне форума  
 
Непрочитано 20.08.2019, 19:16
1 | #38
Сергей812


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


Голый функционал (Excel->COM->Acad):
1. Заполнение начинается с активной ячейки листа в момент вызова макроса.
2. ESC прерывает программу.
3. Программа прощает один промах при выборе объекта, но два промаха (или правой кнопки мыши) подряд приводит к переходу к новому кабелю (строке).
4. Версия и разрядность акада не играет роли, подключать ничего дополнительно не надо в Reference.
5. Нет проверки подключения к акаду - когда будете дорабатывать - дополните.
6. Код дополнил подробными комментариями - может еще кто-нибудь примкнет в наш клан программистов-самоучек, посмотрев - как несложно все это делается в базовых вещах)

Код:
[Выделить все]
Option Explicit

' Декларируем API функцию (64-битный офис, для 32-битного нужно будет поправить)
Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As LongPtr) As Integer


' Получение атрибутов в указанном порядке
Public Sub GetAttrs()
  ' Получаем ссылку на акад
  Dim lAcadApp As Object
  Set lAcadApp = GetObject(, "AutoCAD.Application")
  ' Получаем ссылку на активный документ
  Dim lCurrDoc As Object
  Set lCurrDoc = lAcadApp.ActiveDocument
  ' Получаем активный лист книги
  Dim lActiveSheet As Worksheet
  Set lActiveSheet = ThisWorkbook.ActiveSheet
  ' Получаем адрес активной стартовой ячейки
  Dim lStartCell As Range
  Set lStartCell = lActiveSheet.Application.ActiveCell
  ' Индексы строки и столбца
  Dim lIndRow As Long: lIndRow = lStartCell.Row
  Dim lIndColumn As Long: lIndColumn = lStartCell.Column
  ' Объявляем переменные
  Dim lAcadEnt As Object, lPick As Variant
  Dim lAcadBR As Object, lIsNewRow As Boolean
  Dim lAttrs As Variant, I1 As Integer
  On Error Resume Next
  ' Переключаемся на акад
  AppActivate lAcadApp.Caption
  ' Запрашиваем блоки в бесконечном цикле
  Do While (True)
    ' Если акад готов к общению
    If (lAcadApp.GetAcadState.IsQuiescent) Then
      ' Запрашиваем очередной блок-кабель
      lCurrDoc.Utility.GetEntity lAcadEnt, lPick, vbCr & "Выберите кабель:"
      ' Проверка - если ничего не было выбрано или отмена
      If (Err.Number <> 0) Then
        ' Сбрасываем обработчик
        Err.Clear
        ' Если была нажата Esc
        If (GetAsyncKeyState(&H1B)) Then
          lCurrDoc.Utility.Prompt vbCr & "Работа завершена"
          Exit Do
        Else
          If (lIsNewRow) Then
            ' Переходим на начало следующего кабеля (строки)
            lIndRow = lIndRow + 1
            lIndColumn = lStartCell.Column
            lIsNewRow = False
          Else
            ' Взводим флаг признака возможной новой строки
            lIsNewRow = True
          End If
        End If
      Else
        lIsNewRow = False
        ' Пытаемся привести к вставке блока
        Set lAcadBR = lAcadEnt
        ' Если не получилось
        If (lAcadBR Is Nothing) Then
          lCurrDoc.Utility.Prompt vbCr & "Выбран не блок!"
        Else
          ' Если блок имеет атрибуты
          If (lAcadBR.HasAttributes) Then
            ' Получаем массив атрибутов
            lAttrs = lAcadBR.GetAttributes
            ' В цикле по полученному массиву атрибутов
            For I1 = LBound(lAttrs) To UBound(lAttrs)
              ' Если найден искомый атрибут
              If (lAttrs(I1).TagString = "Номер_трассы") Then
                ' Заносим значение атрибута на лист экселя
                lActiveSheet.Cells(lIndRow, lIndColumn).Value = lAttrs(I1).TextString
                ' Смещаемся на новый столбец
                lIndColumn = lIndColumn + 1
                ' Выходим из цикла по атрибутам
                Exit For
              End If
            Next I1
          End If
        End If
      End If
    End If
  Loop
  ' Очищаем ссылки на COM-объекты
  Set lCurrDoc = Nothing
  Set lAcadApp = Nothing
End Sub
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.08.2019, 19:25
#39
Raylond


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Голый функционал (Excel->COM->Acad):
На такую помощь даже не рассчитывал. Спасибо еще раз большое. За подробные комментарии отдельно.
Raylond вне форума  
 
Непрочитано 20.08.2019, 19:25
#40
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,289
Отправить сообщение для VitalyAF с помощью Skype™


Raylond
Слушайте, десятки тысяч кабелей, видимо гигантские объёмы, наверно крупный город или столица?
Соответственно контора солидная... Спрашивается, почему acad, да ещё голый?
Как вы собираетесь трассы, жгуты рисовать с пом. дин. блоков, откуда длины возьмете,
на 10-ках тыс. кабелей и просчёты длин будут исчисляться 10-ками бухт!
На практике длины корректируются до последнего момента, даже на автомате трудно посчитать...
Не пробовали намекнуть начальникам про специальный софт? ...
VitalyAF вне форума  
 
Автор темы   Непрочитано 20.08.2019, 19:35
#41
Raylond


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


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Raylond
Слушайте, десятки тысяч кабелей, видимо гигантские объёмы, наверно крупный город или столица?
Соответственно контора солидная... Спрашивается, почему acad, да ещё голый?
Как вы собираетесь трассы, жгуты рисовать с пом. дин. блоков, откуда длины возьмете,
на 10-ках тыс. кабелей и просчёты длин будут исчисляться 10-ками бухт!
На практике длины корректируются до последнего момента, даже на автомате трудно посчитать...
Не пробовали намекнуть начальникам про специальный софт? ...
Вопрос прекрасный. Это промышленные объекты, просто с очень большим количеством слаботочки, которая в нашей организации прокладывается электриками. Кроме АУПС и СС.
В конторе есть отдел, занимающий внедрением, но сейчас все топят за БИМ, 3D модели и так далее. Я тоже собираюсь этим заняться. Но начать хочу с перехода на Ревит, а на его базе уже развиваться дальше.
Чем больше контора, тем тяжелей перемены. При этом текущие задачи никуда не деваются и их нужно решать. Если освободить часть времени хотя бы кустарными методами, уже будет хорошо.
Если есть предложения со специальным софтом для прокладки кабелей, с удовольствием послушаю.
Пока нам презентовали решения от CSoft и Nanocad. Как уже говорил, хочу посмотреть на Revit MEP. Больше на вскидку ничего не вспоминиаю.
Raylond вне форума  
 
Непрочитано 20.08.2019, 19:43
#42
maratovich


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
3D модели и так далее
Это хорошо.
Цитата:
Сообщение от Raylond Посмотреть сообщение
Но начать хочу с перехода на Ревит
Это не хорошо.
Цитата:
Сообщение от Raylond Посмотреть сообщение
а на его базе уже развиваться дальше.
и не надейтесь.
Цитата:
Сообщение от Raylond Посмотреть сообщение
Если есть предложения со специальным софтом для прокладки кабелей, с удовольствием послушаю.
Голый AutoCAD с 3D динамическими блоками.
Цитата:
Сообщение от Raylond Посмотреть сообщение
хочу посмотреть на Revit
Посмотрите обязательно, то что это просто "красивый фантик" вы же не поверите. И обязательно попросите на презентации сделать именно то что вам надо, в 95% скажут - пока нет.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 20.08.2019, 19:44
#43
Сергей812


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
просто с очень большим количеством слаботочки, которая в нашей организации прокладывается электриками. Кроме АУПС и СС.
Не совсем понял - СС и обозначают Слаботочные Системы. Что же тогда у вас прокладывают электрики под видом слаботочки?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.08.2019, 19:46
#44
Raylond


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
И обязательно попросите на презентации сделать именно то что вам надо, в 95% скажут - пока нет.
Вот именно так и заканчивается 100% презентаций, обучений и разговоров.
Поэтому пока стараемся как можем.
На счёт ревита, посмотрю. Просто его знание сейчас требуют во всех вакансиях практически. Не просто так же наверно?

Цитата:
Сообщение от maratovich Посмотреть сообщение
Голый AutoCAD с 3D динамическими блоками.
Не могу себе пока что этого представить. Видимо мне придется пообжиться на форуме.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Не совсем понял - СС и обозначают Слаботочные Системы. Что же тогда у вас прокладывают электрики под видом слаботочки?)
Под СС имел в виду только сети связи.
Мы раскладываем всю автоматизацию. И локальную автоматику, и АСУ ТП. А систем, повторюсь, очень много.
Raylond вне форума  
 
Непрочитано 20.08.2019, 19:53
#45
maratovich


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Не просто так же наверно?
Те кто составляет вакансии вообще не понимают про что пишут. Кадровики которые дают им такое задание лишь только повторяют модное слово. Начальник которые дают задание найти, пытаются найти хоть кого-то умеющего потому, что их текущие работники не хотят сидеть на ревите, а модным трендом хочется хвастаться.
В реалии 85% проектировщиков вообще понятия не имеют о 3D, а тем более о всяких узконаправленных, полу рабочих ревитах.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 20.08.2019, 19:54
#46
Сергей812


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


Offtop:
Цитата:
Сообщение от Raylond Посмотреть сообщение
Просто его знание сейчас требуют во всех вакансиях практически
пишут - что будет преимуществом знание ревита. Единицы пишут - что надо обязательно знать, большинство просто про запас - в ревите максимум некоторые отделы работают или вообще только в мечтах руководства.


Цитата:
Сообщение от Raylond Посмотреть сообщение
Мы раскладываем всю автоматизацию. И локальную автоматику, и АСУ ТП. А систем, повторюсь, очень много.
Логично, промка же - технология на порядки сложнее жилья/общественно-социальных объектов)

----- добавлено через ~2 мин. -----
Кстати у вас что-то трехмерное/BIM и может пойти.. но не факт - что это обязательно ревит должен быть
Сергей812 вне форума  
 
Непрочитано 20.08.2019, 20:00
#47
trir


 
Регистрация: 18.12.2010
Сообщений: 3,437


Цитата:
А потом средствами СУБД вообще без участия автокада можно обрабатывать общий массив данных
ну так в AutoCAD Map 3D можно сразу подключится к СУБД и сразу вносить данные в них, вместе с геометрией!
trir вне форума  
 
Автор темы   Непрочитано 20.08.2019, 20:09
#48
Raylond


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Кстати у вас что-то трехмерное/BIM и может пойти.. но не факт - что это обязательно ревит должен быть
Сейчас это преимущественно выглядит так, что каждый работает в чем удобно. Архитекторам Ревит вроде подходит, ОВиК в Мэджикаде, что у технологов - честно говоря не знаю. Нам если металл рисовать (конструкции кабельные имею в виду), в принципе все равно.
Те, кто занимается БИМом в кучу это сводят. Но результат общий - модель, которая позволяет увидеть коллизии между смежными специальностями, не более. Это удобно и хорошо, но это - только часть работы.

----- добавлено через 40 сек. -----
Цитата:
Сообщение от trir Посмотреть сообщение
ну так в AutoCAD Map 3D можно сразу подключится к СУБД и сразу вносить данные в них, вместе с геометрией!
Значит - это один из ответов на вопрос "в какую сторону воевать?" ) Приму к сведению, спасибо.
Raylond вне форума  
 
Непрочитано 20.08.2019, 20:53
1 | #49
VitalyAF

инженер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,289
Отправить сообщение для VitalyAF с помощью Skype™


Raylond
В Autocad MEP, а так же в Revit всё, что что связано с электрикой служит придатком к воздуховодам, т.е. вкл./выкл. клапанов, кранов и прочих электро причиндалов к вентиляции. Причём поддерживается модель только на уровне кабелей, т.е. система ничего не знает о жилах (кроме силовых фаз) и контактах.
Следовательно вся слаботочка на уровне проводов, а не контактов. Например, один UTP кабель часто расшивают на две телефонные розетки, следовательно с маркировкой проблемы. То же самое про схемы, в Revit их просто нет, рисуй как хочешь, линиями например...
Расчётов, таблиц и библиотек по ГОСТ тоже нет... Шкафы, щиты на уровне прямоугольников с контактами, никаких 3D и отчётов...
У Autodesk нет софта подходящего для проводок на планах. Для архитекторов да, с большой натяжкой, они этот сырой софт будут точить ещё лет 20-ть...
Про acad и revit забудьте, только время потеряете... ( я т.д.) Есть правда сторонние производители софта для Revit в т.ч. для электриков, но проектировать придётся опять же не по ГОСТ и из их материалов и оборудования и у них же покупать... т.е. быть на привязи...
Цитата:
Сообщение от Raylond Посмотреть сообщение
Чем больше контора, тем тяжелей перемены.
Подходы к выбору и покупке софта должны соответствовать размерам, и чем больше контора, тем выше д.б. уровень
принятия решений, ваша задача не ковыряться в vba, lisp и прочих костылях, а дать руководству аргументированную инфу, со ссылкой на аналогичные солидные конторы, не берите вопрос на себя, иначе быстро окажетесь за бортом!...

Большие размеры конторы позволяют в т.ч. пригласить классных спецов из того же CSoft, пусть они занимаются подбором софта для вас, у них больше опыта и возможностей.

Будьте и сами в курсе, начиная поиск от общего к более конкретному, например, выясните список производителей подобного софта, сравните (сначала на youtub-е) их делая акцент на критически важных для вас моментах, например количество кабелей, PTC Creo легко формирует отчёт о сотнях! тысяч кабелей,
авто трассировка на уровне клемм и контактов и проч... Что бы ориентироваться в том, что вам будут предлагать...

Далее можно найти, установить и попробовать на ощупь конкретный софт... От общего к частному.

Последний раз редактировалось VitalyAF, 21.08.2019 в 10:18.
VitalyAF вне форума  
 
Непрочитано 21.08.2019, 09:53
1 | #50
MCAD


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


Цитата:
Сообщение от Raylond Посмотреть сообщение
Как Вы понимаете, профиль мой далек от программирования, но тот же эксель использую очень активно.
Тогда попробую продемонстрировать такое решение в нанокад или в СПДС GraphiCS.

Программирования "0" целых
Increase Size Decrease Size Нажмите для просмотра
http://www.youtube.com/watch?v=xh0HNuGPoFg&feature=youtu.be
MCAD вне форума  
 
Непрочитано 21.08.2019, 10:41
#51
Сергей812


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


Цитата:
Сообщение от MCAD Посмотреть сообщение
Программирования "0" целых
+ стоимость СПДС )
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.08.2019, 11:09
1 | 1 #52
Raylond


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


Еще раз всех благодарю. Очень много полезной информации.
Raylond вне форума  
 
Непрочитано 21.08.2019, 12:23
#53
MCAD


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
+ стоимость СПДС )
- затраты на программиста :-)

Offtop: Стоимость автокада Вас не смущает?
MCAD вне форума  
 
Непрочитано 21.08.2019, 12:50
#54
Сергей812


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


Цитата:
Сообщение от MCAD Посмотреть сообщение
- затраты на программиста :-)
удельные затраты зависят от количества мест рабочих, а лицензию надо на каждое место покупать)

Цитата:
Сообщение от MCAD Посмотреть сообщение
Стоимость автокада Вас не смущает?
он у ТС есть в наличии, насколько понимаю.. а так да - не дешев, поэтому на "периферии" давно уже переходят на аналоги)
Сергей812 вне форума  
 
Непрочитано 21.08.2019, 13:01
#55
MCAD


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
он у ТС есть в наличии, насколько понимаю.. а так да - не дешев, поэтому на "периферии" давно уже переходят на аналоги)
Ну судя по содержимому #41 скорее нужен нанокад ОПС, а СПДС GraphiCS это просто универсальный инструмент. При желании можно настроить и сделать практически всё. Причём на ходу и самим проектировщиком. Этот задачу я решал минут 15, потом ролик дольше делал. :-)
MCAD вне форума  
 
Непрочитано 21.08.2019, 13:17
#56
Сергей812


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


Цитата:
Сообщение от MCAD Посмотреть сообщение
Причём на ходу и самим проектировщиком. Этот задачу я решал минут 15
Ну я тоже проектировщик. Написание кода (п.38) заняло не больше времени) А люди без опыта будут часами что в код тыкаться, что в спдс)
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Извлечение атрибутов блока в определенном порядке

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Назначение свойств атрибутов блока без attsync Кулик Алексей aka kpblc Программирование 9 15.08.2017 06:32
Неудаляемый слой в атрибуте блока. Смысл синхронизации атрибутов? АлексЮстасу AutoCAD 4 04.06.2016 01:59
Фиксированная ориентация атрибутов блока при повороте блока hwd AutoCAD 16 15.11.2013 14:53
Сбой подсказок атрибутов динамического блока gool Динамические блоки 5 26.10.2011 09:29
Извлечение атрибутов блока и вставка атрибутов в формулу andery AutoCAD 38 15.06.2009 02:39