Está en la página 1de 59

Visual Basic for Applications

1. ACCESO A APPLICATIONS

PROYECTOS

DE

VISUAL

BASIC

FOR

Las diferentes aplicaciones que desarrollemos utilizando Visual Basic for Applications (VBA) se encuentran clasificadas en proyectos, para acceder a los proyectos que se encuentran cargados en nuestro sistema, lo haremos desde la opcin de men:

Al hacer click en la opcin Project Manager (Gestor de proyectos), aparecer el gestor de proyectos de VBA:

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 1

Visual Basic for Applications

Los proyectos que aparezcan listados en este dilogo, estn disponibles para ser utilizados en cualquier momento. Desde este administrador, podemos crear proyectos, cargar proyectos, descargar proyectos, guardar proyectos como, acceder al editor de VBA, ejecutar un procedimiento de un proyecto, adems de realizar grabaciones de programas automticos (grabacin, alto de la grabacin y pausa). El administrador de proyectos en vez de utilizar mens desplegables, posee centralizadas todas sus funcionalidades en una nica barra de herramientas:

Analizamos cada una de estas opciones. Nuevo proyecto

Utilizaremos este icono para la creacin de un nuevo proyecto VBA. Al pulsar sobre este icono, aparece el dialogo de creacin de proyectos VBA, donde determinaremos la localizacin y el nombre del proyecto a crear. Por defecto, el nombre que utilicemos para el proyecto, coincidir con el nombre del mdulo principal de este proyecto, esto no es necesario para el correcto funcionamiento del proyecto. Cargar proyecto Se utiliza este icono para cargar un determinado proyecto en el administrador de proyectos de VBA. Al hacer un click se nos permitir seleccionar un archivo .mvba para ser cargado. Se puede seleccionar una variable de configuracin para acelerar el acceso a determinado directorios. Descargar proyecto Se utilizar esta herramienta para descargar un proyecto VBA que se encuentra cargado en memoria, solo se habilita cuando est seleccionado un determinado proyecto. Si se selecciona para descargar un proyecto que posee una macro ejecutandose, esta se parar antes de continuar con la descargar. Guardar como Se utilizar para duplicar el proyecto seleccionado de la lista con otro nombre, para su posterior edicin, sin modificar el proyecto seleccionado.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 2

Visual Basic for Applications

Editor de Visual Basic Al pulsar sobre este icono, se acceder al editor de proyectos de VBA. Todos los proyectos que se encuentren cargados, estarn disponibles para su modificacin desde dicho editor de VBA. Ejecucin de macros Utilizaremos este icono para ejecutar las distintas macros de las que estn compuestos los proyectos que tenemos cargados. Al pulsar este icono, aparecer la siguiente caja de dilogo:

Por defecto, se mostrarn en la lista todas las macros disponibles en todos los proyectos. Para acceder exclusivamente a las macros de un determinado proyectos, seleccionaremos este proyecto en la lista central (Macros en). Control de grabacin de macros. Utilizaremos estos iconos para comenzar la grabacin, parar esta grabacin (finalizando), y realizar pausas en la grabacin. Al grabar una macro, podremos posteriormente acceder al codigo desde el editor. Otras funciones del editor de dilogos.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 3

Visual Basic for Applications

Se pueden realizar otras operaciones, como el cambio de nombre de un proyecto, para lo cual bastar con hacer un click sobre el nombre del proyecto, y un segundo click sobre su nombre, modificandolo al nombre que deseemos:

Si se hace lo mismo sobre el campo descripcin de la lista, podremos aadir una descripcin al proyecto. Si se desea que un proyecto se cargue automticamente al arrancar MicroStation V8, haremos un click en la zona de Auto-Load, de esta forma se cargar automaticamente. Solo se pueden hacer automticos en su carga proyectos que se encuentren en un directorio apuntado por la variable MS_VBASEARCHDIRECTORIES.

2. QUE ES VBA?
Visual Basic y VBA son lenguajes orientados a objetos utilizados por los desarrolladores profesionales de aplicaciones y programadores no habituales. Visual Basic es la plataforma de desarrollo primaria para gran nmero de productos comerciales. VBA comparte la mayora de las caractersticas de Visual Basic, siendo la mayor excepcin la no posibilidad de generar ejecutables con VBA (.exe) o controles ActiveX. Los programas desarrollados con VBA estn diseados para ejecutarse sobre una aplicacin servidor como Microsoft Excel, Microsoft Word, o en nuestro caso, MicroStation V8.

3. EJECUCIN DE MACROS VBA


Un proyecto suele ser una completa coleccin de macros, las cuales se pueden ejecutar individualmente. Para cargar un proyecto VBA, realizaremos los siguientes pasos: 1.- Seleccionaremos la opcin de men Utilidades->Macro->Administrador de proyectos. 2.- Seleccionaremos el icono de carga de proyectos en la barra de herramientas. 3.- Seleccionaremos el proyecto a cargar. 4.- Haremos click en OK. El proyecto seleccionado ya aparece disponible en la lista.
Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 4

Visual Basic for Applications

Una forma alternativa de cargar un proyecto para la posterior ejecucin de sus macros es utilizar la entrada de teclado: VBA LOAD <nombre de proyecto> Para ejecutar una macro de un determinado proyecto, realizaremos los siguientes pasos: 1.- Hacer click en el botn de macros del administrador de proyectos. 2.- Seleccionar en la lista desplegable el proyecto que contiene la macro. 3.- Seleccionar la macro a ejecutar de las aparecidas en la lista. Otra forma alternativa para ejecutar una determinada macro es utilizar la entrada de teclado: VBA RUN <nombre de macro> Se puede cargar un proyecto, y ejectutar una de sus macros con un nico comado: VBA RUN [nombre de proyecto]nombre de macro Por ejemplo: VBA RUN [Default]CopyElement

4. PROYECTOS VBA
Un proyecto VBA puede estar compuesto por: -Modulos: Codigo fuente organizado en funciones y procedimientos. Los nombres de las macros disponibles para un proyecto, coinciden con los nombres de procedimientos definidos en estos mdulos. -Formularios: La parte grfica de los proyectos, es interface de usuario, que puede contener adems funciones y procedimientos en su interior. -Clases: Contenedores en los que se crean definiciones realizadas por los usuarios de objetos. Suelen contener datos y mtodos para trabajar con esos datos. La diferencia fundamentar con un modulo, es que se pueden crear instancias de estas clases, tener varios objetos utilizando este codigo, y los mdulos son una nica instanciacin del cdigo que contienen.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 5

Visual Basic for Applications

5. EL EDITOR DE VBA
Al entrar en el editor de proyectos de VBA, tendremos disponibles para la edicin todos los proyectos que tengamos cargados en memoria. El aspecto ser similar al siguiente:

Analicemos las partes principales del editor de VBA. Men File

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 6

Visual Basic for Applications

Desde esta zona de men tenemos acceso a las siguientes opciones de men: Salvar el proyecto actual (Save ChangeFont, siendo ChangeFont el nombre del proyecto activo) Importar archivo (Import File...). Que nos permitir importar un modulo, formulario o clase previamente exportado de otro proyecto. Exportar archivo (Export File...). Nos permitir exportar el modulo, clase o formulario que tengamos seleccionado en explorador de proyectos. Eliminar componente (Remove Module1...). Nos permite eliminar el componente seleccionado en el explorador de proyectos (modulo, clase o formulario). Imprimir el componente seleccionado (Print...) Cerrar y volver a MicroStation (Close and Return no MicroStation). Men Edit

Desde este men accedemos a las opciones tradicionales de edicin. Deshacer (Undo typing). Deshace al ultima operacin realizada

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 7

Visual Basic for Applications

Repetir (Redo typing). Repite la ultima accin deshecha. Cortar, copiar, pegar (Cut, Copy, Paste). Operaciones tradicionales de operacin sobre el portapapeles de Windows. Borrar (Clear). Borra el elemento o texto seleccionado. Seleccionar todo (Select All). Selecciona todos los elementos o texto del elemento activo (formulario, clase o modulo). Buscar, buscar siguiente y reemplazar (Find, find next, replace). Para busqueda de textos, buscar el siguiente texto y reemplazar textos en mdulos y clases. Aadir y quitar tabulaciones (indent, outdent). Permite desplazar un parrafo hacia la izquierda o la derecha, para implementar las sangras en el cdigo. Listar propiedades y mtodos (List properties/methods). Estando posicionado sobre la declaracin o uso de un determinado objeto en el cdigo, al seleccionar esta opcin se mostrarn en una ventana las propiedades y mtodos de dicho objeto.

Listar constantes (list constants). Teniendo el cursos situado sobre una constante del programa, pulsando sobre esta opcin del men, aparecern las constantes relacionadas con estas validas en el entorno en el que se encuentra dicha constante.

Informacin rpida (Quick info). Estando situado encima de variables, objetos, etc... se nos mostrar una informacin rpida de dicho elemento en forma de tool-tip Informacin de parmetros (Parameter info). Al situarse sobre la zona de parmetros de una funcin o procedimiento, y pulsar esta opcin de men, se mostrar informacin de la utilizacin de los parmetros de dicha funcin o procedimiento.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 8

Visual Basic for Applications

Completar palabra (Complete word). Utilizado para al estar escribiendo un tipo de variable, procedimiento, objeto, etc...acabar de completar la palabra que se est escribiendo con la opcin actual de la lista que se est mostrando. Trabajo con marcas (Poner, pasar al siguiente, al anterior, borrar todos) o Bookmarks (Toggle, next, previous, clear all). Una marca, nos permite marcar zonas de cdigo para movernos de forma rpida por el texto que se est editando.

Men view

Desde este men accedemos a las siguientes funcionalidades. Acceso a cdigo de elemento (Code). Si durante la modificacin del aspecto de un componente de un formulario deseamos ir al cdigo que le corresponde (evento al que responde ese elemento grfico), utilizaremos esta opcin del men. Acceso al objeto al que corresponde el codigo (Object). Si estamos en la edicin del cdigo de un determinado evento de un objeto, deseamos ir al formulario y localizarlo para su modificacin grfica, utilizaremos esta opcin del men. Definicin de elemento (Definition). Accede dentro del navegador de objetos a la definicin del objeto que se encuentra debajo del cursos en el cdigo. De esta forma accedemos de forma rpida a sus propiedades, mtodos, etc..

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 9

Visual Basic for Applications

Ir al ultimo evento de un determinado objeto (Last definition). Utilizando esta opcin de men, iremos directamente al ultimo evento codificado del objeto al que pertenece el mtodo en el que nos encontramos. Navegador de objetos (Object browser). Nos permite analizar detenidamente los diferentes mtodos, propiedades y eventos que poseen los objetos disponibles en el sistema.

En la lista que se encuentra desplegada, podemos seleccionar las libreras que deseamos consultar, dejando seleccionado todas las libreras (All libraries), tendremos a nuestra disposicin todos los objetos registrados por las dll que se encuentran cargadas en este momento. En la lista inferior izquierda, se encuentran los objetos, al hacer click en estos, aparecen a la derecha sus metodos, eventos y propiedadas. Haciendo click en el mtodo, propiedad o evento, se mostrar en la parte inferior la definicin completa de este. Si deseamos realizar una bsqueda, podemos ut ilizar la segunda lista desplegabla superior, y utilizar para realizar dicha consulta el siguiente icono:

Al mostrar el resultado de la bsqueda, obtendremos una lista con todas la propiedades, mtodos, objetos y eventos que contienen la palabra buscada. El
Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 10

Visual Basic for Applications

aspecto una vez realizada la bsqueda del navegador de objetos, buscando la palabra element es el siguiente:

Para cerrar la zona de resultados de la bsqueda, pulsaremos el icono

Ventanas de inspeccion de valores de variables en ejecucin: Inmedianto, local e inspecciones (Inmediate, locals, watch). Ventana de inmedianto.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 11

Visual Basic for Applications

Nos permite ejecutar el cdigo que escribamos en dicha ventana en plena ejecucin del programa, en fase de depuracin. Ventana de variable locales Nos informa del valor de las variables locales en el procedimiento, funcin o mtodo en el que nos encontremos. Inspeccin. Muestra el valor de las variables a las que se le halla aadido una inspeccin. Pila de llamadas (call stack). Nos permite visualizar la sucesin de llamadas realizadas para llegar al cdigo en el que se encuentra la ejecucin en ese momento. Explorador de proyectos (Project Explorer). Nos permite visualizar los elementos de los que se compone un determinado proyecto (modulos, clases y formularios).

Ventana de propiedades (Properties window). Muestra las propiedades del elemento grfico seleccionado en un determinado formulario. Cambiando el valor de estas propiedades se modifica el comportamiento de los diferentes componentes grficos de los formularios. Para que esta ventana se muestre completamente, debe estar seleccionado un elemento grfico, y

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 12

Visual Basic for Applications

encontrarse en la edicin de un formulario, no en la introduccin de cdigo en mdulos y clases. Caja de controles (toolbox). Nos muestra los componentes insertables en formularios disponibles segn las dll que se encuentren cargadas.

Orden de tabulacin (Tab order). Nos muestra los nombre de los elementos del formulario actual en el orden en el que se recorreran si se utilizara la tecla tabulador para pasar de uno a otro. Cajas de herramientas: Nos permite visualizar/ocultar las diferentes cajas de herramientas disponibles en VBA. Volver a MicroStation (MicroStation).

Menu Insert

Permite insertar un nuevo formulario de usuario, mdulo y modulos de cla se.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 13

Visual Basic for Applications

Menu format

Contiene diferentes opciones para alienar diferentes controles, ajustar su posicin, tamao, etc... de forma que la presentacin de los elementos graficos en los formularios sea la mas correcta posible. Men Debug

Desde esta opcin de men, tenemos acceso a las siguiente operaciones.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 14

Visual Basic for Applications

Compilar completamente el proyecto activo (Compile...). Para verificar su correccin. Ejecucin paso a paso, entrando en procedimientos, sin entrar y salir de la zona de texto activa (Step Into, Step over y step Out) Ejecutar hasta la posicin actual del cursor (run to cursor). Control de inspecciones, aadiendo, editando las inspecciones y posibilidad de visualizacin rpida de valores (Add watch, edit watch, Quick watch). Gestin de puntos de ruptura (toggle Breakpoint y Clear All Breakpoints), pudiendo colocar/quitar y borrar todos. Control de siguiente sentencia (Set next Statement, Show next Statement), pasando a ejecutar la siguiente sentencia y mostrar cual ser antes de su ejecucin.

Menu Run

Las cuatro operaciones disponibles, nos permiten: Arrancar la ejecucin del procedimiento en el que nos encontramos (Run Sub/User Form), o el formulario en su defecto; parar la ejecucin para entrar en modo de depuracin (break) (ejecutar linea a linea) y parar por completo la ejecucin (Reset). Si estando en ejecucin paso a paso, deseamos acceder a los diseos de los formularios utilizaremos la ultima opcin. Menu Tools

