Macro Mouse Cross

From FreeCAD Documentation
Revision as of 19:13, 7 June 2019 by Mario52 (talk | contribs)

Macro Mouse Cross

Description
Cette macro change la forme de la souris en une croix de précision.

Version macro : 00.04
Date dernière modification : 2019-06-07
Version FreeCAD : All
Téléchargement : ToolBar icon
Auteur: Mario52
Auteur
Mario52
Téléchargement
ToolBar icon
Liens
Version Macro
00.04
Dernière modification
2019-06-07
Version(s) FreeCAD
All
Raccourci clavier
C, A , G, X, Q
Voir aussi
None

Description

Cette macro change la forme de la souris en une croix de précision..

Macro_Mouse_Cross

Petit exemple d'utilisation de la class ViewObserver() et de l'utilisation du clavier avec SoKeyboardEvent

Utilisation

  1. Pressez la touche C pour activer la croix.
  2. Pressez la touche A pour activer la flèche.
  3. Pressez la touche G pour activer la grille.
  4. Pressez la touche X pour visualiser tous les curseurs.
  5. Pressez la touche Q pour quitter la macro.

Script

Macro_Mouse_Cross.FCMacro

# -*- coding: utf-8 -*-
# mouse cursor to Cross or Arrow + Grig 
# ver 0.2 08/08/2014  PyQt4 and PySide
# ver 0.4 07/06/2019 compatible Python 3.
#
__title__   = "Macro_Mouse_Cross"
__author__  = "Mario52"
__wiki__    = "https://www.freecadweb.org/wiki/Macro_Mouse_Cross"
__url__     = "http://www.freecadweb.org/index-fr.html"
__version__ = "00.04"
__date__    = "07/06/2019"

try:
    from PyQt4 import QtCore, QtGui
except Exception:
    from PySide import QtCore, QtGui
from pivy import coin

global xx ;xx = -1

#################### create document if not exist #######################
doc = FreeCAD.ActiveDocument                                         ####
if doc == None:                                                      ####
    doc = FreeCAD.newDocument()                                      ####
#########################################################################
class ViewObserver:
   def logPosition(self, info):
       global xx
       self.pos = info["Key"]
       if (self.pos.upper() == "Q"):
           v.removeEventCallback("SoKeyboardEvent",c)
           FreeCAD.Console.PrintMessage("End Macro_Mouse_Cross"+"\n")
       if (self.pos.upper() == "C"):
           # change the cursor cross ( + )
           QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
       elif (self.pos.upper() == "A"):
           # change the cursor in Arrow
           QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
       elif (self.pos.upper() == "X") and (info["State"] == "DOWN"):
           # change the cursor and visualise all model 
           xx += 1
           if xx == 0:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
               FreeCAD.Console.PrintMessage("ArrowCursor"+"\n")
           if xx == 1:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.UpArrowCursor))
               FreeCAD.Console.PrintMessage("UpArrowCursor"+"\n")
           if xx == 2:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
               FreeCAD.Console.PrintMessage("CrossCursor"+"\n")
           if xx == 3:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
               FreeCAD.Console.PrintMessage("WaitCursor"+"\n")
           if xx == 4:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))
               FreeCAD.Console.PrintMessage("IBeamCursor"+"\n")
           if xx == 5:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeVerCursor))
               FreeCAD.Console.PrintMessage("SizeVerCursor"+"\n")
           if xx == 6:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeHorCursor))
               FreeCAD.Console.PrintMessage("SizeHorCursor"+"\n")
           if xx == 7:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeBDiagCursor))
               FreeCAD.Console.PrintMessage("SizeBDiagCursor"+"\n")
           if xx == 8:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeFDiagCursor))
               FreeCAD.Console.PrintMessage("SizeFDiagCursor"+"\n")
           if xx == 9:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeAllCursor))
               FreeCAD.Console.PrintMessage("SizeAllCursor"+"\n")
           if xx == 10:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BlankCursor))
               FreeCAD.Console.PrintMessage("BlankCursor"+"\n")
           if xx == 11:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SplitVCursor))
               FreeCAD.Console.PrintMessage("SplitVCursor"+"\n")
           if xx == 12:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SplitHCursor))
               FreeCAD.Console.PrintMessage("SplitHCursor"+"\n")
           if xx == 13:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
               FreeCAD.Console.PrintMessage("PointingHandCursor"+"\n")
           if xx == 14:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ForbiddenCursor))
               FreeCAD.Console.PrintMessage("ForbiddenCursor"+"\n")
           if xx == 15:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
               FreeCAD.Console.PrintMessage("OpenHandCursor"+"\n")
           if xx == 16:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ClosedHandCursor))
               FreeCAD.Console.PrintMessage("ClosedHandCursor"+"\n")
           if xx == 17:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WhatsThisCursor))
               FreeCAD.Console.PrintMessage("WhatsThisCursor"+"\n")
           if xx == 18:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BusyCursor))
               FreeCAD.Console.PrintMessage("BusyCursor"+"\n")
           if xx == 19:
               QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BitmapCursor))
               FreeCAD.Console.PrintMessage("BitmapCursor"+"\n")
               xx = -1
       elif (self.pos.upper() == "G"):
           # "wmayer" http://forum.freecadweb.org/viewtopic.php?f=3&t=1065&hilit=cross#p8818
           # Create Grida
           grid=coin.SoType.fromName("SoDrawingGrid").createInstance()
           Gui.ActiveDocument.ActiveView.getSceneGraph().addChild(grid)
xx = -1 

try:
    v=Gui.activeDocument().activeView()
    o = ViewObserver()
    c = v.addEventCallback("SoKeyboardEvent",o.logPosition)
    App.Console.PrintMessage("Type Key C to Cross"+"\n")
    App.Console.PrintMessage("Type Key A to Arrow"+"\n")
    App.Console.PrintMessage("Type Key X to Visualise all cursor"+"\n")
    App.Console.PrintMessage("Type Key G to Grid (not editable)"+"\n")
    App.Console.PrintMessage("Type Key Q to Quit"+"\n")
except Exception:
    FreeCAD.Console.PrintError("\n"+"Not document open"+"\n")

Les curseurs pouvant être utilisés

ArrowCursor, UpArrowCursor, CrossCursor, WaitCursor, IBeamCursor, SizeVerCursor, SizeHorCursor SizeBDiagCursor, SizeFDiagCursor, SizeAllCursor, BlankCursor, SplitVCursor, SplitHCursor PointingHandCursor, ForbiddenCursor, OpenHandCursor, ClosedHandCursor, WhatsThisCursor, BusyCursor, BitmapCursor

Limitations

Le curseur peut changer d'apparence suivant l'établi utilisé, il faut alors répéter l’opération.
Le curseur peut se substituer aux autre curseurs (ex: lors de l'agrandissement d'une fenêtre, coins...).
La grille est permanente.