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
 AutoLISP
 disegnare un rettangolo con quote all'interno

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
albertoromano Inserito il - 04 novembre 2014 : 17:55:25
Un saluto a Tutti. Vorrei disegnare un rettangolo e scriverci all'interno il nome e le sue misure in forma di testo, riesco a scrivere il nome ma non le quote. Qualcuno mi aiuta? Grazie

non allega il file allora lo trascrivo

;Rettangolo quotato, voglio disegnare un rettangolo maggiorato
:di 20mm rispetto alle quote date e contenga all'interno le
;quote nel formato nome lunghezzaXlarghezza in millimetri nello
;stile di testo corrente.
;
;
;
;
;
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
;
(DEFUN C:rett ()
(defun dtr (a) (* pi (/ a 180.0)))
(SETVAR "CMDECHO" 0)
(SETVAR "OSNAPCOORD" 1)
(SETVAR "BLIPMODE" 0)
(SETQ P1 (GETPOINT "\nANGOLO ALTO SX DEL RETTANGOLO: "))
(SETVAR "OSMODE" 63)
(SETQ TAGLIO 20)
(SETQ NOME (GETSTRING "\nNOME: "))
(SETQ A (GETDIST "\nLUNGHEZZA: "))
(SETQ B (GETDIST "\nLARGHEZZA: "))
(SETQ TESTO ( STRCAT NOME ))
;calcola lunghezza e larghezza+20mm
;(SETQ L1 (+ 20 A))
;(SETQ L2 (+ 20 B))
(COMMAND "_-LAYER" "_M" "TAGLI" "_C" "_BLUE" "" "")
(SETQ P2 (POLAR P1 (DTR 0) (+ TAGLIO A)))
(SETQ P3 (POLAR P2 (DTR 270) (+ TAGLIO B)))
;(SETQ P4 (POLAR P1 (DTR 270) B))
(COMMAND "_RECTANG" P1 P3 "")
(COMMAND "_TEXT" PAUSE "" TESTO "" "" A "" "" B "" "")
(SETVAR "BLIPMODE" 0)
)
20   U L T I M E    R I S P O S T E    (in alto le più recenti)
arri Inserito il - 12 novembre 2014 : 09:48:22
Tutorial e Manuali AutoLISP
Terminator Inserito il - 12 novembre 2014 : 08:53:35
Beh, "il mio lisp" di Rossi, secondo il mio parere, è uno delle migliori guide in italiano. Le migliori che ho incontrato, sempre secondo il mio parere, sono quelle del sito http://www.afralisp.net. Sono in inglese, ma direi comprensibili. Non so da dove ho scaricato i relativi pdf, ho cercato sul sito ma non le ho trovate. Al limite ti invio i pdf che ho io, se mi dai la tua mail.
albertoromano Inserito il - 12 novembre 2014 : 08:12:48
Ti ringrazio Terminator per la pazienza che hai, è venuto un minestrone perchè sono andato a tentativi non conoscendo la costruzione delle liste che accompagnano i comandi. Non lo so fare e sto cercando di capire come va fatto. Ho cercato anche in rete ma ho fatto solo confusione, ho trovato "il mio lisp" di Rossi e mi sembra che mi aiuti a qualcosa, hai forse da indicarmi una fonte da consultare? Buona giornata a tutti. A.
Terminator Inserito il - 11 novembre 2014 : 21:59:11
Guarda che hai fatto un minestrone, cosa c'entra la variabile pezzi ripetuta due volte nella quint'ultima riga?
albertoromano Inserito il - 11 novembre 2014 : 19:36:21
Eccomi. Ho provato ad inserire il numero dei pezzi all'inizio del testo, acad carica il lisp senza segnalare errori ma poi al momento dell'esecuzione disegna un solo rettangolo senza testo e mi indica errore col numero dei pezzi.
Vorrei capire la struttura dei comandi, fino alla definizione del comando ci arrivo ma la lista che segue non mi è chiara.

