Indice de Foros
Foro Cartesia
Geomática y Topografía 
  Cartesia · Crea tu Blog · Cursos · Contacta · Publicidad   · Cartesia twitter ·
 Avanzada
 Indice  FAQFAQ  Registrarse EntrarEntrar 


[Civil3D]API Civil 3D: Vértices de superficie.   
Publicar nuevo tema   Responder al tema    Indice de Foros -> Topografía
Tema Anterior :: Tema siguiente  
Autor Mensaje
joantopo
Moderador


Registrado: 31 May 2006
Mensajes: 3471
Ubicación: Barcelona-ITT 68XX

MensajePublicado: Sun 17 Nov 2013, 17:57    Asunto: [Civil3D]API Civil 3D: Vértices de superficie. Responder citando

Le dedico la rutina a Robierzo, que hace un tiempo pedía justamente eso.

La rutina se le pasa el ID de la superficie y devuelve una colección point3d.
Luego ya sería crear puntos COGO a partir de esa colección.(que también lo sé hacer)e incluso si se quiere, meter los puntos a un grupo de puntos por la numeración de punto.

El único inconveniente, es que no se pueden obtener los vértices para superficies de volumen(ya sea TIN o de rejilla DEM) pero sí se puede para superficie TIN o de rejilla(grid) DEM.



Código:
 private Autodesk.AutoCAD.Geometry.Point3dCollection VerticesSuperficie(Autodesk.AutoCAD.DatabaseServices.ObjectId IdSurface)
   {
       Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
       Database db = doc.Database;
       Editor ed = doc.Editor;
       
       Autodesk.AutoCAD.Geometry.Point3dCollection pt3dColl = new Autodesk.AutoCAD.Geometry.Point3dCollection(); //devolverá una colección con los puntos 3d.

       using (Transaction trans = db.TransactionManager.StartTransaction())
       {
           try
           {
               Autodesk.Civil.DatabaseServices.Surface sup = default(Autodesk.Civil.DatabaseServices.Surface);
               sup = trans.GetObject(IdSurface, OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.Surface;

               if (sup.IsOutOfDate == true)//si está desactualizada, es decir, no se ha regenerado la superficie.(está regeneración automática desactivado).
               {
                   sup.Rebuild();
                   //la propiedad ".update" no existe para las superficies en la API2014,si existe para otros objetos.
                   //Hacemos una actualización de todas las definiciones de superficie aunque eso no es exactamente un "regenerar superficie" que sería->update.
               }

               /*Existen 4 tipos de superficies en C3D: Superficie TIN, Superficie rejilla DEM, superficie Volumen TIN y superficie Volumen DEM.
               Surface es la clase principal pero para obtener la colección de vértices de la superficie, debemos entrar en cada una de la clase del tipo de superficie.
               Tenemos varias formas para averiguar cuál es el tipo de superficie seleccionada, ya sea con la propiedad "DisplayName" teniendo en cuenta que se escribe diferente en español y en inglés
                ej:  if (sup.DisplayName == "Superficie TIN" ||sup.DisplayName == "TIN Surface")
               
                , o bien con el método GetType()*/

               string tipoSup = sup.GetType().ToString();
               string NombreSup = sup.Name;

               switch (tipoSup)
               {
                   case "Autodesk.Civil.DatabaseServices.TinSurface":

                       Autodesk.Civil.DatabaseServices.TinSurface tinSurface = trans.GetObject(IdSurface, OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.TinSurface;

                       foreach (TinSurfaceVertex vertice in tinSurface.Vertices)
                       {
                           Autodesk.AutoCAD.Geometry.Point3d punt = new Autodesk.AutoCAD.Geometry.Point3d(vertice.Location.X, vertice.Location.Y, vertice.Location.Z);

                           pt3dColl.Add(punt);
                       }
                       break;
                   case "Autodesk.Civil.DatabaseServices.GridSurface":
                         Autodesk.Civil.DatabaseServices.GridSurface GridSurface = trans.GetObject(IdSurface, OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.GridSurface;

                       foreach (GridSurfaceVertex vertice in GridSurface.Vertices)
                       {
                           Autodesk.AutoCAD.Geometry.Point3d punt = new Autodesk.AutoCAD.Geometry.Point3d(vertice.Location.X, vertice.Location.Y, vertice.Location.Z);

                           pt3dColl.Add(punt);
                       }
                       break;

                   case "Autodesk.Civil.DatabaseServices.TinVolumeSurface":
                        Autodesk.Civil.DatabaseServices.TinVolumeSurface TinVolumeSurface= trans.GetObject(IdSurface, OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.TinVolumeSurface;
                     
                   
                       break;

                   case "Autodesk.Civil.DatabaseServices.GridVolumeSurface":
                       Autodesk.Civil.DatabaseServices.GridVolumeSurface GridVolumeSurface = trans.GetObject(IdSurface, OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.GridVolumeSurface;
                       
                       break;
               }
           }
           catch
           {
           }
       }
       return pt3dColl;
   }


El switch sólo es para string e int creo, de la otra forma sería por condicionales if:
Código:
  if (sup.GetType() == typeof(Autodesk.Civil.DatabaseServices.TinSurface))
               {
               }

_________________
No guardes nunca en la cabeza aquello que te quepa en un bolsillo.
Albert Einstein (1879-1955)
Yo diria que el "bolsillo" es cartesia.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   

Temas similares
Tema Autor Foro Respuestas Ultimo Mensaje
No hay mensajes nuevos [Civil3D] No se regenera la superfici... joantopo Topografía 3 Mon 05 Dec 2011, 09:17 Ver último mensaje
joantopo
No hay mensajes nuevos [Civil3D] Es posible en Civil 3D obte... joantopo Topografía 2 Thu 09 Jun 2011, 09:40 Ver último mensaje
joantopo
No hay mensajes nuevos [Civil3D] Reto de novato: superficie ... gonchotorena Topografía 3 Sun 26 Feb 2012, 02:22 Ver último mensaje
silverplant
No hay mensajes nuevos [Civil3D]Reporte de vertices de aline... micpoblete Topografía 10 Wed 28 Sep 2011, 18:43 Ver último mensaje
silverplant
No hay mensajes nuevos [Civil3D] elevación puntos Cogo al en... joantopo Topografía 5 Mon 05 Dec 2011, 16:39 Ver último mensaje
joantopo
No hay mensajes nuevos [Civil 3D] Superficie DEM robierzo Topografía 16 Sun 23 Dec 2012, 15:25 Ver último mensaje
joantopo
No hay mensajes nuevos [Civil3D]truco: cota puntos COGO y vé... joantopo Topografía 0 Mon 05 Dec 2011, 17:17 Ver último mensaje
joantopo
No hay mensajes nuevos [Civil3D] Problema con superficie. varuko0 Topografía 4 Thu 17 Jul 2014, 20:42 Ver último mensaje
varuko0

Publicar nuevo tema   Responder al tema    Indice de Foros -> Topografía Todas las horas son CET (Europa)
Página 1 de 1

 
Cambiar a:  
Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
No puede adjuntar archivos en este foro
No Puede descargar archivos de este foro


Powered by Cartesia ©