Come eseguire una regola Ilogic su più file ?

windreef

Utente Junior
professione: Progettista meccanico
software: Inventor 2026 ; Woodwork
regione: Toscana
Buongiorno , dovrei eseguire una regola Ilogic su molti file di tavole (Inv2023) , non posso inserire un trigger di evento nei file per due motivi , il primo che dopo dovrei toglierlo perchè il cliente non lo vuole (risolvibile facendo una copia dei file prima di aggiungere il trigger) , secondo motivo : effettivamente nel momento in cui apro il file ed inserisco il trigger posso tranquillamente lanciare la regola ed ho finito.
Mi chiedevo se esistesse una modalità batch o un'operazione pianificata . Ho trovato un app nello store Ilogic rule batch tool ma funziona fino al Inv 2022.
grazie a tutti
 

Catafratto

Utente Standard
professione: Disegnatore/progettista
software: Inventor 2024
regione: Veneto
Puoi fare una regola esterna ed attivare il trigger di evento sulle tavole idw, senza coinvolgere direttamente il disegno del cliente

1731666331497.png

Poi si tratta di aprire la tavola, aspettare che la regola faccia quello che deve fare e poi salvare, lì dipende dai numeri di tavole, come/dove sono posizionate/nominate ecc. ecc.
 

windreef

Utente Junior
professione: Progettista meccanico
software: Inventor 2026 ; Woodwork
regione: Toscana
Puoi fare una regola esterna ed attivare il trigger di evento sulle tavole idw, senza coinvolgere direttamente il disegno del cliente

Visualizza allegato 72657

Poi si tratta di aprire la tavola, aspettare che la regola faccia quello che deve fare e poi salvare, lì dipende dai numeri di tavole, come/dove sono posizionate/nominate ecc. ecc.
Ah ok grazie , non sapevo che anche i trigger di evento potessero essere impostati come esterni.

grazie mille
 

Zac69

Utente Standard
professione: Disegnatore
software: Inventor 2026
regione: Piemonte
Buongiorno a tutti, io ho un problema simile che avevo già postato ma che non aveva ricevuto risposte.
Molti clienti mi mandano i loro file in formato STEP. Io li apro e salvo, quindi ottengo IAM ed IPT che però non contengono le informazioni che mi servono per fare un preventivo di massima.
Mi sono creato due regole iLogic che lancio in sequenza: una mi calcola la lunghezza dell'IPT che ho aperto e l'altra mi chiede alcune informazioni che mi servono a compilare il Part Number.
Le due regole funzionano perfettamente se apro il singolo ipt o faccio doppio click (che è la stessa cosa).
E' possibile creare un comando che lancio che lancio da IAM in cui mi chiede di selezionare un IPT ed a quel punto mi lancia le due regole in sequenza su quel singolo file senza doverli aprire tutti uno ad uno?
Grazie a chi avrà la pazienza di rispondere
 

Cast16

Utente Standard
professione: Design Engineer
software: Inventor, Autocad, Solid Edge
regione: UK
E' possibile creare un comando che lancio che lancio da IAM in cui mi chiede di selezionare un IPT ed a quel punto mi lancia le due regole in sequenza su quel singolo file senza doverli aprire tutti uno ad uno?
Prova:

Codice:
Dim ruleName1 As String = "MyExternalRule1" 'Nome rule1
Dim ruleName2 As String = "MyExternalRule2"  'Nome rule1
Dim asm As AssemblyDocument = ThisDoc.Document

' Prompt the user to select a single part
Dim invApp As Inventor.Application = ThisApplication
Dim selectedObject As Object = invApp.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select a part")

If selectedObject IsNot Nothing AndAlso TypeOf selectedObject Is ComponentOccurrence Then
    Dim selectedPart As ComponentOccurrence = CType(selectedObject, ComponentOccurrence)
    Dim doc As Document = selectedPart.Definition.Document
    
    ' Run the first iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName1)
    
    ' Run the second iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName2)
    
    MessageBox.Show("Both rules executed successfully on the selected part.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show("No valid part selected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
 

Zac69

Utente Standard
professione: Disegnatore
software: Inventor 2026
regione: Piemonte
Prova:

Codice:
Dim ruleName1 As String = "MyExternalRule1" 'Nome rule1
Dim ruleName2 As String = "MyExternalRule2"  'Nome rule1
Dim asm As AssemblyDocument = ThisDoc.Document

' Prompt the user to select a single part
Dim invApp As Inventor.Application = ThisApplication
Dim selectedObject As Object = invApp.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select a part")

If selectedObject IsNot Nothing AndAlso TypeOf selectedObject Is ComponentOccurrence Then
    Dim selectedPart As ComponentOccurrence = CType(selectedObject, ComponentOccurrence)
    Dim doc As Document = selectedPart.Definition.Document
   
    ' Run the first iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName1)
   
    ' Run the second iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName2)
   
    MessageBox.Show("Both rules executed successfully on the selected part.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show("No valid part selected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
E' perfetto, funziona benissimo. Grazie mille.
Sai anche quale sia il comando che elimina la sostituzione di aspetto da inserire all'inizio della prima regola? In questo modo coloro la parte selezionata e so quali ho già fatto e quali no.
 

windreef

Utente Junior
professione: Progettista meccanico
software: Inventor 2026 ; Woodwork
regione: Toscana
E' perfetto, funziona benissimo. Grazie mille.
Sai anche quale sia il comando che elimina la sostituzione di aspetto da inserire all'inizio della prima regola? In questo modo coloro la parte selezionata e so quali ho già fatto e quali no.
Ciao , visto che lavori molto con gli step dei clienti, ti capita mai che ti arrivino con l'unita di misura in pollici e angolo radianti? A me praticamente sempre e nella conversione non c'è possibilità di cambiarli in automatico , ogni file devo andare nelle impostazioni e cambiarlo manualmente
 

Zac69

Utente Standard
professione: Disegnatore
software: Inventor 2026
regione: Piemonte
Ciao , visto che lavori molto con gli step dei clienti, ti capita mai che ti arrivino con l'unita di misura in pollici e angolo radianti? A me praticamente sempre e nella conversione non c'è possibilità di cambiarli in automatico , ogni file devo andare nelle impostazioni e cambiarlo manualmente
Succede sempre. Li non sto a perdere tempo: vado nelle impostazioni documento e li cambio.
Comunque, come diceva un amico programmatore: "se puoi farlo da comando, puoi farlo da codice".
Ma io non sono programmatore e mi arrabatto.
 

windreef

Utente Junior
professione: Progettista meccanico
software: Inventor 2026 ; Woodwork
regione: Toscana
Succede sempre. Li non sto a perdere tempo: vado nelle impostazioni documento e li cambio.
Si è quello che faccio anch'io , ma se ci fosse un automatismo sarebbe più veloce , quando lo devi fare su un centinaio di file rompe le scatole. Grazie e buon lavoro
 

Cast16

Utente Standard
professione: Design Engineer
software: Inventor, Autocad, Solid Edge
regione: UK
E' perfetto, funziona benissimo. Grazie mille.
Sai anche quale sia il comando che elimina la sostituzione di aspetto da inserire all'inizio della prima regola? In questo modo coloro la parte selezionata e so quali ho già fatto e quali no.
Forse bisogna vedere la tua prima regola per capire cosa vuoi ottenere...
Io non sono un programmatore ma sono sicuro qualcuno qui ti puo' aiutare.
 

Cast16

Utente Standard
professione: Design Engineer
software: Inventor, Autocad, Solid Edge
regione: UK
Si è quello che faccio anch'io , ma se ci fosse un automatismo sarebbe più veloce , quando lo devi fare su un centinaio di file rompe le scatole. Grazie e buon lavoro
Prova questo:

Codice:
'------- start of ilogic ------

'get input from user
oUnit = InputRadioBox("Select a units of measure type", "millimeter", "inch", True, "ilogic")

If oUnit = True Then
'set to millimeter
oUOM_1 = UnitsTypeEnum.kMillimeterLengthUnits
Else
'set to Inch
oUOM_1 = UnitsTypeEnum.kInchLengthUnits
              
End If

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

'Look at all of the files referenced in the open document
Dim docFile As Document
For Each docFile In openDoc.AllReferencedDocuments
                'look at only part files
                 If docFile.DocumentType = kPartDocumentObject Then
            'format  file name                   
                Dim FNamePos As Long
                FNamePos = InStrRev(docFile.FullFileName, "\", -1)                       
            Dim docFName As String
            docFName = Right(docFile.FullFileName, Len(docFile.FullFileName) - FNamePos)     
            'set length units
                docFile.UnitsOfMeasure.LengthUnits = oUOM_1
                'rebuild to update the display
                docFile.Rebuild
                End If
Next   
iLogicVb.UpdateWhenDone = True
 

windreef

Utente Junior
professione: Progettista meccanico
software: Inventor 2026 ; Woodwork
regione: Toscana
Prova questo:

Codice:
'------- start of ilogic ------

'get input from user
oUnit = InputRadioBox("Select a units of measure type", "millimeter", "inch", True, "ilogic")

If oUnit = True Then
'set to millimeter
oUOM_1 = UnitsTypeEnum.kMillimeterLengthUnits
Else
'set to Inch
oUOM_1 = UnitsTypeEnum.kInchLengthUnits
             
End If

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

'Look at all of the files referenced in the open document
Dim docFile As Document
For Each docFile In openDoc.AllReferencedDocuments
                'look at only part files
                 If docFile.DocumentType = kPartDocumentObject Then
            'format  file name                  
                Dim FNamePos As Long
                FNamePos = InStrRev(docFile.FullFileName, "\", -1)                      
            Dim docFName As String
            docFName = Right(docFile.FullFileName, Len(docFile.FullFileName) - FNamePos)    
            'set length units
                docFile.UnitsOfMeasure.LengthUnits = oUOM_1
                'rebuild to update the display
                docFile.Rebuild
                End If
Next  
iLogicVb.UpdateWhenDone = True
Magari lo metto come trigger di evento all'apertura file, grazie mille , più tardi provo
 

Zac69

Utente Standard
professione: Disegnatore
software: Inventor 2026
regione: Piemonte
Forse bisogna vedere la tua prima regola per capire cosa vuoi ottenere...
Io non sono un programmatore ma sono sicuro qualcuno qui ti puo' aiutare.

La prima regola è presa da un sito e mi da le 3 dimensioni di un profilato. Io prendo quella più lunga e dichiaro che quella è la "Lunghezza" (mi serve per calcolare quanti metri di quel profilato mi servono in tutto). Poi assegno il materiale ORO per farmi capire che quel profilato è già stato calcolato.
Il problema è che per vedere il colore oro, devo prima eliminare la sostituzione di aspetto che viene assegnato quando apri e salvi uno step e che viene assegnata alle singole parti.

Queste le ultime righe della regola:

'Scrive la misura massima nelle iProprierties del modello.
iProperties.Value("Custom", "Lunghezza") = maxLength.ToString("#.###")

iProperties.Material = "Oro"
 

windreef

Utente Junior
professione: Progettista meccanico
software: Inventor 2026 ; Woodwork
regione: Toscana
Quello funziona dal assembly. Cambia l'unità di tutte le parti in un click.
ah ok , io ho parti singole in una cartella che mi inviano i clienti , dovrei fare un assieme con tutte dentro, boh forse sarebbe comunque più veloce , a fare un assembly ci vuole poco. grazie
 

Zac69

Utente Standard
professione: Disegnatore
software: Inventor 2026
regione: Piemonte
La prima regola è presa da un sito e mi da le 3 dimensioni di un profilato. Io prendo quella più lunga e dichiaro che quella è la "Lunghezza" (mi serve per calcolare quanti metri di quel profilato mi servono in tutto). Poi assegno il materiale ORO per farmi capire che quel profilato è già stato calcolato.
Il problema è che per vedere il colore oro, devo prima eliminare la sostituzione di aspetto che viene assegnato quando apri e salvi uno step e che viene assegnata alle singole parti.

Queste le ultime righe della regola:

'Scrive la misura massima nelle iProprierties del modello.
iProperties.Value("Custom", "Lunghezza") = maxLength.ToString("#.###")

iProperties.Material = "Oro"

Ho riletto il codice e penso che il problema sia qui:

Try
targetAppearance = partDoc.Assets.Item("Clear - Blue")
Catch
Dim sourceAppearance As Asset = ThisApplication.AssetLibraries.Item("314DE259-5443-4621-BFBD-1730C6CC9AE9").AppearanceAssets.Item("InvGen-001-1-2") ' "Clear - Blue"
targetAppearance = sourceAppearance.CopyTo(partDoc)
End Try

Ho provato a metterlo come commento, ma il colore blu chiaro preimpostato rimane
 

Cast16

Utente Standard
professione: Design Engineer
software: Inventor, Autocad, Solid Edge
regione: UK
La prima regola è presa da un sito e mi da le 3 dimensioni di un profilato. Io prendo quella più lunga e dichiaro che quella è la "Lunghezza" (mi serve per calcolare quanti metri di quel profilato mi servono in tutto). Poi assegno il materiale ORO per farmi capire che quel profilato è già stato calcolato.
Il problema è che per vedere il colore oro, devo prima eliminare la sostituzione di aspetto che viene assegnato quando apri e salvi uno step e che viene assegnata alle singole parti.

Queste le ultime righe della regola:

'Scrive la misura massima nelle iProprierties del modello.
iProperties.Value("Custom", "Lunghezza") = maxLength.ToString("#.###")

iProperties.Material = "Oro"
Io preferirei non cambiare il materiale, ma solo apparenza nel assieme...
Questa regola aggiunge il cambio del colore dopo avere applicato le 2 regole (non cambia la parte):


Codice:
Dim ruleName1 As String = "1" 'Name of rule 1
Dim ruleName2 As String = "2" 'Name of rule 2


Dim topAsm As AssemblyDocument = ThisDoc.Document

' Prompt the user to select a single part
Dim invApp As Inventor.Application = ThisApplication
Dim selectedObject As Object = invApp.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select a part")

If selectedObject IsNot Nothing AndAlso TypeOf selectedObject Is ComponentOccurrence Then
    Dim selectedPart As ComponentOccurrence = CType(selectedObject, ComponentOccurrence)
    Dim doc As Document = selectedPart.Definition.Document

    ' Run the first iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName1)

    ' Run the second iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName2)

    ' Change the color of the part to R255 G143 B47
    Dim trans As Transaction = ThisApplication.TransactionManager.StartTransaction(topAsm, "Set Custom Color")
    Try
        ' Create or retrieve the appearance asset
        Dim customAppearance As Asset
        Try
            customAppearance = topAsm.Assets.Item("CustomColor")
        Catch ex As Exception
            customAppearance = topAsm.Assets.Add(AssetTypeEnum.kAssetTypeAppearance, "Generic", "CustomColor")
        End Try

        ' Modify the color of the asset
        Dim colorAssetValue As ColorAssetValue = customAppearance.Item("generic_diffuse")
        colorAssetValue.Value = invApp.TransientObjects.CreateColor(255, 143, 47)

        ' Apply the appearance to the selected part
        selectedPart.Appearance = customAppearance

        MessageBox.Show("Both rules executed and part color updated successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Catch ex As Exception
        MessageBox.Show("Error setting part color: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Finally
        trans.End()
    End Try
Else
    MessageBox.Show("No valid part selected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If

Comunque si potrebbe fare in modo lanciare tutto in un click su tutti i file, senza dover selezionare le parti uno ad uno.
 

Zac69

Utente Standard
professione: Disegnatore
software: Inventor 2026
regione: Piemonte
Io preferirei non cambiare il materiale, ma solo apparenza nel assieme...
Questa regola aggiunge il cambio del colore dopo avere applicato le 2 regole (non cambia la parte):


Codice:
Dim ruleName1 As String = "1" 'Name of rule 1
Dim ruleName2 As String = "2" 'Name of rule 2


Dim topAsm As AssemblyDocument = ThisDoc.Document

' Prompt the user to select a single part
Dim invApp As Inventor.Application = ThisApplication
Dim selectedObject As Object = invApp.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select a part")

If selectedObject IsNot Nothing AndAlso TypeOf selectedObject Is ComponentOccurrence Then
    Dim selectedPart As ComponentOccurrence = CType(selectedObject, ComponentOccurrence)
    Dim doc As Document = selectedPart.Definition.Document

    ' Run the first iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName1)

    ' Run the second iLogic rule
    iLogicVb.Automation.RunExternalRule(doc, ruleName2)

    ' Change the color of the part to R255 G143 B47
    Dim trans As Transaction = ThisApplication.TransactionManager.StartTransaction(topAsm, "Set Custom Color")
    Try
        ' Create or retrieve the appearance asset
        Dim customAppearance As Asset
        Try
            customAppearance = topAsm.Assets.Item("CustomColor")
        Catch ex As Exception
            customAppearance = topAsm.Assets.Add(AssetTypeEnum.kAssetTypeAppearance, "Generic", "CustomColor")
        End Try

        ' Modify the color of the asset
        Dim colorAssetValue As ColorAssetValue = customAppearance.Item("generic_diffuse")
        colorAssetValue.Value = invApp.TransientObjects.CreateColor(255, 143, 47)

        ' Apply the appearance to the selected part
        selectedPart.Appearance = customAppearance

        MessageBox.Show("Both rules executed and part color updated successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Catch ex As Exception
        MessageBox.Show("Error setting part color: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Finally
        trans.End()
    End Try
Else
    MessageBox.Show("No valid part selected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If

Comunque si potrebbe fare in modo lanciare tutto in un click su tutti i file, senza dover selezionare le parti uno ad uno.

Grazie mille per la disponibilità. Messi insieme i codici e funziona.
 

Statistiche forum

Discussioni
59,382
Messaggi
507,068
Utenti registrati
111,788
Ultimo utente registrato
Gianmichele97

Staff online

Utenti online

Top