Archivo del Autor: joseangelmt

Nueva pestaña Macroinstrucciones

Macroinstrucciones en el archivo de tabla de códigos

Hace años (año 2011) hicimos un primer paso para poder eliminar los archivos de macroinstrucciones (comúnmente llamados arrobas) del directorio de tablas: cuando modificamos el formato de la tabla de asignación de teclas para permitir asignar más de una orden a una pulsación de tecla.

Hoy presentamos un nuevo paso para conseguir eliminar estos archivos: Hemos añadido la posibilidad de crear macroinstrucciones dentro de las tabla de códigos Digi.tab.xml.

Puedes crearlas manualmente en la nueva pestaña Macroinstrucciones o puedes importar todos los archivos de macroinstrucciones que tengas en un directorio mediante la opción del menú Macroinstrucciones/Importar macroinstrucciones de un directorio… en el programa Editor de Tablas de Códigos de Digi3D.NET.

Si cargas en Digi3D.NET una tabla de códigos que tenga macroinstrucciones, cuando intentas ejecutar una macroinstrucción (recuerda que son órdenes cuyo nombre comienza siempre por @), el programa intenta localizar la definición de la macroinstrucción en la tabla de códigos. Si no la encuentra, intentará localizarla como un archivo externo en el directorio de tablas, de manera que no se ha perdido compatibilidad hacia atrás, pero se da prioridad a la nueva funcionalidad.

Con esto conseguimos tener tres archivos a copiar en caso de que tengamos que cambiar de ordenador:

  1. Archivo de tabla de códigos.
  2. Archivo de configuración de teclas.
  3. Archivo de menú (si es que tienes uno).

En vez de estos tres archivos más todos los archivos de macroinstrucciones que tuvieras en tu directorio de tablas.

El siguiente paso en esa unificación será hacer que el archivo de menú se incorpore a la tabla de códigos.

Puedes ver en el siguiente vídeo esta nueva funcionalidad:

 

Mejoras en el sensor de la cámara A3 (VM-QuasiPanoramic)

Hemos mejorado el sensor A3 en Digi3D.NET, haciendo que se calculen automáticamente orientaciones epipolares al cargar un modelo, de manera que ahora no es necesario girar manualmente las imágenes 90 o 270 grados.

Puedes deshabilitar esta opción en el menú Herramientas/Configuración VM Quasi-Panoramic/Activar epipolar por defecto.

Por si no lo sabías, el sensor A3, fabricado por una empresa llamada VisionMap es una cámara que pendula según se mueve el avión, y tras un procesado de la imagen que recuerda al de los sensores ADS de Leica, permiten crear modelos enormes.

Puedes ver un vídeo de esta nueva funcionalidad a continuación:

Añade inteligencia mediante guiones en tablas Digi.tab al almacenar una geometría

Estamos orgullosos de presentaros esta nueva característica (que aún está en desarrollo) que hemos añadido a Digi3D.NET: La posibilidad de programar guiones asociados a cada código en una tabla de códigos Digi.tab.xml que se ejecutarán cada vez que se almacena una geometría.

Estos guiones por ahora pueden estar programados en cualquier lenguaje de programación .NET como C#, Visual Basic.NET o Java Script, y en breve podrán programarse en Python.

Gracias a esta característica, podemos programar la guía de extracción de cualquier proyecto en la propia tabla de códigos, de manera que el operador no tenga que recordar el criterio para digitalizar o no una determinada entidad, y que sea Digi3D.NET quien lo recuerde.

Por ahora está en desarrollo y faltan cosas, como un editor de código en el programa Editor de tablas de códigos, pero ya es completamente funcional como puedes ver en el siguiente vídeo:

Panel de cambio rápido de modelos con fotos

Cambio rápido de imágenes

Acabamos de añadir a Digi3D.NET una novedad que nos va a permitir incrementar mucho nuestra productividad al trabajar con proyectos fotogramétricos creados con programas que no tienen el concepto de Modelo, como por ejemplo PhotoScan.

