Autore |
Discussione |
|
Marsetti Alex
Utente
Regione: Veneto
Prov.: Vicenza
Città: Malo
17 Messaggi |
Inserito il - 14 ottobre 2014 : 22:32:54
|
Buonasera. Scrivo sul forum per condividere una parte di codice sul'uso della funzione "grread" per leggere dati da un input (mouse, tastiera) e salvarne il valore nella variabile "input".
Questo codice non svolge alcuna funzione, ma il valore di "input" può essere utilizzato per realizzare svariati programmi "grafici", ad es. selezionare un testo e ruotarlo dinamicamente verso il punto in cui il puntatore è posizionato in ogni momento. Si nota che in questo codice ho inserito una funzione di lettura dei messaggi d'errore, che consente di premere il tasto ESC senza interrompere l'esecuzione del programma, ma solo del ciclo while.
(while ;() senza condizione (progn (setq input (vl-catch-all-apply 'grread (list T (+ 1 2 8) 0))) (cond ;pressione esc (uscita) ( (vl-catch-all-error-p input) nil ) ;movimento cursore (rimane) ( (= 5 (car input)) nil ) ;pressione tastiera (uscita) ( (= 2 (car input)) nil ) ;click mouse (uscita) ( (= 3 (car input)) nil ) ) ) )
Il problema che pone questa funzione è l'impossibilità di poter selezionare uno snap sul disegno, ma solo un punto derivato dal click sinistro del mouse. Vorrei approfondire la questione e chiedervi se conoscete un metodo per "attivare" gli snap durante l'uso.
Vi allego anche una porzione di codice di questa medesima funzione utile per selezionare oggetti (ricavando gli estremi del riquadro di selezione) impedendo che l'utente possa premere ESC per interrompere tutto il vostro programma.
Grazie delle future risposte.
;primo punto selezione (princ "\nSpecificare primo punto della finestra di selezione: ") (while ;() senza condizione (accetta t / nil) (progn (setq input (vl-catch-all-apply 'grread (list T (+ 1 2 8) 0))) (cond ;pressione esc (uscita) ( (vl-catch-all-error-p input) nil ) ;movimento cursore (rimane) ( (= 5 (car input)) t ) ;pressione tastiera (rimane) ( (= 2 (car input)) t ) ;click mouse (uscita) ( (= 3 (car input)) (setq p1 (nth 0 (cdr input))) nil ) ) ) )
;secondo punto selezione (if (AND (/= p1 nil) (listp input)) (progn (princ "\nSpecificare secondo punto della finestra di selezione: ") (while ;() senza condizione (accetta t / nil) (progn (setq input (vl-catch-all-apply 'grread (list T (+ 1 2 8) 0))) (cond ;pressione esc (uscita) ( (vl-catch-all-error-p input) nil ) ;movimento cursore (rimane) ( (= 5 (car input)) (redraw) (grdraw p1 (list (car (nth 0 (cdr input))) (cadr p1)) 2 1) (grdraw p1 (list (car p1) (cadr (nth 0 (cdr input)))) 2 1) (grdraw (nth 0 (cdr input)) (list (car (nth 0 (cdr input))) (cadr p1)) 2 1) (grdraw (nth 0 (cdr input)) (list (car p1) (cadr (nth 0 (cdr input)))) 2 1) t ) ;pressione tastiera (rimane) ( (= 2 (car input)) t ) ;click mouse (uscita) ( (= 3 (car input)) (setq p2 (nth 0 (cdr input))) nil ) ) ) ) (redraw) ) )
;l'utente può interrompere esclusivamente questa parte del codice. ;i punti p1 e p2 sono gli estremi della selezione ;es. (ssget "_C" p1 p2)
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2776 Messaggi |
Inserito il - 15 ottobre 2014 : 12:31:27
|
Alex, quando inserisci un listato sarebbe meglio utilizzare l'opzione codice (#)in maniera da preservare l'indentazione e rendere più leggibile le funzioni del programma.
Si utilizza la funzione (osnap) di AutoLISP
Nell'esempio sottostante il codice utilizza GRREAD per spostare un testo "dinamicamente" con OSNAP MED tramite la funzione MIDvectors;--------------------------------------------------------------------
(defun c:test ( / testo DCA pt pt2)
(setq testo (vlax-ename->vla-object
(car (entsel "\nScegliere testo: "))
)
)
(setq DCA (* (atoi (getenv "AutoSnapSize")) 0.002))
(while (= (car (setq pt (grread T 15 0))) 5)
(redraw)
(setq pt2 (osnap (cadr pt) "_mid"))
(if pt2
(progn
(vla-put-InsertionPoint testo (vlax-3d-point pt2))
(MIDvectors pt2 2)
)
(vla-put-InsertionPoint testo (vlax-3d-point (cadr pt)))
)
)
(redraw)
)
;--------------------------------------------------------------------
;Disegno dei vettori del contrassegno di OSNAP MED
;Gian Paolo Cattaneo
(defun MIDvectors (pt: color / L L- c1 c2 *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 *11 *12)
(setq L (* DCA (getvar 'viewsize))
L+ (* 1.2 L)
*1 (polar pt: (/ pi 2) L)
*2 (polar pt: 3.665 L)
*3 (polar pt: 5.759 L)
*4 (polar pt: (/ pi 2) L+)
*5 (polar pt: 3.665 L+)
*6 (polar pt: 5.759 L+)
)
(grvecs (list color *1 *2 *2 *3 *3 *1))
(grvecs (list color *4 *5 *5 *6 *6 *4))
(princ)
)
Possono essere impostati tutti i tipi di OSNAP, anche prelevandoli da OSMODE corrente:
Questa discussione può aiutare: http://www.cadtutor.net/forum/showthread.php?82662-Rectangle-lisp.Little-help-!&p=565520&viewfull=1#post565520 |
Modificato da - GP in data 15 ottobre 2014 14:41:35 |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 15 ottobre 2014 : 14:08:12
|
Cos' com'è non funziona, dovresti chiamare la funzione MIDvector allo stesso modo sia nel defun che nel richiamo all'interno del programma. |
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2776 Messaggi |
Inserito il - 15 ottobre 2014 : 14:43:31
|
Ho modificato il lisp, prova ora, avevo cambiato il nome alla funzione da MIDerctor a MIDvectors
Sorry. |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 15 ottobre 2014 : 15:13:50
|
No, no, avevo già provato a rinominare e funzionava. Era solo un'indicazione per l'autore del post, se non fosse riuscito a venire a capo del perché non funzionava...
PS: bellissimi i mini-video tutorial stile Lee Mac! |
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
Inserito il - 27 ottobre 2014 : 10:28:48
|
Messaggio inserito da Terminator
PS: bellissimi i mini-video tutorial stile Lee Mac!
sarebbe bello (e molto utile per tutti) sapere quale programma usa per crearli
|
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2776 Messaggi |
Inserito il - 27 ottobre 2014 : 11:39:52
|
Il programma è Camtasia.
Visto l'interesse dell'autore del thread mi viene quasi voglia di cancellare tutto. |
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
Inserito il - 27 ottobre 2014 : 11:49:04
|
Messaggio inserito da GP
Il programma è Camtasia.
Visto l'interesse dell'autore del thread mi viene quasi voglia di cancellare tutto.
grazie GP !
Ti comprendo, ma non cancellarlo, può essere utile ad altri utenti
|
|
|
Marsetti Alex
Utente
Regione: Veneto
Prov.: Vicenza
Città: Malo
17 Messaggi |
Inserito il - 03 novembre 2014 : 15:49:36
|
Il post voleva essere una semplice spiegazione di un listato, ho solo chiesto informazioni sull'uso degli snap e ho letto le risposte. Non capisco quale altro interesse avrei dovuto mostrare. |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 03 novembre 2014 : 16:52:45
|
| Messaggio inserito da Marsetti Alex
Il post voleva essere una semplice spiegazione di un listato, ho solo chiesto informazioni sull'uso degli snap e ho letto le risposte. Non capisco quale altro interesse avrei dovuto mostrare.
|
Forse un cenno di ringraziamento da parte tua nei confronti di GP, dal momento che la sua risposta sugli osnap è arrivata il giorno dopo e tu dopo due settimane ancora non ti eri fatto vivo. Vedi, caro Alex, qui la gente fa tutto gratis e il grazie è la moneta più economica. Se anche leviamo quella... |
|
|
Marsetti Alex
Utente
Regione: Veneto
Prov.: Vicenza
Città: Malo
17 Messaggi |
Inserito il - 03 novembre 2014 : 18:52:25
|
Il ringraziamento a tutte le risposte c'era già all'inizio del post, e come in tutti i miei post, ho sempre ringraziato in anticipo le persone che hanno risposto. Non vedo quale sia il problema, ma se il fatto che non abbia ringraziato ancora è cosi importante, ringrazio ancora chi ha risposto alla mia domanda. |
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
Inserito il - 04 novembre 2014 : 15:11:11
|
Messaggio inserito da Marsetti Alex
Il ringraziamento a tutte le risposte c'era già all'inizio del post, e come in tutti i miei post, ho sempre ringraziato in anticipo le persone che hanno risposto. Non vedo quale sia il problema, ma se il fatto che non abbia ringraziato ancora è cosi importante, ringrazio ancora chi ha risposto alla mia domanda.
ringraziare in anticipo non ha senso,
chi ti risponde dedica del tempo e (come ha scritto Terminator),
si aspetta un cenno di ringraziamento dopo.
|
|
|
|
Discussione |
|