Полная версия этой страницы: 
Извлечение данных из блоков
  
 
 
  Здравствуйте форумчане. Проектирую тепловые сети в том числе тепловые камеры. Как создать блоки оборудования с атрибутами в том числе и труб которые можно вытягивать разобрался. Теперь хочу автоматически собирать спецификацию. Чертежи выполняем пока в 2д, поэтому все оборудование и фасонина разбиты на блоки с двумя а то и тремя видами. То есть к примеру у тройника есть блок "тройник ду200 вид сверху" и блок "тройник ду200 вид спереди". Сделано для того что на разных сечениях и разрезах тепловых камер был нужный вид оборудования. При извлечении данных из блоков автокад создает спецификацию и группирует атрибуты по названию блока. В моих блоках атрибуты внутри блоков одинаковые для одного фасонного элемента или к примеру крана. Вопрос - как заставить автокад объединять блоки в таблице спецификации по содержимому атрибута? Или есть какие то другие способы собрать спецификацию из набора блоков?
 
 
 
  Composter
  17.5.2019, 14:59
  
 
  ну как вариант сделать  невидимый атрибут "название для спецификации" и сортировать по нему.
 
 
 
 
  В этом то весь и вопрос. Как сортировать?
 
 
 
  Composter
  17.5.2019, 15:33
  
 
  так вроде на странице 5/8 есть графа "combine identical rows" самая верхняя, если поставить галочку то должно проссумировать 
еще вот есть script на vba который суммириует в excel одинаковые строки
 
 
 
 
  А можно поподробнее? Желательно со скринами.
 
 
 
  Composter
  18.5.2019, 16:49
  
 
  да вроде и так должно было понятно
но все равно скрины прикладываю
слева с галкой спарва без
 
 
 
 
  Эта галочка как раз и объединяет по названию блока. И получается что один и тот же элемент в спецификацию попадает дважды.
 
 
 
  Composter
  19.5.2019, 12:18
  
 
  дважды один и тот же элемент не попадает в таблицу. два элемента с разным названием но одинаковыми другими параметрами будут учитываться по отдельности даже если отключить отображение имени элемента.
в таком случае вижу несколько выходов из ситуации для вас
- экспортировать без имени в ексель, и с помощью моего скрипта выше обрабатывать в екселе. можно еще экпорт длеть с помощью след скрипты ,если конечно все данные только в атрибутах 
http://forum.abok.ru/index.php?s=&show...t&p=1337385- написать лисп для этого дела, который будеь извлекать атрибуты и сортировать и суммировать.
 
 
 
 
  Не обязательно атрибуты, комментария к блоку достаточно, если дружите хоть немного с 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
 
 
 
  Ацетилен
  18.5.2020, 18:10
  
 
 
 
  Ацетилен
  21.5.2020, 12:16
  
 
  Ну и по тем значениям атрибутов, которые установлены по умолчанию, теперь тоже можно считать.
Нажмите для просмотра прикрепленного файла
  
   
  Для просмотра полной версии этой страницы, пожалуйста, 
пройдите по ссылке.