Históricamente el panel Proyecto Fotogramétrico (que antiguamente se denominaba panel de Cambio Rápido de Modelos) únicamente permitía cargar proyectos de programas que tenían concepto de modelo, como por ejemplo Inpho. Bien, pues acabamos de modificar este panel para que permita cargar proyectos de formatos que no tienen concepto de modelo, sino que tienen concepto de imagen.

Si cargamos un proyecto que tiene concepto de imagen como uno creado por PhotoScan, el programa detecta que el proyecto es de tipo imagen y cambia el interfaz de usuario del panel Proyecto Fotogramétrico, mostrando dos listas, una a la izquierda y otra a la derecha con todas las imágenes que forman parte del proyecto, de manera que cambiar la imagen izquierda es tan sencillo como hacer clic con el ratón en el nombre de la imagen izquierda que nos interesa, y lo mismo con la imagen derecha.

El programa no nos va a permitir seleccionar la misma imagen para las dos cámaras. Si seleccionas la misma imagen, te mostrará un cuadro de diálogo comunicándote el error.

Con este cambio, trabajar con proyectos de PhotoScan es mucho más rápido, pues no tienes que crear archivos de proyecto estereoscópico (.d3d) por cada modelo que cargues.

Puedes ver esta nueva funcionalidad en acción en el siguiente vídeo:

Acciones a ejecutar al seleccionar cualquier código de una tabla de códigos

Personalmente no me gustan las cajas negras, y Digi3D.NET escondía una que ha heredado por compatibilidad hacia atrás con los primeros días de Digi en MS-DOS. Hoy ha llegado el momento de cambiar eso.

¿Sabías que la orden COD no solo cambia de código sino que también realiza las siguientes acciones cuando seleccionas un código?:

  • Cambia el valor de la variable C a falso.
  • Cambia el valor de la variable S a falso.
  • Cambia el valor de la variable IR_PRINCIPIO a falso.
  • Cambia el valor de la variable Orto a falso;
  • Cambia el valor de la variable Orto_aa a falso.
  • Cambia el valor de la variable FIJA_Z a falso.
  • Cambia el valor de la variable MAXPUNTOS a 0.
  • Cambia el valor de la variable FORMATO_AUTONUM a %d.
  • Cambia el valor de la variable TIPO_DE_Z a 2.
  • Desbloquea la Z de la ventana fotogramétrica.

Esto lo hace la orden COD por código duro y no hay forma de cambiarlo. Si querías cambiar de código pero no querías que se cambiase ninguna de estas variables enumeradas anteriormente, tenías o que clonar una entidad existente o que programarte tú mismo una orden COD tal y como se explica en mi curso de programación de Digi3D.NET

Por otro lado, hace un tiempo ya añadimos a Digi3D.NET la posibilidad de que éste ejecute una serie de órdenes por el mero hecho de seleccionar un código. Puedes indicar las órdenes a ejecutar en la propiedad Ordenes (seleccionar código) en la sección Propiedades del código  de la pestaña Códigos del programa Editor de tablas de códigos.

Esto está genial, nos sirve por ejemplo para indicar que si se selecciona el código de curva de nivel se seleccione automáticamente el modo de búsqueda 12, o que por el mero hecho de seleccionar el código de árbol puntual, se ejecute la orden PUNTO_R.

Lo que no teníamos era la posibilidad de indicar que se ejecute una orden al seleccionar cualquier código, de modo que si queríamos que se ejecutase la orden MODELO_SEMANTICO=1 al seleccionar cualquier código, no podíamos, y no teníamos más remedio que añadir dicha orden a todos los códigos de nuestra tabla de códigos.

Para solucionar los dos problemas (quitar de la orden COD la lógica que cambia si o si el valor de las variables C, S, IR_PRINCIPIO, etc…) y hacer que se puedan indicar una serie de órdenes que se ejecutarán cuando el usuario seleccione cualquier código, hemos añadido una nueva pestaña al programa Editor de Tablas de códigos denominada Acciones que nos va a permitir indicar una serie de órdenes a ejecutar al seleccionar un código, y por defecto todas las tablas de códigos van a tener relleno ese campo con las siguientes órdenes:

