Autore |
Discussione |
|
asetech
Nuovo Utente
6 Messaggi |
Inserito il - 23/09/2009 : 16:06:36
|
Salve Il mio problema e quello di capire quali sono i comandi in vba per creare una macro che mi trovi un determinato blocco (Freccia) all'interno di un layer che corrisponde al nome di ricerca che gli inserisco io tramite un messagBox e che mi restituisca i parametri che contiene all'interno e che questi testi e i valori me li scriva in un determinato posto (Le coordinate di dove scrivere il risultato sono contenute all'interno del blocco. Es. Blocco Parametri contenuti all'interno - Nome - Pagina - Riga
Grazie
|
|
admin
Amministratore
Regione: Veneto
Prov.: TV
Città: Treviso
188 Messaggi |
Inserito il - 23/09/2009 : 20:14:51
|
Ciao, ma conosci VBA o non l'hai mai usato, tanto per capire da che punto aiutarti. |
|
|
asetech
Nuovo Utente
6 Messaggi |
Inserito il - 24/09/2009 : 12:47:46
|
Si lo conosco non sono una cima. Il mio problema è quello di conoscere le funzioni relativi ad autocad quelle di vba le conosco. Mi aiuterebbe molto anche degli esempi. Grazie |
|
|
admin
Amministratore
Regione: Veneto
Prov.: TV
Città: Treviso
188 Messaggi |
Inserito il - 29/09/2009 : 13:56:11
|
Intanto ti copio un'email che mi ha mandato qualcuno per fare il filtro di ricerca per il singolo blocco e anche del layer. Dall'esempio quì sotto togli quello che non ti interessa e aggiungi quello relativo al nome del blocco (il codice per i blocchi è il 2 come in autolisp). Premetto che questo esempio non l'ho mai provato. Intanto ti mando questo, poi magari da questo prendiamo spunto se ti serve.
'Definiamo il set di selezione, dicendo che scegliamo tutti gli oggetti che rispettano le seguenti condizioni: '1) sono sul layer MioLayer '2) sono del colore DaLayer '3) contengono all'interno la stringa definita in Criterio ' da notare l'uso dei caratteri jolly, che dicono che la stringa contenuta in criterio può essere preceduta ' da qualsiasi stringa (*) e susseguita da qualsiasi stringa (*) '4) sono o oggetti TEXT o MTEXT ' da notare l'uso della notazione polacca inversa per la creazione delle sequenze di filtri. FilterType(0) = -4 FilterData(0) = "FilterType(1) = 8 FilterData(1) = "MIOLAYER" FIlterType(2) = 62 FilterData(2) = 256 'colore DaLayer ' Ora inseriamo il criterio di ricerca FilterType(3) = 1 FilterData(3) = "*" & Criterio & "*" FilterType(4) = -4 FilterData(4) = "FilterType(5) = 0 FilterData(5) = "TEXT" FilterType(6) = 0 FilterData(6) = "MTEXT" FIlterType(7) = -4 FilterData(7) = "OR>" FilterType(8) = -4 FilterType(8) = "AND>"
' Qui andiamo a selezionare tutti gli oggetti del disegno (acSelectionSelAll) che rispettano le condizioni SetDiSelezione.Select acSelectionSetAll, , , FilterType, FilterData
For Each Testo In SetDiSelezione ' Esegui le istruzioni sui testi che corrispondono ai criteri. Next |
|
|
admin
Amministratore
Regione: Veneto
Prov.: TV
Città: Treviso
188 Messaggi |
Inserito il - 30/09/2009 : 14:13:57
|
Riciao, questo è un piccolo esempio di ricerca di un blocco di nome NEWCART. con 0 e "INSERT" definisci un filtro di ricerca di soli blocchi con 2 e "NEWCART" aggiungo al filtro di ricerca il nome del blocco "SelectOnScreen" vai a selezionare gli oggetti visivi. credo però che se ti serve filtrare quel X blocco su tutto il disegno e quindi anche dei layer congelati, credo che questo metodo non funzioni. Devo verificare anch'io perchè è una cosa che servirebbe pure a me.
Dim sstext As AcadSelectionSet Dim FilterType(1) As Integer Dim FilterData(1) As Variant Set sstext = ThisDrawing.SelectionSets.Add("SS8")
FilterType(0) = 0 FilterData(0) = "INSERT" FilterType(1) = 2 FilterData(1) = "NEWCART" sstext.SelectOnScreen FilterType, FilterData
Poi dal gruppo di selezione "sstext" si comincia a fare le proprie verifiche come ricavare i dati che ti interessano. Ciao! |
|
|
asetech
Nuovo Utente
6 Messaggi |
Inserito il - 09/10/2009 : 15:49:41
|
Ciao Grazie degli esempi ma se ho capito bene questi servono per trovare dei blocchi o per filtrarli Domanda che cosa e "SS8" |
|
|
admin
Amministratore
Regione: Veneto
Prov.: TV
Città: Treviso
188 Messaggi |
Inserito il - 09/10/2009 : 19:14:38
|
Ma siccome tu devi trovare un solo blocco con questo filtro dovrebbe selezionarti solo quelli, quindi alla fine si fare un for o un while dove all'interno andrai a trovarti le proprietà o quello che vuoi dei blocchi (nel tuo caso i valori di alcuni attributi se non erro). SS8 (è un nome a caso) è un gruppo di selezione dove sarà raccolto tutti i blocchi trovati col filtro. Una volta trovati i valori si può fare quello che si vuole: creare una tabella esportarli scriverli direttamente ..... Ciao. |
|
|
asetech
Nuovo Utente
6 Messaggi |
Inserito il - 13/10/2009 : 11:18:22
|
Ciao Grazie delle tue risposte Ho provato a creare un nuovo progetto con tre layer su ogni layer o inserito un blocco con 1 attributo e su ogni foglio ad ogni blocco ho inserito tre valori diveri Es. layer 1 Blocco pippo valre 1 - layer 2 Blocco Pippo valore 2 - layer 3 blocco pippo valore 3 Io ho provato a inserire il seguente codice Sub prova() Dim Blocchi As AcadSelectionSets Dim i As Integer
Set Blocchi = ThisDrawing.SelectionSets
End Sub Ma non riesco a capire lui trova i blocchi ma solo 1 e non 3 e poi il valore dell attributo non lo trovo da nessuna parte della struttura Blocchi Io non uso un blocco diverso per ogni pagina ma un blocco solo con valori diverso in piu pagine. L'esempio che mi hai passato con il comando .add lui crea una tabella dove nella struttura ci sono le stesse informazioniche posso trovare in "application" Scusa se sono un po duro di comprendonio Andrea |
|
|
asetech
Nuovo Utente
6 Messaggi |
Inserito il - 13/10/2009 : 11:19:50
|
Ciao di nuovo Scusa volevo dire che io utilizzo lo stesso blocco che si chiama "freccia" enne volte nel progetto. Ciao e grazie di nuovo |
|
|
asetech
Nuovo Utente
6 Messaggi |
Inserito il - 13/10/2009 : 12:56:10
|
Annulla Tutto In parte ci sono riuscito avevo capito male i tuoi esempi. Il codice che ho fatto e che funziona è il seguente: Sub Trova() Dim Tabelle, Blocchi As AcadSelectionSet Dim FilterType(1) As Integer Dim FilterData(1) As Variant Dim idx, Contatore As Integer
' Seleziono tutte le Tabelle create del Progetto Set Tabelle = ThisDrawing.SelectionSets ' Le cancello If ThisDrawing.SelectionSets.Count <> 0 Then Contatore = ThisDrawing.SelectionSets.Count For idx = 0 To Contatore - 1 ThisDrawing.SelectionSets.Item(0).Delete Next idx End If
' Creo una nuova tabella, e ci infilo dentro tutti i blocchi di nome "Blocco_Test"
Set Tabella = ThisDrawing.SelectionSets.Add("B1")
FilterType(0) = 0 FilterData(0) = "INSERT" FilterType(1) = 2 FilterData(1) = "Blocco_Test" Tabella.Select acSelectionSetAll, , , FilterType, FilterData
End Sub Ti dico in parte perche non riesco a trovare il valore dell'attributo di ogni blocco, mi puoi aiutare Grazie |
|
|
admin
Amministratore
Regione: Veneto
Prov.: TV
Città: Treviso
188 Messaggi |
Inserito il - 15/10/2009 : 17:10:52
|
Ciao, volevo solo avvisarti che per una fino al 25 sono in ferie e quindi non potrò aiutarti. |
|
|
admin
Amministratore
Regione: Veneto
Prov.: TV
Città: Treviso
188 Messaggi |
Inserito il - 27/10/2009 : 18:50:53
|
Ciao, sei riuscito a fare più niente da solo? |
|
|
|
Discussione |
|