Risultati da 1 a 9 di 9
  1. #1
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    23
    Professione
    libero professionista
    Regione
    Trento
    Software
    inventor 2011,2013, autocad

    Predefinito scollegare membri ipart in automatico,macro

    Salve,
    Sbuffando e a fatica sojno riuscito a crearmi una macro in inventor I per la generazione automatica dei membri di una ipart e la relative conversiojne in formato step. La uso con soddisfazione da un po’ e fa tutto da sola. Nello specifico:
    -genera tutti I membri di un ipart;
    -li mette tutti in un assieme pilota e lo salva;
    -ltutti tali files vengono esportati in step e messi in una cartella .
    Spettacolo finora: però ho l’esigenza di creare migliaia di membri , tenere per me l’ipart e fornire solamente i membri ,però il problema è che ovviamente una volta aperti non trovano il collegamento con l’ipart(non essendoci) e danno un messaggio di errore a cui si deve dare ignora. Cio’ è molto fastidioso.
    Vorrei quindi modificare la macro in modo che ogni membro dell’ipart venga scollegato dall’ipart ,in modo da non aver più messaggi.
    Cercando nella guida di inventor API ho trovato una funzione che forse fa al caso mio:
    iPartMember.BreakLinkToFactory()
    Description
    Method that breaks the link to the parent factory and converts the iPart member to a derived part.

    Dovrebbe essere quest ache mi serve.
    Però essendo un po’ limitato io con VBA non sono in grado di inserirla nella mia macro in modo che funzioni.
    C’è qualche buon anima che mi può aiutare? Se non riuscite a modificare la macro mi basterebbe averne una nuova in cui magari si scolleghino tutti i componenti inseriti in un assieme.
    Vi prego aiutatemi che non so più dove sbattere la testa. Vi ringrazio tanto in anticipo



    Public Sub AddiPartOccurrence()
    ' Open the factory document invisible.
    Dim oFactoryDoc As PartDocument
    Set oFactoryDoc = ThisApplication.Documents.Open("c:\disegni inventor\prova ipart1.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(kAssemblyDocumentObj ect, , 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(oSt ep, oStep, 0)

    Dim oOcc As ComponentOccurrence
    Set oOcc = oOccs.AddiPartMember("C:\disegni inventor\prova ipart1.ipt", oPos, iRow)

    Next

    'oDoc.Save
    Call oDoc.SaveAs("C:\disegni inventor\assiemeCANCELLA.iam", True)

    Dim oRefDoc As Document
    For Each oRefDoc In oDoc.ReferencedDocuments
    iPartMember.BreakLinkToFactory (oRefDoc)
    Call ExportToSTEP(oRefDoc)

    Next


    End Sub

    Public Sub ExportToSTEP(oDoc As Document)

    Dim exportPath As String
    exportPath = "C:\disegni inventor\STPcanc\"

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
    Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7 F40-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.CreateTranslation Context
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMa p
    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplicati on.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

  2. #2
    Utente Standard L'avatar di Catafratto
    Iscritto dal
    2011
    Messaggi
    809
    Professione
    Disegnatore/progettista
    Regione
    Veneto
    Software
    Inventor 2016

    Predefinito

    Mi pare che questo funzioni...

    Codice:
    Dim oPart As PartDocument
    For Each oPart In oDoc.ReferencedDocuments
        oPart.ComponentDefinition.iPartMember.BreakLinkToFactory
    Next
    Spesso astuzia ed intelligenza sono molto più efficaci dell'ottusa forza bruta: ma non ho proprio tempo di cercare qualcun alltro...

  3. Il seguente utente ha ringraziato Catafratto per questo post

    3olo (24-07-2015)

  4. #3
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    23
    Professione
    libero professionista
    Regione
    Trento
    Software
    inventor 2011,2013, autocad

    Predefinito

    Grazie mille,dove glielo incollo? Prima dell'end sub?

  5. #4
    Utente Standard L'avatar di Catafratto
    Iscritto dal
    2011
    Messaggi
    809
    Professione
    Disegnatore/progettista
    Regione
    Veneto
    Software
    Inventor 2016

    Predefinito

    Citazione Originariamente Scritto da 3olo Visualizza Messaggio
    Grazie mille,dove glielo incollo? Prima dell'end sub?
    direi prima di:
    Dim oRefDoc As Document
    For Each oRefDoc In oDoc.ReferencedDocuments
    iPartMember.BreakLinkToFactory (oRefDoc)
    Call ExportToSTEP(oRefDoc)

    Next

    dal quale elimini
    iPartMember.BreakLinkToFactory (oRefDoc)

    Fai prove su qualcosa di non vitale comunque, dalle (poche e veloci) prove che ho fatto il funzionamento sembra quello richiesto ma non ho approfondito cosa accade alle iPart con collegamento rotto...
    Spesso astuzia ed intelligenza sono molto più efficaci dell'ottusa forza bruta: ma non ho proprio tempo di cercare qualcun alltro...

  6. Il seguente utente ha ringraziato Catafratto per questo post

    3olo (24-07-2015)

  7. #5
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    23
    Professione
    libero professionista
    Regione
    Trento
    Software
    inventor 2011,2013, autocad

    Predefinito

    Gentilissimo! Provo e ti faccio sapere! E se volessi fare una macro con questo codice che mi apre un assieme con all'interno dei membri di ipart e me li scollega ? Riusciresti a buttare giù una veloce bozza?quindi bypassamdo la parte generazione e esportazione step. Ti ringrazio,gentilissimo

  8. #6
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    23
    Professione
    libero professionista
    Regione
    Trento
    Software
    inventor 2011,2013, autocad

    Predefinito

    Ho provato e funziona su alcune ipart, su altre no ,nel senso che interrompe sì i link,ma poi per rendere effettive le modifiche dovrei salvare l'assieme pilota creato ( e tutti i suoi componenti ovviamente) però,quando provo a salvare tutto inventor crasha ,probabilmente per il grande numero di componenti da salvare.
    Ho pensato allora di aggiungere la funzione "save2" che c'è nella guida api di inventor relativa al salvataggio degli assiemi e relativi componenti,però non capisco come scriverla,mi puoi aiutare?
    Io ho provato
    ODoc.save2( true, ) ma niente
    Call oDoc.save2(true,) niente neanche con questa
    oDoc.save2(true,0) niente

    Mi potete aiutare per favore? La inserirei tra il breaklink e l'esportazione dei componenti,penso sia corretto metterla li,ma ditemi voi

  9. #7
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    23
    Professione
    libero professionista
    Regione
    Trento
    Software
    inventor 2011,2013, autocad

    Predefinito

    O magari sbaglio funzione?

  10. #8
    Utente Standard L'avatar di Catafratto
    Iscritto dal
    2011
    Messaggi
    809
    Professione
    Disegnatore/progettista
    Regione
    Veneto
    Software
    Inventor 2016

    Predefinito

    Non ho molto tempo in questo periodo, se hai pazienza provo a derci un occhio. Non credo che i crash siano dovuti alla quantità di componenti: Inventor sarebbe da buttare in tal caso. Però non so cosa succede con le iPart scollegate, uso le iPart pochissimo e non ho idea di come si comportino... bisogna studiarci sopra.
    Spesso astuzia ed intelligenza sono molto più efficaci dell'ottusa forza bruta: ma non ho proprio tempo di cercare qualcun alltro...

  11. #9
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    23
    Professione
    libero professionista
    Regione
    Trento
    Software
    inventor 2011,2013, autocad

    Predefinito

    Scusa se ti rompo,ti ringrazio per la pazienza!
    Quando hai tempo se vuoi dacci un occhiata


  • Discussioni Simili

    1. Risposte: 14
      Ultimo Messaggio: 16-05-2015, 18: 36
    2. macro salvataggio automatico disegni
      Di gianlucax90 nel forum Solidworks
      Risposte: 1
      Ultimo Messaggio: 14-02-2013, 14: 03
    3. Macro cambio layer automatico
      Di pasto7 nel forum AutoCAD
      Risposte: 1
      Ultimo Messaggio: 19-10-2010, 17: 21
    4. Caricare macro lisp in automatico
      Di pisolo nel forum Creo Direct/Modeling (Ex CoCreate)
      Risposte: 2
      Ultimo Messaggio: 21-11-2008, 10: 54
    5. Ripetere in automatico una macro
      Di arri nel forum Tips & Tricks per Autocad
      Risposte: 0
      Ultimo Messaggio: 30-06-2008, 15: 46

    Tag per Questa Discussione

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  





    CAD3D.it - la community dei progettisti