| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
belrod
Registrado: 05 Mar 2010 Mensajes: 7
|
Publicado: Vie 05 Mar, 2010 20:21 Asunto: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
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! |
|
| Volver arriba |
|
 |
Manuel B. Alonso

Registrado: 22 Feb 2010 Mensajes: 92
|
Publicado: Vie 05 Mar, 2010 20:50 Asunto: |
|
|
Hola Belrod,
Una opción sería usar la orden Convertir Polilíneas 3D en 2D. Eso sí, este comando pertenece al programa Civil 3D, programa del cual desconozco si dispones.
Ya nos cuentas.
Un saludo
Manuel _________________ Manuel B. Alonso |
|
| Volver arriba |
|
 |
JOANTOPO
Registrado: 12 Dic 2008 Mensajes: 65 Ubicación: Barcelona
|
Publicado: Vie 05 Mar, 2010 23:46 Asunto: |
|
|
| Manuel B. Alonso escribió: | Hola Belrod,
Una opción sería usar la orden Convertir Polilíneas 3D en 2D. Eso sí, este comando pertenece al programa Civil 3D, programa del cual desconozco si dispones.
Ya nos cuentas.
Un saludo
Manuel |
Lo mismo sucede con el programa MDT,que es un módulo que se instala en Autocad.
El MDT V4 lo puedes encontrar por la red,aunque es aconsejable que trabaje con el Autocad2002.
El MDT tiene la opción de convertir polilineas a 2D o 3D,digamos que cada vértice toma la cota de los puntos MDT(que no deja de ser bloques con atributos).
También tienes un programa gratuito,que es el básico de Protopo,llamado LanDTM:
http://www.landtm.com/index_sp.html
También funciona como un módulo en Autocad y también te permite hacer este tipo de cosas.
Saludos. |
|
| Volver arriba |
|
 |
_frany_

Registrado: 01 Dic 2003 Mensajes: 1382 Ubicación: Marbella (Malaga) España
|
Publicado: Vie 05 Mar, 2010 23:59 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
Otra opcion es hacer una rutina automatizada.
un saludo. _________________ Me gustaria aprender todo lo aprendible. |
|
| Volver arriba |
|
 |
belrod
Registrado: 05 Mar 2010 Mensajes: 7
|
Publicado: Sab 06 Mar, 2010 11:49 Asunto: |
|
|
| Manuel B. Alonso escribió: | Hola Belrod,
Una opción sería usar la orden Convertir Polilíneas 3D en 2D. Eso sí, este comando pertenece al programa Civil 3D, programa del cual desconozco si dispones.
Ya nos cuentas.
Un saludo
Manuel |
La verdad es que no tengo el programa Civil 3D. ¿Se trata de un programa complementario al AutoCAD o es una versión del mismo?
| JOANTOPO escribió: | Lo mismo sucede con el programa MDT,que es un módulo que se instala en Autocad.
El MDT V4 lo puedes encontrar por la red,aunque es aconsejable que trabaje con el Autocad2002.
El MDT tiene la opción de convertir polilineas a 2D o 3D,digamos que cada vértice toma la cota de los puntos MDT(que no deja de ser bloques con atributos).
También tienes un programa gratuito,que es el básico de Protopo,llamado LanDTM:
http://www.landtm.com/index_sp.html
También funciona como un módulo en Autocad y también te permite hacer este tipo de cosas.
Saludos. |
¿El MDT solo convierte polilineas a 2D o 3D? Es que yo necesito justo lo contrario, convertir de 3D a polilínea. Además, tengo el Autocad 2010 porque en Windows 7 no funciona otro... ¿Sabes si hay algun MDT para Autocad 2010?
Tambien le he hechado un ojo al LanDTM pero la verdad es que no entiendo mucho de lo que he leido, soy totalmente pez en el asunto y no se ni por donde empezar con ese programa ni como podria usarlo para lo que me interesa.
| _frany_ escribió: | Otra opcion es hacer una rutina automatizada.
un saludo. |
¿Y donde podria aprender a hacer esa rutina? ¿Seria muy complicado de programar?
De verdad siento que me estais ayudando bastante, pero por mi ignorancia y novatez en este tema es como si todo me sonara a chino. Haber si le sacamos punta a esto...jeje |
|
| Volver arriba |
|
 |
