Zanna91
Guest
questa routine permette di trasformare una polilinea che rappresenta l'andamento altimetrico del terreno in un file di sezione contenente num,x,y di ogni punto.
fonte: www.sepram.com
saluti,
giacomo
Code:
(defun c:creasez ()
(setq pol(entsel "\n....... seleziona la polilinea : "))
(if (/= pol nil)(progn
(setq nomefile(getstring "\n....... nome file txt: "))
(setq separatore(getstring "\n....... carattere separatore di num x y: "))
(if (= separatore "")(setq separatore " "))
(setq numsez(getstring "\n....... numero sezione: "))
(setq progsez(getstring "\n....... progressiva sezione: "))
(setq ff(open (strcat nomefile ".txt") "a"))
(write-line numsez ff)
(write-line progsez ff)
(if (= (cdr(assoc 0 (entget (car pol)))) "lwpolyline")(progn
(setq li-crea nil)
(setq w(getpoint "\n....... punto sulla linea di riferimento : "))
(setq quota(getreal " => a quota : "))
(setq scalay(getreal "\n....... rapporto scala distanze / scala quote : "))
(setq qrif(cadr w))
(setq conta 0)
(setq i 0)
(setq lwp(entget(car pol)))
(repeat (length lwp)
(setq lwele(nth i lwp))
(if (= (car lwele) 10)(progn
(setq x(cadr lwele))
(setq y(caddr lwele))
(setq y(+ (/ (- y qrif) scalay) quota))
(setq conta(+ conta 1))
(setq xconta(itoa conta))
(if (= conta 1) (setq xprog x))
(setq x(- x xprog))
(write-line (strcat xconta separatore (rtos x 2 2) separatore (rtos y 2 2)) ff)
)
)
(setq i (+ i 1))
)
(close ff)
) ;;;;;;<<<fine del progn che riguarda la lwpolyline>>>
(if (and (= (cdr(assoc 0 (entget (car pol)))) "polyline")(/= pol nil))(progn
(setq li-crea nil)
(setq w(getpoint "\n....... punto sulla linea di riferimento : "))
(setq quota(getreal " => a quota : "))
(setq scalay(getreal "\n....... rapporto scala distanze / scala quote : "))
(setq qrif(cadr w))
(setq pol-princ(entget (car pol)))
(setq vertice(entnext (car pol)))
(setq vert(entget vertice))
(setq conta 0)
(while (/= (cdr (assoc 0 vert)) "seqend")
(setq x(car(cdr(assoc 10 vert))))
(setq y(cadr(cdr(assoc 10 vert))))
(setq y(+ (/ (- y qrif) scalay) quota))
(setq conta(+ conta 1))
(setq xconta(itoa conta))
(if (= conta 1) (setq xprog x))
(setq x(- x xprog))
(write-line (strcat xconta separatore (rtos x 2 2) separatore (rtos y 2 2)) ff)
(setq vertice(entnext vertice))
(setq vert(entget vertice))
)
(close ff)
) ;;;;;;<<<fine dell'if che riguarda la polilinea>>>
(progn
(princ " deve essere una polyline o una lwpolyline! < premi un tasto per proseguire >")
(getstring)
(princ "\r ")
)
)
))
))
;---------------------------------------------------------------------
(princ "\n <copyright ing. claudio granuzzo - 2002> digitare creasez per lanciare il programma!")
(princ)
fonte: www.sepram.com
saluti,
giacomo