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
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Precedente
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 07 novembre 2014 : 13:48:27  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Messaggio inserito da albertoromano
quella variabile è TEXTSIZE?



http://exchange.autodesk.com/autocad/enu/*-help/search#WS1a9193826455f5ffa23ce210c4a30acaf-4e49.htm
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 07 novembre 2014 : 13:50:58  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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...
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 07 novembre 2014 : 13:54:31  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 07 novembre 2014 : 14:01:07  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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

Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2778 Messaggi

Inserito il - 07 novembre 2014 : 16:16:07  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 07 novembre 2014 : 16:30:24  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
Sono senza parole... Un team ai massimi livelli... Grazie ragazzi per i contributi, domattina si studia, molto bene.
Un saluto a tutti. A.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 07 novembre 2014 : 19:39:58  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
GP, parole sante, condivido in pieno!
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 10 novembre 2014 : 07:56:17  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
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)
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 10 novembre 2014 : 08:35:39  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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)
)

Modificato da - Terminator in data 10 novembre 2014 08:37:15
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 10 novembre 2014 : 20:51:43  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
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")
)
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 10 novembre 2014 : 21:28:28  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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
         )
)


Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 11 novembre 2014 : 12:07:49  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 11 novembre 2014 : 16:10:24  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
i rettangoli a partire dal secondo sono riferiti all'origine e non al punto di inserimento input.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 11 novembre 2014 : 16:19:22  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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
         )
)


Modificato da - Terminator in data 11 novembre 2014 16:21:01
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 11 novembre 2014 : 17:42:51  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 11 novembre 2014 : 19:36:21  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 11 novembre 2014 : 21:59:11  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Guarda che hai fatto un minestrone, cosa c'entra la variabile pezzi ripetuta due volte nella quint'ultima riga?

Modificato da - Terminator in data 11 novembre 2014 21:59:43
Torna all'inizio della Pagina

albertoromano
Utente Attivo

Prov.: Brescia


92 Messaggi

Inserito il - 12 novembre 2014 : 08:12:48  Mostra Profilo Invia a albertoromano un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 12 novembre 2014 : 08:53:35  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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.

Modificato da - Terminator in data 12 novembre 2014 08:53:56
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 12 novembre 2014 : 09:48:22  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Tutorial e Manuali AutoLISP
Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Precedente
 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,84 secondi.