Manuel B. Alonso

Registrado: 22 Feb 2010 Mensajes: 92
|
Publicado: Sab 06 Mar, 2010 12:41 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
Hola Belrod,
Sube el DWG y te realizamos la conversión.
Un saludo _________________ Manuel B. Alonso |
|
| Volver arriba |
|
 |
JOANTOPO
Registrado: 12 Dic 2008 Mensajes: 65 Ubicación: Barcelona
|
Publicado: Sab 06 Mar, 2010 15:03 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
El MDT te permite convertir de 2D a 3D y de 3D a 2D..aunque este último se puede hacer dedse autocad con el comando flatten.(lo que pasa que luego no podrás convertir las lineas otra vez a 3D).
El truco pasa por usar puntos propios(bloques con atributos)que guarden la Z y le pasen la Z a los vértices al convertirlo a 3D o le den cota nula a los vértices al convertirlas a 2D.
El MDT4 posiblemente llegue hasta el Autocad2006,hace cosa de 3 años que hay el MDT5 y está obviamente para Autocad2010,pero dudo que lo encuentres por la red..en todo caso puedes usar una demo:
http://www.aplitop.com/webaplitop/descargas.aspx?b=0&cod=101&pagina=1
Te hará falta la licencia de evalucación que tendrás que pedir,descargar el driver de la mochila y el programa.
Respecto al LanDTM,deriva del Protopo,y es algo más rebuscado de usar,tiene un menú aparte para insertar puntos(puntos Protopo).
La mayoría de estos programas,convierten los puntos en puntos propios que reconoce su programa.
Consiste en que en un .dwg,tengas cada elemento del punto en una capa,por ejemplo,el texto del identificador(número de punto),el texto del código en otra capa,el texto de la cota en otra capa y por último el elemento señalizador del punto(cruz,círculo,etc..)en otra capa,de tal forma que a estos programas le designas en que capa están cada elemento y te los convierte a puntos propios del programa(que generalmente son bloques con atributos).
De tal forma que al convertir de 2D a 3D,al vértice de la polilinea le otorga la Z del punto que está encima de ese vértice....
Es la gran ventaja que tiene que siempre puedes pasar las polilineas de 2D a 3D o al revés.
Respecto al Civil 3D,yo también lo tengo,con una versión educacional de 13 meses para estudiantes.
El Civil 3D es un programa propio de Autodesk(fué el sustituto del Land Desktop que se usa para topografía e ingeniería civil),pero puedes usarlo como Autocad a secas,seleccionas el espacio de trabajo de "Autocad clásico" y ya lo tienes.
Por tanto,si tienes el Civil 3D no hace falta instalar el Autocad,lo que pasa que si no vas a sacarle rendimiento al Civil 3D y sólo quieres usar el Autocad,no vale la pena tenerlo ya que consume muchos recursos y mejor tener aparte el Autocad.
Saludos. |
|
| Volver arriba |
|
 |
_frany_

Registrado: 01 Dic 2003 Mensajes: 1382 Ubicación: Marbella (Malaga) España
|
Publicado: Dom 07 Mar, 2010 02:42 Asunto: |
|
|
| belrod escribió: |
¿Y donde podria aprender a hacer esa rutina? ¿Seria muy complicado de programar?
|
Podrías pones un dibujo o parte del mismo para ver que se puede hacer mediante programación.
La rutina seria en VBA o sea el que trae autocad.
No creo que sea muy complicada de hacer, pero para ti si eres novato imagino que si.
Un saludo. _________________ Me gustaria aprender todo lo aprendible. |
|
| Volver arriba |
|
 |
