Dataset CSV de Puntos de Topografía para Probar en FreeCAD

Dataset CSV de Puntos de Topografía para Probar en FreeCAD

El modelado y análisis de terrenos naturales y superficies topográficas constituye el punto de partida fundamental para cualquier proyecto de obras viales, cimentaciones, parcelaciones y edificaciones. Los levantamientos ejecutados con estaciones totales, tecnología GNSS/RTK o vuelos fotogramétricos con drones generan habitualmente ficheros de texto delimitados por comas (formato CSV) que contienen miles de coordenadas tridimensionales de puntos del terreno.

Contenido relacionado:  Software BIM Gratis para Evitar Pagar Licencias: FreeCAD

Para los ingenieros, topógrafos y modeladores que buscan alternativas libres y no desean pagar costosas suscripciones anuales de software comercial como Autodesk Civil 3D, FreeCAD 1.0 ofrece potentes módulos para la gestión de nubes de puntos y mallas trianguladas. En esta guía técnica compartimos un dataset CSV de topografía real estructurado para pruebas, junto con el script en Python necesario para importar, procesar y triangular superficies de relieve tridimensionales directamente en FreeCAD.


Estructura Normativa del Dataset Topográfico CSV

El fichero de prueba se adhiere a la nomenclatura estándar de levantamientos topográficos georreferenciados:

Campo / ColumnaTipo de DatoEjemplo de ValorDescripción Técnica
IDEntero / Alfanumérico1001Identificador único secuencial del punto levantado.
X / EsteFlotante (metros UTM)285430.250Coordenada en el eje X proyectada en el plano topográfico.
Y / NorteFlotante (metros UTM)8671200.480Coordenada en el eje Y proyectada en el plano topográfico.
Z / CotaFlotante (msnm)245.850Elevación o cota ortométrica sobre el nivel del mar.
CodigoTexto cortoTERRENO_NATDescriptor de campo (EJE_VIA, BORDE, TALUD, etc.).

Script Python: Generador del Dataset CSV e Importador en FreeCAD

El siguiente script en Python es autónomo: si no encuentra un archivo CSV en disco, genera de forma matemática un dataset sintético realista con ondulaciones topográficas y luego procede a instanciar la nube de puntos nativa dentro de FreeCAD:

"""
Generador de Dataset e Importador de Puntos Topograficos CSV para FreeCAD.
Permite crear nubes de puntos 3D y prepararlas para triangulacion de malla TIN.
Compatible con Python 3.10+ y la API de FreeCAD.
"""

import math
import os
import sys
import csv


def generar_dataset_topografia_csv(ruta_csv="puntos_topografia_ejemplo.csv", num_puntos=200):
    """Crea un dataset CSV sintetico de relieve topografico si no existe."""
    print(f"--- Generando dataset topografico con {num_puntos} puntos ---")
    filas = [["ID", "Este_X", "Norte_Y", "Cota_Z", "Codigo"]]

    lado = int(math.sqrt(num_puntos))
    paso = 5.0  # Espaciado de 5 metros entre puntos
    punto_id = 1

    for i in range(lado):
        for j in range(lado):
            x = i * paso
            y = j * paso
            # Funcion de elevacion con colinas y valles realistas
            z = 100.0 + (3.5 * math.sin(x * 0.15)) + (2.8 * math.cos(y * 0.12))
            tipo = "TALUD" if z > 104.0 else "TERRENO"
            filas.append([punto_id, f"{x:.3f}", f"{y:.3f}", f"{z:.3f}", tipo])
            punto_id += 1

    with open(ruta_csv, mode="w", newline="", encoding="utf-8") as f:
        escritor = csv.writer(f)
        escritor.writerows(filas)

    print(f"[OK] Archivo CSV generado exitosamente en: {ruta_csv}")
    return ruta_csv


