Café de CIMNE Curso en creación de 'problem types' de GiD y detalles de personalización Enrique Escolano 3 Marzo 2013 Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer ¿Que es un ‘problemtype’ de GiD? GiD es un pre/postproceso neutro, se adapta a un programa de cálculo mediante una colección de ficheros, denominado ‘problemtype’ Información: •Help->GiD Customization (manual de referencia) •Help->GiD Tutorials->Defining a problemtype (ejemplo) Clásico • • • • • • • • .mat: materiales .prb: datos generales .cnd: condiciones .tcl: scripts Tcl .bas: plantilla/s escritura .bat: ejecución cálculo .sim: iconos (condiciones) .xml: declaraciones Información: •Help->GiD Customization & Tutorials •Carpeta \problemtypes (ejemplos) CompassLib • Librería desarrollada por Compass IS www.compassis.com • Cambio filosófico: una propiedad no se asigna directamente a entidades, sino a un grupo. • Visualmente hay un árbol con toda la información • Se define todo en un fichero xml, y los datos los maneja la librería con Tcl y los guarda en su propio fichero .spd • Escribe el fichero de cálculo con Tcl • Comercial, gratuito para uso académico Información: • www.gidhome.com/news/gid-conf/gid-convention-2012 (curso) •problemtypes\Examples\cmas2d_CompassLIB.gid (ejemplo) Problemtypes Compack y Kratos Compack: • Salva y lee los datos de su fichero .spd xml, los guarda en ‘arrays’ Tcl, no en objetos ‘dom’ de xml • Sus ventanas están especializadas, no son genéricas. • No visualiza y manipula los datos desde un árbol Kratos: • Es análogo a CompassLib, lee/salva su .spd xml, y mantiene en memoria el ‘dom’ de xml • Muestra un árbol para editar los datos • Usa ‘grupos nativos’ de GiD, en vez de ‘condiciones’ Información: • www.quantech.es •www.cimne.com/Kratos Grupos Colección de entidades, a diferencia de las capas una entidad puede pertenecer a varios grupos • CompassLIB usa condiciones como ‘pseudo-grupos’ • Los ‘grupos nativos’ no dependen del problemtype • Hay nuevas funciones especializadas para manipularlos: creación, asignación de entidades, lectura/escritura, acceso desde Tcl y .bas • Se pueden definir condiciones ‘over group’ • GiD se encarga de la lectura/escritura Información: • Help->GiD Customization •Carpeta \templates\Dump.bas (plantilla .bas que ‘vuelca todo’) Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Lenguaje Tcl/Tk • Tcl (Tool Command Language) es un lenguaje interpretado, Tk (Tool Kit) es una librería adicional para crear interfaces gráficas. • Es multiplataforma y código abierto • En GiD el interprete Tcl está compilado dentro del propio programa, no es un interprete independiente que evalúe un fichero script. Información: es.wikipedia.org/wiki/Tcl (descripción básica y enlaces) Distribución de ‘Active Tcl’ • Active State es una compañía que distribuye compilaciones de lenguajes como Tcl o Python. • Hay una versión gratuíta “ActiveTcl community edition”. Version actual: 8.6 (diciembre 2012) • “tclsh”: interprete Tcl, programa de consola • “wish”: incorpora tambien Tk, abre su propia ventana de consola (ficheros.tcl se asocian con él) • “tkcon”: script que mejora un poco la consola wish • Documentación de ayuda del lenguaje • Colección de Demos simples de Tk Información: •www.activestate.com/activetcl (descarga de instalador Tcl) Sintáxis Tcl Tcl Built-In Commands • Input and Output • Packages and Source • String Handling files • List Handling • Interpreter Routines • Dictionary Handling • Library Procedures • Math • System Related • Control Constructs • Platform-specific • Variables and Procedures Información: •www6.uniovi.es/tcl/tutorial (tutorial Tcl/Tk en Español) •www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html (tutorial Tcl solo, en inglés) •Ayuda de ActiveTcl (manual de referencia y ejemplos de código Tk) •www.beedub.com/book (libro ‘Practical programming in Tcl and Tk”) Sintáxis Tk Tk Built-In Commands • Geometry management • General • Resources and Options • Events and bindings • Inter-client • Widgets * Communication • Themed Widgets • Dialogs and toplevels * Un ‘widget’ es un objeto gráfico de Tk (un botón, un menu, etc) Información: •www6.uniovi.es/tcl/tutorial (tutorial Tcl/Tk en Español) •Ayuda de ActiveTcl (manual de referencia y ejemplos de código Tk) •www.beedub.com/book (libro ‘Practical programming in Tcl and Tk”) RamDebugger • RamDebugger es un entorno de desarrollo (IDE) para Tcl • Está escrito en puro tcl, puede usarse: • Abriendolo desde GiD (F12) o Data->Problemtype->Debugger • con wish cargando el package (está en \scripts\ramdebugger) • como ejecutable independiente (descargado desde COMPASS) • Proporciona: • Editor especializado de Tcl: colorea comandos, indenta el código • Depuración: (F5) se pueden poner paradas (F9), y ver variables • Ayuda html contextual (F1 sobre un comando) Información: •www.compassis.com/ramdebugger (descarga) Comandos Tcl de GiD • GiD_Process: envío a la cola de comandos de GiD • GiD_Info: obtención de datos de GiD • Eventos: procedimientos lanzados automáticamente: InitGIDProject, etc. • Comandos especializados: GiD_Geometry, GiD_Mesh, GiD_Assigndata,GiD_Result, GiD_Graph, GiD_Opengl, GiD_Set, etc. Sin pasar por “process” Información: •Help->GiD Customization->Tcl and Tk extension •www.gidhome.com/news/gid-conf/gid-conference-2004 (capítulo 8) •www.gidhome.com/news/gid-conf/gid-conference-2002 (capítulo 3) Procedimientos Tcl de GiD Fichero \scripts\dev_kit.tcl • Manejo de menus: GiDMenu::Create, … • GidUtils: interacción con GiD: • • • • • • • • • Seleccionar entidades Desactivar redibujado Mostrar un mensaje en la barra de mensajes Crear una barra de avance Mostrar una ventana de ‘splash’ Obtener un nombre de fichero temporal Ocultar barras de herramientas Procedimientos predefinidos para casos típicos de “tkwidget” Sintaxis de ventana de dialogo común de selección de ficheros Información: •Help->GiD Customization->Tcl and Tk extension Packages Tcl interesantes Librerías Tcl, ubicadas en subcarpetas de \scripts • Tdom : xml, C • Hdf5: ‘wrapper’ básico de librería HDF5 (similar a xml pero binario: eficiente para volumen de datos elevado), C++ • Tcllib: colección de pequeñas utilidades sin Tk (ftp, encriptación, cálculo numérico, etc), puro Tcl. • Tklib: colección de pequeñas utilidades Tk (plotchart: dibujo de gráficas, etc), puro Tcl • Treectrl:’widget’ de árbol y tabla, C. • Tktable: ‘widget’ de tabla, C • Tablelist: ‘widget’ de tabla, puro Tcl. • Vtk: ‘wrapper’ de la librería vtk, usado para importación de resultados en este formato, C++ Información: •Ayuda de ActiveTcl •Documentación en la carpeta del package y su web Crear nuevos comandos Tcl en C Tcl está programado en C, y es extendible implementando nuevos comandos en C/C++ • Se puede implementar como package en una librería dinámica dll/so cargable con el comando ‘load’ • Una aplicación como GiD puede incluir dentro su propio interprete y controlarse el flujo con comandos tcl, y crear su interfaz con Tk. El trabajo duro se hace por debajo en C. Información: •www.beedub.com/book/3rd/Cprogint.pdf (capítulo libro) Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Macros La barra de herramientas de macros da fácil acceso desde un botón o tecla a un procedimiento Tcl Inicialmente se crea de scripts\toolbarmacros_defaults.tcl Cada usuario guarda su propia copia modificada Plug-ins Hay dos mecanismos completamente distintos: 1. Plug-in Tcl: carga un ficheroTcl, independiente del problemtype y sin modificar los scripts de GiD. El código puede hacer lo que quiera. Ejemplos: importación Vtk, GDAL, Star-CD, exportación ‘Google Earth’ 2. Plug-in libreria dinámica de GiD: carga dll/so, para una tarea predefinida, con una interfaz dada. Ejemplos: importación en post de ficheros off, ply y obj. Una carpeta ‘x’ dentro \plugins, si contiene un fichero ’x’.tcl o ‘x’.dll/so, se cargará al inicio. Información: •Help->GiD Customization->Plug-in extensions Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Resultados de GiD y GiDPost Un problemtype típicamente involucra a un programa de cálculo, cuyos resultados quieren ser visualizados en post Deben escribirse en un formato aceptado: GiD results • Escritura directa del formato ASCII • Mediante la librería ‘GiDPost’, con un ‘flag’ se puede escribir ASCII, binario comprimido y próximamente en HDF5 (se proporciona código fuente en C, puede enlazarse con programas C/C++ o FORTRAN) Los resultados se cargan automáticamente al pasar a post si tienen extensión .post.res o .post.lst (un listado de múltiples ficheros) Información: •www.gidhome.com/gid-plus/tools/gidpost (descarga gidpost) •Help->GiD Customization->Postprocess data files Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Traducción y RamTranslator Un problemtype o plug-in ‘serio’ debe estar preparado para ser multilingüe. El texto del código fuente debe ser en inglés, que es ASCII Las ‘frases’ visibles en la interfaz de GiD se obtienen en tiempo de ejecución con un prodimiento Tcl llamado _ Las ‘frases’ de problemtypes se obtienen con otro llamado = • RamTranslator es una aplicación auxiliar que escanea el código fuente C/C++/Tcl y extrae estas frases a una tabla • Puede obtenerse una pre-traducción automática de una web • Cada lenguaje tiene su catalogo: es.msg, ja.msg (en scripts\msgs para GiD y \msgs para el problemtype) Información: •www.gidhome.com/gid-plus/tools/ramtranslator (descarga) •www.gidhome.com/news/gid-conf/gid-conference-2004 (capítulo 10) Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Ayuda y Lognoter Un ‘problemtype’ debería incluir su propia ayuda • GiD proporciona el ‘package helpviewer’, para mostrar ayuda en formato html (mediante el ‘widget’ Tkhtml) • Conviene estructurarlo con una subcarpeta por idioma, denotado por dos letras estandarizadas (en=inglés, es=español,..) Edición de la ayuda: ‘Lognoter’, desarrollado por Compass • Documento organizado en páginas, con texto e imágenes • Exportación a html, pdf o Word (xml) • Almacenamiento en base de datos local o remota (MySql) • Similar a una ‘wiki’, pero con GUI especializada. Información: •Help->GiD Customization->Html help support •www.lognoter.com (descarga) Índice • ¿Que es un ‘problemtype’ de GiD? • Clásico • CompassLib, libreria de Kratos y grupos • Lenguaje Tcl/Tk • • • • • • • • • • Distribución de ‘Active Tcl’ Sintaxis Tcl y Tk RamDebugger Comandos y procedimientos Tcl de GiD Packages y creación de comandos en C Macros y Plug-ins de GiD Resultados de GiD y GiDPost Traducción y RamTranslator Ayuda y Lognoter Protección: Verifp y PasServer Protección: Verifp y PasServer Los programas de cálculo comerciales usualmente son protegidos para evitar su uso no autorizado. ‘Verifp’ es una librería C++ desarrollada para GiD y los problemtypes de CIMNE, con estas posibilidades: • Contraseña local: usa un identificador del ordenador • Contraseña USB: usa un identificador de un ‘memory stick’ • Contraseña flotante, obtenido de un servidor donde está ejecutándose ‘PasServer’, nuestro programa servidor • Las Contraseñas pueden ser temporales (caducan) • Enlazable en programas C/C++/FORTRAN/Tcl Nota: se distribuye la librería compilada, no el código fuente Información: •www.gidhome.com/gid-plus/tools/passerver (descarga) Lenguaje Tcl/Tk Fin de la presentación Gracias por la atención Información: •http://wiki.tcl.tk (wiki con multitud de consejos y trucos) •http://www.tcl.tk