belrod
Registrado: 05 Mar 2010 Mensajes: 7
|
Publicado: Lun 08 Mar, 2010 00:23 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
| Manuel B. Alonso escribió: | Hola Belrod,
Sube el DWG y te realizamos la conversión.
Un saludo |
Hola Manuel,
Gracias por tu amabilidad, pero la cuestion es que no solamente tengo que hacerlo con un DWG... tengo que hacerlo con bastantes...
Y ademas forma parte de un trabajo que posteriormente tendré que exponer... por lo que tengo que hacerlo yo mismo y saber como se hace para cuando me pregunten....
Estoy consiguiendo el Civil 3D, cuando lo tenga instalado te aviso y me hechas con cable!
Gracias.
| JOANTOPO escribió: | El MDT te permite convertir de 2D a 3D y de 3D a 2D..aunque este último se puede hacer dedse autocad con el comando flatten.(lo que pasa que luego no podrás convertir las lineas otra vez a 3D).
El truco pasa por usar puntos propios(bloques con atributos)que guarden la Z y le pasen la Z a los vértices al convertirlo a 3D o le den cota nula a los vértices al convertirlas a 2D. |
Hola Joan,
Por lo que me comentas, el MDT le da cota nula a los puntos de la polilinea 3d al convertirla a 2d...
¿Pero hay alguna forma de que el MDT guarde la Z en alguna "variable", que posteriormente pase la polilinea de 3d a 2d (con Z=0) y que por ultimo la vuelva a levantar introduciendo la Z que habiamos guardado en el atributo "Elevacion" de la polilinea 2D?
Gracias
| _frany_ escribió: | Podrías pones un dibujo o parte del mismo para ver que se puede hacer mediante programación.
La rutina seria en VBA o sea el que trae autocad.
No creo que sea muy complicada de hacer, pero para ti si eres novato imagino que si.
Un saludo. |
Hola frany,
Aqui te pongo un dibujo en el que aparecen unas cuantas polilineas 3d que representan edificios en planta:
Con respecto a las rutinas, he encontrado una rutina que me hace "casi" todo lo que yo quiero. Es decir:
-Me convierte las polilineas 3d a polilineas
Pero me falta que esas polilineas cojan tengan la elevacion que tenian las polilineas 3d.
¿Sabrias modificarme el siguiente codigo para que cogiera la Z (por ejemplo la Z promedio) de la polilinea 3d y se la metiera en el atributo "Elevacion" de la polilinea resultante?
Aqui dejo el codigo:
| Cita: |
(defun c:3dpLWP ()
(setq lista_100 nil lista_coordenadas nil)
(setq 3dpoli (entsel "\nDesigna una 3dPol: "))
(setq nombre_3dpoli (car 3dpoli));nombre de la 3dpoli
(setq lista_3dpoli (entget nombre_3dpoli));lista de la 3dpolilinea
;comprobamos si es una 3dpoli
(foreach elemento_n lista_3dpoli
(if (= (car elemento_n) 100) (setq lista_100 (cons (cdr elemento_n) lista_100)))
)
(setq tipo_poli (car lista_100));debe ser "AcDb3dPolyline"
(while (/= tipo_poli "AcDb3dPolyline")
(setq tipo_poli nil)
(alert "La entidad designada debe ser una 3dPoli")
(setq 3dpoli (entsel "\nDesigna una 3dPol: "))
(setq nombre_3dpoli (car 3dpoli));nombre de la 3dpoli
(setq lista_3dpoli (entget nombre_3dpoli));lista de la 3dpolilinea
;comprobamos si es una 3dpoli
(foreach elemento_n lista_3dpoli
(if (= (car elemento_n) 100) (setq lista_100 (cons (cdr elemento_n) lista_100)))
)
(setq tipo_poli (cadr lista_100));debe ser "AcDb3dPolyline"
);fin While
(setq capa_3dpoli (cdr (assoc 8 lista_3dpoli)));capa
;calculamos las coordenadas del la 3dpoly
(setq nombre_vertice_n (entnext nombre_3dpoli))
(setq lista_vertice_n (entget nombre_vertice_n))
(while (/= (cdr (assoc 0 lista_vertice_n)) "SEQEND")
(setq lista_coordenadas (cons (list
10
(cadr (assoc 10 lista_vertice_n))
(caddr (assoc 10 lista_vertice_n))
) lista_coordenadas))
(setq nombre_vertice_n (entnext nombre_vertice_n))
(setq lista_vertice_n (entget nombre_vertice_n))
)
(setq lista_coordenadas (reverse lista_coordenadas))
;creamos LWpoliline
(setq lista_total (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 8 capa_3dpoli)
(cons 90 (length lista_coordenadas));numero de vertices
'(70 . 0)
'(43 . 0.0)
'(38 . 0.0)
'(39 . 0.0)
'(62 . 6)
))
(setq parte2_de_lista (list '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)))
(setq parte3_de_lista (list '(210 0.0 0.0 1.0)))
(foreach elemento_n lista_coordenadas
(setq lista_total (append lista_total (list elemento_n) parte2_de_lista))
)
(setq lista_total (append lista_total parte3_de_lista))
(entmake lista_total)
)
|
Un saludo y gracias a todos. Haber si conseguimos sacarlo... |
|
| Volver arriba |
|
 |
Acad version Moderador

Registrado: 13 Sep 2003 Mensajes: 7495 Ubicación: ESPAÑA
|
Publicado: Lun 08 Mar, 2010 07:58 Asunto: |
|
|
Aunque el código es muy mejorable, sólo cambié lo necesario.
Un saludo
| Código: | (defun c:3dpLWP ()
(setq lista_100 nil lista_coordenadas nil)
(setq 3dpoli (entsel "\nDesigna una 3dPol: "))
(setq nombre_3dpoli (car 3dpoli));nombre de la 3dpoli
(setq lista_3dpoli (entget nombre_3dpoli));lista de la 3dpolilinea
;comprobamos si es una 3dpoli
(foreach elemento_n lista_3dpoli
(if (= (car elemento_n) 100) (setq lista_100 (cons (cdr elemento_n) lista_100)))
)
(setq tipo_poli (car lista_100));debe ser "AcDb3dPolyline"
(while (/= tipo_poli "AcDb3dPolyline")
(setq tipo_poli nil)
(alert "La entidad designada debe ser una 3dPoli")
(setq 3dpoli (entsel "\nDesigna una 3dPol: "))
(setq nombre_3dpoli (car 3dpoli));nombre de la 3dpoli
(setq lista_3dpoli (entget nombre_3dpoli));lista de la 3dpolilinea
;comprobamos si es una 3dpoli
(foreach elemento_n lista_3dpoli
(if (= (car elemento_n) 100) (setq lista_100 (cons (cdr elemento_n) lista_100)))
)
(setq tipo_poli (cadr lista_100));debe ser "AcDb3dPolyline"
);fin While
(setq capa_3dpoli (cdr (assoc 8 lista_3dpoli)));capa
;calculamos las coordenadas del la 3dpoly
(setq nombre_vertice_n (entnext nombre_3dpoli))
(setq lista_vertice_n (entget nombre_vertice_n))
(setq cota (last (assoc 10 lista_vertice_n)))
(while (/= (cdr (assoc 0 lista_vertice_n)) "SEQEND")
(setq lista_coordenadas (cons (list
10
(cadr (assoc 10 lista_vertice_n))
(caddr (assoc 10 lista_vertice_n))
) lista_coordenadas))
(setq nombre_vertice_n (entnext nombre_vertice_n))
(setq lista_vertice_n (entget nombre_vertice_n))
)
(setq lista_coordenadas (reverse lista_coordenadas))
;creamos LWpoliline
(setq lista_total (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 8 capa_3dpoli)
(cons 90 (length lista_coordenadas));numero de vertices
'(70 . 0)
'(43 . 0.0)
(cons 38 cota)
'(39 . 0.0)
'(62 . 6)
))
(setq parte2_de_lista (list '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)))
(setq parte3_de_lista (list '(210 0.0 0.0 1.0)))
(foreach elemento_n lista_coordenadas
(setq lista_total (append lista_total (list elemento_n) parte2_de_lista))
)
(setq lista_total (append lista_total parte3_de_lista))
(entmake lista_total)
) |
_________________ APLICACIONES A MEDIDA PARA AUTOCAD
Acad version® www.acadversion.com |
|
| Volver arriba |
|
 |
belrod
Registrado: 05 Mar 2010 Mensajes: 7
|
Publicado: Lun 08 Mar, 2010 18:05 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
Milll graciasss Acad_Version!! Funciona exactamente como yo quiero!! Me has ahorrado un trabajo manual enorme!!
Antes de despedirme... quisiera hacer una pregunta... Es posible tocar de nuevo esa rutina para que me permita convertir un monton de polilineas 3d de golpe? Porque ahora mismo tengo que ir una por una!
Se pueda o no se pueda hacer eso... Muchisimas gracias!!
Un saludo!! |
|
| Volver arriba |
|
 |
gerardogqa
Registrado: 06 Mar 2007 Mensajes: 1927 Ubicación: Naranjo, Costa Rica
|
Publicado: Mar 09 Mar, 2010 16:20 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
Hola belrod, esta es la misma respuesta que ya te deje en el foro de lawebdelprogramador, pero lo dejo de nuevo por aqui por si le sirve a alguien mas, ademas de que tambien funciona seleccionando todas las polilineas de a monton
| Código: |
;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 (gerardogqa@yahoo.es)\n\n\n\n\n")
(textscr) |
_________________ Gerardo Calvo
Saludos |
|
| Volver arriba |
|
 |
Acad version Moderador

Registrado: 13 Sep 2003 Mensajes: 7495 Ubicación: ESPAÑA
|
Publicado: Mie 10 Mar, 2010 00:03 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
Esto era lo que yo comentaba, me gusta mucho más este código, lo del promedio es buena idea. Como sugerencia al seleccionar se puede filtrar el código 70 (bit 8 y 1), por evitar mallas y demás. También creo que sería mejor que en lugar de asignar la propiedades actuales asigne las de la capa en la que está. Sobre todo por darle trabajo a Gerardo jeje
Un saludo  _________________ APLICACIONES A MEDIDA PARA AUTOCAD
Acad version® www.acadversion.com |
|
| Volver arriba |
|
 |
gerardogqa
Registrado: 06 Mar 2007 Mensajes: 1927 Ubicación: Naranjo, Costa Rica
|
Publicado: Mie 10 Mar, 2010 15:04 Asunto: Re: Convertir Polilinea 3D en Polilinea (con su altura) |
|
|
Gracias Acad version
Bien, no soy experto en filtros pero me parece que seria asi
| Código: | (ssget '( (0 . "POLYLINE")
(-4 . "<not")
(-4 . "&")(70 . 118)
(-4 . "not>")
)
) |
Y lo de las propiedades, aunque me gusta mas la idea de dejar las que tienen las 3dpolys (el usuario puede cambiarlas todas seleccionando con la opcion "previous" inmediatamente despues de la conversion); pues bastaria con comentar las lineas respectivas (agregar el ";" para que no asigne capa, color, t.linea y tome las que estan "current") _________________ Gerardo Calvo
Saludos |
|
| Volver arriba |
|
 |
Acad version Moderador

Registrado: 13 Sep 2003 Mensajes: 7495 Ubicación: ESPAÑA
|
|
| Volver arriba |
|
 |
|
|
|