def importar_puntos_a_freecad(ruta_csv="puntos_topografia_ejemplo.csv"):
    """Lee el CSV e inserta los vectores en una nube de puntos de FreeCAD."""
    if not os.path.exists(ruta_csv):
        generar_dataset_topografia_csv(ruta_csv)

    coordenadas = []
    with open(ruta_csv, mode="r", encoding="utf-8") as f:
        lector = csv.DictReader(f)
        for fila in lector:
            try:
                x = float(fila["Este_X"])
                y = float(fila["Norte_Y"])
                z = float(fila["Cota_Z"])
                coordenadas.append((x, y, z))
            except (ValueError, KeyError):
                continue

    print(f"[*] Total de puntos leidos del archivo: {len(coordenadas)}")

    try:
        import FreeCAD as App
        import Points

        doc = App.ActiveDocument or App.newDocument("Topografia_Terreno_3D")
        nube = doc.addObject("Points::Feature", "Nube_Puntos_Topograficos")

        lista_vectores = [App.Vector(px, py, pz) for px, py, pz in coordenadas]
        nube.Points = Points.Points(lista_vectores)

        doc.recompute()
        print(f"[OK] {len(lista_vectores)} puntos insertados en el objeto '{nube.Name}' de FreeCAD.")
        return True
    except ImportError:
        print("[MODO CONSOLA] FreeCAD no disponible en entorno local.")
        print(f"[RESUMEN] {len(coordenadas)} coordenadas validadas y listas para importar en FreeCAD.")
        return True


if __name__ == "__main__":
    archivo_csv = "puntos_topografia_ejemplo.csv"
    generar_dataset_topografia_csv(archivo_csv)
    importar_puntos_a_freecad(archivo_csv)

Flujo para Generar Mallas Trianguladas (TIN) y Curvas de Nivel

Una vez que la nube de puntos se encuentra insertada en el árbol de proyecto de FreeCAD, el proceso de modelado de superficie continúa de la siguiente forma:

  1. Activación del Banco MeshDesign: En el selector de bancos de trabajo, cambiar a MeshDesign (Diseño de Mallas).
  2. Creación de Malla Regular: Seleccionar el objeto de nube de puntos y ejecutar el comando Mallas -> Crear Malla a partir de Puntos o utilizar la triangulación de Delaunay 2.5D.
  3. Generación de Curvas de Nivel: Con el banco de trabajo Curves o mediante herramientas de corte en Part, generar planos de sección horizontales a intervalos equidistantes (por ejemplo, cada 1.0 m para curvas menores y cada 5.0 m para curvas maestras).
  4. Documentación en TechDraw: Insertar la vista superior de la malla en una lámina técnica para imprimir el plano topográfico con escala y norte magnético.
Contenido relacionado:  Cómo Automatizar Metrados de Obras Civiles y Proyectos con Python

🏛️ Únete al Ecosistema Maestro BIM

Accede a mi repositorio personal de ingeniería OpenBIM. Obtén de inmediato todos los manuales y archivos base (.FCStd y Blender) de Vivienda, Estructuras, Sketcher y Python. Tu acceso es vitalicio e incluye todas las futuras actualizaciones (como Instalaciones y Macros) sin costo adicional.
Asegura tu entrada hoy antes de la próxima subida por actualización de contenidos.

👉 Acceder al Ecosistema Maestro


Preguntas Frecuentes (FAQ)

¿FreeCAD puede procesar nubes de puntos de cientos de miles de coordenadas?
▼
Sí. El módulo nativo Points de FreeCAD está optimizado en C++ y maneja cientos de miles de puntos con fluidez. Para nubes masivas de escáner LiDAR, se recomienda submuestrear previamente en CloudCompare.
¿Qué formato debe tener el archivo CSV para ser compatible con el script?
▼
El script requiere columnas para X, Y y Z delimitadas por comas. El orden de columnas puede ser personalizado directamente modificando las claves del diccionario en el código de Python.
¿Se pueden exportar las superficies generadas a otros programas como QGIS o AutoCAD?
▼
Por supuesto. Las mallas trianguladas pueden exportarse en formatos universales como OBJ, STL, PLY o DXF 3D, garantizando una interoperabilidad fluida con plataformas SIG como QGIS o software tradicional.


Deja un comentario

CONSTRUYE MEJOR - Herramientas Digitales para construcción
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.