Macro Modifica blocchi Solidworks

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Buon giorno,
essendo un autodidatta, di solito tra guide, ricerche online e molti, ma molti tentativi, riesco a trovare qualche soluzione, ma questa volta mi sono proprio arenato.

Funzionalità della mia macro

Azione preliminare:
- selezionare una vista dal foglio di disegno

A questo punto si può fare Play macro:
-apre una maschera, una userform dove, alcuni label sono già compilati dalle proprietà del solido, che vengono lette avendo selezionato la vista nell'azione preliminare.
-editare i label vuoti
-cliccando sul bottone ok:
- la userform viene chiusa
-viene creato un foglio di disegno nuovo
-da un indirizzo sul server, prende e posiziona sul foglio di disegno, un blocco di note

Qui ho i miei problemi.
Mentre le label già precompilate (dalle custom property del solido), vengono scritte nel blocco (perchè contiene note che sono collegate alle custom property), non riesco ad entrare nel blocco per editare le note che non hanno nessuna variabile collegata.

Avete una soluzione per favore?

La mia macro, attualmente, finisce così:

'aggiunge blocco della targa IEC

Part.SetPickMode
Part.ClearSelection2 True
Set TargaIEC = Part.SketchManager.MakeSketchBlockFromFile(Nothing, "S:\Blocchi\Targhe\2021\Targa IEC 2021.SLDBLK", False, 1, 0)
boolstatus = Part.Extension.SelectByID2("Targa IEC 2021-1", "SUBSKETCHINST", 6.23485714285714E-02, 0.159228367346939, 0, True, 0, Nothing, 0)
Part.Extension.MoveOrCopy False, 1, False, 0, 0, 0, 2, 1.5, 0
Part.ClearSelection2 True
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Ciao, aiutarti così è difficile, dovresti postare il la tavola con il blocco all'interno e dirci quale nota vuoi modificare (basta una), solo così possiamo capire com'è composto il tuo blocco e perchè non funziona il tuo codice.
Vedo comunque che la tua selezione tramite SelectByID2 va a selezionare il blocco, non una nota contenuta. Non è detto che SolidWorks voglia per forza che tu editi il blocco per modificare, potrebbe essere che te la fa selezionare comunque, bisogna provare.
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Ciao, perdonami ma non ho capito cosa tu intenda con "postare la tavola con il blocco". Intendi uno screenshoot?

Il SelectByID2 invece, è collegata alla riga sotto, al MoveOrCopy. Mi serviva selezionare il blocco per poterlo spostare in centro pagina con 2,1.5

In questi giorni ho provato ad entrare nel blocco per modificarne gli attributi, cercando di utilizzare " ISketchBlockInstance ", ma non sono riuscito nell'intento.

Questa è la pagina dell'help che ho provato a seguire, ma non saprei se sia la funzione giusta per il mio caso.

 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Intendevo che postassi il file della tavola con il blocco dentro per fare le prove...
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Allora...ho notato che se editi tu il blocco, ogni volta lui va a cambiare l'ID della nota quindi non riesci a selezionarla.
Ho visto che conviene recuperare le note recuperandole dal blocco mediante un ciclo.
Il ciclo che trovi nell'esempio del link che ti scrivo sotto, cicla tutti i blocchi, basta che ti modifichi il codice eseguendo il ciclo solo sul blocco importato.
Vedrai che all'interno del ciclo ogni nota avrà un tag e il testo, basta che intercetti le note che ti interessano e gli cambi il valore con SetText

 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Ti ringrazio,
lo provo a ti faccio sapere.
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Una domanda, ma come hai fatto a vedere che cambia sempre l?ID dell'oggetto?
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Registrando una macro mentre facevo la selezione, poi chiudevo il blocco, rientravo nel blocco e ri selezionavo. L'ID era diverso
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Perdonami, ma non riesco a fare quel che mi hai detto.
Dall'esempio del link che hai scritto, riesco a vedere tutte le istanze del blocco, ma non riesco a:
  1. eseguirlo solo sul blocco richiesto
  2. usare correttamente SetText
Potresti postare un esempio per favore?

Grazie.
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Ciao,
ho provato ad usare SetText, sono riuscito a cambiare il testo di tutte le note, ma ho notato che se non esplodo il blocco, visivamente non si nota il cambio di testo.
Come mai?
Sapete indicarmi in che cosa sbaglio per favore?

Grazie.
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
A fine macro inserisci una forzatura di rigenerazione

Dim ret as boolean
ret = swModel.ForceRebuild3(False)
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Ciao,
purtroppo non mi aggiorna tutte le note, o meglio, va ad editare tutte quelle che non devono essere editate, mentre le altre rimangono invariate
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Buon giorno,
nuovo esempio.
Devo scrivere dentro la nota vuota, dopo la scritta CODICE.
Ma la macro mi va a cambiare solo la nota CODICE, ma non lo nota vuota successiva, dove effettivamente deve esserci scritto il codice.
Anche forzando l'aggiornamento, non succede nulla.

Sto chiedendo qualcosa che non è fattibile? Avete altre soluzioni?

Grazie.
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Buon giorno,
nuovo esempio.
Devo scrivere dentro la nota vuota, dopo la scritta CODICE.
Ma la macro mi va a cambiare solo la nota CODICE, ma non lo nota vuota successiva, dove effettivamente deve esserci scritto il codice.
Anche forzando l'aggiornamento, non succede nulla.

Sto chiedendo qualcosa che non è fattibile? Avete altre soluzioni?

Grazie.
Non è vero, se entri in modifica del blocco dopo aver lanciato la macro la trovi cambiata
 

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Buon giorno!
Questi sono gli screenshoot di quello che succede.
Il primo è la situazione di partenza
Il secondo è dopo aver avviato la macro
Il terzo, sempre dopo aver avviato la macro, entrando in modifica blocco.

Non riesco a scrivere nel quadrattino dopo la scritta "codice" :unsure:
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Buon giorno!
Questi sono gli screenshoot di quello che succede.
Il primo è la situazione di partenza
Il secondo è dopo aver avviato la macro
Il terzo, sempre dopo aver avviato la macro, entrando in modifica blocco.

Non riesco a scrivere nel quadrattino dopo la scritta "codice" :unsure:
Io ho lanciato la tua macro, modificando il blocco la vedo come da immagine, quindi la modifica.
Fai questa prova, una volta lanciata la macro, modifica il blocco, chiudi il blocco, e rimodifica il blocco (quindi per 2 volte), dovresti vedere i testi modificati.
 

Allegati

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Capito.
Ma se io volessi modificare solo la nota all'interno del riquadro? Come faccio a farglielo capire?
Quella nota è l'unica con un nome attributo, stavo lavorando sui tag, ma non so se sia la strada corretta.
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
Capito.
Ma se io volessi modificare solo la nota all'interno del riquadro? Come faccio a farglielo capire?
Quella nota è l'unica con un nome attributo, stavo lavorando sui tag, ma non so se sia la strada corretta.
Come ti scrivevo sopra, la devi intercettare e cambiare, io ho usato il tag, allego la macro modificata per farti capire come funziona, ho cambiato il testo della nota dentro al quadrattino.
 

Allegati

simoness

Utente poco attivo
Professione: disegnatore/progettista
Software: solidworks
Regione: veneto
Fantastico!
Se dovessi collegarla ad una userform, può andare un

If swNote.TagName = "attributo0" Then
swNote.SetText (UserForm.label.Text)
??