Autore |
Discussione |
cantacad
Utente Master
662 Messaggi |
Inserito il - 08 giugno 2011 : 13:25:51
|
Salve, molto deluso dalla selezione rapida che secondo me tanto rapida non è, e non molto contento dei "filtri" scoperti tramite il forum, propongo/domando: esiste un comando, un lisp, una maniera (o si può fare)che cliccato su un blocco mi seleziona tutti quelli con quel nome... Sicuramente a me sarebbe utilissimo. Ringrazio anticipatamente per eventuali aiuti o indicazioni. Saluti
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2778 Messaggi |
Inserito il - 08 giugno 2011 : 14:00:03
|
Assegna questa macro ad un pulsante:
(ssget "_X" (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (car (entsel "Selezionare il blocco desiderato...."))))))));
e potrai utilizzarlo alla richiesta di selezione oggetti del comando che hai lanciato (sposta, copia, ecc.). |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 08 giugno 2011 : 14:38:16
|
mmmh...che abbia sbagliato qualcosa? non succede nulla dopo aver caricato il comando...riporto le scritte:
Comando: (ssget "_X" (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (car (entsel "Selezionare il blocco desiderato....")))))))) Selezionare il blocco desiderato....; errore: tipo di argomento errato: lentityp nil
Comando: (ssget "_X" (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (car (entsel "Selezionare il blocco desiderato....")))))))) Selezionare il blocco desiderato....<Selection set: 69>
Ribadisco un concetto però: io vorrei tramite questo fantomatico comando, cliccare un blocco e selezionare tutti i blocchi con lo stesso nome. Una volta selezionati tutti decido cosa fare, anche ad esempio aprire la finestra proprietà (che non è un comando) per modificare gli attributi.
Saluti |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 08 giugno 2011 : 14:45:47
|
Tempo fa avevo scritto questo lisp. In questo caso scrivo il nome del blocco e funziona anche sui blocchi dinamici. Se hai un po' di pazienza scriverò la variante che seleziona il blocco.
(defun C:SBLO (/ gruppo index nomeblocco gru blo1 blo2 blo3 blo4 blocco)
(setq nomeblocco (strcase (getstring "\nNome blocco: "))
gru (ssget '((0 . "INSERT")))
gruppo (ssadd)
)
(if gru
(progn
(setq index 0)
(repeat (sslength gru)
(setq blo (entget (ssname gru index)))
(cond
((equal
(substr (cdr (assoc 2 (entget (ssname gru index)))) 1 1)
"*"
)
(setq blo1 (entget (cdr (assoc 360 (entget (ssname gru index)))))
blo2 (entget (cdr (assoc 360 blo1)))
blo3 (entget (cdr (assoc 360 blo2)))
blo4 (entget (cdr (assoc 340 blo3)))
blocco (strcase (cdr (assoc 2 blo4)))
)
(if (wcmatch blocco nomeblocco)
(setq gruppo (ssadd (ssname gru index) gruppo))
)
)
((not
(equal
(substr (cdr (assoc 2 (entget (ssname gru index)))) 1 1)
"*"
)
)
(setq blocco
(strcase (cdr (assoc 2 (entget (ssname gru index))))
)
)
(if (wcmatch blocco nomeblocco)
(setq gruppo (ssadd (ssname gru index) gruppo))
)
)
)
(setq index (1+ index))
)
(princ "\Trovate ")
(princ (sslength gruppo))
(princ " entita'.")
(princ)
(setq cont 0)
(repeat (sslength gruppo)
(redraw (ssname gruppo cont) -3)
(setq cont (1+ cont))
)
(command "_SELECT" gruppo "")
(sssetfirst nil gruppo)
)
(progn (princ "\No blocks.") (princ))
)
(princ)
) |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 08 giugno 2011 : 17:31:12
|
wow finalmente! praticamente selezionando tramite list il nome del blocco non devo nemmeno scriverlo quindi posso già utilizzare il tuo lisp! Secondo me sarebbe un netto miglioramento il passaggio "clicco sul blocco anzichè specifico il nome"...se hai voglia io aspetto volentieri! Ciao e grazie |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 08 giugno 2011 : 21:33:08
|
Ecco fatto, ho preferito la selezione in VisualLISP per evitare tutte le nidificazioni causate dai nomi dei blocchi dinamici.
;;; Selezione blocchi
;;; Emissione - 8/6/2001
(defun C:SELBLO (/ obj nomeblocco ssets gruppo fcode fvalue newsset index)
(vl-load-com)
(vla-GetEntity (vla-get-utility (vla-get-activedocument (vlax-get-acad-object))) 'obj nil "\nSelezionare blocco: ")
(setq nomeblocco (vla-get-EffectiveName obj)
ssets (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object)))
gruppo (ssadd)
)
(if (vl-catch-all-error-p
(vl-catch-all-apply 'vla-item (list ssets "Selezione1"))
)
(setq newsset (vla-add ssets "Selezione1"))
(progn
(vla-delete (vla-item ssets "Selezione1"))
(setq newsset (vla-add ssets "Selezione1"))
)
)
(setq fcode (vlax-make-safearray vlax-vbinteger '(0 . 0))
fvalue (vlax-make-safearray vlax-vbvariant '(0 . 0))
)
(vlax-safearray-fill fcode '(0))
(vlax-safearray-fill fvalue '("INSERT"))
(vla-select newsset acSelectionSetAll nil nil fcode fvalue)
(setq index -1)
(repeat (vla-get-Count newsset)
(if (equal (vla-get-EffectiveName (vla-item newsset (setq index (1+ index)))) nomeblocco)
(progn
(vla-highlight (vla-item newsset index) :vlax-true)
(ssadd (vlax-vla-object->ename (vla-item newsset index)) gruppo)
)
)
)
(command "_SELECT" gruppo "")
(sssetfirst nil gruppo)
(princ)
)
(princ "\nSELBLO (vers.1) - by Terminator")
(princ "\nDigitare SELBLO per far partire il lisp") |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 09 giugno 2011 : 07:27:00
|
Spettacolare...tra l'altro può fungere anche da computatore superveloce (altro argomento che ho chiesto) perchè ovviamente quando i blocchi sono selezionati vengono anche automaticamente contati! Grazie mille, avrei un'altra domanda ma si merita una discussione sua (anzi sicuramente sarà argomento già trattato...) Alla prossima e grazie ancora |
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2778 Messaggi |
Inserito il - 09 giugno 2011 : 09:33:55
|
Messaggio inserito da cantacad
mmmh...che abbia sbagliato qualcosa? non succede nulla dopo aver caricato il comando...riporto le scritte:
Comando: (ssget "_X" (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (car (entsel "Selezionare il blocco desiderato....")))))))) Selezionare il blocco desiderato....; errore: tipo di argomento errato: lentityp nil
Comando: (ssget "_X" (list (cons 0 "INSERT") (cons 2 (cdr (assoc 2 (entget (car (entsel "Selezionare il blocco desiderato....")))))))) Selezionare il blocco desiderato....<Selection set: 69>
Ribadisco un concetto però: io vorrei tramite questo fantomatico comando, cliccare un blocco e selezionare tutti i blocchi con lo stesso nome. Una volta selezionati tutti decido cosa fare, anche ad esempio aprire la finestra proprietà (che non è un comando) per modificare gli attributi.
Saluti
Avevo scritto "potrai utilizzarlo alla richiesta di selezione oggetti del comando che hai lanciato..."
Quindi, dopo aver lanciato un comando che richieda una selezione oggetti (es. SPOSTA, CANCELLA, LECCA, ecc.) cliccando sul pulsante ti verrà chiesto di selezionare il blocco e verranno selezionati tutti i blocchi con quel nome.
Volendo invece operare dalla finestra proprietà il comando da lanciare per la selezione è SELEZ.
Però chiaramente il problema è stato brillantemente risolto da Terminator con il suo lisp, il mio intervento era per segnalare una semplice macro che (per carità, con un tasto in più) potesse funzionare senza che qualcuno perdesse del tempo.
|
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 09 giugno 2011 : 09:50:17
|
Tengo a precisare che, se non fosse stata per la questione dei nomi dei blocchi dinamici, non direttamente gestibili dalla funzione entget, la macro di GP è più sintetica e versatile del lisp. |
|
|
Giuseppe Mauro
Amministratore
Regione: Campania
Prov.: Napoli
2707 Messaggi |
Inserito il - 09 giugno 2011 : 10:34:15
|
| Messaggio inserito da GP Avevo scritto "potrai utilizzarlo alla richiesta di selezione oggetti del comando che hai lanciato..."
Quindi, dopo aver lanciato un comando che richieda una selezione oggetti (es. SPOSTA, CANCELLA, LECCA, ecc.) cliccando ....
|
AHAHAHAHAHHA grande GP. Solo che ho cercato nell'help in linea cosa facesse sto nuovo comando... Mi sono solo comparsi una serie di beep beeep beeep
ahahahahahhahah |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 09 giugno 2011 : 10:37:17
|
X GP: scusa! ed infatti avevo sbagliato qualcosa! non avevo capito che PRIMA devo selezionare un comando... Ho provato e può tornare utile, però, il fatto di poter selezionare tutti i blocchi PRIMA di scegliere qualunque operazione e SENZA dipendere da un comando da molte più possibilità di manovra... Non c'è dubbio che si riuscisse a evitare questo aspetto un pulsantino così non sarebbe male. Ringrazio anche te comunque per lo sbattimento, ciao |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 09 giugno 2011 : 11:03:21
|
Non occorre digitare prima il comando, ti rimane la selezione in memoria e dopo il comando basta digitare "p" per richiamarla. |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 09 giugno 2011 : 11:45:02
|
Si ma prova a far funzionare ad esempio proprietà...esempio, ho un blocco squadratura dove devo cambaire una serie di attributi...con il tuo lisp selezione un cartiglio e taak apro prorietà, con la macro di GP non sono riuscito a fare la stessa operazione, si può? Oppure mi serve selezionare tutti i blocchi per cambiarli di layer o sapere semplicemente quanti sono Se la risposta è no, è questa differenza che intendevo far notare... Ovviamente se si riuscisse con il tastino risparmierei ancora più tempo perchè non so ancora come si fa ad avere sempre caricati i lisp e come si fa ad attribuire ad un tasto un comando lisp ed è quello che vorrei chiedre con altra discussione. |
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
Inserito il - 09 giugno 2011 : 12:11:25
|
Messaggio inserito da cantacad come si fa ad attribuire ad un tasto un comando lisp ed è quello che vorrei chiedre con altra discussione. [/quote]
http://www.speculumatrum.it/cad_pulsanti.html |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 14 giugno 2011 : 19:35:14
|
Ciao, solo ora ho avuto il tempo di fare le prove, ma mi sono bloccato subito in quanto sul link che mi hai indicato non vedo come associare un lisp ad un pulsante, perchè fa gli esempi con le macro...poi aiutarmi? Ciao |
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
Inserito il - 14 giugno 2011 : 20:37:51
|
Messaggio inserito da cantacad non vedo come associare un lisp ad un pulsante
li gestisci come normali comandi, ad esempio per il lisp di terminator associ:
^C^CSELBLO |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 15 giugno 2011 : 07:49:58
|
ah! ma immagino di doverli salvare da qualche parte affinche il programma li abbia già caricati ad ogni avvio, giusto? |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 15 giugno 2011 : 09:41:00
|
Il fatto che i lisp siano associati ad un pulsante non cambia assolutamente nulla, vengono caricati ad ogni avvio con _APPLOAD. |
|
|
cantacad
Utente Master
662 Messaggi |
Inserito il - 15 giugno 2011 : 12:41:24
|
E invece (nella mia situazione) finchè non li trascino dentro alla videata autocad il programma non li sente, quindi il pulsante è inutile fino a che non faccio l'operazione che ho appena descritto... Come fa autocad a capire che deve andare a caricarsi con _appload i lisp nascosti nella cartella che so solo io? cosa non ho impostato? |
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
Inserito il - 15 giugno 2011 : 12:48:14
|
Messaggio inserito da cantacad
E invece (nella mia situazione) finchè non li trascino dentro alla videata autocad il programma non li sente, quindi il pulsante è inutile fino a che non faccio l'operazione che ho appena descritto... Come fa autocad a capire che deve andare a caricarsi con _appload i lisp nascosti nella cartella che so solo io? cosa non ho impostato?
comando _APPLOAD e lo aggiungi al gruppo di avvio, vedi qui
http://www.cadlandia.com/forum/topic.asp?TOPIC_ID=13714&whichpage=2&SearchTerms=,APPLOAD,GRUPPO,AVVIO
|
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2778 Messaggi |
Inserito il - 15 giugno 2011 : 17:22:40
|
Messaggio inserito da Terminator ...la macro di GP è più sintetica e versatile del lisp.
Come al solito hai realizzato un lisp perfetto, non sminuirne la funzionalità. Domanda: ma tu sei così prolifico in tutto???
Messaggio inserito da Giuseppe Mauro ...ho cercato nell'help in linea cosa facesse sto nuovo comando... Mi sono solo comparsi una serie di beep beeep beeep
Infatti è da usare con l'altoparlante disinserito (nella 2012_DOS)...
|
|
|
Discussione |
|