TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoCAD
 Selezione rapidissima
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Successiva
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

cantacad
Utente Master



662 Messaggi

Inserito il - 08 giugno 2011 : 13:25:51  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
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.).
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 08 giugno 2011 : 14:38:16  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 08 giugno 2011 : 14:45:47  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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)
)
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 08 giugno 2011 : 17:31:12  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 08 giugno 2011 : 21:33:08  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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")
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 09 giugno 2011 : 07:27:00  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2778 Messaggi

Inserito il - 09 giugno 2011 : 09:33:55  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
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.


Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 09 giugno 2011 : 09:50:17  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

Giuseppe Mauro
Amministratore



Regione: Campania
Prov.: Napoli


2707 Messaggi

Inserito il - 09 giugno 2011 : 10:34:15  Mostra Profilo Invia a Giuseppe Mauro un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 09 giugno 2011 : 10:37:17  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 09 giugno 2011 : 11:03:21  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Non occorre digitare prima il comando, ti rimane la selezione in memoria e dopo il comando basta digitare "p" per richiamarla.
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 09 giugno 2011 : 11:45:02  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 09 giugno 2011 : 12:11:25  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 14 giugno 2011 : 19:35:14  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 14 giugno 2011 : 20:37:51  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 15 giugno 2011 : 07:49:58  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
ah! ma immagino di doverli salvare da qualche parte affinche il programma li abbia già caricati ad ogni avvio, giusto?
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 15 giugno 2011 : 09:41:00  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Il fatto che i lisp siano associati ad un pulsante non cambia assolutamente nulla, vengono caricati ad ogni avvio con _APPLOAD.
Torna all'inizio della Pagina

cantacad
Utente Master



662 Messaggi

Inserito il - 15 giugno 2011 : 12:41:24  Mostra Profilo Invia a cantacad un Messaggio Privato  Rispondi Quotando
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?
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 15 giugno 2011 : 12:48:14  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2778 Messaggi

Inserito il - 15 giugno 2011 : 17:22:40  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
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)...

Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Successiva
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 1,62 secondi.