C=0
S=0
IR_PRINCIPIO=0
ORTO=0
ORTO_AA=0
FIJAZ=0
MAXPUNTOS=0
FORMATO_AUTONUM=%d
TIPO_DE_Z=2
BLOQUEA_Z=0

y hemos eliminado de la orden COD esas acciones que se ejecutaban si o si, de modo que si no te interesa que se cambie el tipo de FORMATO_AUTONUM al cambiar de código, tan solo tienes que eliminar esa línea, o si quieres que se ejecute la orden MODELO_SEMANTICO=1, tan solo tienes que añadir esa línea.

Puedes ver esta nueva funcionalidad en acción en el siguiente vídeo:

 

 

Sayonara XP

Sayonara XP

Llegó el momento de decir adiós a Windows XP.

Microsoft ya se olvidó de él hace ya dos años y después de él hemos pasado por Windows Vista, Windows 7, Windows 8, Windows 8.1 y ahora Windows 10, sin embargo aún hay muchas instalaciones que lo siguen utilizando con nuestros programas. Ya es hora de renovar tanto el ordenador como el sistema operativo.

De todos nuestros programas, el único que aún  mantenía compatibilidad con Windows XP era Digi3D.NET hasta su versión 2015.43.51.0, que se publicó el día 25 de febrero de 2016 a las 12 horas, 7 minutos y 27 segundos exactamente.

Desde entonces Digi3D.NET ha crecido mucho (lo has podido comprobar en este blog), pero en su versión BETA. La versión BETA pasará a estable el próximo día 15 de julio 2016. La versión que publicaremos ese día no será compatible con Windows XP.

Como tenemos miedo de que alguien se la descargue e intente instalarla en su Windows XP (recuerda, nosotros no almacenamos copias de seguridad de los instaladores) y no tenga copia de seguridad de la versión anterior, vamos a publicar la versión 2015.44.52.0 con fecha 25 de febrero de 2016 a las 12 horas, 7 minutos y 28 segundos, es decir, con fecha de publicación un segundo después que la versión pública. Esta versión sigue siendo compatible con Windows XP, y al tener una fecha de publicación un segundo después que la anterior, es seguro que se la descargue e instale en equipos que aunque a día de hoy no tengan subscripción de soporte técnico, sí que la tuvieran el día 25 de febrero.

¿Qué modificaciones tiene esta versión que acabamos de publicar?

Dos modificaciones relativas a las actualizaciones.

  1. Al arrancar el programa mostrará un cuadro de diálogo indicando que la siguiente versión del programa que descarguemos ya no será compatible con Windows XP. Este cuadro de diálogo aparecerá cada vez que arranquemos el programa. Dispone de dos botones para cerrar el cuadro de diálogo: uno que simplemente lo cierra y otro que hace que no vuelva a aparecer (para este usuario, si cambias de usuario en la misma máquina, volverá a aparecer). De esta manera tenemos la seguridad de que el usuario se da por comunicado.

    Puedes ver una captura de pantalla de este cuadro de diálogo a continuación:

    Pérdida de compatibilidad con Windows XP

  2. Si se detecta una versión nueva pero la llave de protección activa ya no dispone de una subscripción de soporte técnico, el programa avisa de que no es seguro descargar la nueva versión pues no se podrá utilizar a menos que se adquiera una subscripción de soporte técnico o un alquiler.

    Puedes ver una captura de pantalla de este cuadro de diálogo a continuación:

    No tienes licencia para la versión a descargar
    Y esta versión es la última con soporte para Windows XP. A partir del 15/07/2016 diremos definitivamente Sayonara a Windows XP.

Solucionando problemas con los Sistemas de Referencia de Coordenadas colombianos