( defun c: serier (/ pezzi nome A B)
( defun rett ( pezzi nome lunghezza larghezza / taglio P1 P2 P3 )





(defun C:SERIER (/ pezzi nome A B)
(setq pezzi (getint "\nnumero dei pezzi: ")
NOME (getstring "\nNOME: ")
A (getdist "\nLUNGHEZZA: ")
B (getdist "\nLARGHEZZA: ")
)
(rett pezzi NOME A B)
)


(defun rett (pezzi nome lunghezza larghezza / taglio P1 P2 P3)
(setq P1 (getpoint "\nPosizione: ") coox (car P1) cooy (cadr P1))
(repeat pezzi
(setvar "CMDECHO" 0)
(setvar "OSNAPCOORD" 1)
(setvar "BLIPMODE" 0)
(setvar "OSMODE" 63)
(setq taglio 20)
(setq P2 (polar P1 0 (+ taglio A)))
(setq P3 (polar P2 (* (/ pi 2) 3) (+ taglio B)))
(vl-cmdf "_RECTANG" P1 P3)
(vl-cmdf "_TEXT" "_J" "M" (polar P1 (angle P1 P3)(/ ( pezzi distance P1 P3) 2)) "" "" ( (rtos pezzi 5) " " strcat nome " " (rtos A 5) " " (rtos B 5)))
(setq P1 (list (setq coox (+ coox (+ lunghezza taglio 80))) cooy ))
)
(print "messaggio")
)


Un saluto a tutti. A.
albertoromano Inserito il - 11 novembre 2014 : 17:42:51
Molto bene, funziona. Grazie Terminator per la preziosa assistenza.
La fase successiva consiste nell'inserire anche il numero dei pezzi all'inizio del text per avere riscontro lungo la lavorazione.
Stasera ci provo e vediamo.
Terminator Inserito il - 11 novembre 2014 : 16:19:22
Hai ragione, ho lasciato il punto P1 all'origine (list 0 0). In questo caso deve essere:

(setq P1 (getpoint "\nPosizione: ") 
      coox (car P1)
      cooy (cadr P1)
)


Il nuovo P1 sarà:

(setq P1 (list (setq coox(+ coox (+ lunghezza taglio (/ lunghezza 10)))) 
                cooy
         )
)

albertoromano Inserito il - 11 novembre 2014 : 16:10:24
i rettangoli a partire dal secondo sono riferiti all'origine e non al punto di inserimento input.
albertoromano Inserito il - 11 novembre 2014 : 12:07:49
La spiegazione è chiarissima e Ti ringrazio. Avendo dato da input P1 i p1 successivi devono essere progressivi rispetto a P1input e anche le y non devono essere assolute ma zero rispetto a P1 input, lasciando y a zero sarebbe inutile l'imput.
Però non funziona perchè mette il secondo rettangolo in un punto lontanissimo.
Buon pranzo A.
Terminator Inserito il - 10 novembre 2014 : 21:28:28
E' molto semplice:
Il punto P1 si ottiene con (getpoint), coox è la coordinata x, che all'inizio è settata a zero.
Il programma inserisce il primo rettangolo e prima di cominciare a disegnare il secondo viene ricalcolato il nuovo punto P1. Il punto P1 è formato dalla coordinata x e y unite in formato lista -> (list x y).
La nostra coordinata y è sempre a zero perché i rettangoli si disegnano sull'asse x. Ottengo una nuova coordinata x sommando la vecchia con il nuovo spostamento e il tutto viene memorizzato sempre in coox. Alla fine avrò sempre la variabile coox aggiornata, prima di disegnare il rettangolo successivo. Spero che la mia spiegazione non sia stata troppo farraginosa:

(setq P1 (list (setq coox(+ coox (+ lunghezza taglio (/ lunghezza 10)))) 
                0
         )
)


albertoromano Inserito il - 10 novembre 2014 : 20:51:43
10 nov 2014
Un saluto a tutti, ho fatto il compitino e funziona quasi.
Non sono riuscito a capire come funziona la variabile coox nel senso che la lista é chiara
ma il programma va a mettere i rettangoli successivi in un punto che non capisco come calcola.
Forse c'è qualche variabile da settare?
Perché scrive il messaggio finale due volte?







(defun C:SERIER (/ pezzi nome A B)
(setq pezzi (getint "\nnumero dei pezzi: ")
NOME (getstring "\nNOME: ")
A (getdist "\nLUNGHEZZA: ")
B (getdist "\nLARGHEZZA: ")
)
(rett pezzi NOME A B)
)


(defun rett (pezzi nome lunghezza larghezza / taglio P1 P2 P3)
;(defun rett ()
; (setq P1 (list 0 0 ) coox 0)
(setq P1 (getpoint "\nPosizione: ") coox 0)
(repeat pezzi
(setvar "CMDECHO" 0)
(setvar "OSNAPCOORD" 1)
(setvar "BLIPMODE" 0)
(setvar "OSMODE" 63)
(setq taglio 20)
(setq P2 (polar P1 0 (+ taglio A)))
(setq P3 (polar P2 (* (/ pi 2) 3) (+ taglio B)))
(vl-cmdf "_RECTANG" P1 P3)
(vl-cmdf "_TEXT" "_J" "M" (polar P1 (angle P1 P3)(/ (distance P1 P3) 2)) "" "" (strcat nome " " (rtos A 5) " " (rtos B 5)))
(setq P1 (list (setq coox (+ coox (+ lunghezza taglio 80))) 0 ))
)
(print "messaggio")
)
Terminator Inserito il - 10 novembre 2014 : 08:35:39
Alla quart'ultima riga manca una parentesi chiusa, ma non è questo il punto. La funzione che ti ho scritto era già funzionante così. Infatti basta scrivere, ad esempio: (rett 5 "PIPPO" 500 300)

Sintassi: (rett pezzi nome lung larg)
Argomenti:
pezzi - numero rettangoli da inserire
nome - stringa indicante nome da assegnare
lung - lunghezza rettangoli
larg - larghezza rettangoli

Di default, onde evitare ulteriori input, il punto in alto a sx del primo rettangolo è 0,0.
Poi, non puoi chiamare il comando serie perché è già un comando AutoCAD, anche se carichi il comando, continuerà a proporti il serie di default. Per usare il tuo nuovo comando dovresti disattivare il comando serie con il comando _UNDEFINE. Meglio che gli cambi il nome. Volendo, si può inserire pure il punto di origine che decidi tu, ma lascio a te l'onore di inserirlo nella funzione, hai tutti gli input.

(defun C:SERIER (/ pezzi nome A B)
 (setq pezzi (getint "\nnumero dei pezzi: ")
       NOME (getstring "\nNOME: ")
       A (getdist "\nLUNGHEZZA: ")
       B (getdist "\nLARGHEZZA: ")
 )
 (rett pezzi NOME A B)
)


(defun rett (pezzi nome lunghezza larghezza / taglio P1 P2 P3)
 (setq P1 (list 0 0) coox 0)
 (repeat pezzi
 (setvar "CMDECHO" 0)
 (setvar "OSNAPCOORD" 1)
 (setvar "BLIPMODE" 0)
 (setvar "OSMODE" 63)
 (setq taglio 20)
 (setq P2 (polar P1 0 (+ taglio lunghezza)))
 (setq P3 (polar P2 (* (/ pi 2) 3) (+ taglio larghezza)))
 (vl-cmdf "_RECTANG" P1 P3)
 (vl-cmdf "_TEXT" "_J" "M"  (polar P1 (angle P1 P3)(/ (distance P1 P3) 2)) "" "" (strcat nome " " (rtos lunghezza 5) " " (rtos larghezza 5)))
 (setq P1 (list (setq coox(+ coox (+ lunghezza taglio (/ lunghezza 10)))) 0)) 
 ) 
 (princ)
)
albertoromano Inserito il - 10 novembre 2014 : 07:56:17
Buongiorno a tutti, ho tentato di completare il lisp prposto da Terminator, ma non riesco a caricarlo col cad che mi dà il messaggio : << errore: elenco errato nell'input. >>


;7 nov 2014
;
;Bene, allora studiati questa funzione e comprendi perché è stata strutturata in questo modo.
;E' la funzione che traccia i rettangoli distanziati.
;
;
;(defun c:serie (pezzi nome lunghezza larghezza / taglio P1 P2 P3)
(defun c:serie ()
(setvar "CMDECHO" 0)
(setvar "OSNAPCOORD" 1)
(setvar "BLIPMODE" 0)
(setvar "OSMODE" 63)
(setq taglio 20)
(setq coox 100)

(setq pezzi (getint "\nnumero dei pezzi: "))
(setq NOME (getstring "\nNOME: "))
(setq A (getdist "\nLUNGHEZZA: "))
(setq B (getdist "\nLARGHEZZA: "))
(setq P1 (getpoint "\nANGOLO ALTO SX DEL RETTANGOLO: "))
(repeat pezzi
;;(setq P1 (list 0 0) coox 0)
(setq P2 (polar P1 0 (+ taglio lunghezza)))
(setq P3 (polar P2 (* (/ pi 2) 3) (+ taglio larghezza)))
(vl-cmdf "_RECTANG" P1 P3)
(vl-cmdf "_TEXT" "_J" "M" (polar P1 (angle P1 P3)(/ (distance P1 P3) 2)) "" "" (strcat nome " " (rtos lunghezza 5) " " (rtos larghezza 5)))
(setq P1 (polar p1 0 (+ taglio lunghezza 100 )
;(setq P1 (list (setq coox(+ coox (+ lunghezza taglio 100)))))
)
(princ)
Terminator Inserito il - 07 novembre 2014 : 19:39:58
GP, parole sante, condivido in pieno!
albertoromano Inserito il - 07 novembre 2014 : 16:30:24
Sono senza parole... Un team ai massimi livelli... Grazie ragazzi per i contributi, domattina si studia, molto bene.
Un saluto a tutti. A.
GP Inserito il - 07 novembre 2014 : 16:16:07
Quella è un'impostazione dello STILE, non del testo, volendo si potrebbe verificare per lanciare la giusta sequenza del (command "text"...

(if (zerop (cdr (assoc 40 (tblsearch "STYLE" (getvar 'textstyle)))))..........


Comunque, parere mio, due righe di entmake tolgono la paura.
arri Inserito il - 07 novembre 2014 : 14:01:07
Messaggio inserito da Terminator

Oops, battuto sul tempo, comunque, mi dispiace arri, anche se setto la variabile TEXTSIZE, se nello stile non ho l'altezza impostata, me la chiede.


sono arruginito

Terminator Inserito il - 07 novembre 2014 : 13:54:31
Oops, battuto sul tempo, comunque, mi dispiace arri, anche se setto la variabile TEXTSIZE, se nello stile non ho l'altezza impostata, me la chiede.
Terminator Inserito il - 07 novembre 2014 : 13:50:58
Bene, allora studiati questa funzione e comprendi perché è stata strutturata in questo modo. E' la funzione che traccia i rettangoli distanziati.

(defun rett (pezzi nome lunghezza larghezza / taglio P1 P2 P3)
 (setq P1 (list 0 0) coox 0)
 (repeat pezzi
 (setvar "CMDECHO" 0)
 (setvar "OSNAPCOORD" 1)
 (setvar "BLIPMODE" 0)
 (setvar "OSMODE" 63)
 (setq taglio 20)
 (setq P2 (polar P1 0 (+ taglio lunghezza)))
 (setq P3 (polar P2 (* (/ pi 2) 3) (+ taglio larghezza)))
 (vl-cmdf "_RECTANG" P1 P3)
 (vl-cmdf "_TEXT" "_J" "M"  (polar P1 (angle P1 P3)(/ (distance P1 P3) 2)) "" "" (strcat nome " " (rtos lunghezza 5) " " (rtos larghezza 5)))
 (setq P1 (list (setq coox(+ coox (+ lunghezza taglio (/ lunghezza 10)))) 0)) 
 ) 
 (princ)
)


Per quanto riguarda la variabile del testo, aspettiamo l'intervento di arri, che molto probabilmente lo sa...
arri Inserito il - 07 novembre 2014 : 13:48:27
Messaggio inserito da albertoromano
quella variabile è TEXTSIZE?



http://exchange.autodesk.com/autocad/enu/*-help/search#WS1a9193826455f5ffa23ce210c4a30acaf-4e49.htm

TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,34 secondi.