Desde esta zona tenemos acceso al control de refencias, controles adicionales para la insercin en el proyecto, macros, opciones del proyecto y del compilador, adems del control de firmas digitales. Las referencias son las diferentes dll registradas en el sistema que son capaces de aumentar las funcionalidades de VBA, aadiendo al lenguaje standard nuevos

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 15

Visual Basic for Applications

objetos, metodos, etc... . Una de estas referencias es el ustation.dll, la cual se encarga de dejar disponibles a los usuarios todos los objetos existentes para controlar MicroStation, su estado, etc... la ventana posee el siguiente aspecto:

Debido a este comportamiento de las dll registradas por MicroStation, se pueden utilizar desde cualquier lenguaje de programacin capaz de utilizar dichas dll, tales como Delphi, Visual Basic (ediciones standard, profesional y enterprise), etc.... Aparecen seleccionadas las cargadas en el momento de consultar. Controles adicionales (Aditional controls). Muestra la lista de todos los objetos insertables en formularios, generalmente .ocx, y que pueden seleccionarse, quedando en ese momento aadidos a la caja de controles para su colocacin. La opcin macros nos mostrar las diferentes macros disponibles para su ejecucin individual en el proyecto activo (que coincidir con los procedimientos). Control de opciones del editor (Option). Desde aqu controlaremos el funcionamiento y apariencia del compilador. Propiedades del proyecto (...properties). Nos permite acceder a las propiedades del proyecto, descripcin, etc.... Tiene especial inters la posibilidad de definir aqu una contrasea para el acceso al cdigo fuente, de forma que se protegen los proyectos de posibles acceso no permitidos a los cdigos fuente.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 16

Visual Basic for Applications

Control de firmas digitales (Digital signatures). Gestin digitales para su adiccin al proyecto.

del uso de firmas

Los mens Add-ins, Window y Help. Nos permiten acceder al control de aadidos al compilador (programas que se unen a VBA para ampliar sus capacidades), la gestin de ventanas (mosaicos, etc...) y el acceso a la ayuda.

Bentley Systems Ibrica, S.A. Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com 17

Visual Basic for Applications

6. PROGRAMANDO CON VBA


Antes de comenzar con el anlisis de los diferentes objetos que MicroStation provee para su utilizacin desde VBA, veamos algunos aspectos importantes para el desarrollo de estas aplicaciones. 6.1 PROGRAMACIN ORIENTADA AL INTERFACE Un interfaces es un grupo de propiedades, eventos y mtodos que pertenecen a una clase. Todas las clases poseen al menos un interface, el cual incluye todos los mtodos y propiedades declarados en esa clase. El interface por defecto es referenciado normalmente con el nombre de la clase, aunque su nombre formal es el nombre de la clase precedido de un subrayado. Utilizacin de interfaces en VBA. El modelo de objetos MicroStationDGN incluye distintos interfaces que estn diseados para hacer ciertas tareas de programacin mas sencillas de implementar. Veamos como se utilizan estas clases en VBA. La sentencia Implements Un interface es una coleccin de prototipos para mtodos y propiedades de una clase, es necesario para una clase que implementa un interface duplicar las declaraciones de los mtodos publicos declarados en ese interface. Si no se redeclaran todos, se generar un error de compilacin. La sentencia implements utilizada para determinar que una clase est utilizando un determinado interface, es realmente utilizada para indicar que esta clase va a facilitar cdigo para todos los metodos publicos de este interface. Un interface como el IprimitiveCommandEvents implementado posee el siguiente aspecto: Implements IprimitiveCommandEvents Y deber facilitar cdigo para los siguientes mtodos: IPrimitiveCommandEvents_DataPoint IPrimitiveCommandEvents_Dynamics IPrimitiveCommandEvents_Keyin IPrimitiveCommandEvents_Reset IPrimitiveCommandEvents_Start IPrimitiveCommandEvents_Cleanup Estos mtodos permitirn a los programas en VBA responder a cada evento que ocurra cuando un elemento es creado en el diseo (modelo) activo. MicroStation llamar a los
Bentley Systems Ibrica, S.A. 18 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

eventos que hemos reescrito dependiendo de la accin que suceda. Veremos mas adelante ejemplos prcticos de estas implementaciones. 6.2 UNIDADES Y SISTEMAS DE COORDENADAS En MicroStation V8, las definiciones de uniades y el origen globar estn almacenadas como una propiedad del objeto ModelReference. Para determinar distancias en unidades distintas a las principales, el programa VBA deber tomar las relaciones entre unidades y estas unidades de dicho objeto. Distancias Casi la totalidad de las funciones de VBA que devuelven distancias, lo hacen en unidades principales. Todas las funciones que devuelven una posicin, utilizan tipos de datos point2d o point3d, y las coordenadas son unidades principales del modelo activo. Un ejemplo de calculo de distancias entre dos puntos podra ser: Dim pnt1 As Point3d Dim pnt2 As Point3d Dim dist As Double dist = Point3dDistance (pnt1, pnt2) Si el valor almacenado en dist queremos que se muestre al usuario en unidades secundarias, deberemos extraerlas del objeto ActiveModelReference: dist = dist*ActiveModelRefence.SubUnitsPerMasterUnit Origen global Est almacenado en la propiedad globalOrigin del objeto ModelReference, y contiene un point3d. 6.3 ROTACIONES DE ELEMENTOS Y MATRICES 3D. La rotacin de un elemento en el espacio es normalmente representada por una matriz 3x3. En VBA este tipo de matrices se encuentra representada por el tipo de datos Matrix3d. Existen funciones especficas para el manejo de este tipo de datos, que son parte del objeto Application. Los valores en una variable de tipo Matrix3d no deberan accederse directamente, sino utilizando funciones como Matrix3dGetComponentbyRowAndColumn y Matrix3dSetComponentByRowAndColum. La horientacin de una vista (objeto view) tambin est dada por una matriz del tipo Matrix3d, siendo posible cambiarla utilizando
Bentley Systems Ibrica, S.A. 19 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

la propiedad Rotation de dicho objeto. Veamos un ejemplo de la utilizacin de estas matrices de rotacin, en el cual se rota un elemento 15 grados: Public Sub rotateText () Dim rMatrix As Matrix3d Dim tTransform As Transform3d Dim dAngle As Double Dim zAxis as Point3d Dim oEl As TextElement Dim oElEnum as ElementEnumerator

dAngle = 15 * Pi /180 'conversin a radianes zAxis.x = 0 'eje X a 0 (0,0,1) zAxis.y = 0 zAxis.z = 1 'Nos hacemos con la matriz de rotacin rMatrix = Matrix3dFromVectorAndRotationAngle (zAxis, dAngle) Busqueda de elementos de texto en la seleccin Set oElEnum = ActiveModelReference.GetSelectedElements oElEnum.Reset 'reset oElEnum to the first element While oElEnum.MoveNext If (oElEnum.Current.Type = msdElementTypeText) Then Set oEl = oElEnum.Current tTransform = Transform3dFromMatrix3dAndFixedPoint3d (rMatrix, oEl.Origin) oEl.Transform tTransform ActiveModelReference.ReplaceElement oElEnum.Current, oEl oEl.Redraw End If Wend RedrawAllViews End Sub

6.4 TRANSFORMADAS 3D El tipo de datos Trans form3d es muy similar al tipo Matrix3d, pero representa una matriz 3x4 utilizada para almacenar y aplicar valores para escalar, rotar y transladar elementos grficos. Igual que con el tipo matrix3d, las funciones para gestionar y crear tipos Transform3d son funciones globales que pertenecen al objeto Application. No se debe acceder directamente a sus valores, se deben utilizar las funciones existentes: Transform3dGetMatrixComponentByRowAndColumn y
Bentley Systems Ibrica, S.A. 20 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Transform3dSetMatrixComponentByRowAndColumn. Tambin se puede tratar como puntos 3d utilizando las funciones Transform3dGetPointComponent y Transform3dSetPointComponent. Un sencillo ejemplo de uso: Dim sMatrix As Matrix3d sMatrix = Matrix3dFromScale (1.5) tTransform = Transform3dFromMatrix3dTimesTransform3d (sMatrix, tTransform) oEl.Transform tTransform 6.6 EVENTOS EN MICROSTATION El entorno de VBA de MicroStation V8 no da la posibilidad de crear nuevos tipos de eventos. Existen algunos eventos especficos en MicroStation que permiten al programa en VBA escuchar y responder a estos. Los objetos Application y UndoBuffer lanzan eventos que pueden se utilizados en los programas VBA. Recibiendo eventos. Lo primero que es necesario realizar para utilizar eventos, es decir a MicroStation que una determinada clase va a recibir los mensajes de eventos. Esto es creado creando una referencia a un tipo de objeto que es el generador de eventos utilizando la palabra clave WithEvents. Para escuchar los eventos del objeto Application, la referencia se debe crear de la siguiente forma: Dim WithEvents oAplicacion As Application Esto no crea un objeto aplicacin, crea una referencia en oAplicacion al objeto Application. Solo falta indicar al programa que a partir de un determinado momento, los eventos los atender esta nueva clase: Set oAplicacion = Application Desde este momento, los eventos sern recibidos por esta clase. Estas sentencias son solo vlidas en modulos de clase. Los procedimientos creados para responder a los eventos sern partes de la clase, sern los manejadores de eventos. Eventos en el objeto aplicacin Posee dos eventos exclusivamente, OnDesingFileOpened y OnDesignFileClosed. Veamos un ejemplo de utilizacin del evento OnDesingFileClosed. Este evento se dispara antes de cerrarse. Es util para limpiar informacin, liberar recursos antes de cerrar un archivo de diseo.
Bentley Systems Ibrica, S.A. 21 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Dim WithEvents hooks As Application Private Sub Class_Initialize() Set hooks = Application End Sub Private Sub hooks_OnDesignFileClosed (ByVal dgnFileName As String) MsgBox "Cerrando el archivo de diseo " + dgnFileName End Sub El codigo se debe escribir exclusivamente en un modulo de clase. Para ejecutarlo, se puede crear un procedimiento en un mdulo de cdigo que debe crear el objeto de esta clase. Supongamos que el codigo anterior se ha escrito en una clase de nombre openClose. Public Sub makeNewFile() Dim eventMsg as openClose Set eventMsg = New openClose CreateNewDesignFile DesignFileName, "newdgnfile.dgn", True End Sub WithEvents Es el mecanismo que permite a la clase responder a los dos eventos. Mientras que la sentencia Dim es utilizada para crear la variable que controlar los eventos del tipo Application, la sentencia WithEvents es utilizada para indicar a MicroStation que este clase responder a algunos de los eventos, los que sean recodificados. Si quisieramos aadir que se respondiera al evento de abrir un archivo, aadiramos el siguiente cdigo a la clase: Private Sub hooks_OnDesignFileOpened (ByVal dgnFileName As String) MsgBox "Opening DGN file " + dgnFileName End Sub 6.7 TRABAJANDO CON OBJETOS DE MICROSTATION Visual Basic es un lenguaje orientado a objetos. Que son los objetos. En el editor de Visual Basic, se pueden ver el conjunto de objetos, metodos y propiedades a travs del navegador de objetos. Es el mejor sitio para acceder a toda la informacin de los objetos disponibles.
Bentley Systems Ibrica, S.A. 22 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Elementos como objetos. Un elemento de un archivo DGN puede ser manipulado y modificado en VBA utilizando un objeto del tipo apropiado. La librera MicroStationDGN contiene una clase Element para la manipulacin generica de elementos, cuando el tipo no importa o no es conocido, o no es importante. Tambin posee tipos especficos para cada tipo de elemento, como las tipos de elemento ArcElement y Lineelement. Otros objetos en MicroStatio n Existen otros objetos adems de los elementos grficos y el objeto aplicacin que son importantes. Permiten a los programas en VBA acceder a especiales caractersticas de MicroStation. Eston son algunos de ellos: CadInputQueue: Permite a los programas VBA enviar entradas a MicroStation, y recoger las entradas de los usuarios. Se puede responder a keyins, puntos de datos y resets. Se utiliza tambin para el envio de mensajes a MicroStation o aplicaciones MDL. CommandState: Se utilizapara implementar e iniciar aplicaciones VBA que se encargan de la creacin o modificacin de elementos, como si de comandos de MicroStation standard de creacin se tratara. Estos programas deben crear un objeto que implemente el interface IprimitiveCommandsEvents, o IlocateCommandsEvents. Workspace: Utilizado para leer, cambiar y borrar variables de entorno. Mas objetos: Existen muchos mas objetos disponibles, utilizar el explorador de Objetos o la ayuda en linea.

6.8 MANEJANDO ELEMENTOS DEL DISEOS CON VBA Creacin de elementos. La creacin de elementos con VBA es muy sencilla, un ejemplo de creacin de una lnea sera: Dim oEl as LineElement Set oEl = CreateLineElement2 (Nothing, startPnt, endPnt) Suponiendo que los objetos startPnt y endPnt son elementos Point3D validos, se crear en oEl una lnea, lo que no incluye que esa lnea se muestre al usuario. Para mostrarla: oEl.Redraw La lnea aparecer en pantalla, pero al redibujar, desparece. Esto es debido a que no est grabada en el DGN, est solo en memoria. Para ello necesitamos utilizar el objeto ActiveModelReference:
Bentley Systems Ibrica, S.A. 23 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

