Сборка чертежей деталей в чертеж сборки

Автор Тема: Сборка чертежей деталей в чертеж сборки  (Прочитано 1581 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн intervrАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Добрый день! Решил поделиться небольшим кодом который написал для себя. Чтото наковырял по урокам, чтото додумал по справке.

Как работает:
Создаем чертеж. Вставляем вид сборки. Выбираем этот вид и запускаем правило. Скрытно открывается Сборка из вида и проходит по ней собирая все пути всех вхождений в список.
После этого,  по каждому пути из списка ищет файл чертежа этого вхождения и (если имеется чертеж) копируются все листы в созданный чертеж.

Кому-то может пригодиться, допиливать там есть что. У меня структура проектов такова, что в разных сборках много повторяемых нестандартных деталей. и выход проекта должен быть в одной pdf. Поэтому чтобы не плодить копии сделаны чертежи этих деталей в тех же папках  что и файлы деталей. В любом случае после этих действий я иногда еще вручную сортирую порядок чертежей.

Код - Visual Basic [Выбрать]
  1. Class ThisRule
  2.         Dim fName As String
  3.         Dim Name As String
  4.         Dim Path As String
  5.         Dim Names(1000) As String ' тут сомнительно..
  6.         Dim Count As Integer
  7.  
  8. Public Sub Main()
  9.         Dim oPartName As String 'файл сборки выбранного вида
  10.         Dim oAsmDoc As AssemblyDocument 'сборка из вида
  11.         'получаем имя файла сборки из вида
  12.         Dim oDrawDoc As DrawingDocument
  13.         oDrawDoc = ThisApplication.ActiveDocument
  14.         oPartName = oDrawDoc.SelectSet.Item(1).ReferencedFile.FullFileName
  15.  
  16.         'открываем сборку скрыто(потому что false)
  17.         oAsmDoc = ThisApplication.Documents.Open(oPartName, False)     
  18.         'проходим по всем входжениям и собираем список путей
  19.         Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences)
  20.        
  21.         'открываем файлы чертежей и копируем листы
  22.         For i = 0 To Count - 1
  23.                
  24.                 Path = Left$(Names(i), InStrRev(Names(i), "\"))'получение пути из полного имени
  25.                 fName = Right$(Names(i), Len(Names(i)) - InStrRev(Names(i), "\"))'получение имени файла без пути
  26.                 Name = Left$(fName, InStrRev(fName, ".") -1)'получение имени файла без пути и расширения
  27.                
  28.                 'вроде проверка наличия нужного файла чертежа
  29.                 Dim drawingFilename As String
  30.                 drawingFilename = ThisApplication.DesignProjectManager.ResolveFile(Path, Name + ".idw")
  31.  
  32.                 If drawingFilename <> "" Then
  33.                     Dim oDDoc As DrawingDocument
  34.                     Dim oSheet As Sheet
  35.                    
  36.                     oDDoc = ThisApplication.Documents.Open(drawingFilename, False)
  37.                         'копируем все листы
  38.                         For q = 1 To oDDoc.Sheets.Count'копируем все листы
  39.                                 Dim nSheet As Sheet
  40.                                 oSheet = oDDoc.Sheets.Item(q)
  41.                                 nSheet = oSheet.CopyTo(oDrawDoc)
  42.                                 nSheet.Name = Name
  43.                         Next
  44.                     oDDoc.Close
  45.                 End If
  46.         Next
  47.         oAsmDoc.Close
  48. End Sub
  49.  
  50.  
  51.  
  52. 'проход по деталям и подсборкам и внесение их полных путей в список имен.
  53. 'повторяющиеся имена пропускаются.
  54. Function TraverseAssembly(Occurrences As ComponentOccurrences)
  55.    Dim oOcc As ComponentOccurrence
  56.     For Each oOcc In Occurrences
  57.                 oName = oOcc.Definition.Document.FullFileName
  58.                 If Count = 0 Then
  59.                         Names(0) = oName
  60.                         Count = Count + 1
  61.                 Else
  62.                         Dim q As Integer
  63.                         q=0
  64.                         For i = 0 To Count
  65.                                 If Names(i)=oName Then
  66.                                         q=q+1          
  67.                                 End If
  68.                         Next
  69.                         If q = 0 Then
  70.                                 Names(Count) = oName
  71.                                 Count = Count + 1
  72.                         End If
  73.                 End If
  74.                
  75.             If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
  76.                 Call TraverseAssembly(oOcc.SubOccurrences)
  77.         End If
  78.     Next
  79. End Function
  80.  
  81. End Class
  82.  

вставлять в правило ilogic. Вообще пришлось писать потому что не нашел в интернете. Еще бы сделать обновление отдельных чертежей - бывают правки отдельных деталей и тогда во всех сборках эти правки нужны тоже. Код рабочий,но если знающие люди смогут чтото улучшить буду благодарен.

первый пост не судите строго)
« Последнее редактирование: 04-06-2019, 11:34:09 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
intervr,
Привествую на форуме и спасибо, что сразу поделился своим кодом. Небольшой код (< 300...500 строк) не нужно оформлять в виде спойлера. Во-первых, лишнее действие для просмотра кода. Во-вторых, код не виден незарегистрированным на форуме пользователям и соответственно не виден в RSS.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение