Vytisknout stránku | Zavřít okno

Sestava - export dxf

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: iLogic a ETO
Popis fóra: Funkce a makra iLogic, Inventor Engineering to Order (ETO), automatizace a konfigurace výrobků
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=28793
Datum vytištění: 01.kvě.2026 v 11:21


Téma: Sestava - export dxf
Odeslal: michalkopriva
Předmět: Sestava - export dxf
Datum odeslání: 02.kvě.2019 v 09:52
Zdravím,
mám vytvořenou sestavu ve které mám formulář do kterého se vkládá konfigurace podle které se následně upraví jednotlivé díly. Potřeboval bych vytvořit pravidlo v sestavě na export všech jednotlivých dílů do dxf po změně parametrů. Nevěděl by někdo jak na to? Pořád mi vyskakuje chyba :-/ Děkuji :-)

Edit:
V každém dílu mám vytvořené pravidlo na export dxf, to funguje správně.
Ale když v sestavě použiji v pravidle "iLogicVb.RunRule("Side_A:1", "Dxf")", tak mi vyskočí chyba:
 
"Error in rule: Dxf, in document: 19-109157.ipt
Forkert parameter. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))"



Odpovědi:
Odeslal: michalkopriva
Datum odeslání: 03.kvě.2019 v 10:36
Nikdo neví? :-/


Odeslal: Navara
Datum odeslání: 03.kvě.2019 v 10:54
Budu se opakovat, ale nepoužívejte interní pravidla na úlohy typu export. Na to použijte externí pravidlo a to potom ze sestavy zavolejte.
Pokud máte chybu v tom vašem pravidle, tak ho sem dejte, ať se na to můžeme podívat.
 
 


Odeslal: michalkopriva
Datum odeslání: 03.kvě.2019 v 12:27
V iLogicu jsem amatér, učím se :-)
Jaký je v tom rozdíl? :-)

Vytvořil jsem tedy externí pravidlo:

Dim fSett As String
    fSett = "FLAT PATTERN DXF?AcadVersion=2004&RebaseGeometry=True&OuterProfileLayer=0&OuterProfileLayerColor=0;0;0&InteriorProfilesLayer=0&InteriorProfilesLayerColor=0;0;0&InvisibleLayers=IV_ARC_CENTERS;IV_TANGENT;IV_ROLL;IV_ROLL_TANGENT;IV_ALTREP_BACK;IV_ALTREP_FRONT;IV_FEATURE_PROFILES_DOWN;IV_FEATURE_PROFILES;IV_TOOL_CENTER_DOWN;DIGI_MARKER_TOOL_1;DIGI_MARKER_TOOL_2;IV_BEND;IV_BEND_DOWN" 'Nastaveni exportu
    Dim fSname As String
    fSname = Parameter("FilesStorage") & "JSMMU-" & Parameter("type_of_connection") & "-B-" & Parameter("length_B") & ".dxf" 'Nastaveni ulozeni cesta+nazev
ThisApplication.ActiveDocument.ComponentDefinition.DataIO.WriteDataToFile( fSett, fSname) 'Save s nastavenim fSett a do cesty fSname
'    MessageBox.Show("DXF was save: " & fSname,"Flat Pattern", MessageBoxButtons.OK) 'Message report


Když toto externí pravidlo spustím v .ipt ručně, tak se dxf vygeneruje. Jen nevím, jak ho správně vyvolat ze sestavy...



Odeslal: Navara
Datum odeslání: 06.kvě.2019 v 09:52
Já bych to řešil tak, že si z aktivní sestavy zjistím všechny plechové součásti a na nich spustím export do DXF.
 
Sub Main()
 'Assembly document must be active
 Dim oAssembly As AssemblyDocument = ThisDoc.Document
 'Iteration thru all referenced douments of active assembly document
 For Each document As Document In oAssembly.AllReferencedDocuments
  'Process only sheetmetal parts
  If document.DocumentType = DocumentTypeEnum.kPartDocumentObject And
   document.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
   ExportDxf(document)
  End If
 Next
 MsgBox("Hotovo")
End Sub
'Constant value for all exports
Dim fSett As String = "FLAT PATTERN DXF?AcadVersion=2004&RebaseGeometry=True&OuterProfileLayer=0&OuterProfileLayerColor=0;0;0&InteriorProfilesLayer=0&InteriorProfilesLayerColor=0;0;0&InvisibleLayers=IV_ARC_CENTERS;IV_TANGENT;IV_ROLL;IV_ROLL_TANGENT;IV_ALTREP_BACK;IV_ALTREP_FRONT;IV_FEATURE_PROFILES_DOWN;IV_FEATURE_PROFILES;IV_TOOL_CENTER_DOWN;DIGI_MARKER_TOOL_1;DIGI_MARKER_TOOL_2;IV_BEND;IV_BEND_DOWN"                  'Nastaveni exportu
Sub ExportDxf(sheetmetalPart As PartDocument)
 Try
  'Reference to part parameters
  Dim parameters = sheetmetalPart.ComponentDefinition.Parameters
  'Get parameter values
  Dim fileStorage As String = GetParameterValue("FilesStorage", parameters)
  Dim typeOfConnection As String = GetParameterValue("type_of_connection", parameters)
  Dim lengthB As String = GetParameterValue("length_B", parameters)
  'Build target file name
  Dim fSname As String = String.Format("{0}JSMMU-{1}-B-{2}.dxf", fileStorage, typeOfConnection, lengthB) 'Nastaveni ulozeni cesta+nazev

  'Export flatpattern to DXF
  sheetmetalPart.ComponentDefinition.DataIO.WriteDataToFile(fSett, fSname) 'Save s nastavenim fSett a do cesty fSname
  '    MessageBox.Show("DXF was save: " & fSname,"Flat Pattern", MessageBoxButtons.OK) 'Message report
 Catch ex As Exception
  MsgBox(String.Format("Export se nezdaril.{2}FileName: {0}{2}Exception{1}", sheetmetalPart.FullFileName, ex, vbCrLf))
 End Try
End Sub
Function GetParameterValue(paramName As String, parameters As Parameters) As String
 Try
  'Returns parameter value as string if exists
  Return parameters(paramName).Value.ToString()
 Catch
  'Parameter with given name can't be found
  Return ""
 End Try
End Function
 
Co se týká použití externích pravidel, tak tam je ten důvod hlavně jednoduchá, centrální změna chování bez nutnosti aktualizovat obsah souborů.
 


Odeslal: michalkopriva
Datum odeslání: 06.kvě.2019 v 11:16
Super Smile
Nevím, jestli jsem to udělal správně (celé jsem to vložil do pravidla sestavy), ale funguje mi to.
Budu si u vás muset zařídit nějaké školení Smile
Moc děkuji za řešení.

To mě ani nenapadlo, ale je to celkem logické Big smile

Jen tedy v mém případě mi to teď funguje bez dalších pravidel v jednotlivých dílech...
Moc tomu tedy nerozumím :-D
Jak říkám, jsem amatér :-)


Odeslal: michalkopriva
Datum odeslání: 11.zář.2019 v 10:26
Bylo by možné upravit toto pravidlo pro export, abych mohl zvolit (určit), pro které díly se mají exportovat dxf? Některé díly (držáky pro motory, nakupované díly, atd...) se nemění a není tedy potřeba znovu a znovu generovat nová dxf...

Seznam dílů pro export by byl v hlavní sestavě (buď v pravidle nebo v parametrech).

Je něco takového možné? :-)
Děkuji


Odeslal: Navara
Datum odeslání: 15.zář.2019 v 17:33
Možné to samozřejmě je, ale tady už je to spíš otázka na správu dat. Obvyklý postup je, že se data zařadí do Vaultu a při schválení se vygeneruje DXF. Pokud se ten díl nezmění, nedojde k novému schválení a DXF se znova netvoří. Doporučil bych vám zaměřit se spíš tímto směrem.
Pokud to z nějakého důvodu není možné, tak je potřeba doplnit ještě kontrolu na to, že daný díl je/není v nějakém seznamu dílů určených pro export.
Kontrola patří podle mě sem 
...
 For Each document As Document In oAssembly.AllReferencedDocuments
  'Process only sheetmetal parts
  If document.DocumentType = DocumentTypeEnum.kPartDocumentObject And
   document.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}"  And IsDocumentForExport(document)  Then
   ExportDxf(document)
...
Jak tu kontrolu provést je už ale zcela jiná otázka a souvisí s tím, jak budete definovat ten seznam. (Hodnota iVlastnosti, seznam čísel součástí, je to knihovní díl, umístění v adresáři, ...). A tohle už za vás nikdo nevyřeší.



Odeslal: michalkopriva
Datum odeslání: 25.zář.2019 v 13:57
Děkuji, Vault bychom uvítali, ale zatím to není možné.

Nejsem schopný rozchodit kontrolu souborů pro export :-/

Je možné do pravidla vypsat názvy souborů (např.: 19-109321.ipt) pro export? Z celé sestavy jich bude cca 5, tak bych to nebyl takový problém.

Děkuji


Odeslal: JDoubrava
Datum odeslání: 25.zář.2019 v 15:15
Jestli jsem to správně pochopil tak by mělo stačit vytvořit testovací funkci "IsDocumentForExport" vracející hodnotu True pokud dokument součásti splňuje nějakou podmínku, třeba že jeho jméno je uvedené v nějakém seznamu nebo se jmenuje "PlechXXXXX".



Vytisknout stránku | Zavřít okno