Last active
August 12, 2021 23:51
-
-
Save mario52a/8f5a0f31d203ecbc0ae6 to your computer and use it in GitHub Desktop.
This small macro turns the arrow of the mouse in a precision cross. Small example of using the class ViewObserver() and the use of the keyboard with SoKeyboardEvent
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment