Newsgroup: it.comp.software.cad
Titolo: Autocad....un aiuto

Come creare una rampa in autocad che segua un andamento non rettilineo?
Mi spiego meglio..........dovrei creare una rampa che sale intorno a un
cilindro (non tutt'intorno per 360 gradi ma per 45 gradi) come fare? e
poi.......come creare la superfice che e' compresa tra la rampa e il piano
di base?
Grazie a tutti per eventuali suggerimenti

 non avendo null'altro da fare, ha scritto:

Essite un LISP per fare le scale a chiocciola, lo allego:
;SPST.LSP
;Copyright 1995 Xue-dong Zhao
;Modificata ed adattata alle esigenze italiane da Aniello Annunziata
per CADLandia
;
;Disegna una scala a chiocciola
;
;--------------------------------------------------------------------
;Funzione principale
;--------------------------------------------------------------------
(defun c:scalachioc ( / zcmd zblp zosm cn ag0 r1 r2 ag ht rase
                  dag dht ag1 tyn ty rw rn rt p1 p2 p3 p4
                  pa pb b1 b2 b31 b41 b5 b6 b32 b42 
                  plist lista listb nr
              )
   (setq zcmd (getvar "cmdecho")
         zblp (getvar "blipmode")
         zosm (getvar "osmode")
   )
   (setvar "cmdecho" 0)
   (initget 1)
   (setq cn  (getpoint "\nCentro della scala:")) 
   (initget 1)
   (setq ag0 (getangle cn "\nAngolo di rotazione del primo gradino:"))
   (initget 7)
   (setq r1  (getdist cn "\nRaggio interno:"))
   (initget 7)
   (setq r2  (getdist cn "\nRaggio esterno:"))
   (initget 3)
   (setq ag  (getreal "\nAngolo totale tra il primo e l'ultimo
gradino:"))
   (initget 3)
   (setq ht  (getreal "\nAltezza della scala [+ alto][- basso]:"))
   (initget 7)
   (setq nr  (getint "\nNumero di gradini:")
         ag (* pi (/ ag 180.0))
         rase (/ ht nr)
         dag  (/ ag nr)
         dht  (/ ht (1+ nr))
         ag1  (- ag0 dag)
         tyn 8
   )
   (setvar "osmode" 0)
   (setvar "blipmode" 0)
   (initget 1 "A B")
   (setq ty (getkword "\nTipo della scala (A con corrimano, B con
ringhiera chiusa) <A><B>:"))
   (initget 5)
   (setq rw (getreal "\nLarghezza del corrimano:"))
   (initget 5)
   (setq rh (getreal "\nQuota del corrimano:"))
   (initget 1)
   (if (= ty "A")
       (setq rt (* -1 (getreal "\nSpessore (altezza) del corrimano:"))
tyn 4)
   )
   (repeat (+ nr 1)
     (setq ag1 (+ ag1 dag)
           p1 (polar cn ag1 r1)
           p2 (polar cn ag1 r2)
           p3 (sp p1 dht)
           p4 (sp p2 dht)
     )
     (if (minusp ht)
         (setq pa (sp p1 (* 2 dht))         
               pb (sp p2 (* 2 dht))
         )
         (setq pa (sp p1 (* -1 dht))
               pb (sp p2 (* -1 dht))
         )
     )
     (if (and (equal ag1 ag0 0.001)(null (minusp ht)))
         (setq pa p1 pb p2)
     )
     (if (and (equal ag1 (+ ag0 ag) 0.001)(minusp ht))
         (setq pa (sp p1 dht) 
               pb (sp p2 dht)
     ))
     (setq b1 (sp p1 rh)
           b2 (polar b1 ag1 rw)
           b31 (polar p1 ag1 rw)
           b41 (polar cn ag1 (- r2 rw))
           b5 (sp b41 rh)
           b6 (polar b5 ag1 rw)
           b32 (sp b31 dht)
           b42 (sp b41 dht)
     )
     (if (= ty "A")
         (setq plist (append plist (list pa p1 p2 pb pa p3 p4 pb))
               lista (append lista (list b1 b2 (sp b2 rt)(sp b1 rt)))
               listb (append listb (list b5 b6 (sp b6 rt)(sp b5 rt)))
         )
     )
     (if (= ty "B")
         (setq plist (append plist (list pa b1 b2 b31 b41 b5 b6 pb
                                         pa b1 b2 b32 b42 b5 b6 pb))
         )
     )
     (setq cn (list (car cn)(cadr cn)(+ (caddr cn) dht)))
   )
   (setq nr (length plist))
   (command "_3dmesh" (/ nr tyn) tyn)
   (repeat nr
      (command (car plist))
      (setq plist (cdr plist))
   )
   (spstnc)
   (if lista
       (progn (setq nr (length lista))
              (command "_3dmesh" (/ nr 4) "4")
              (repeat nr (command (car lista))
                         (setq lista (cdr lista))
              )
              (spstnc)
              (command "_3dmesh" (/ nr 4) "4")
              (repeat nr (command (car listb))
                         (setq listb (cdr listb))
              )
              (spstnc)
       )
   )
   (setvar "osmode" zosm)
   (setvar "blipmode" zblp)
   (setvar "cmdecho" zcmd)
   (princ)
)
;
;--------------------------------------------------------------------
;Ottieni i punti incrementato dell'altezza del gradino in direzione Z
;--------------------------------------------------------------------
(defun sp ( pt h)
   (list (car pt)(cadr pt)(+ (caddr pt) h))
)
;
;--------------------------------------------------------------------
;Chiudi la 3D Mesh quando è l'ultima entità in direzione N
;--------------------------------------------------------------------
(defun spstnc ( / en ed )
   (setq en (entlast)
         ed (entget en)
         ed (subst (cons 70 48)(assoc 70 ed) ed)
   )
   (entmod ed)
)
;
;--------------------------------------------------------------------
;Messaggio stampao su caricamento
;--------------------------------------------------------------------
;
(princ "\nSPST.LSP caricato. Digita SCALACHIOC per disegnare una scala
a chiocciola.")
(princ)
Basta copiarla in un file testo e salvarlo come chiocciola.lsp
A questo punto la si carica da AutoCAD (_APPLOAD) e la si esegue
digitando SCALACHIOC
A questo punto chiederà passo passo tutte le variabile, ed ecco alla
fine la scala a chiocciola che serve, compresa di corrimano, Ora si
deve solo creare il cilindro che rappresenta il pilastro da cui escono
i gradini!
Aniello Annunziata
Webmaster di CADLandia
aniello.a...@cadlandia.com
www.cadlandia.com

 Aniello Annunziata
Ti ringrazio molto.....ma il mio problema e' se vogliamo piu'
banale...........non facevo riferimento cioe' a una rampa di gradini ma
semplicemnte a una rampa ovvero a una superfice che collega due punti posti
su quote differenti e che non segua un andamento rettilineo ma curvo
(l'esempio che puo' calzare maggiormente penso sia quello della rampa per
auto che porta in un garage)
ti sarei molto grato se mi aiutassi perche' tra le vare superfici che
autocad mette a disposizione non riesco ad individuare una procedura che me
la faccia costruire.
(i dati in mio possesso sono i seguenti: veduta della rampa in planimetria
ovvero dall'alto e la quota di inizio e quella finale)
un saluto
Gaetano

auto che porta in un garage)
Ecco fatto quello che ti serve, partendo dalla routine che ho mandato
prima, ho sviluppato questa routine che dovrebbe fare al caso tuo (e
di molti altri), magari se si vede che serve si può perfezionare, per
cui accetto consigli.
Tutto il materiale che posto qui, poi, con calma verrà messo su
CADLandia per cui se lo perdete qui lo potrete trovare sul sito
(
www.cadlandia.com
)
--- Inizio Lisp ---
;;; ELIRAMP.LSP
;;; Copyright 2000 Aniello Annunziata
;;;
;;; Disegna una rampa elicoidale
;--------------------------------------------------------------------
;Funzione principale
;--------------------------------------------------------------------
(defun c:eliramp ()
   (setq zcmd (getvar "cmdecho")	; setto le variabili
d'ambiente
         zblp (getvar "blipmode")
         zosm (getvar "osmode")
   )
   (setvar "cmdecho" 0)
   (initget 1)		; chiedo i dati in input
   (setq centro  (getpoint "\nCentro della rampa: ")) 
   (initget 1)
   (setq ang0 (getangle centro "\nAngolo dell'inizio della rampa: "))
   (initget 7)
   (setq r1  (getdist centro "\nRaggio interno: "))
   (initget 7)
   (setq r2  (getdist centro "\nRaggio esterno: "))
   (initget 3)
   (setq ang  (getreal "\nAngolo totale tra l'inizio e la fine della
rampa: "))
   (initget 7)
   (setq ht  (getreal "\nAltezza della rampa: "))
   (initget 7)
   (setq np  (getint "\nPunti di definizione della rampa: "))
   (setq ang (* pi (/ ang 180.0))	; converto ang in radianti
         deltah (/ ht (- np 1))		; trovo il delta h per ogni
passo
         deltang  (/ ang (- np 1))	; trovo il delta angolare per
ogni passo
         ang1  (- ang0 deltang)		; setto l'angolo iniziale
   )
   (setvar "osmode" 0)
   (setvar "blipmode" 0)
   (setq cont -1)
   (repeat  np 				; calcolo i punti e li accodo
alla lista
     (setq cont (+ cont 1))		; aggiorno il contatore
     (setq ang1 (+ ang1 deltang)	; aggiorno l'angolo
           p1 (polar centro ang1 r1)	; calcolo il punto interno
           p2 (polar centro ang1 r2)	; calcolo il punto esterno
           p1 (sp p1 (* cont deltah))	; elevo il punto interno
           p2 (sp p2 (* cont deltah))	; elevo il punto esterno
     )
     (setq plist (append plist (list p1 p2)))	; lo accodo alla lista
   )					; fine ciclo
   (setq np (length plist))		; trovo la lunghezza della
lista
   (command "_3dmesh" (/ np 2) 2)	; do il comando 3dmesh
   (repeat np				; fornisco i punti
      (command (car plist))
      (setq plist (cdr plist))
   )
   (setvar "osmode" zosm)		; setto le variabili
d'ambiente al valore precedente
   (setvar "blipmode" zblp)
   (setvar "cmdecho" zcmd)
   (princ)
)
;
;--------------------------------------------------------------------
;Ottieni i punti incrementato dell'altezza del gradino in direzione Z
;--------------------------------------------------------------------
(defun sp ( pt h)
   (list (car pt)(cadr pt)(+ (caddr pt) h))
)
;
;--------------------------------------------------------------------
;Messaggio stampato su caricamento
;--------------------------------------------------------------------
;
(princ "\nELIRAMP.LSP caricato. Digita ELIRAMP per disegnare la rampa
elicoidale.")
(princ)
--- Fine Lisp ---
La procedura per installarlo è uguale a quella di prima, si salva il
contenuto tra il tag Inizio Lisp e fine Lisp in un file di testo,
dopodichè si salva il file con estensione LSP e lo si carica in
AutoCAD digitando APPLOAD (o CARICAPP in italiano) e selezionando il
file da caricare, a quel punto digitare ELIRAMP ed il gioco è fatto.
Ora m'è venuta in mente un'altra ottimizzazione, che però non farò in
questa LIsp ma lascio ad un'altra Lisp, la LISP m2s.lsp che ho postato
su questo NG in risposta all'articolo "1) intersezione di superfici e
2) acad.pgp" di  Xenon dell' 1/9/2000.
Questa Lisp "solidifica" una mesh.
Il lisp che ho creato crea una superficie, per molte applicazioni c'è
bisogno dello spessore (Anche se si vuole fare una sezione), per cui
con la Lisp fornita si crea un solido.
L'unico difetto di questo solido è che non ha spesore costante, ma
parte sempre dalla quotapiù bassa, per risolvere, uan volta creato il
solido, lo si duplica, si posiziona quello duplicato più in basso in
direzione Z dello spessore della soletta e si sottrae questo da quello
che sta sopra ed il gioco è fatto.
LIMITAZIONI.
Questo procedimento non funziona per rampe che si avvitano per più di
360 gradi, in quei casi, conviene spezzare in più parti la rampa,
ognuna massimo di 360 gradi.
uns empio può essere una rampa che sale in un garage veritcale. La si
può facilemnte scomporre in unità ripetibili, magari di 360° e 180°
dunque si risolve, insomma, gli strumenti base ci sono, ora un po' di
fantasia per modificarli.


 wrote in message
SRzr5.28613$Wi7.3...@news.infostrada.it...

Mi è capitato di dovere risolvere lo stesso problema: ho disegnato la forma
in pianta ( con una poli 3d) e poi ho ruotato con un ucs sun un piano
verticale.
So bene che non è esattamente quello che hai chiesto ma se deve fare solo 45
gradi potrebbe funzionare.