Zobrazit plnou verzi příspěvku: Sestava - export dxf

michalkopriva
02.05.2019, 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.iptForkert parameter. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))"
michalkopriva2019-05-03 08:23:06

michalkopriva
03.05.2019, 10:36
Nikdo neví? :-/

Navara
03.05.2019, 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.  

michalkopriva
03.05.2019, 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 reportKdyž toto externí pravidlo spustím v .ipt ručně, tak se dxf vygeneruje. Jen nevím, jak ho správně vyvolat ze sestavy...

Navara
06.05.2019, 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. [code]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 exportsDim 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 exportuSub 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 TryEnd SubFunction 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 TryEnd Function[/code] 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ů. 

michalkopriva
06.05.2019, 11:16
Super 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í Moc děkuji za řešení.To mě ani nenapadlo, ale je to celkem logické 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 :-DJak říkám, jsem amatér :-)

michalkopriva
11.09.2019, 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

Navara
15.09.2019, 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 [code]... 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)...[/code]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ší.


michalkopriva
25.09.2019, 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

JDoubrava
25.09.2019, 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".