Автоматическая выгрузка dxf из твердых тел детали

Автор Тема: Автоматическая выгрузка dxf из твердых тел детали  (Прочитано 15013 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 33
  • Карма: 0
Добрый день!
Возник насущный вопрос! Возможно ли в APi в автоматической режиме выгружать дхф в деталях содержащий несколько "твердых тел"?
Стандартно, инвентор просит создать из твердых тел отдельные детали и уже потом с них выгружать развертки, хотелось бы узнать, возможно ли выгрузка сразу разверток сразу из детали?


Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Возможно ли в APi в автоматической режиме выгружать дхф в деталях содержащий несколько "твердых тел"?
Ну это даже через пользовательский интерфейс невозможно для листового материала, а вы хотите что бы через API было

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

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

  • ADN OPEN
  • Сообщений: 33
  • Карма: 0
Если нет другого решения, то не могли бы подсказать, как программно создать из списка твердых тел "однотелые производные детали"?

Отмечено как Решение Александр Ривилис 24-01-2022, 16:24:17

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
как программно создать из списка твердых тел "однотелые производные детали"?
Как то так. Вызвать макрос при отдельно открытой многотельной листовой детали и наслаждаться.

Код - Visual Basic [Выбрать]
  1. Option Explicit
  2.  
  3. Sub SaveUnfoldSolidsToDXF()
  4. Dim pd As PartDocument: Set pd = ThisApplication.ActiveDocument
  5.  
  6. If pd.ComponentDefinition.Type <> kSheetMetalComponentDefinitionObject Then
  7. MsgBox ("Нужна листовая деталь.")
  8. Exit Sub
  9. End If
  10.  
  11. If pd.ComponentDefinition.SurfaceBodies.Count < 2 Then
  12. MsgBox ("Нужна многотельная деталь.")
  13. Exit Sub
  14. End If
  15.  
  16.  
  17. 'Перебор по количеству солидов
  18. Dim i As Integer
  19. For i = 1 To pd.ComponentDefinition.SurfaceBodies.Count
  20. 'Создать производную деталь невидимую для пользователя
  21. Dim derivePart As PartDocument: Set derivePart = ThisApplication.Documents.Add(kPartDocumentObject, ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject), false)  '!!!!
  22.  
  23. 'Подготовка к созданию производного компонента
  24. Dim dpc As DerivedPartUniformScaleDef
  25. Set dpc = derivePart.ComponentDefinition.ReferenceComponents.DerivedPartComponents.CreateUniformScaleDef(pd.fullFileName)
  26.  
  27. Dim j As Integer
  28.  
  29. 'Выделить текущий солид
  30. For j = 1 To pd.ComponentDefinition.SurfaceBodies.Count
  31. If i <> j Then dpc.Solids.Item(i).IncludeEntity = False
  32. Next
  33.  
  34. ' Создать производный компонент
  35. Call derivePart.ComponentDefinition.ReferenceComponents.DerivedPartComponents.Add(dpc)
  36.  
  37. 'конвертировать производную деталь в листовой материал Document.SubType to Sheetmetal
  38. derivePart.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}"
  39.  
  40. Dim sheetCompDef As SheetMetalComponentDefinition: Set sheetCompDef = derivePart.ComponentDefinition
  41. Dim baseSheetCompDef As SheetMetalComponentDefinition: Set baseSheetCompDef = pd.ComponentDefinition
  42.  
  43.  'Разрешить изменение толщины листовой детали
  44.    sheetCompDef.UseSheetMetalStyleThickness = False
  45.  
  46. ' Изменение толщины
  47.    Dim oThicknessParam As Parameter
  48.     Set oThicknessParam = sheetCompDef.Thickness
  49.   oThicknessParam.Value = baseSheetCompDef.Thickness.Value
  50.  
  51. 'Создание развертки
  52. Call sheetCompDef.Unfold
  53. 'Сохранить в DXF
  54.  ' Get the DataIO object.
  55.    Dim oDataIO As DataIO
  56.     Set oDataIO = derivePart.ComponentDefinition.DataIO
  57.  
  58.     ' Build the string that defines the format of the DXF file.
  59.    Dim sOut As String
  60.     sOut = "FLAT PATTERN DXF?AcadVersion=R12&OuterProfileLayer=Outer"
  61.  
  62.     ' Create the DXF file.
  63.    oDataIO.WriteDataToFile sOut, pd.File.fullFileName & "-" & CStr(i) & ".dxf"
  64.  
  65. 'Закрыть производную деталь без сохранения
  66. derivePart.Close (True)
  67.  
  68. Next
  69.  
  70. End Sub
  71.  

Оффлайн Bookvoed

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
Здравствуйте. Заранее извиняюсь за комментарии к посту пятилетней давности.
При выгрузке dxf(используя правило) получаются ровно в 10 раз меньше своего исходного размера, т.е. развертка детали в инвенторе 500х500, на чертеже dxf 50x50.
При выгрузке "руками" - всё в порядке.
Предположу, что dxf выгружается по определённому шаблону, но где искать - не знаю. В папке с шаблонами чертежей, деталей и пр. его нет.
Подскажите, куда копать?
Если долго мучиться - что-нибудь получится.

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

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

Оффлайн Bookvoed

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
Была такая мысль, проверял. Везде указаны мм, по умолчанию.
Если долго мучиться - что-нибудь получится.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Так вот сразу и не скажешь, а какой функцией экспорт делается?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
если что то настройки находятся
C:\Users\Public\Documents\Autodesk\Inventor 2022\Design Data\DWG-DXF

Оффлайн Bookvoed

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
Так вот сразу и не скажешь, а какой функцией экспорт делается?
Обычно выгружаю так:

Код - Visual Basic [Выбрать]
  1. fname = ThisDoc.Document.FullFileName.Remove(ThisDoc.Document.FullFileName.LastIndexOf("\")) & "\" & iProperties.Value("Project", "Part Number")  & " " & iProperties.Value("Project","Description") & ".dxf"
  2. oDataIO = ThisDoc.Document.ComponentDefinition.DataIO
  3. sOut = "FLAT PATTERN DWG?AcadVersion=2000&INTERIORPROFILESLayer=0&OUTERPROFILELayer=0&FEATUREPROFILESLayer=0&InvisibleLayers=IV_UNCONSUMEND_SKETCHES­;IV_ALTREP​_BACK;IV_ALTREP_FRONT;IV_ARC_CENTERS;IV_TOOL_CENTE​R_DOWN;IV_TOOL_CENTER;IV_ARC_CENTERS;IV_TANGENT;IV_BEND;IV_BEND_DOWN&SplineTolerance Double 0.01"
  4. oDataIO.WriteDataToFile(sOut, fname)
  5. ThisDoc.Save
Если долго мучиться - что-нибудь получится.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Попробуйте с опцией
AcadVersion=R12

Оффлайн Bookvoed

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
Попробуйте с опцией
AcadVersion=R12
Не помогло, к сожалению.
Если долго мучиться - что-нибудь получится.

Оффлайн Bookvoed

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
Bookvoed,
Тут что-то есть по этому поводу: https://knowledge.autodesk.com/support/inventor/troubleshooting/caas/sfdcarticles/sfdcarticles/DXF-export-of-a-sheet-metal-face-follows-original-document-unit-even-after-it-is-changed-in-Inventor.html
Насколько я понял, данный код проверяет наличие шаблона (flat pattern), и при его отсутствии, создаёт его.
Шаблон у меня подтягивается.
Если долго мучиться - что-нибудь получится.

Оффлайн Bookvoed

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
д
Возможно ли в принудительном порядке выгружать dxf в миллиметрах?
Т.е. выставлять единицы измерения перед конвертацией в dxf.
Извиняюсь за кривое цитирование.
Если долго мучиться - что-нибудь получится.