Risultati da 1 a 8 di 8
  1. #1
    Utente Senior
    Iscritto dal
    2008
    Messaggi
    1423
    Professione
    ...
    Regione
    Emilia - Modena
    Software
    autocad11+swx16 sp4 w7 x64+Ready2W2012

    Predefinito Aiuto x creazione macro che mostra solo componenti/sottoass con prorietà:"Ricambio"

    Buongiorno,
    rifacendomi a questo nostro post "http://www.cad3d.it/forum1/showthrea...-visibile-quot" solo in parte risolto, vorrei cercare di iniziare adare uno sguardo al "mondo delle macro di swx" per provare a crearne una che mi mostri (sospendendo o nascondendo il resto), in una vista della messa in tavola, solo quei particolari o sottoassiemi che come proprietà "Ricambio" abbiano il valore di "Ricambio" (ovvero: Ricambio=ricambio -> visibile ; Ricambio=vuoto -> invisibile).

    Secondo voi si può fare con le macro di SWX? Avreste la voglia e la pazienza di spigarmi passo-passo come fare?
    (poi la macro successiva, quella che invece di nascondere fà apparire i "Ricambio=vuoto" con linea tratteggiata e molto sbiadita la proverò a fare da solo .... o quasi ;P)
    Grazie
    ^__^
    [www.cfsystem.it Nastri trasportatori]
    [www.conveyor-belt-sushi.com Nastro trasportatore per sushi]

  2. #2
    Utente Senior
    Iscritto dal
    2008
    Messaggi
    1423
    Professione
    ...
    Regione
    Emilia - Modena
    Software
    autocad11+swx16 sp4 w7 x64+Ready2W2012

    Predefinito

    ....sob sob sob ... :(
    davvero davvero nessuno che abbia la pazienza di darmi qualche dritta iniziale?
    Grazie
    ^__^
    [www.cfsystem.it Nastri trasportatori]
    [www.conveyor-belt-sushi.com Nastro trasportatore per sushi]

  3. #3
    Utente Junior
    Iscritto dal
    2010
    Messaggi
    13
    Professione
    CAD Manager
    Regione
    Lombardia
    Software
    SolidWorks

    Predefinito

    avevo fatto qualcosa di simile in passato ... prova con questo codice leggermente riadattato: seleziona la vista del disegno e manda in play la routine "main"

    Dim swApp As SldWorks.SldWorks
    Dim property_name As String
    Dim property_visibility_condition As String

    Sub main()
    property_name = "Ricambio"
    property_visibility_condition = "ricambio"

    Dim swView As SldWorks.View
    Dim swDoc As SldWorks.ModelDoc2
    Dim swDrawing As SldWorks.DrawingDoc
    Set swApp = Application.SldWorks

    Set swDoc = swApp.ActiveDoc
    Set swDrawing = swDoc
    Set swView = swDrawing.ActiveDrawingView

    Dim swDrawComp As SldWorks.DrawingComponent
    Set swDrawComp = swView.RootDrawingComponent
    ProcessDrawingComponent swDrawComp, " "

    End Sub



    Sub ProcessDrawingComponent(swDrawComp As SldWorks.DrawingComponent, sPadStr As String)

    Dim vDrawCompChildArr As Variant

    Dim vDrawCompChild As Variant

    Dim swDrawCompChild As SldWorks.DrawingComponent

    Debug.Print sPadStr & swDrawComp.Name

    ' Does not affect root component

    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swDrawComp.Component.GetModelDoc2

    Set swModelDocExt = swModel.Extension

    Set swCustProp = swModelDocExt.CustomPropertyManager("")
    Dim val As String
    Dim valout As String
    Dim bool As Boolean

    bool = swCustProp.Get4(property_name, False, val, valout)
    Debug.Print val
    If val = property_visibility_condition Then

    swDrawComp.Visible = True

    Else
    swDrawComp.Visible = False

    End If

    vDrawCompChildArr = swDrawComp.GetChildren

    If Not IsEmpty(vDrawCompChildArr) Then

    For Each vDrawCompChild In vDrawCompChildArr

    Set swDrawCompChild = vDrawCompChild

    ProcessDrawingComponent swDrawCompChild, sPadStr + " "
    Next
    End If

    End Sub

  4. #4
    Utente Senior
    Iscritto dal
    2008
    Messaggi
    1423
    Professione
    ...
    Regione
    Emilia - Modena
    Software
    autocad11+swx16 sp4 w7 x64+Ready2W2012

    Predefinito

    Citazione Originariamente Scritto da furius Visualizza Messaggio
    avevo fatto qualcosa di simile in passato ... prova con questo codice leggermente riadattato: seleziona la vista del disegno e manda in play la routine "main"
    ...
    Ciao e grazie :D
    Ho creato un assieme di 3 parti, a tutte le parti ho aggiunto
    proprietà = "Ricambio"
    a 2 parti ho assegnato il valore della proprietà "Ricambio" = "ricambio" rispettando maiuscolo e minuscolo,
    seleziono una vista della messa in tavola,
    mi posiziono in "main" nella macro e faccio play ma mi nasconde tutti i componenti, anche quelli che hanno "Ricambio" = "" ...

    Il codice è stato copiato e incollato, cancellando tutto quello che c'era prima nella macro vuota,
    per quel che ne capisco non sembrano esserci errori di scrittura/sintassi ...

    sapresti dirmi come/dove intervenire?
    Grazie
    ^__^
    [www.cfsystem.it Nastri trasportatori]
    [www.conveyor-belt-sushi.com Nastro trasportatore per sushi]

  5. #5
    Utente Junior
    Iscritto dal
    2010
    Messaggi
    13
    Professione
    CAD Manager
    Regione
    Lombardia
    Software
    SolidWorks

    Predefinito

    ok, probabilmente la proprietà Ricambio ce l'hai non nelle Proproetà personalizzate ma nelle specifiche di configurazione ... prova a sostituire la routine ProcessDrawingComponent precedente con questa:

    Sub ProcessDrawingComponent(swDrawComp As SldWorks.DrawingComponent, sPadStr As String)

    Dim vDrawCompChildArr As Variant

    Dim vDrawCompChild As Variant

    Dim swDrawCompChild As SldWorks.DrawingComponent

    Debug.Print sPadStr & swDrawComp.Name

    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swDrawComp.Component.GetModelDoc2


    Set swConfigMgr = swModel.ConfigurationManager
    Set swConfig = swConfigMgr.ActiveConfiguration
    Set swCustPropMgr = swConfig.CustomPropertyManager
    nNbrProps = swCustPropMgr.Count
    vPropNames = swCustPropMgr.GetNames
    Dim valOut As String

    Dim resolvedValOut As String

    For j = 0 To nNbrProps - 1
    If vPropNames(j) = property_name Then
    swCustPropMgr.Get2 vPropNames(j), valOut, resolvedValOut
    If valOut = property_visibility_condition Then

    swDrawComp.Visible = True

    Else
    swDrawComp.Visible = False

    End If
    End If

    Next j




    vDrawCompChildArr = swDrawComp.GetChildren

    If Not IsEmpty(vDrawCompChildArr) Then

    For Each vDrawCompChild In vDrawCompChildArr

    Set swDrawCompChild = vDrawCompChild

    ProcessDrawingComponent swDrawCompChild, sPadStr + " "
    Next
    End If

    End Sub

  6. #6
    Utente Senior
    Iscritto dal
    2008
    Messaggi
    1423
    Professione
    ...
    Regione
    Emilia - Modena
    Software
    autocad11+swx16 sp4 w7 x64+Ready2W2012

    Predefinito

    .... dove diavolo sarà finita la mia risposta postata 2 sere fà... ?

    ... dicevo, ho provato ad inserire la proprietà Ricambio anche nelle Proprietà personalizzate ma non cambiava nulla,
    allora ho sostituito il codice che hai postato ma mi dà errore, ho anche provato a cancellare uno dei due "End If" ma non cambia nulla e continuava con l'errore "errore runtime 91" , premendo "debug" mi viene evidenziata questa riga
    "Set swDrawComp = swView.RootDrawingComponent" ... ma non saprei come sistemarla :(


    PS: Al di là dell'aiuto nella creazione di questa bella macro, sapresti suggerirmi documentazione (ita) utile ad apprendere le basi per creare macro di swx?
    Ho provato a registrare semplici operazioni con il registratore, ma mi rendo conto che il registratore registra l'operazione/i eseguite sul quel pezzo o modello che hai toccato, ma poi per "dire" alla macro di eseguire quelle operazioni anche agli altri pezzi che toccherò è complicato e mi piacerebbe capire come si deve fare. Cosa mi puoi suggerire?
    Immagini Allegate Immagini Allegate
    Grazie
    ^__^
    [www.cfsystem.it Nastri trasportatori]
    [www.conveyor-belt-sushi.com Nastro trasportatore per sushi]

  7. #7
    Utente Standard L'avatar di jenuary
    Iscritto dal
    2007
    Messaggi
    385
    Professione
    Progettista e Programmatore VB.Net
    Regione
    Veneto
    Software
    Solidworks

    Predefinito Configurazioni

    Ciao a tutti,
    ho modificato al volo la macro, ora gira senza l'errore, ma il controllo viene fatto nelle Personalizzate.
    Se la proprietà ricercata fosse nelle configurazioni, bisogna creare un ciclo che passi per ogni configurazione verifichi la proprietà.
    Io sinceramente lo sconsiglio, ache perchè può succedere che sbadatamente o volutamente venga omessa, non solo il suo valore ma la proprietà, e quindi si crerebbe una situazione ambigua da gestire, con msgbox all'operatore ecc.
    Il problema stava che non veniva passato l'oggetto "configurazione" e quindi non passava successivamente nelle proprietà.
    Fatemi sapere.
    Buona giornata
    File Allegati File Allegati

  8. #8
    Utente Junior
    Iscritto dal
    2010
    Messaggi
    13
    Professione
    CAD Manager
    Regione
    Lombardia
    Software
    SolidWorks

    Predefinito

    Citazione Originariamente Scritto da reggio Visualizza Messaggio
    .... dove diavolo sarà finita la mia risposta postata 2 sere fà... ?

    ... dicevo, ho provato ad inserire la proprietà Ricambio anche nelle Proprietà personalizzate ma non cambiava nulla,
    allora ho sostituito il codice che hai postato ma mi dà errore, ho anche provato a cancellare uno dei due "End If" ma non cambia nulla e continuava con l'errore "errore runtime 91" , premendo "debug" mi viene evidenziata questa riga
    "Set swDrawComp = swView.RootDrawingComponent" ... ma non saprei come sistemarla :(


    PS: Al di là dell'aiuto nella creazione di questa bella macro, sapresti suggerirmi documentazione (ita) utile ad apprendere le basi per creare macro di swx?
    Ho provato a registrare semplici operazioni con il registratore, ma mi rendo conto che il registratore registra l'operazione/i eseguite sul quel pezzo o modello che hai toccato, ma poi per "dire" alla macro di eseguire quelle operazioni anche agli altri pezzi che toccherò è complicato e mi piacerebbe capire come si deve fare. Cosa mi puoi suggerire?
    Ciao, può essere che non hai selezionato la vista quando lanci la macro? Il messaggio sembra dire che non riconosce l'oggetto swView, ovvero la vista attiva ... In ogni caso prova la versione modificata da jenuary.

    Per quanto riguarda documentazione in italiano sulle API di SolidWorks mi sa che c'è poco ... Il registratore di macro può darti qualche indicazione sulla sintassi da usare, ma, come hai potuto verificare, il codice generato non è quasi mai riutilizzabile così com'è ... La cosa fondamentale è capire la struttura degli oggetti SolidWorks (object model hierarchy) perchè per manipolare o accedere alle proprietà/metodi delle varie entità/oggetti bisogna prima accedere nel modo giusto all'oggetto stesso, e spesso è questa la cosa più complicata ...
    Credo che il modo più semplice sia quello di fare riferimento all'API help di SolidWorks, che è anche piuttosto fornito di esempi. Ovviamente un minimo di basi di VBA/VB6 sono altrettanto necessarie ...
    Buono studio


  • Discussioni Simili

    1. Risposte: 7
      Ultimo Messaggio: 27-03-2013, 14: 32
    2. Mostra "Body Worlds" a Milano
      Di marcof nel forum Discussioni Off Topics
      Risposte: 1
      Ultimo Messaggio: 28-01-2013, 21: 16
    3. Risposte: 7
      Ultimo Messaggio: 15-12-2011, 16: 56
    4. Risposte: 8
      Ultimo Messaggio: 17-03-2011, 00: 13
    5. I vs 10 migliori "Lead guitar solo" in assoluto
      Di thinkID70 nel forum Discussioni Off Topics
      Risposte: 35
      Ultimo Messaggio: 08-02-2008, 20: 12

    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