El viernes pasado comenzaron a trabajar en una entidad de Colombia con modelos del sensor ADS40 en Digi3D.NET.

El sensor ADS40, trabaja en el sistema de referencia de coordenadas EPSG:4979 tal y como se explica en esta página de la ayuda de Digi3D.NET, sin embargo la cartografía la quieren registrar en el sistema de referencia de coordenadas MAGNA-SIRGAS / Colombia West zone.

En un principio, tan solo tenemos que indicar al crear el archivo de dibujo que el sistema de referencia de coordenadas horizontal es MAGNA-SIRGAS / Colombia West zone, pero al cargar cartografía existente nos indicaron que las coordenadas X e Y estaban intercambiadas.

Con versiones modernas de Digi3D.NET la solución es muy sencilla, tan solo tenemos que indicarle a Digi3D.NET que los ejes los queremos como Este/Norte, y que haga caso omiso a lo que se indica en la base de datos EPSG, tal y como se muestra en la siguiente captura de pantalla:

ejes en src proyectados

…pero desafortunadamente el cliente tiene instalada una versión que no permite forzar la orientación de los ejes, así que los sistemas de referencia de coordenadas se crean siempre de forma estándar, y el estándar tal y como te voy a mostrar un poco más adelante indica que primero va la coordenada Y, y a continuación la coordenada .X.

Lo primero que se nos ocurrió fue comprobar los ejes del sistema MAGNA-SIRGAS / Colombia West zone en Digi3D.NET. Para ello, abrimos el panel Archivos de dibujo y pulsamos con el botón derecho del ratón en el archivo de dibujo y seleccionamos la opción Mostrar sistema de referencia de coordenadas horizontal…, lo que hizo aparecer el cuadro de diálogo Parámetros del sistema de referencia de coordenadas horizontal que te muestro a continuación:

Parámetros del SRC Magna-Sirgas

Estos parámetros salen de la base de datos EPSG que lleva incluida Digi3D.NET en su instalación, y se puede ver claramente que en Tipo de sistema de coordenadas se indica que los ejes son Norte, Este (viene en inglés), y no Este, Norte. En realidad, tal y como se puede ver en el vídeo al final de esta entrada en el blog, ese texto “Cartesian 2D CS. Axes: ….” no lo crea dinámicamente Digi3D.NET, sino que se extrae como un texto que aparece en la base de datos. Para ver bien el orden de los ejes, podemos consultar la cadena WKT que crea Digi3D.NET para ese sistema de coordenadas:

