creazione automatica membri ipart ed esportazione step

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#1
Salve,
Ho realizzato delle parti ipart da cui genererò qualche migliaio di componenti ognuna.
Questo non é un problema, già fatto ,il problema é che dovrei realizzare lo step di ognuna per poterlo condividere con altri modellatori cad.
Attualmente metto tutte le parti generate in un assieme e a fatica mi sono costruito una regola ilogic che mi converte tutti i componenti di questo assieme in formato step.
Chiedo cortesemente se qualcuno é in grado di scrivere una regola che mi generi tutti i membri dell'ipart e che poi in automatico esporti in step ognuna di questi membri generati.
Io sono poco ferrato di vb e non ci riesco.
Mi fareste un gran piacere.
Grazie mille in anticipo
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#2
Sei fortunato perchè uno degli esempi nella guida alla programmazione fa quello che chiedi
(Help ina alto a dx > Risorse della community > Guida alla programmazione > Indice, cerca iPart > iPartFactory Object, in fondo alla pagina i link agli esempi.
Se hai già rudimenti iLogic non dovresti aver problemi

Codice:
Public Sub AddiPartOccurrence()
    ' Open the factory document invisible.
    Dim oFactoryDoc As PartDocument
    Set oFactoryDoc = ThisApplication.Documents.Open("C:\temp\iPartFactory.ipt", False)

    ' Set a reference to the component definition.
    Dim oCompDef As PartComponentDefinition
    Set oCompDef = oFactoryDoc.ComponentDefinition

    ' Make sure we have an iPart factory.
    If oCompDef.IsiPartFactory = False Then
        MsgBox "Chosen document is not a factory.", vbExclamation
        Exit Sub
    End If

    ' Set a reference to the factory.
    Dim oiPartFactory As iPartFactory
    Set oiPartFactory = oCompDef.iPartFactory

    ' Get the number of rows in the factory.
    Dim iNumRows As Integer
    iNumRows = oiPartFactory.TableRows.Count

    ' Create a new assembly document
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.Documents.Add(kAssemblyDocumentObject, , True)

    Dim oOccs As ComponentOccurrences
    Set oOccs = oDoc.ComponentDefinition.Occurrences

    Dim oPos As Matrix
    Set oPos = ThisApplication.TransientGeometry.CreateMatrix

    Dim oStep As Double
    oStep = 0#
    Dim iRow As Long

    ' Add an occurrence for each member in the factory.
    For iRow = 1 To iNumRows

        oStep = oStep + 10

        ' Add a translation along X axis
        oPos.SetTranslation ThisApplication.TransientGeometry.CreateVector(oStep, oStep, 0)

        Dim oOcc As ComponentOccurrence
        Set oOcc = oOccs.AddiPartMember("C:\temp\iPartFactory.ipt ", oPos, iRow)
    Next
End Sub
O meglio, non fa esattamente quello che vorresti ma con la tua regola già fatta sei a posto... questo programma mette in un nuovo assieme tutti gli elementi di una iPart
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#3
Grandissimo! Grazie mille! In realtà sono ancora molto neanderthal con ilogic e uso questa regola per esportare tutte le parti di un assieme in iges ,l'ho trovata su un forum che non mi ricordo al momento,ma funziona alla perfezione

'Define the open document
Dim openDoc As Document
openDoc = ThisDoc.Document

'define folder to create files in
oFolder = "C:\Temp\IGS Files"

'Check for the destination folder and create it if it does not exist
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If

'Look at all of the files referenced in the open document
Dim docFile As Document
For Each docFile In openDoc.AllReferencedDocuments
'format file name
Dim FNamePos As Long
'postion of last back slash
FNamePos = InStrRev(docFile.FullFileName, "\", -1)
Dim docFName As String
'file name with extension
docFName = Right(docFile.FullFileName, Len(docFile.FullFileName) - FNamePos)
'file name without extension
shortname = Left(docFName, Len(docFName) -4)

' Get the IGES translator Add-In.
Dim oIGESTranslator As TranslatorAddIn
oIGESTranslator = ThisApplication.ApplicationAddIns.ItemById _
("{90AF7F44-0C01-11D5-8E83-0010B541CD80}")
Dim oContext As TranslationContext
oContext = ThisApplication.TransientObjects.CreateTranslationContext
Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
If oIGESTranslator.HasSaveCopyAsOptions(docFile, oContext, oOptions) Then
' Set geometry type for wireframe.
' 0 = Surfaces, 1 = Solids, 2 = Wireframe
'oOptions.Value("GeometryType") = 1
' To set other translator values:
' oOptions.Value("SolidFaceType") = n
' 0 = NURBS, 1 = Analytic
' oOptions.Value("SurfaceType") = n
' 0 = 143(Bounded), 1 = 144(Trimmed)
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
Dim oData As DataMedium
oData = ThisApplication.TransientObjects.CreateDataMedium
'set file path for IGS file
oData.FileName = oFolder & "\" & shortname & ".igs"
oIGESTranslator.SaveCopyAs(docFile, oContext, oOptions, oData)
End If
Next


Secondo te basta che lo ce la aggiungo sotto nella stessa regola che hai postato tu per fare quello che chiedo? Al momento mi esporta in iges, ma se volessi esportare in step come potrei fare?Non mi piace molto iges perché sono files più pesanti di quelli in formato step. Ti ringrazio ancora
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#4
Unito in fretta un paio di esempi, mi pare funzioni...

Codice:
Public Sub AddiPartOccurrence()
    ' Open the factory document invisible.
    Dim oFactoryDoc As PartDocument
    Set oFactoryDoc = ThisApplication.Documents.Open("W:\Commesse\AIA\15030_Modifica zona lavatrici\Assieme2.C02.ipt", False)

    ' Set a reference to the component definition.
    Dim oCompDef As PartComponentDefinition
    Set oCompDef = oFactoryDoc.ComponentDefinition

    ' Make sure we have an iPart factory.
    If oCompDef.IsiPartFactory = False Then
        MsgBox "Chosen document is not a factory.", vbExclamation
        Exit Sub
    End If

    ' Set a reference to the factory.
    Dim oiPartFactory As iPartFactory
    Set oiPartFactory = oCompDef.iPartFactory

    ' Get the number of rows in the factory.
    Dim iNumRows As Integer
    iNumRows = oiPartFactory.TableRows.Count

    ' Create a new assembly document
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.Documents.Add(kAssemblyDocumentObject, , True)

    Dim oOccs As ComponentOccurrences
    Set oOccs = oDoc.ComponentDefinition.Occurrences

    Dim oPos As Matrix
    Set oPos = ThisApplication.TransientGeometry.CreateMatrix

    Dim oStep As Double
    oStep = 0#
    Dim iRow As Long

    ' Add an occurrence for each member in the factory.
    For iRow = 1 To iNumRows

        oStep = oStep + 10

        ' Add a translation along X axis
        oPos.SetTranslation ThisApplication.TransientGeometry.CreateVector(oStep, oStep, 0)

        Dim oOcc As ComponentOccurrence
        Set oOcc = oOccs.AddiPartMember("W:\Commesse\AIA\15030_Modifica zona lavatrici\Assieme2.C02.ipt", oPos, iRow)
        
    Next
    
    oDoc.Save
    
    Dim oRefDoc As Document
    For Each oRefDoc In oDoc.ReferencedDocuments
       Call ExportToSTEP(oRefDoc)
    Next
        
    
End Sub

Public Sub ExportToSTEP(oDoc As Document)
    
    Dim exportPath As String
    exportPath = "C:\STP\"

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
    Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

    If oSTEPTranslator Is Nothing Then
        MsgBox "Could not access STEP translator."
        Exit Sub
    End If

    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap
    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
        'oOptions.Value("Organization") = ""

        oContext.Type = kFileBrowseIOMechanism

        Dim oData As DataMedium
        Set oData = ThisApplication.TransientObjects.CreateDataMedium
        

        'format file name
        Dim FNamePos As Long
        'postion of last back slash
        FNamePos = InStrRev(oDoc.FullFileName, "\", -1)
        Dim docFName As String
        'file name with extension
        docFName = Strings.Right(oDoc.FullFileName, Len(oDoc.FullFileName) - FNamePos)
        'file name without extension
        Dim shortName As String
        shortName = Strings.Left(docFName, Len(docFName) - 4)

        oData.filename = exportPath & shortName & ".stp"

        Call oSTEPTranslator.SaveCopyAs(oDoc, oContext, oOptions, oData)
    End If
End Sub
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#5
Grazie mille,gentilissimo,appena sono in ufficio lo provo e poi ti faccio sapere. Grazie mille ancora per l'aiuto
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#6
Buongiorno,l'ho provata,ma prima inventor mi ha dato un messaggio che tutte le istruzioni sub e function devono essere posizionati dopo sub main(), allora l'ho rinominata sub main.
Quando l'ho riavviata inventor mi ha dato il messaggio che le istruzioni let e set non sono più supportate.... Boh! Dove sb Sbaglio? Io creo la regola dal menu ilogic di inventor e poi la faccio partire,devo farla girare in qualche altro modo?
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#7
Non era una regola iLogic ma un programma VBA (che è compatibile con iLogic); dai messaggi che hai penso tu possa semplicemente provare a rimuovere le istruzione set (sono prima di assegnazioni di variabili, tipo "set oPippo = ...")
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#8
Grazie mille, ma sono riuscito a farla girare usando l'editor integrato in inventor. Va come una scheggia. Grazie ancora
 

Zac69

Utente Standard
Professione: Disegnatore
Software: Inventor
Regione: Piemonte
#9
Vi faccio i complimenti per l'utilizzo della programmazione. Comunque sotto gli Strumenti di Inventor (dal menu start) c'è Programmazione operazioni.
Tra le operazioni pianificate puoi usare "Converti file", poi selezioni gli ipt di partenza e come file di arrivo lo step. Poi dai il via e fa tutto lui.
Ciao
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#10
Ciao, il problema é che l' ipt é uno solo, ma i membri di tale ipt sono migliaia, essendo un ipart. Convertendo quel file lì non me ne faccio niente, é tutti i suoi membri che bisogna generare e convertire contemporaneamente. la macro pubblicata sopra fa proprio quello
 

Zac69

Utente Standard
Professione: Disegnatore
Software: Inventor
Regione: Piemonte
#11
Ciao, il problema é che l' ipt é uno solo, ma i membri di tale ipt sono migliaia, essendo un ipart. Convertendo quel file lì non me ne faccio niente, é tutti i suoi membri che bisogna generare e convertire contemporaneamente. la macro pubblicata sopra fa proprio quello
Apri l'ipt ed apri sul browser l'elenco delle ipart (non entrare nella finestra di modifica ma visualizza semplicemente i membri sul nodo del browser). Poi selezioni tutti i membri > Tasto DX > Genera file. Ti ritrovi tutti gli ipt nella sottocartella che si crea sotto l'ipt base. Poi in automatico fai gli step di quella cartella.
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#12
Sono due strade percorribili ,ma la macro fa tutto in colpo solo
 

Zac69

Utente Standard
Professione: Disegnatore
Software: Inventor
Regione: Piemonte
#13
Sono due strade percorribili ,ma la macro fa tutto in colpo solo
Infatti la mia non era una critica e vi ho fatto i complimenti.
Semplicemente ho aggiunto un secondo modo manuale per chi non è programmatore e chissà che girando tra le possibilità delle operazioni pianificate qualcuno non trovi li la risposta già fatta al suo problema.
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#14
Ci mancherebbe! Grazie! Tra l'altro pianifica operazioni lo uso per convertire gruppi di tavole solitamente, non ci avevo pensato che poteva tornare utile anche per le esportazioni! Può tornare molto utile il tuo spunto,così magari uno che ha tanti ipt da convertire può fare tutto così. Granzie mille,ogni spunto é più che ben accetto. Grazie ancora
 

3olo

Utente Junior
Professione: libero professionista
Software: inventor 2011,2013, autocad
Regione: Trento
#15
riapro il thread perchè vorrei chiedere aiuto per fare una piccola miglioria alla macro:attualmente tale macro genera tutti i membri dell'ipart poi crea un assieme,mette tutti i membri generati in tale assieme, si ferma chiedendoti dove salvare tale assieme e con che nome,poi genera tutti gli step dei membri. Volevo chiedere se qualcuno è in grado di fare salvare in automatico l'assieme settandone un nome predefinito ,così basta lanciare la macro e lui si arrangia da inizio a fine senza bloccarsi.
Vi ringrazio molto