Newsgroup: it.comp.software.cad
Titolo: Lisp per quotare i segmenti di un poly

Avrei necessità di un lisp che mi inserisca un testo centrato su ogni
segmento di una polilinea chiusa. Tale testo deve indicare la lunghezza del
segmento su cui è centrato.
E' fattibile? esiste qualcosa di simile?
grazie.

E' fattibile? esiste qualcosa di simile?
Molto semplice, usa le quotature allineate. Se elimini tutte le linee
e le frecce, ed aumenti l'offset del testo rispetto alla linea di
quota, ottieni proprio quello che cerchi.
P.S. Quotatura di ferri, o parziali in un profilo altimetrico ???
Saluti, Aniello
-- 
Aniello Annunziata
Content Director Manager
www.cadlandia.com
aniello.a...@cadlandia.com
Per rispondermi in privato, togli NOGARBAGE dall'indirizzo

 ha scritto
nel messaggio news:k4dba0ts489cs27t1...@4ax.com...


 ha scritto
nel messaggio news:aiMoc.5709$%x6....@news.edisontel.com...


Ciao Claudio, grazie per l'interessamento. Quello che tu hai scritto è circa
ciò che mi serve.
In realtà io devo modificare un lisp esistente per meglio adattarlo alle mie
esigenze, quindi avrei necessita di poterlo editare. Se vuoi darmi una mano,
dimmi se posso mandarti una mail.
Ciao.
Lorenzo
"SePrAm.com" <in...@sepramNOSPAM.com> ha scritto nel messaggio
news:vc5qc.199340$hc5.8...@news3.tin.it...


Ciao Lorenzo
ti allego qui sotto il sorgente.
Tieni conto che la routine POLYListaPunti restituisce le coordinate min e
max della poly che a te non interessano.
Se hai bisogno di correzioni dimmelo.
Ciao Claudio
;;;;---------------------------------------------------------------------
;;;;---------------------------------------------------------------------
(defun c:HT ()
 (setq HTesti nil)
)
(defun c:ScriviDP ()
 (setq OSMODEprec(getvar "OSMODE"))
 (setq clay(getvar "CLAYER"))
 (setvar "OSMODE" 0)
 (setvar "CMDECHO" 0)
 (if (not HTesti)(setq HTesti(getreal "\n Altezza dei testi: ")))
 (setq poly(entsel "\n Seleziona la polilinea: "))
 (if (not poly) (exit))
 (POLYListaPunti (car poly))
   (setq ii 0)
   (repeat (- (length lista-punti) 1)
  (setq cod1_10(nth ii lista-punti))
  (setq cod2_10(nth (1+ ii) lista-punti))
  (setq DDD(rtos(distance cod1_10 cod2_10) 2 2))
    (setq pmedio(list (/ (+ (car cod1_10) (car cod2_10)) 2) (/ (+ (cadr
cod1_10) (cadr cod2_10)) 2)))
  (setq angolo0(angle cod1_10 cod2_10))
  (if (and (< angolo0 (* pi 1.5)) (> angolo0 (* 0.5 pi)))(setq angolo0(+
angolo0 pi)))
    (cond
    ((= (getvar "aunits") 0)(setq Agiro 360))
    ((= (getvar "aunits") 1)(setq Agiro 360))
    ((= (getvar "aunits") 2)(setq Agiro 400))
    ((= (getvar "aunits") 3)(setq Agiro (* 2 pi)))
  )
    (setq angolo(* angolo0 (/ Agiro (* 2 pi))))
  (command "_layer" "_m" "Lunghezze_orientate"  \r)
  (command "_text" "_c" (polar pmedio (+ angolo0 (/ pi 2)) HTesti) HTesti
angolo DDD  \r)
  (setq ii(1+ ii))
 )
 (setvar "OSMODE" OSMODEprec)
 (command "_layer" "_s" clay \r)
 (princ "\n Lavoro eseguito!")
 (princ)
)
;---------------------------------------------------------------------
(defun POLYListaPunti (RF0)
 (setq lista-punti nil)
   (setq Xmin 100000000.00)
   (setq Ymin 100000000.00)
   (setq Xmax -100000000.00)
   (setq Ymax -100000000.00)
 (setq Ramo(entget RF0))
 (if (= (cdr(assoc 0 Ramo)) "POLYLINE")
  (progn
  (setq 0ent0(entnext RF0))
  (setq 0ent(entget 0ent0))
  (setq 0entT(cdr(assoc 0 0ent)))
  (while (/= 0entT "SEQEND")
   (setq X(car (cdr(assoc 10 0ent))))
   (setq Y(cadr (cdr(assoc 10 0ent))))
   (setq Z(caddr (cdr(assoc 10 0ent))))
   (setq lista-punti(cons (list X Y Z) lista-punti))
   (setq 0ent0(entnext 0ent0))
   (setq 0ent(entget 0ent0))
   (setq 0entT(cdr(assoc 0 0ent)))
     (if (< X Xmin)(setq Xmin X))
     (if (< Y Ymin)(setq Ymin Y))
     (if (> X Xmax)(setq Xmax X))
     (if (> Y Ymax)(setq Ymax Y))
  )
  )
 )
 (if (= (cdr (assoc 0 Ramo)) "LWPOLYLINE")
  (progn
  (setq lista-punti0(member (assoc 10 Ramo) Ramo))
  (setq cont 0)
  (repeat (/ (- (length lista-punti0) 1) 4)
   (setq cod(nth cont lista-punti0))
   (setq lista-punti(cons (list (cadr cod) (caddr cod) 0) lista-punti))
     (if (< X Xmin)(setq Xmin X))
     (if (< Y Ymin)(setq Ymin Y))
     (if (> X Xmax)(setq Xmax X))
     (if (> Y Ymax)(setq Ymax Y))
   (setq cont(+ cont 4))
  )
 ))
)
;;;;---------------------------------------------------------------------
(princ "\n <copyright: ing. Claudio Granuzzo>")
(princ "\n Digitare ScriviDP per lanciare il programma!")
(princ "\n Digitare HT per modificare l'altezza dei testi!")
(princ)
;;;;---------------------------------------------------------------------
;;;;---------------------------------------------------------------------
;;;;---------------------------------------------------------------------

Sei un grande... la prima cosa che ti chiedo..è possibile mettere tutte le
scritte all'interno della poly?
ciao.
lorenzo
"SePrAm.com" <in...@sepramNOSPAM.com> ha scritto nel messaggio
news:1u5qc.199410$hc5.8...@news3.tin.it...


 ha scritto
nel messaggio news:oJ5qc.6802$%x6....@news.edisontel.com...



al dott. Granuzzo
Scusa se m'intrometto, ho visto casualmente il lisp che hai creato per
scrivere le distenze nelle polilinee.
Ho notato che usi il comando cad "dist" per prendere la distanza tra due
vertici, e questo può essere giusto nel caso si tratti di soli segmenti
retti ma se un'utente edita/disegna una polilinea curva (fittata) e ha
necessità di conoscere gli sviluppi dei vari archi che la compongono ?
C'è un modo per sapere se il segmento tra due vertici è un tratto rettilineo
o un tratto curvo ?
Ciao, Roberto
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/