• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Polilinee da portare in quota

mirabeau

Utente poco attivo
Professione: impiegato
Software: AutoCAD
Regione: Sicilia
#1
Ciao a tutti,

avrei bisogno di un lisp (a pagamento s'intende) che esegua le seguenti operazioni su spline e/o polilinee:

immettere quota di riferimento;
selezionare la polilinea (o spline);
immettere la distanza in altezza delle polilinee;
selezionare polilinea successiva.

In sostanza ho delle isoipse che devo alzare una ad una sino a portarle alla rispettiva quota. Ho bisogno che il processo sia automatizzato, cioè selezionare la curva di livello ed automaticamente portarla in quota.
Naturalmente la distanza in altezze delle isoipse è costante.

Grazie
 

GP.

Utente Senior
Professione: Nientologo
Software: uozapp
Regione: Vercelli
#2
Qui trovi il lisp che fa per te:

http://www.sepram.com/applicazioni_lisp.htm


Cambia elevazione a curve
Con questa funzione è possibile cambiare velocemente l'elevazione a delle polilinee che rappresentano le curve di livello. Il programma chiede la quota della prima polilinea, i punti dell'intercetta e l'equidistanza tra le curve di livello.
 

mirabeau

Utente poco attivo
Professione: impiegato
Software: AutoCAD
Regione: Sicilia
#3
grazie GP

subito dopo aver scritto il messaggio ho cercato in rete ed ho trovato il lisp della sepram. Purtroppo non funziona con le spline. Ho provato a modificarlo ma senza successo. Rimane quindi valida la mia richiesta.

ciao :D
 

liber

Utente Standard
Professione: tiralinee
Software: autocad map
Regione: Sotto la Gabbia
#4
Ultima modifica:

GP.

Utente Senior
Professione: Nientologo
Software: uozapp
Regione: Vercelli
#5
Quella di liber è un'ottima soluzione, ma credo che per mantenere una buona definizione nella geometria della spline occorrerà convertirla in una poly con una marea di vertici.

Se vuoi prova a modificare il lisp aggiungendo le le righe di codice evidenziate in rosso.

A me funziona, al limite prova.

Non ti ho postato il lisp modificato perchè c'è il Copyright dell'autore e non vorrei combinare qualche casino.



(defun c:CEC ()
(setvar "cmdecho" 0)
(if (not equi)(c:CEC-x))
(setq qt(getreal "\n....... Quota curva iniziale <m>: "))
(setq P1(getpoint "\n....... Primo punto dell'intercetta:"))
(setq P2(getpoint P1 "\n....... Secondo punto dell'intercetta:"))
(setq GruppoPoly(ssget "_F" (list P1 P2) (list (cons -4 "<OR")(cons 0 "POLYLINE")(cons 0 "SPLINE")(cons 0 "LWPOLYLINE")(cons -4 "OR>"))))
(setq i 0 Zpunto-new qt)
(repeat (sslength GruppoPoly)
(setq Polyx(entget(ssname GruppoPoly i)))


(if (= (cdr(assoc 0 Polyx)) "POLYLINE")
(progn
(setq punto(cdr(assoc 10 Polyx)))
(setq punto-new(list (car punto) (cadr punto) Zpunto-new))
(setq Polyx (subst (cons 10 punto-new) (assoc 10 Polyx) Polyx))(entmod Polyx)
)
(progn(setq Polyx (subst (cons 38 Zpunto-new) (assoc 38 Polyx) Polyx))(entmod Polyx))
)

(if (= (cdr (assoc 0 Polyx)) "SPLINE")
(progn
(setq lista2 nil)
(setq cont 0)
(repeat (length Polyx)
(Setq lista1 (Nth cont Polyx))
(If (= (Car lista1) 10)
(SETQ lista2 (subst Zpunto-new (last lista1) lista1))
)
(If (= (Car lista1) 11)
(SETQ lista2 (subst Zpunto-new (last lista1) lista1))
)
(setq cont (1+ cont))
(if lista2 (setq Polyx (subst lista2 lista1 Polyx)))
)
(entmod Polyx)
)
)


(setq Zpunto-new(+ Zpunto-new equi))
(setq i(1+ i))
)
(princ "\n Lavoro eseguito!")(princ)
)
(defun c:CEC-x ()
(setq equi(getreal "\n....... Equidistanza <m>: "))
(princ)
)
(princ "\n <Copyright: ing. Claudio Granuzzo> Digitare CEC per lanciare il programma!")
(princ "\n Digitare CEC-X per cambiare equidistanza!")
(princ)
 

mirabeau

Utente poco attivo
Professione: impiegato
Software: AutoCAD
Regione: Sicilia
#6
Grazie di nuovo GP.
Se dovessi venire dalle mie parti, pizza e birra pagate.
Naturalmente grazie anche a liber, anche la sua soluzione non è male.

ciao :D
 

GP.

Utente Senior
Professione: Nientologo
Software: uozapp
Regione: Vercelli
#7
Prego, spero che ti funzioni.

Però, visto che ti sei sbilanciato, puoi sicuramente accontentare liber.
 

davide new

Utente poco attivo
Professione: studente
Software: autocad,arcgis,3dmax,photoshop
Regione: sicilia
#9
Quella di liber è un'ottima soluzione, ma credo che per mantenere una buona definizione nella geometria della spline occorrerà convertirla in una poly con una marea di vertici.

Se vuoi prova a modificare il lisp aggiungendo le le righe di codice evidenziate in rosso.

A me funziona, al limite prova.

Non ti ho postato il lisp modificato perchè c'è il Copyright dell'autore e non vorrei combinare qualche casino.



(defun c:CEC ()
(setvar "cmdecho" 0)
(if (not equi)(c:CEC-x))
(setq qt(getreal "\n....... Quota curva iniziale <m>: "))
(setq P1(getpoint "\n....... Primo punto dell'intercetta:"))
(setq P2(getpoint P1 "\n....... Secondo punto dell'intercetta:"))
(setq GruppoPoly(ssget "_F" (list P1 P2) (list (cons -4 "<OR")(cons 0 "POLYLINE")(cons 0 "SPLINE")(cons 0 "LWPOLYLINE")(cons -4 "OR>"))))
(setq i 0 Zpunto-new qt)
(repeat (sslength GruppoPoly)
(setq Polyx(entget(ssname GruppoPoly i)))


(if (= (cdr(assoc 0 Polyx)) "POLYLINE")
(progn
(setq punto(cdr(assoc 10 Polyx)))
(setq punto-new(list (car punto) (cadr punto) Zpunto-new))
(setq Polyx (subst (cons 10 punto-new) (assoc 10 Polyx) Polyx))(entmod Polyx)
)
(progn(setq Polyx (subst (cons 38 Zpunto-new) (assoc 38 Polyx) Polyx))(entmod Polyx))
)

(if (= (cdr (assoc 0 Polyx)) "SPLINE")
(progn
(setq lista2 nil)
(setq cont 0)
(repeat (length Polyx)
(Setq lista1 (Nth cont Polyx))
(If (= (Car lista1) 10)
(SETQ lista2 (subst Zpunto-new (last lista1) lista1))
)
(If (= (Car lista1) 11)
(SETQ lista2 (subst Zpunto-new (last lista1) lista1))
)
(setq cont (1+ cont))
(if lista2 (setq Polyx (subst lista2 lista1 Polyx)))
)
(entmod Polyx)
)
)


(setq Zpunto-new(+ Zpunto-new equi))
(setq i(1+ i))
)
(princ "\n Lavoro eseguito!")(princ)
)
(defun c:CEC-x ()
(setq equi(getreal "\n....... Equidistanza <m>: "))
(princ)
)
(princ "\n <Copyright: ing. Claudio Granuzzo> Digitare CEC per lanciare il programma!")
(princ "\n Digitare CEC-X per cambiare equidistanza!")
(princ)
ciao...sono nuovo e capisco ben poco.serve anche a me questo lisp.
ho fatto tutta la procedura che avete descritto, l'ho caricata nel mio autocad ma non so lanciare l'applicativo!
scusatemi per la domanda ignorante!
Vi ringrazio anticipatamente per la vostra disponibilità
Grazie
 

PlannerRoad

Moderatore
Staff Forum
Professione: Variabile
Software: AutoCAD 2016
Regione: Italia
#10
ciao...sono nuovo e capisco ben poco.serve anche a me questo lisp.
ho fatto tutta la procedura che avete descritto, l'ho caricata nel mio autocad ma non so lanciare l'applicativo!
scusatemi per la domanda ignorante!
Vi ringrazio anticipatamente per la vostra disponibilità
Grazie
C'è scritto anche alla fine del lisp qual'è il comando:

princ "\n <Copyright: ing. Claudio Granuzzo> Digitare CEC per lanciare il programma!")
(princ "\n Digitare CEC-X per cambiare equidistanza!")
(princ)