Í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 

Obtener color de shape

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



Registrado: 17 Mar 2008
Mensajes: 10

MensajePublicado: Mie Jun 18, 2008 12:18 pm    Título del mensaje: Obtener color de shape Responder citando

Hola,
A ver si me pueden ayudar. Leo varios shapes de un archivo de Microstation, de los que extraigo las coordenadas de los vertices que forman cada shape. Necesitaria obtener tambien el color de cada elemento, en formato RGB. Lo he intentado con la propiedad ElementColor, pero no me funciona.
Saludos.
Volver arriba
Ver perfil del usuario Enviar mensaje privado
mediocad
Gran Maestro
Gran Maestro


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

MensajePublicado: Mie Jun 18, 2008 12:41 pm    Título del mensaje: Prueba con esto Responder citando

Hola,

Si tienes una Shape, con la propiedad Color. Supón que has hecho una búsqueda:

Código:
While oScanEnumerator.MoveNext 'Me muevo por los elementos
   Set oElement = oScanEnumerator.Current
   oElement.Redraw msdDrawingModeHilite
   oElement.AsShapeElement.Color=longColor
   oElement.Rewrite
Wend

El color que le has de pasar es un tipo Long.

Un saludo


Ultima edición por mediocad el Jue Jun 19, 2008 10:09 am; editado 1 vez
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
lianne



Registrado: 17 Mar 2008
Mensajes: 10

MensajePublicado: Jue Jun 19, 2008 9:43 am    Título del mensaje: Responder citando

Hola,
Gracias por la respuesta, lo habia hecho como está en el ejemplo, mi problema es que al obtener el color (que en MicroStation está definido como RGB) obtengo un número y necesito extraer de ahi los componentes rgb que definen el color. Existe alguna funcionalidad para ello?

Saludos.
Volver arriba
Ver perfil del usuario Enviar mensaje privado
mediocad
Gran Maestro
Gran Maestro


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

MensajePublicado: Jue Jun 19, 2008 10:30 am    Título del mensaje: Responder citando

Hola,

Creo que lo que necesitas es usar el método GetColorAtIndex.
En el siguiente ejemplo tienes un Sub que devuelve los valores del RGB que tiene el nº de color que le pasa a dicha función:

Código:
Public Sub ExtractRGB(ByVal longColor As Long, intRed As Byte, intGreen As Byte, intBlue As Byte)
    Dim lngColor As Long

    lngColor = longColor
    intRed = lngColor Mod &H100
    lngColor = lngColor \ &H100
    intGreen = lngColor Mod &H100
    lngColor = lngColor \ &H100
    intBlue = lngColor Mod &H100
End Sub

Private Sub PrintColorTable(ct As ColorTable)
    Dim cIndex As Long
    Dim r As Byte, g As Byte, b As Byte
    Dim ArrayRGBLongs () as long
   
    Debug.Print " The name of the color table is : " & ct.Name
    Debug.Print " The background color of the color table is : " & ct.BackColor
    ' Get an array of all of the RGB color values
    ArrayRGBLongs = ct.GetColors
    For cIndex = 0 To UBound(ArrayRGBLongs)
        ExtractRGB ArrayRGBLongs(cIndex), r, g, b
        Debug.Print "The RGB color at color index " & cIndex & " is: " & ArrayRGBLongs(cIndex) & " (r = " & r & ", g = " & g & ", b = " & b & ")"
    Next
End Sub

Private Sub TestColorTable()
    Dim ct As ColorTable
    Dim ArrayRGBLongs() As Long
    Dim color As Long
    Dim r As Byte, g As Byte, b As Byte
   
    ' Get a copy of the colortable that is currently attached to the active design file
    Set ct = Application.ActiveDesignFile.ExtractColorTable
   
    PrintColorTable ct
   
    ' Get the rgb color at index 2
    color = ct.GetColorAtIndex(2)
    ExtractRGB color, r, g, b
    Debug.Print "The RGB color at color index 2 is: " & color & " (r = " & r & ", g = " & g & ", b = " & b & ")"
       
   
    ' Redefine the RGB values for color index 0
    ct.SetColorAtIndex 0, RGB(255, 0, 0)
       
   ' ct.SetColorsToDefaultColorTable
    ct.Name = "My Table"
    ct.BackColor = color
   
    Debug.Print " ColorTable after setting name and backcolor and redefine the RGB value at index 0"
    PrintColorTable ct
   
    ' Set the colortable to AutoCad's default colortable
    ct.SetColorsToAutoCADColorTable
    Debug.Print " ColorTable after calling SetColorsToAutoCADColorTable "
    PrintColorTable ct
   
    ' find the closest matching RGB to a target RGB
    color = ct.FindClosestColor(RGB(244, 244, 244))
    ExtractRGB color, r, g, b
    Debug.Print "The closest matching RGB to RGB(244, 244, 244) is: color = " & color & " (r = " & r & ", g = " & g & ", b = " & b & ")"

    ' Lets an application attach a new color table to a design file
    Application.ActiveDesignFile.AttachColorTable ct
   
End Sub

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
lianne



Registrado: 17 Mar 2008
Mensajes: 10

MensajePublicado: Mar Jul 01, 2008 11:32 am    Título del mensaje: Responder citando

Hola,
Gracias por la respuesta, creo que no he explicado bien lo que necesito.

En mi archivo de MicroStation, al mostrar las capas, cada una de ellas tiene un color, según la simbología ByLevel, y este color se muestra como RGB, por ejemplo, una capa de color rojo tendria como color 255.0.0

Para obtener este color desde VBA hago lo siguiente:

Dim cc As Long
cc = Elemento.Level.ElementColor

Este valor numérico es el que quiero convertir a RGB, utilicé la misma rutina de ExtractRGB que viene en la ayuda, pero los valores que me da no son los correctos. No se si estoy omitiendo algún paso o si debo hacer alguna conversión intermedia del valor que me da ElementColor antes de llevarlo a RGB.

Saludos y gracias de nuevo.
Volver arriba
Ver perfil del usuario Enviar mensaje privado
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