AutoCad - Convertir Polilinea 3D en Polilinea (con su altura

 
Vista:

Convertir Polilinea 3D en Polilinea (con su altura

Publicado por belrod (2 intervenciones) el 05/03/2010 20:23:09
Hola!

Soy nuevo en este foro y totalmente novato en el mundo del diseño en Autocad...

La cuestion es que tengo en autocad un plano cartografico aereo del centro de una ciudad donde los edificios estan representados por polilineas 3d. Es decir, estan situados en el plado en una posicion X e Y determinada pero tambien su altura puede variar en Z a lo largo de la polilinea (imaginad por ejemplo que un edificio mide en 15 metros de alto en una parte de la polilinea y 15. 01 en otra parte).

Pues bien, necesito pasar esas Polilineas 3d a Polilineas a secas pero que guarden la altura que tenia la Polilinea 3d, es decir, que sean de tipo Polilinea pero que guarden en su atributo "Elevacion" la altura Z que anteriormente tenia la Polilinea 3d... No se si me explico...

Ya he leido por ahi que existe el comando FLATTEN que deja la componente Z=0 en las polilineas 3d, pero esto no me sirve por 2 motivos:

-Aunque tengan altura 0 en todo su Z, siguen siendo Polilineas 3d y yo necesito Polilineas a secas
-Necesito conservar la altura en el atributo elevacion y de esta forma solo me queda una polilinea 3d pegada al suelo pero la altura la pierdo.

Bueno, espero que alguien pueda iluminarme! Quizas hay alguna opcion magica en autocad que hace lo que estoy preguntando... Pero es que estoy muy perdido!

Saludos y gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por Gerardo (986 intervenciones) el 05/03/2010 21:08:31
Hola

Eso se puede hacer mediante una rutina.
Yo podria facilitartela.

Tengo una pregunta. Si una polilinea en 3d tiene diversas elevaciones, como por ejemplo 15.0 en un punto y 15.01 en otro, cual es la elevacion que debe quedar para la polilinea liviana? Debes darme un criterio fijo como por ejemplo, la menor, la mayor, el promedio...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por belrod (2 intervenciones) el 06/03/2010 11:19:38
Hola Gerardo,

Ante todo muchas gracias por tu respuesta.

Creo que el mejor criterio fijo que podemos elegir sería el promedio ya que de esta forma el error cometido en cualquier punto estará minimizado.

Si puedes hacerlo te estaría super agradecido.

Estamos en contacto!

Un saludo y muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por Gerardo (986 intervenciones) el 09/03/2010 16:15:07
Bien, aqui hay un intento de rutina, que me parece que funciona bien, Tu tendras que probarla en tus dibujos a ver como va y ya me diras.

Como vez es dificil pasar rutinas por aqui porque no puedo adjuntarlo como archivo, entonces te copio el codigo. Solo debes copiarlo asi en un archivo con extension ".lsp" y cargarlo en el cad.

Por si acaso no supieras como cargar la rutina, se hace desde el comando _appload o simplemente arrastrando el icono del archivo .lsp sobre la pantalla grafica de autocad. Tambien te funciona si copias el texto que te adjunto textual en la linea de comandos del cad, pero seria tedioso hacer eso cada vez que quieras cargarla.

El nuevo comando que creamos se llama "p3d->p2d" y tambien puedes llamarlo con p3p2

El codigo de la rutina a continuacion:
*************************************************************************************


;Comando que convierte polilineas 3d en polilineas livianas tomando como altura un promedio
;de las elevaciones de los vertices de la 3dpoly
(defun c:p3d->p2d ( / ss i poly3d vertice lent pt xy z lstz lstpt elev lentlw tmp semilst)
(setq ss (ssget '((0 . "POLYLINE")))
i 0)
(repeat (sslength ss)
(setq poly3d (ssname ss i)
i (1+ i)
vertice poly3d
lstz nil
lstpt nil
)
(while (= "VERTEX"
(cdr (assoc 0
(setq vertice (entnext vertice)
lent (entget vertice))
))
)
(setq pt (cdr (assoc 10 lent))
xy (list (car pt)(cadr pt))
z (last pt)
lstz (cons z lstz)
lstpt (cons xy lstpt)
)
)
(setq elev (/ (apply '+ lstz) (length lstz))
lstpt (reverse lstpt)
lent (entget poly3d)
semilst nil
lentlw (append
(list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(410 . "Model")
(assoc 8 lent)
(cons 38 elev)
(cons 62 (if (setq tmp (assoc 62 lent)) tmp (atoi (getvar "CECOLOR"))))
(cons 6 (if (setq tmp (assoc 6 lent)) tmp (getvar "CELTYPE")))
(cons 48 (if (setq tmp (assoc 48 lent)) tmp (getvar "CELTSCALE")))
'(100 . "AcDbPolyline")
(cons 90 (length lstpt))
(cons 70 (logand 129 (cdr (assoc 70 lent))))
'(43 . 0.0)
)

(foreach caso lstpt
(setq semilst (append semilst (list (cons 10 caso) '(42 . 0)))))

(list (assoc 210 lent))
)
)
(if (entmake lentlw)
(entdel poly3d)
)
)
)

(defun c:p3p2 nil (c:p3d->p2d))

(princ "\n\n\n\n\t\t\tNuevo comando cargado: \"p3d->p2d\" o \"p3p2\"\n\n\n\n\n\n\t\t\tPor Gerardo Calvo ([email protected])\n\n\n\n\n")
(textscr)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por EDUARDO RODRIGUEZ (3 intervenciones) el 13/03/2010 21:14:17
Eso si que fue impresionante ya quisiera yo programar asi dime esto es autolisp ,me recomiendas algun libro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por Gerardo (986 intervenciones) el 13/03/2010 21:45:26
Hola.

Eso es autolisp, una de las muchas formas que tiene el autocad para ser personalizado y de los varios lenguajes de programacion que se pueden usar sobre el.

En este mismo sitio web hay un manual que a mi me ayudo mucho a aprender. El de Jonathan Prestamo.
http://www.lawebdelprogramador.com/cursos/autocad/autocad_inicio.php

Otra fuente imprescindible es el propio archivo de ayuda de personalizacion del autocad. Para verlo puedes abrir el IDE de Visual Lisp (comando _vlide en autocad) y ahi le das F1

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por Gerardo (986 intervenciones) el 04/01/2012 20:02:06
Habia un error en la rutina, que me lo hizo notar el amigo Cesar Esparza. Disculpas por eso y aqui esta corregido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
;Comando que convierte polilineas 3d en polilineas livianas tomando como altura un promedio
;de las elevaciones de los vertices de la 3dpoly
(defun c:p3d->p2d ( / ss i poly3d vertice lent pt xy z lstz lstpt elev lentlw tmp semilst)
(setq ss (ssget '((0 . "POLYLINE")))
i 0) 
(repeat (sslength ss) 
(setq poly3d (ssname ss i) 
i (1+ i) 
vertice poly3d 
lstz nil 
lstpt nil 
) 
(while (= "VERTEX" 
(cdr (assoc 0 
(setq vertice (entnext vertice) 
lent (entget vertice)) 
)) 
) 
(setq pt (cdr (assoc 10 lent)) 
xy (list (car pt)(cadr pt)) 
z (last pt) 
lstz (cons z lstz) 
lstpt (cons xy lstpt) 
) 
) 
(setq elev (/ (apply '+ lstz) (length lstz))
lstpt (reverse lstpt)
lent (entget poly3d)
semilst nil
lentlw (append
(list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(410 . "Model")
(assoc 8 lent) 
(cons 38 elev) 
(if (setq tmp (assoc 62 lent)) tmp (cons 62 (atoi (getvar "CECOLOR"))))
(if (setq tmp (assoc 6 lent)) tmp (cons 6 (getvar "CELTYPE")))
(if (setq tmp (assoc 48 lent)) tmp (cons 48 (getvar "CELTSCALE"))) 
'(100 . "AcDbPolyline")
(cons 90 (length lstpt))
(cons 70 (logand 129 (cdr (assoc 70 lent))))
'(43 . 0.0)
) 

(foreach caso lstpt 
(setq semilst (append semilst (list (cons 10 caso) '(42 . 0)))))
 
(list (assoc 210 lent))
)
)
(if (entmake lentlw)
(entdel poly3d)
)
)
)
 
(defun c:p3p2 nil (c:p3d->p2d))
 
(princ "\n\n\n\n\t\t\tNuevo comando cargado: \"p3d->p2d\" o \"p3p2\"\n\n\n\n\n\n\t\t\tPor Gerardo Calvo (gerardogqa@yahoo.es)\n\n\n\n\n")
(textscr)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por ROCIO RODRIGUEZ (1 intervención) el 18/09/2014 17:59:08
EXCELENTE RUTINA MUCHISIMAS GRACIAS POR FACILITARNOS EL TRABAJO CON TUS CONOCIMIENTOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por enrique (1 intervención) el 28/08/2016 23:19:17
excelente amigo gracias por la ayuda
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por jorge cacees (1 intervención) el 28/11/2017 17:18:20
ERES UN MASTER ME AHORRASTE UN CH... DE TIEMPO PARA CIVIL CAD FELICITACIONES Y DIME DONDE TE PONGO 20 ESTRELLAS SALUDOS Y GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir Polilinea 3D en Polilinea (con su alt

Publicado por Tarsi (1 intervención) el 17/01/2013 13:16:47
Impresionante!!! gracias, ahora puedo continuar con mi proyecto de final de carrera
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar