Main Content

Pasar el clic del ratón al grupo principal

Este ejemplo muestra cómo un grupo de objetos puede pasar el clic de un ratón a un elemento principal que funciona en todos los objetos del grupo.

Objetivo y diseño

Supongamos que desea que un solo clic de ratón de cualquier miembro de un grupo de objetos ejecute un callback del botón que afecte a todos los objetos del grupo.

  • Defina los objetos de gráficas que desea añadir al grupo.

  • Asigne un objeto hggroup como el elemento principal de los objetos de gráficas.

  • Defina la función a ejecutar cuando se haga clic sobre cualquiera de los objetos. Asigne la administración de dicha función a la propiedad ButtonDownFcn del objeto hggroup.

  • Establezca la propiedad HitTest de cada objeto en el grupo en off de forma que el clic del ratón pase al elemento principal del objeto.

Jerarquía del objeto y propiedades clave

Este ejemplo emplea la siguiente jerarquía de objetos.

Código de MATLAB

Cree un archivo con dos funciones:

  • pickPatch: la función principal que crea los objetos gráficos.

  • groupCB: la función local del callback de hggroup.

La función pickPatch crea tres objetos de parche y los asigna a un objeto de hggroup. Establecer la propiedad HitTest de cada parche en desactivado dirige los clic del ratón al elemento principal.

function pickPatch
   figure
   x = [0 1 2];
   y = [0 1 0];
   hGroup = hggroup('ButtonDownFcn',@groupCB);
   patch(x,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+2,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+3,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
end

El callback de groupCB funciona en todos los objetos del hggroup. La función groupCB utiliza el argumento original del callback pasado al callback (src) para obtener los identificadores de los objetos de parches.

Al utilizar el argumento original del callback (que es el identificador del objeto hggroup) se elimina la necesidad de crear datos globales o pasar argumentos adicionales al callback.

Al hacer clic con el botón principal sobre cualquier parche, cambia el color de la cara de los tres parches a un valor de color RGB aleatorio.

function groupCB(src,~)
   s = src.Children;
   set(s,'FaceColor',rand(1,3))
end

Para obtener información sobre las funciones de callback, consulte Create Callbacks for Graphics Objects