ActiveModelReference.AddElement oEl Proceso de elementos de un conjunto de seleccin. Si se desean procesar los elementos que se encuentran ya seleccionados en un conjunto de seleccin, se debern utilizar los objetos ActiveModelReference, utilizando su mtodo GetSelectedElements. Esto crea un objeto de tipo ElementEnumerator que permite procesar los elementos seleccionados: Public Sub getSelectionSet () Dim oElEnum As ElementEnumerator Dim oEl As Eleme nt Set oElEnum = ActiveModelReference.GetSelectedElements oElEnum.Reset While oElEnum.MoveNext Set oEl = oElEnum.Current 'Change the color of the element oEl.Color = 3 oEl.Redraw msdDrawingModeNormal oEl.Rewrite Wend End Sub Este ejemplo cambia el color de los elementos seleccionados en el conjunto de seleccin. Para hacer el cambio permanente, se utiliza el metodo Rewrite. Para pasar al siguiente elemento del conjunto de seleccin, se utiliza MoveNext. Proceso de elementos de un cercado. Es muy similar al proceso utilizado para el proceso de un conjunto de seleccin. Se requieren algunas verificaciones antes de comenzar para verificar la existencia del cercado. Se debe utilizar el objeto Fence: Dim oFence As Fence Set oFence = ActiveDesignFile.Fence If oFence.IsDefined Then 'Aqu se procesan los elementos End If Con el codigo anterior, se puede verificar la existencia o no del cercado, despues, se puede entrar en sus proceso: Public Sub getFenceElements() Dim oFence As Fence
Bentley Systems Ibrica, S.A. 24 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Dim oElEnum As ElementEnume rator Dim oEl As Element Set oFence = ActiveDesignFile.Fence If oFence.IsDefined Then Set oElEnum = oFence.GetContents oElEnum.Reset While oElEnum.MoveNext Set oEl = oElEnum.Current 'Change the color of the element oEl.Color = 3 oEl.Redraw msdDrawingModeNormal oEl.Rewrite Wend End If End Sub Un programa flexible, debera verificar si existe un cercado, si existe, tomar de el los elementos, y si no, buscar un conjunto de seleccin. Public Sub getElementsFromFenceOrSelectionSet() Dim oFence As Fence Dim oElEnum As ElementEnumerator Dim oEl As Element Set oFence = ActiveDesignFile.Fence If oFence.IsDefined = True Then Set oElEnum = oFence.GetContents Else Set oElEnum = ActiveModelReference.GetSelectedElements End If oElEnum.Reset While oElEnum.MoveNext Set oEl = oElEnum.Current 'Change the color of the element oEl.Color = 3 oEl.Redraw msdDrawingModeNormal oEl.Rewrite Wend End Sub Escaneo de ficheros La clase ModelReference posee funciones de scan que pueden ser utilizados o no junto con un objeto ElementScanCriteria. Si no se utiliza el objeto ElementScanCriteria, se devolvern todos los elementos, y utilizandolo, se puede fitrar en contenido en origen.
Bentley Systems Ibrica, S.A. 25 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Veamos un ejemplo de cmo filtrar los elementos de color 3, a los que se les cambiar el color a 2: Public Sub changeColor() Dim oElScan As ElementScanCriteria Dim oElEnum As ElementEnumerator Dim oEl As Element Set oElScan = New ElementScanCriteria oElScan.ExcludeAllColors oElScan.IncludeColor 3 Set oElEnum = ActiveModelReference.Scan (oElScan) oElEnum.Reset While oElEnum.MoveNext Set oEl = oElEnum.Current 'Change the color of the element oEl.Color = 2 oEl.Redraw msdDrawingModeNormal oEl.Rewrite Wend End Sub El objeto ElementScanCriteria, inicialmente aceptar todos los elementos, despues, llamando a la funcin includeColor, se incluye el color determinado, pero para que tenga validez, primero se deben excluir todos los colores (ExcludeAllcolors). 6.9 ORGANIZACIN DE COMANDOS DE MICROSTATION Existen dos tipos de comandos de MicroStation que se pueden implementar en VBA utilizando interfaces. Estas herramientas se comportan c omo otras herramientas de MicroStation codificadas en MDL, pero existen una lineas directrices que deben ser seguidas para la codificacin de dichas herramientas. Las dos posibilidades son los comandos de creacin de primitivas y comandos de localizacin. COMANDOS DE PRIMITIVAS Una herramienta que implementa el interface IprimitiveCommandEvents, ser llamado como una herramienta primitiva, debido a que su propsito es el de disear nuevos elementos en el diseo activo. Los procedimientos que el programa debe implementar al utilizar este interface sern los que les digan a MicroStation que debe hacer en cada una de las fases de la creacin de los elementos. Para implementar dicha primitiva, se debe crear un m dulo de clase en el proyecto VBA, pues los interface solo se pueden implementar en este tipo de m dulos. Para implementar el interface requerido, el mdulo debe comenzar con la linea de cdigo:
Bentley Systems Ibrica, S.A. 26 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Implements IprimitiveCommandEvents Con esto, queda definido a que interface va a implementar. Se deber ahora incluir el cdigo para cada uno de los seis eventos tiles en este interface. Los mtodos son los siguientes: Start: Es llamado cuando MicroStation inicia el comando. Esto sucede cuando el programa es iniciado. Se suele utilizar para inicializar o crear las variable u objetos necesarios par el comando. Se suele escribir en este momento el nombre de la herramienta en la barra de comandos, utilizando para ello la sentencia ShowCommand. Para indicar texto en el prompt, utilizaremos showPrompt. DataPoint: Es llamado cuando el usuario introduce un punto de datos mientras el comando est activo. Este comando recibir la localizacin del los puntos que se van introduciendo. Dependiendo de la naturaleza de la aplicacin, este mtodo ser llamado multiples veces en la ejecucin del comando. Posiblemente sea necesario almacenar los puntos de datos introducidos por el usuario de click a click, para ello, utilizaremos arrays dinmicos. Se suele llamar al mtodo startDynamics del objeto CommandState para habilitar el reconocimiento de los eventos de dinmico, pues por defecto se encuentra deshabilitado. Dynamics: Es llamado cuando se mueve el cursor por la pantalla mientras est activo el comando. Se el pasa al comando la posicin del cursor y el modo de dibujo. Reset: Se activa cuando se introduce un reset. Cleanup: Es llamado justo antes de finalizar la ejecucin del comando. Keyin: Llamado cuando se introduce una entrada de teclado mientras se ejecuta un comando.

Para ejecutar el comando creado, utilizaremos un procedimiento que se encargar de arrancarlo, con un cdigo del estilo: Sub procedure arrancaComand() CommandState.startPrimitive New ComandoCreacion End Sub Donde ComandoCreacion es el nombre del archivo de clase. COMANDOS DE LOCALIZACIN Pertenecen a este tipo de comandos aquellos que implementan la clase IlocateCommandEvents. Suele utilizarse con comandos que realizan operaciones de modificacin de elementos grficos. Para escribir cdigo de comandos de localizacin, se debe crear una clase que implmente el interface IlocateCommandEvents. Para realizar esto, el mdulo de clases en el que se debe implementar (debe ser forzosamente un mdulo de clase) deber tener dentro de su cdigo una lna como la siguiente:
Bentley Systems Ibrica, S.A. 27 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Implements IlocateCommandEvents De esta forma, MicroStation sabr como comportarse al realizarse la localizacin de un elemento. Se debern implementar los cdigos para los siete procedimientos distintos de los que consta la localizacin. Start: Llamado al arrancar el comando. LocateFilter: Es llmado cuando el usuario selecciona un elemento mientras el comando est activo. Los parmetros pasados el procedimiento incluyen el elemento seleccionado de forma que saber el elemento modificado es sencillo. Tambin se incluye el punto de aceptacin, y un valor booleano que determina si el elemento es vlido para el comando. Si se rechaza el elemento, MicroStation intentar localizar otro elemento utilizando ese mismo punto de datos. Dependiendo del comando, puede ser interesante utilizar la funcin StartDynamics del objeto CommandState. Dynamics: Para implementar el dinmico. Accept: Llamado al aceptar el elemento, introduciendo un punto de datos para ello. LocateReset: Llamado al realizar el usuario un reset para rechazar un elemento. Cleanup: Llamado antes de finalizar el comando activo, se utiliza para liberar los recursos que se estimen necesariosl

Para llamar al comando implementado, utilizaremos un procedimiento de la forma: Sub procedure ejecutaLocalizacion CommandState.startLocate new comandoLocalizacion End Sub Siendo comandoLocalizacion el nombre de la clase que implementa el interface.

Bentley Systems Ibrica, S.A. 28 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

7. MODELO DE OBJETOS DE VBA


Los objetos proporcionados por MicroStation en VBA son los siguientes: AccuDrawHints Application ArcElement AreaPattern Attachment Attachments AuxiliaryCoordinateSystemElement BsplineCurveElement CadInputMessage CadInputQueue CellElement CellInformation CellInformationEnumerator CellLibrary ChainableElement ClosedElement CommandState ComplexElement ComplexShapeElement ComplexStringElement ConeElement CrossHatchPattern CurveElement DataBlock DatabaseLink DesignFile DimensionElement DimensionStyle DroppableElement Element ElementEnumerator ElementScanCriteria EllipseElement EllipticalElement Fence Font Fonts HatchPattern IlocateCommandEvents IModalDialogEvents IprimitiveCommandEvents IntersectableElement Level Levels LineElement LocateCriteria ModelReference ModelReferences MultiLineElement Pattern PlanarElement PointElement PossiblyPlanarElement Settings ShapeElement SharedCellDefinitionElement SharedCellElement TagDefinition TagDefinitions TagElement TagSet TagSets TextElement TextNodeElement TextStyle TextStyles TraversableElement VertexList View ViewGroup ViewGroups Views Workspace

Bentley Systems Ibrica, S.A. 29 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Analizaremos los objetos mas importantes de los arriba enumerados. Cada uno de estos objetos posee sus propiedades y eventos. 7.1 OBJETO APPLICATION Objeto global predefinido, que existe en cualquier proyecto VBA que realicemos. Sus propiedades y mtodos pueden ser accedidos a travs del objeto o directamente, es decir, es lo mismo utilizar la sentencia ActiveModelReference que utilizar la sentencia Application.ActiveModelReference Propiedades Propiedad
ActiveDesignFile ActiveModelReference ActiveSettings ActiveWorkspace AttachedCellLibrary CadInputQueue Caption CommandState Height IsAcademicVersion IsCellLibraryAttached IsRegistered IsSerialized KeyinArguments LeftPosition Name Path TopPosition Version Visible Width

Acceso
L L L L L L L/E L L/E L L L L L/E L/E L/E L L/E L L/E L/E

Tipo
DesignFile ModelReference Settings Workspace CellLibrary CadInputQueue String CommandState Long Boolean Boolean Boolean Boolean String Long String String Long String Boolean Long

Comentario
Devuelve un objeto de tipo DesignFile que contiene el diseo activo. Devuelve un objeto de tipo ModelReference que contiene el modelo activo. Devuelve un objeto de tipo Settings que contiene los ajustes activos de MicroStation Devuelve el espacio de trabajo del proyecto activo. Devuelve la librera de clulas que se encuentra vinculada. Devuelve la cola de peticiones a MicroStation. Titulo de la ventana de MicroStation Devuelve un objeto de tipo CommandState, que se utiliza para implementar comandos. Altura de la ventana de MicroStation. Determina si versin instalada es una acadmica. Determina si existe una librera de clulas vinculada. Determina si el MicroStation instalado est registrado. Determina si el MicroStation instalado posee nmero de serie. Devuelve o fija los key-ins utilizados en el ltimo comando. Posicin a la izquierda de la ventana de MicroStation. Nombre del objeto. Localizacin del MicroStation en ejecucin. Posicion en vertical de la ventana de MicroStation. Versin de MicroStation Visibilidad de MicroStation Ancho de la ventana de MicroStation.

Bentley Systems Ibrica, S.A. 30 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Eventos Evento
Atn2 AttachCellLibrary

Sintaxis
Double=Application.Atn2(X,Y) X, Double. Y, Double Application.AttachCellLibrary nombreLibreria [,ConvertirDeV7] NombreLibreria,String. ConvertirDeV7, Boolean. Application.copyDesignFile nombreExistente, nuevoNombre, sobreEscribir NombreExistente, String. NuevoNombre String, sobreescribir, boolean.

Descripcin
Devuelve la arcotangente de Y/ X Vincula la librera de clulas especificada en su ruta por nombreLibrera, si se indica, convierte la librera si es de V7. Copia el archivo de diseo especificado en nombreExistente en nuevoNombre, sobreescibiendo si se especifica. Devuelve un objeto de tipo DataEntryRegion creado con los valores especificados. Devuelve el valor en grados de los radianes especificados. Desvincula la librera de clulas. Devuelve una coleccin con las clulas incluidas dentro de la librera de clulas vinculada.

CopyDesignFile

DataEntryRegionFr omCriteria

Degrees DetachCellLibrary GetCellInformation Enumerator

OpenDesignfile

Pi

Devuelve la constante del valor de Pi. Quit Application.quit Cierra MicroStation Radians Double = Application.Radians(grados) Convierte los grados dados a radianes. Grados, double RedrawAllView Application.RedrawAllView [modo] Redibuja todas las vistas tal y como se indique en modo. Modo, MsDrawingMode RemoveModalDial Application.removeModalDialogEventsHandler Retira el control de eventos sobre ogEventsHandler evento el dilogo. Evento, IModalDialogEvents ShowCommand Application.showCommand comando Escribe en al ventana de Comando, String. comandos. ShowError Application.showError error Muestra un mensaje de error. Error, String ShowPrompt Application.showPrompt mensaje Muestra un mensaje en la zona Mensaje, String del prompt. ShowStatus Application.showStatus mensaje Muestra el mensaje en la zona del Mensaje, String status. ShowTemp Message Application.ShowTempMessage Muestra un mensaje temporal en area,mensaje,detalles la zona indicada. Area, msdStatusBarArea. Mensaje, String. Detalles, String. Bentley Systems Ibrica, S.A. 31 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

DataEntryRegion=Application.DataEntryRegio nFromCriteria (inicio,longitud,justificacion) Inicio, Long. Longitud, Long, Justificacion, MSdDataEntryRegionJustification Double=Application.degrees(radianes) Radianes, Double DetachCellLibrary Set cellInformationEnumerator=Application.GetCe llInformationEnumerator (incluirCompartidas,IncluirPathCompleto) IncluirCompartidas, Boolean. IncluirPathCompleto, Boolean Set designFile = Application.OpenDesignFile (archivo,soloLectura) Archivo, String. SoloLectura, Boolean Application.Pi

Abre el archivo especificado, en modo solo lectura si se indica.

Visual Basic for Applications

StartBusyCursor StopBusyCursor

Application.startBusyCursor Application.stopBusyCursor

Coloca el cursor de ocupado. Coloca el cursor standard de nuevo.

Eventos. Eventos
OnDesignFileClosed

Descripcin
Application.OnDesignFileClosed archivo. Devuelve en archivo el nombre del archivo cerrado. Application.OnDesignFileOpened archivo Devuelve en archivo el nombre del archivo abierto.

OnDesignFileOpened

Posee adems funciones especiales para trabajo con: Dlong

Matrix3d

Bentley Systems Ibrica, S.A. 32 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Point2D

Point3D

Bentley Systems Ibrica, S.A. 33 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Transform3D

Creacin de elementos.

Bentley Systems Ibrica, S.A. 34 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

7.2 OBJETO ELEMENT Los objetos de tipo element almacenan un elemento de MicroStation genrico, en el cual tiene cavida cualquier elemento de un DGN. Estos elementos se podrn tratar posteriormente como un determinado tipo de elemento en concreto. Propiedades para la determinacin del tipo de elemento.

Estas propiedades, poseern el valor True si el elemento es el tipo de elemento al que hace referencia la propiedad, y False en caso contrario. Propiedades para la interpretacin de elementos como un tipo de elemento concreto.

Estas propiedades se encargan de hacer visible el objeto como una implementacin concreta de un determinado tipo de elemento. De esta forma, un objeto de tipo element, al utilizar su propiedad, por ejemplo, AsArcElement, devolver un objeto de tipo ArcElement que contiene la interpretacin como un arco del elemento en concreto.

Bentley Systems Ibrica, S.A. 35 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Las propiedades que implementan dichas funciones, deben ser utilizadas siempre tras previa verificacin de la posibilidad de interpretar el elemento como el tipo que se desea utilizar, para esto utilizaremos las funciones Is... que acabamos de consultar. Las propiedades son las siguientes:

Bentley Systems Ibrica, S.A. 36 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Propiedades y mtodos genricos.

Los mtodos y propiedades genricas de todo objeto de MicroStation son las siguientes:

Bentley Systems Ibrica, S.A. 37 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

7.2 OBJETOS DE REPRESENTACIN DE ELEMENTOS GRFICOS. Los tipos de objeto utilizados para el almacenamiento y tratamiento de elementos grficos son los siguientes: ArcElement

AreaPattern

BsplineCurveElement

Bentley Systems Ibrica, S.A. 38 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

CellElement

CellInformation

CellInformationEnumerator

Se utiliza este objeto para determinar que celulas estn disponibles para ser colocadas. Se utilizar el procedimiento GetCellInformationEnumerator para obtener este objeto. Para moverse por este objeto, una vez cargado, se realizar una llamada a MoveNext, posteriormente, se puede utilizar al propiedad current. MoveNext devolver false cuando no halla mas elementos en la lista. Se puede determinar si al cargar el elemento si se desea o n cargar las clulas compartidas (con el parmetro includeSharedCells).

CellLibrary

Se utilizara para representar una librera de clulas. Solo posee un mtodo, para aadir elementos a dicha librera.

ChainableElement

Un objeto implementa el interface chainableElement si es un elemento abierto que puede ser componente de una complex string o un complex shape.
Bentley Systems Ibrica, S.A. 39 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Se debe utilizar la propiedad isChainableElement para determinar si se soporta utilizar este interface: If oElement.IsChainableElement then With oElement.AsChainableElement Inicio = oElement.AsChainableelement.startpoint End Width End If Otra posibilidad es: Dim oChainable As Chainableelement If oElement.IsChainable then Set oChainable = oElement Inicio = oChainable.startPoint End If

ClosedElement

Elementos cerrado y planos.

Bentley Systems Ibrica, S.A. 40 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

ComplexElement

ComplexShapeElement

ComplexStringElement

Bentley Systems Ibrica, S.A. 41 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

ConeElement

CrossHatchPattern

CurveElement

Bentley Systems Ibrica, S.A. 42 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

DimensionElement

DimensionStyle

DroppableElement

ElementEnumerator

Varios mtodos devuelven objetos de este tipo, se utiliza como contenedor de elementos.

Bentley Systems Ibrica, S.A. 43 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

EllipseElement

EllipticalElement

HatchPattern

Se utiliza para almacenar patrones. Se deben utilizar los mtodos GetPattern, SetPattern, HasPattern, RemovePattern y CreateHatchPattern.

Bentley Systems Ibrica, S.A. 44 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

IntersectableElement

LineElement

Pattern

Bentley Systems Ibrica, S.A. 45 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

PlanarElement

PointElement

PossiblyPlanarElement

ShapeElement

Bentley Systems Ibrica, S.A. 46 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

SharedCellDefinitionElement

SharedCellElement

TextElement

Bentley Systems Ibrica, S.A. 47 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

TextNodeElement

TraversableElement

Un elemento puede implementar este interface si est formado por cadenas de segmentos.

VertexList

Este tipo se obtiene de shapes y elementos lineales, ye utiliza para obtener un elemento como una lista de vertices y poder acceder a estos posteriormente.

Bentley Systems Ibrica, S.A. 48 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

View

Los objetos de tipo view se encargan de representar una vista de MicroStation. Para cargar una determinada vista de MicroStation en uno de estos objetos, utilizaremos la propiedad views del objeto ActiveDesignFile: Set oView2 = ActiveDesignFile.Views(2) Los mtodos y propiedades de los que dispone son los siguientes:

Bentley Systems Ibrica, S.A. 49 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

ViewGroup

Representa un grupo de vistas de MicroStation V8

Bentley Systems Ibrica, S.A. 50 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Workspace

Representa al workspace activo de MicroStation, las propiedades de las que dispone son las siguientes:

Bentley Systems Ibrica, S.A. 51 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

8. EJEMPLOS DE CODIFICACIN.
En este apartado se proponen ejemplos de codificacin de las tareas mas utilizada. 8.1 Acceso a unidades del archivo de diseo. Sub unidades() Dim principales As String Dim secundarias As String Dim secporprin As Double Dim resolucion As Double principales = Application.ActiveModelReference.MasterUnit.Label secundarias = Application.ActiveModelReference.SubUnit.Label secporprin = Application.ActiveModelReference.SubUnitsPerMasterUnit resolucion = Application.ActiveModelReference.UORsPerSubUnit Debug.Print principales Debug.Print secundarias Debug.Print secporprin Debug.Print resolucion End Sub 8.2 Eventos de apertura y cierre de archivo 'CODIGO A INSERTAR EN MODULO Sub eventos() 'Acceso a eventos de apertura de archivo y cierre de archivo. 'Crea un archivo en c:\prueba.dgn a partir del archivo semilla 'seed2d.dgn. El archivo c:\prueba.dgn se borrar antes de ser 'creado. Dim controlador1 As eventos Dim archivo As DesignFile If Dir$("c:\prueba.dgn") <> "" Then Kill ("c:\prueba.dgn") End If Set controlador1 = New eventos Set archivo = Application.CreateDesignFile("seed2d.dgn", "c:\prueba.dgn", True) End Sub

Bentley Systems Ibrica, S.A. 52 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

'CODIGO A INSERTAR EN MODULO DE CLAS E EVENTOS Dim WithEvents evento As Application Private Sub Class_Initialize() Set evento = Application End Sub Private Sub evento_OnDesignFileClosed(ByVal DesignFileName As String) MsgBox "abriendo" End Sub Private Sub evento_OnDesignFileOpened(ByVal DesignFileName As String) MsgBox "cerrando" End Sub 8.3 Creacin de elementos grficos. Sub graficos() 'Ejemplos de creacin de elementos grficos Dim linea As LineElement Dim circulo As EllipseElement Dim rectangulo As ShapeElement Dim vertices(3) As Point3d Dim origen As Point3d vertices(0).X = 0 vertices(0).Y = 0 vertices(0).Z = 0 vertices(1).X = 10 vertices(1).Y = 0 vertices(1).Z = 0 vertices(2).X = 10 vertices(2).Y = 10 vertices(2).Z = 0 vertices(3).X = 10 vertices(3).Y = 20 vertices(3).Z = 0 Set linea = Application.CreateLineElement1(Nothing, vertices) origen.X = 0
Bentley Systems Ibrica, S.A. 53 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

origen.Y = 0 origen.Z = 0 Set circulo = Application.CreateEllipseElement2(Nothing, origen, 5, 5, Application.Matrix3dIdentity) Set rectangulo = Application.CreateShapeElement1(Nothing, vertices) Application.ActiveModelReference.AddElement linea Application.ActiveModelReference.AddElement circulo Application.ActiveModelReference.AddElement rectangulo linea.Redraw circulo.Redraw rectangulo.Redraw End Sub

8.4 Proceso sobre conjunto de seleccin. Sub ejemplo8_seleccion() 'Procesamiento de elementos de un conjunto de seleccin Dim cjtoElem As ElementEnumerator Dim elemento As Element If ActiveModelReference.AnyElementsSelected = True Then Set cjtoElem = ActiveModelReference.GetSelectedElements cjtoElem.Reset While cjtoElem.MoveNext Set elemento = cjtoElem.Current elemento.Color = 3 'Cambio de color del elemento. elemento.Redraw msdDrawingModeNormal elemento.Rewrite Wend ActiveModelReference.UnselectAllElements End If End Sub 8.5 Proceso de elementos de cercado Sub cercado() 'Procesamiento de elementos de un cercado. Dim cercado As Fence Dim cjtoElem As ElementEnumerator Dim elemento As Element
Bentley Systems Ibrica, S.A. 54 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Set cercado = ActiveDesignFile.Fence If cercado.IsDefined Then Set cjtoElem = cercado.GetContents cjtoElem.Reset While cjtoElem.MoveNext Set elemento = cjtoElem.Current 'Cambiamos el color del elemento elemento.Color = 3 elemento.Redraw msdDrawingModeNormal elemento.Rewrite Wend End If End Sub 8.6 Filtrado de fichero. Sub escaneo() 'Ejemplo de escanner de fichero. Dim criterio As ElementScanCriteria Dim cjtoElem As ElementEnumerator Dim elemento As Element Set criterio = New ElementScanCriteria criterio.ExcludeAllColors criterio.IncludeColor 3 criterio.IncludeColor 4 Set cjtoElem = ActiveModelReference.Scan(criterio) cjtoElem.Reset While cjtoElem.MoveNext Set elemento = cjtoElem.Current 'Cambiamos el color elemento.Color = 2 elemento.Redraw msdDrawingModeNormal elemento.Rewrite Wend End Sub

8.7 Creacin de elementos. CODIGO A INSERTA EN MDULO Sub ejemplo11a_creacion()


Bentley Systems Ibrica, S.A. 55 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

'Ejemplo de comando para la creacin de una elipse 'ver mdulo de clase "elipse" Dim celemMod As New elipse CommandState.StartPrimitive celemMod, True 'el true es para filtrar los keyins End Sub CODIGO A INSERTAR EN MODULO DE CLAS E ELIPSE Option Explicit Implements IPrimitiveCommandEvents Private estado As Integer Private point1 As Point3d Private point2 As Point3d Private Sub IPrimitiveCommandEvents_Cleanup() ShowStatus "cleanup" End Sub Private Sub IPrimitiveCommandEvents_DataPoint(Point As Point3d, ByVal View As View) Dim elem As Element ShowStatus "Punto de datos" If estado = 0 Then CommandState.StartDynamics point1 = Point estado = 1 Else Set elem = Application.CreateEllipseElement2(Nothing, point1, Application.Point3dDistance(point1, Point), Application.Point3dDistance(point1, Point), Application.Matrix3dIdentity) estado = 0 ActiveModelReference.AddElement elem elem.Redraw CommandState.StopDynamics End If End Sub Private Sub IPrimitiveCommandEvents_Dynamics(Point As Point3d, ByVal View As View, ByVal DrawMode As MsdDrawingMode) Dim elem As Element ShowStatus "dinamycs" Set elem = Application.CreateEllipseElement2(Nothing, point1, Application.Point3dDistance(point1, Point), Application.Point3dDistance(point1, Point), Application.Matrix3dIdentity) elem.Redraw DrawMode End Sub Private Sub IPrimitiveCommandEvents_Keyin(ByVal Keyin As String)
Bentley Systems Ibrica, S.A. 56 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

ShowStatus "keyin" CommandState.StartDynamics End Sub Private Sub IPrimitiveCommandEvents_Reset() ShowStatus "reset" CommandState.StopDynamics estado = 0 End Sub Private Sub IPrimitiveCommandEvents_Start() ShowStatus "start" estado = 0 End Sub

8.8 Comandos de modificacin con eventos. CODIGO A INSERTAR EN MODULO Sub Modificacion1() 'Ejemplo implementacin de comando de modificacin. 'Ver mdulo de clase "DimLoc1" 'Modificacin de vertices de linestrings Dim miEvento As New DimLoc1 CommandState.StartLocate miEvento End Sub CODIGO A INSERTAR EN MODULO DE CLASE BASICOMOD Option Explicit Implements ILocateCommandEvents Private oNewElem As Element Private numVertice As Long Private inicial As Element Private Sub ILocateCommandEvents_Accept(ByVal Element As Element, Point As Point3d, ByVal View As View) ActiveModelReference.ReplaceElement inicial, oNewElem oNewElem.Redraw 'La siguiente lnea reseteara la copia, permitiendo elegir uno nuevo 'CommandState.StartLocate New DimLoc1 End Sub Private Sub ILocateCommandEvents_Cleanup() End Sub Private Sub ILocateCommandEvents_Dynamics(Point As Point3d, ByVal View As View, ByVal DrawMode As MsdDrawingMode)
Bentley Systems Ibrica, S.A. 57 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

Dim oTemp As Element Dim vertices() As Point3d vertices = oNewElem.AsLineElement.AsVertexList.GetVert ices vertices(numVertice) = Point Set oNewElem = Application.CreateLineElement1(oNewElem, vertices) oNewElem.Redraw DrawMode End Sub Private Sub ILocateCommandEvents_LocateFailed() MsgBox "Fallo en la localizacin" End Sub Private Sub ILocateCommandEvents_LocateFilter(ByVal Element As Element, Point As Point3d, Accepted As Boolean) If Element.Type = msdElementTypeLineString Then 'Aqu se puden realizar todos los cambios que deseemos hacer al elemento Set oNewElem = Element Set inicial = Element numVertice = oNewElem.AsLineElement.GetClosestVertex(Point) CommandState.StartDynamics Accepted = True Else Accepted = False End If End Sub Private Sub ILocateCommandEvents_LocateReset() CommandState.StopDynamics Application.ActiveModelReference.UnselectAllElements Application.RedrawAllViews msdDrawingModeNormal End Sub Private Sub ILocateCommandEvents_Start() End Sub 8.9 Acceso a niveles. Sub ejemplo14_niveles() 'Ejemplo de utilizacin de niveles. Necesita la existencia de un nivel 'llamado "Level 2" Dim nivel As Level Dim elemento As Element Dim nombreNivel As String Dim coleccionNiveles As New Collection Dim idx As Long nombreNivel = "Level 2"
Bentley Systems Ibrica, S.A. 58 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com

Visual Basic for Applications

idx = 1 ' Carga en nivel el nivel que posee el nombre especificado Set nivel = Application.ActiveDesignFile.Levels(nombreNivel) 'Fija el nivel activo al nivel que acabamos de cargar. If ActiveSettings.Level.Name <> nivel.Name Then ActiveSettings.Level = nivel End If ' Cargar una coleccin de niveles con la informacin de los niveles del diseo. For Each nivel In ActiveDesignFile.Levels coleccionNiveles.Add nivel Next nivel 'Acceso por indice de nivel a los niveles de una coleecin. Set nivel = coleccionNiveles.Item(idx) End Sub

Bentley Systems Ibrica, S.A. 59 Centro empresarial El Planto. C/ Ochandiano,8 28023 Madrid Tel. 91 372 89 75 Fax 91 307 62 85 www.bentley.com