Índice del Foro www.mediocad.com www.mediocad.com
TODO SOBRE MICROSTATION. MDL, MVBA, MACROS.
 
 F.A.Q.F.A.Q.   BuscarBuscar   Lista de MiembrosLista de Miembros   Grupos de UsuariosGrupos de Usuarios   RegístreseRegístrese 
 PerfilPerfil   Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   ConectarseConectarse 

Control en Microstation v8

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro www.mediocad.com -> MVBA
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
sanctus



Registrado: 07 Oct 2008
Mensajes: 1

MensajePublicado: Mie Oct 22, 2008 12:44 am    Título del mensaje: Control en Microstation v8 Responder citando

Question Question

Hola, me gustaria saber si existe algun metodo en el que un mvba pueda realizar una tarea especifica como el de cargar un archivo .cel y activar una celula, posteriormente dejar el control al microestacion un instante, hasta que el operador ponga esta celula en algun sitio, y luego continuar con su mormal ejecucion.

Esto porque al hacer correr un mvba se pierde el control del Microstation (vCool y solo se cuenta con lo que se presente con el mvba y requiero que el operador ponga una celula en donde sea necesario y despues de ello continuar con la ejecucion del programa.

Un saludo.

Shocked
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Segimer



Registrado: 10 Mar 2008
Mensajes: 38

MensajePublicado: Mie Oct 22, 2008 8:09 am    Título del mensaje: Inserción de células Responder citando

Se puede hacer usando comandos de primitivas, esto es, implementando la interface 'IprimitiveCommandEvents'. Para ello se debe crear un módulo de clase en el proyecto mvba, pues los interface sólo se pueden implementar en este tipo de módulos.
Tendrías tu procedimiento inicial de la forma:
Código:

Sub ColocarCelula()
    Dim ruta As String
    Dim insercion As New InsertaCelulas
   
    ' Se vincula la biblioteca de células y se usa la clase correspondiente
    ruta = Application.ActiveDesignFile.Path & "\"
    Application.AttachCellLibrary ruta & BIBCELULAS, msdConversionModeNever
   
    Application.CommandState.StartPrimitive insercion
End Sub

Donde BIBCELULAS es una constante de tipo String que contiene el nombre de la biblioteca de células que se va a usar.

Y en el módulo de clase 'InsertaCelulas' el siguiente código (que siempre debe empezar con la línea 'Implements IprimitiveCommandEvents', para definir a qué interface va a implementar).
Código:

Implements IPrimitiveCommandEvents

Dim nombre As String

Private Sub IPrimitiveCommandEvents_DataPoint(Point As Point3d, ByVal View As View)
    Dim cel As CellElement
   
    Set cel = Application.CreateCellElement3(nombre, Point, True)
    Application.ActiveModelReference.AddElement cel
    cel.Redraw
    cel.Rewrite
End Sub

Private Sub IPrimitiveCommandEvents_Dynamics(Point As Point3d, ByVal View As View, ByVal DrawMode As MsdDrawingMode)

End Sub

Private Sub IPrimitiveCommandEvents_Keyin(ByVal Keyin As String)

End Sub

Private Sub IPrimitiveCommandEvents_Cleanup()
    Application.DetachCellLibrary
End Sub

Private Sub IPrimitiveCommandEvents_Reset()
    Application.CommandState.StartDefaultCommand
End Sub

Private Sub IPrimitiveCommandEvents_Start()
    nombre = InputBox("CELULA A INSERTAR:", "CELULAS")
End Sub

En este módulo de clase deben aparecer todos los métodos, aunque estén vacíos.

La variable 'nombre' contiene el nombre de la célula a insertar, que se insertará cada vez que el operador dé un punto de datos, hasta que pulse 'Reset' o seleccione otra orden de comando.
Otra forma sería usar la "herencia" dejada por la versión v7 de MicroStation y crear menús .sbm, usando el comando 'place cell'. De esta forma se puede crear un menú para MicroStation en el que se podrían tener todas las células a insertar. Se carga el menú y con clicar cada opción seleccionaría la célula. Serían líneas de la forma:
'Farola ','LV=41;ac=FAROLA;xs=1;ys=1;t,reset;place cell ',line/nosave
Yo dejo ahí la idea...
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Mie Oct 22, 2008 8:24 am    Título del mensaje: Bien resuelto Responder citando

Perfecto Segimer. Gracias por tu ayuda.

Para rizar un poco más el código, cuando "atachas" la librería en

Código:
Application.AttachCellLibrary ruta & BIBCELULAS, msdConversionModeNever

podrías cargar todos los nombres de las células en un ListBox y así el operador selecciona la célula en él y no tiene que introducir el nombre en el InputBox ya que la tiene en el listado.

Quedaría algo así:

Código:
Application.AttachCellLibrary ruta & BIBCELULAS, msdConversionModeNever

SelectCell 'llamada a la función que nos muestra en un combo los nombres de las células

Public Function SelectCell()
Dim oCIE      As CellInformationEnumerator
Dim OCellInfo As CellInformation

  If IsCellLibraryAttached Then
    '  Do not include shared cells, but include everything
    '  in the MS_CELLLIST
    Set oCIE = GetCellInformationEnumerator(True, False) 'False no coge MS_CELLLIST
    Do While oCIE.MoveNext
      Set OCellInfo = oCIE.Current
      With OCellInfo
        frmMain.cmbCell.AddItem .Name
      End With
    Loop
  End If
End Function

Sólo recalcar que el combo se llama cmbCell y está en un formulario llamado frmMain.

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro www.mediocad.com -> MVBA Todas las horas están en GMT + 1 Hora
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas


Powered by phpBB © 2001, 2005 phpBB Group