Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Диалог специалистов АВОК _ AutoCAD for HVAC _ Извлечение данных из блоков

Автор: mvsdf 17.5.2019, 14:54

Здравствуйте форумчане. Проектирую тепловые сети в том числе тепловые камеры. Как создать блоки оборудования с атрибутами в том числе и труб которые можно вытягивать разобрался. Теперь хочу автоматически собирать спецификацию. Чертежи выполняем пока в 2д, поэтому все оборудование и фасонина разбиты на блоки с двумя а то и тремя видами. То есть к примеру у тройника есть блок "тройник ду200 вид сверху" и блок "тройник ду200 вид спереди". Сделано для того что на разных сечениях и разрезах тепловых камер был нужный вид оборудования. При извлечении данных из блоков автокад создает спецификацию и группирует атрибуты по названию блока. В моих блоках атрибуты внутри блоков одинаковые для одного фасонного элемента или к примеру крана. Вопрос - как заставить автокад объединять блоки в таблице спецификации по содержимому атрибута? Или есть какие то другие способы собрать спецификацию из набора блоков?

Автор: Composter 17.5.2019, 14:59

ну как вариант сделать невидимый атрибут "название для спецификации" и сортировать по нему.

Автор: mvsdf 17.5.2019, 15:07

В этом то весь и вопрос. Как сортировать?

Автор: Composter 17.5.2019, 15:33

так вроде на странице 5/8 есть графа "combine identical rows" самая верхняя, если поставить галочку то должно проссумировать
еще вот есть script на vba который суммириует в excel одинаковые строки

 summirovani_massiva.zip ( 16,07 килобайт ) : 6
 

Автор: mvsdf 18.5.2019, 16:27

А можно поподробнее? Желательно со скринами.

Автор: Composter 18.5.2019, 16:49

да вроде и так должно было понятно
но все равно скрины прикладываю
слева с галкой спарва без

 

Автор: mvsdf 18.5.2019, 20:15

Эта галочка как раз и объединяет по названию блока. И получается что один и тот же элемент в спецификацию попадает дважды.

Автор: Composter 19.5.2019, 12:18

дважды один и тот же элемент не попадает в таблицу. два элемента с разным названием но одинаковыми другими параметрами будут учитываться по отдельности даже если отключить отображение имени элемента.

в таком случае вижу несколько выходов из ситуации для вас
- экспортировать без имени в ексель, и с помощью моего скрипта выше обрабатывать в екселе. можно еще экпорт длеть с помощью след скрипты ,если конечно все данные только в атрибутах http://forum.abok.ru/index.php?s=&showtopic=58658&view=findpost&p=1337385
- написать лисп для этого дела, который будеь извлекать атрибуты и сортировать и суммировать.

Автор: Ацетилен 17.5.2020, 4:07

Не обязательно атрибуты, комментария к блоку достаточно, если дружите хоть немного с VBA.

Неудачная загрузка. Вам запрещено загружать такой тип файлов, поэтому текстом дам-

----------------------------------------------------------------------------------------------------------------

Dim elem As Object

Dim n As Long
Dim x As Long

Dim item As Object
Dim bl As AcadBlock
Dim lay As AcadLayer

Dim prop As Variant
Dim s1 As String
Dim s2 As String

Dim BlocksNames() As String
Dim BlocksCount() As Long

Dim Ex As Excel.Application
Dim Book As Excel.Workbook


ReDim BlocksNames(0)
ReDim BlocksCount(0)


For Each elem In ThisDrawing.ModelSpace

If elem.EntityName = "AcDbBlockReference" Then

s2 = elem.Layer

Set lay = ThisDrawing.Layers.item(s2)

If lay.LayerOn = True And lay.Freeze = False Then


s1 = elem.Name

Set bl = ThisDrawing.Blocks.item(s1)

prop = bl.Comments

If prop <> "" Then

If BlocksNames(0) = "" Then

BlocksNames(0) = prop
BlocksCount(0) = 1
prop = ""


Else

For x = 0 To UBound(BlocksNames)

If prop = BlocksNames(x) Then

BlocksCount(x) = BlocksCount(x) + 1

prop = ""

End If

Next x


If prop <> "" Then

ReDim Preserve BlocksNames(UBound(BlocksNames) + 1)

BlocksNames(UBound(BlocksNames)) = prop

ReDim Preserve BlocksCount(UBound(BlocksCount) + 1)

BlocksCount(UBound(BlocksCount)) = 1

prop = ""

End If

End If

End If

End If


End If

Next elem


If BlocksNames(0) <> "" Then

Set Ex = New Excel.Application
Ex.Visible = True

Set Book = Ex.Workbooks.Add

For x = 0 To UBound(BlocksNames)

Book.Sheets(1).Cells(x + 1, 1).Value = BlocksNames(x)
Book.Sheets(1).Cells(x + 1, 2).Value = BlocksCount(x)

Next x

End If

-----------------------------------------------------------------


Данный код подсчитывает блоки с одинаковыми комментариями на включённых и не замороженных слоях, имена блоков при этом могут быть любые. После запускается Эксель и данные экспортируются в тудой. В проекте VBA должна быть подключена объектная библиотека Эксель.

Tools->References->Microsoft Excel xx.x Object Library

Автор: Ацетилен 17.5.2020, 5:19

 Подсчёт_блоков.rar ( 8,96 килобайт ) : 9


Версия подключённой библиотеки - 14.0

Автор: Ацетилен 18.5.2020, 18:10

Подправил немножко

 Подсчёт_блоков.rar ( 8,78 килобайт ) : 10

Автор: Ацетилен 21.5.2020, 12:16

Ну и по тем значениям атрибутов, которые установлены по умолчанию, теперь тоже можно считать.

 Подсчёт_блоков.rar ( 11,31 килобайт ) : 21

Русская версия Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)