PROJCS["MAGNA-SIRGAS / Colombia West zone",
GEOGCS["MAGNA-SIRGAS",
DATUM["Marco Geocentrico Nacional de Referencia",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6686"]],
PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
UNIT["grados",0.01745329251994328,AUTHORITY["EPSG","9122"]],
AXIS["Lat",North],AXIS["Long",East],AUTHORITY["EPSG","4686"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",4.596200416666666],
PARAMETER["central_meridian",-77.07750791666663],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",1000000],
PARAMETER["false_northing",1000000],
PARAMETER["semi_major",6378137],
PARAMETER["semi_minor",6356752.314140356],
UNIT["metros",1,AUTHORITY["EPSG","9001"]],
AXIS["N",North],
AXIS["E",East],
AUTHORITY["EPSG","3115"]]

El usuario allí nos asegura que en el sistema MAGNA-SIRGAS / Colombia West zone la primera coordenada es la X, y la segunda es la Y, de modo que algo debe estar haciendo mal Digi3D.NET, o no. Vamos a analizarlo…

Si creas una cuenta en http://epsg.org/ y te descargas el dataset, verás que distribuyen la base de datos como una base de datos Microsoft Access. Digi3D.NET no puede utilizar un base de datos en formato Microsoft Access porque los programas de 64 bits tienen prohibido acceder a este tipo de bases de datos, así que hace años convertimos esa base de datos en una base de datos Microsoft SQL Server Compact, que tiene la característica de que sí que se puede acceder desde programas de 64 bits (y de 32 bits obviamente). Estas bases de datos tienen extensión .sdf y existen varias versiones. La que se instala con Digi3D.NET es la última versión, la 4.0.

El instalador de Digi3D.NET almacena esta base de datos en la carpeta %ProgramData%\[versión del programa]\OpenGis y tiene como nombre: epsg_es_ES.sdf si nuestra instalación es en español o epsg_en_US.sdf si nuestra instalación es es inglés.

Podemos abrir archivos .sdf versión 4.0 con una herramienta gratuita de Microsoft denominada Microsoft WebMatrix 3.0.

Instala el programa y sigue los siguientes pasos:

  1. Ejecuta el programa Microsoft WebMatrix. Te mostrará una página inicial con tres botones:  My sites, New y Open.
  2. Pulsa el botón Open. Aparecerá un menú contextual con varias opciones.
  3. Selecciona la opción Folder en el menú contextual. Aparecerá un cuadro de diálogo para seleccionar la carpeta a abrir.
  4. Selecciona la carpeta en la que está la base de datos EPSG y pulsa aceptar. Comprobarás que aparecen en el panel lateral izquierdo los archivos disponibles en dicha carpeta, entre ellos el archivo .sdf.
  5. Haz doble clic en el archivo .sdf. Comprobarás que cambia el menú y te muestra iconos relacionados con base de datos.
  6. Pulsa el botón New Query (nueva consulta). Se creará una ventana que te va a permitir teclear consultas SQL.
  7. Copia la siguiente consulta SQL y pulsa el botón Execute:
    SELECT * FROM [Coordinate Reference System] WHERE [COORD_REF_SYS_CODE]=3115

    Comprobarás que aparecen abajo los parámetros del sistema de referencia de coordenadas MAGNA-SIRGAS / Colombia West Zone. Entre ellas el código del sistema de coordenadas asociado, que es 4500.

  8. Ahora vamos a ver los ejes del sistema de coordenadas 4500, Para ello teclea la siguiente consulta:
    SELECT * FROM [Coordinate Axis] WHERE COORD_SYS_CODE=4500

    Comprobarás que aparecen dos ejes: El eje E y el eje N. En un principio aparece en el orden en el que le interesa al usuario, es decir, primero la coordenada X (este) y luego la coordenada Y (norte), pero en bases de datos el orden en el que aparecen los registros no vincula nada, quizás esta misma consulta con otro sistema de gestos de bases de datos muestre a información en otro orden. Los señores del EPSG lo saben, por eso añadieron un campo denominado ORDER en la tabla COORD_SYS_CODE, y si te fijas, el orden está mal: En el eje Este aparece un 2 y en el eje Norte aparece un 1.

    De hecho, Digi3D.NET no utiliza la consulta SQL que te he indicado en este paso para averiguar el nombre de los ejes, sino que utiliza la siguiente:

    SELECT * FROM [Coordinate Axis] WHERE COORD_SYS_CODE=4500 ORDER BY [Order]
    

    Si la ejecutas, comprobarás que el primer eje es el Norte y el segundo el Este. Esta es la causa por la cual Digi3D.NET está creando los ejes de forma incorrecta. En la base de datos EPSG viene mal. Vamos a solucionarlo.

  9. Tenemos que cambiar el valor de ORDER de los registros 44 (el registro para el eje Norte del sistema de referencias 4500 que representa el eje Norte) y cambiar el valor a 2, y poner un valor 1 en el registro 43 que representa el eje Este para el sistema de coordenadas 4500.
    Para ello ejecutaremos las siguientes consultas SQL:

    UPDATE [Coordinate Axis] SET [ORDER]=1 WHERE COORD_AXIS_CODE=43
    UPDATE [Coordinate Axis] SET [ORDER]=2 WHERE COORD_AXIS_CODE=44
    

y asunto solucionado.

Puedes ver cómo lo hago en el siguiente vídeo: