Macro Mouse Cross: Difference between revisions
(Use {{MacroCode}}) |
m (FC version 0.18 and more) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
|Shortcut=C, A, G, X, Q |
|Shortcut=C, A, G, X, Q |
||
|Author=Mario52 |
|Author=Mario52 |
||
|Version= |
|Version=0.05 |
||
|Date= |
|Date=2020-08-06 |
||
|FCVersion= |
|FCVersion=0.18 and more |
||
|Download=[https://www.freecadweb.org/wiki/images/f/ff/Macro_Mouse_Cross.png ToolBar icon] |
|Download=[https://www.freecadweb.org/wiki/images/f/ff/Macro_Mouse_Cross.png ToolBar icon] |
||
}} |
}} |
||
Line 40: | Line 40: | ||
# ver 0.2 08/08/2014 PyQt4 and PySide |
# ver 0.2 08/08/2014 PyQt4 and PySide |
||
# ver 0.4 07/06/2019 compatible Python 3. |
# ver 0.4 07/06/2019 compatible Python 3. |
||
# ver 0.5 06/08/2020 PySide2 and add image in macro |
|||
# |
# |
||
__title__ = "Macro_Mouse_Cross" |
__title__ = "Macro_Mouse_Cross" |
||
__author__ = "Mario52" |
__author__ = "Mario52" |
||
__wiki__ = "https://www.freecadweb.org/wiki/Macro_Mouse_Cross" |
__wiki__ = "https://www.freecadweb.org/wiki/Macro_Mouse_Cross" |
||
__url__ = " |
__url__ = "https://www.freecadweb.org/" |
||
__version__ = " |
__version__ = "0.05" |
||
__date__ = " |
__date__ = "06/08/2020" |
||
import PySide2 |
|||
try: |
|||
from PySide2 import QtWidgets, QtCore, QtGui |
|||
from PySide2.QtGui import QColor, QPixmap, QImage, QPainter, QCursor |
|||
except Exception: |
|||
from PySide2.QtCore import Qt,QUrl |
|||
from PySide2.QtWidgets import QApplication |
|||
from pivy import coin |
from pivy import coin |
||
FCCursor24x24_Icon = [ |
|||
"24 24 9 1", |
|||
" c None", |
|||
". c #3A0202", |
|||
"+ c #0E1245", |
|||
"@ c #640A0A", |
|||
"# c #B10A0B", |
|||
"$ c #2A3E71", |
|||
"% c #DF1F20", |
|||
"& c #49699A", |
|||
"* c #638EC0", |
|||
".............. ", |
|||
".%%%%%%%%%%%%. ", |
|||
".%%%%%%%%%%%%. ", |
|||
".%%%%%%%%%%%%. ", |
|||
".%%%%%%%%%%%%. ", |
|||
".%%%%......... ", |
|||
".%%%%. ++++ ", |
|||
".%%%%. +**+ ", |
|||
".%%%%. +++ +**+ +++ ", |
|||
".%%%%.....**+****+**+ ", |
|||
".%%%%%%%%.**********+ ", |
|||
".%%%%%%%%.+********+ ", |
|||
".%%%%%%%%.***++++***+ ", |
|||
".%%%%%....**++ ++**+++ ", |
|||
".%%%%..+****+ +****+ ", |
|||
".%%%%. +****+ +****+ ", |
|||
".%%%%. +++**++ ++**+++ ", |
|||
".%%%%. +***++++***+ ", |
|||
".%%%%. +********+ ", |
|||
".%%%%. +**********+ ", |
|||
".%%%%. +**+****+**+ ", |
|||
".%%%%. +++ +**+ +++ ", |
|||
".%%%%. +**+ ", |
|||
"...... ++++ " |
|||
] |
|||
global xx ;xx = -1 |
global xx ;xx = -1 |
||
Line 66: | Line 105: | ||
self.pos = info["Key"] |
self.pos = info["Key"] |
||
if (self.pos.upper() == "Q"): |
if (self.pos.upper() == "Q"): |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) |
|||
v.removeEventCallback("SoKeyboardEvent",c) |
v.removeEventCallback("SoKeyboardEvent",c) |
||
FreeCAD.Console.PrintMessage("End Macro_Mouse_Cross"+"\n") |
FreeCAD.Console.PrintMessage("End Macro_Mouse_Cross"+"\n") |
||
if (self.pos.upper() == "C"): |
if (self.pos.upper() == "C"): |
||
# change the cursor cross ( + ) |
# change the cursor cross ( + ) |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor)) |
|||
elif (self.pos.upper() == "A"): |
elif (self.pos.upper() == "A"): |
||
# change the cursor in Arrow |
# change the cursor in Arrow |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) |
|||
elif (self.pos.upper() == "X") and (info["State"] == "DOWN"): |
elif (self.pos.upper() == "X") and (info["State"] == "DOWN"): |
||
# change the cursor and visualise all model |
# change the cursor and visualise all model |
||
xx += 1 |
xx += 1 |
||
if xx == 0: |
if xx == 0: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) |
|||
FreeCAD.Console.PrintMessage("ArrowCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : ArrowCursor"+"\n") |
||
if xx == 1: |
if xx == 1: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.UpArrowCursor)) |
|||
FreeCAD.Console.PrintMessage("UpArrowCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : UpArrowCursor"+"\n") |
||
if xx == 2: |
if xx == 2: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor)) |
|||
FreeCAD.Console.PrintMessage("CrossCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : CrossCursor"+"\n") |
||
if xx == 3: |
if xx == 3: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) |
|||
FreeCAD.Console.PrintMessage("WaitCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : WaitCursor"+"\n") |
||
if xx == 4: |
if xx == 4: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor)) |
|||
FreeCAD.Console.PrintMessage("IBeamCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : IBeamCursor"+"\n") |
||
if xx == 5: |
if xx == 5: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeVerCursor)) |
|||
FreeCAD.Console.PrintMessage("SizeVerCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SizeVerCursor"+"\n") |
||
if xx == 6: |
if xx == 6: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeHorCursor)) |
|||
FreeCAD.Console.PrintMessage("SizeHorCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SizeHorCursor"+"\n") |
||
if xx == 7: |
if xx == 7: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeBDiagCursor)) |
|||
FreeCAD.Console.PrintMessage("SizeBDiagCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SizeBDiagCursor"+"\n") |
||
if xx == 8: |
if xx == 8: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeFDiagCursor)) |
|||
FreeCAD.Console.PrintMessage("SizeFDiagCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SizeFDiagCursor"+"\n") |
||
if xx == 9: |
if xx == 9: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeAllCursor)) |
|||
FreeCAD.Console.PrintMessage("SizeAllCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SizeAllCursor"+"\n") |
||
if xx == 10: |
if xx == 10: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BlankCursor)) |
|||
FreeCAD.Console.PrintMessage("BlankCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : BlankCursor"+"\n") |
||
if xx == 11: |
if xx == 11: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SplitVCursor)) |
|||
FreeCAD.Console.PrintMessage("SplitVCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SplitVCursor"+"\n") |
||
if xx == 12: |
if xx == 12: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SplitHCursor)) |
|||
FreeCAD.Console.PrintMessage("SplitHCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : SplitHCursor"+"\n") |
||
if xx == 13: |
if xx == 13: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) |
|||
FreeCAD.Console.PrintMessage("PointingHandCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : PointingHandCursor"+"\n") |
||
if xx == 14: |
if xx == 14: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ForbiddenCursor)) |
|||
FreeCAD.Console.PrintMessage("ForbiddenCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : ForbiddenCursor"+"\n") |
||
if xx == 15: |
if xx == 15: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor)) |
|||
FreeCAD.Console.PrintMessage("OpenHandCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : OpenHandCursor"+"\n") |
||
if xx == 16: |
if xx == 16: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ClosedHandCursor)) |
|||
FreeCAD.Console.PrintMessage("ClosedHandCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : ClosedHandCursor"+"\n") |
||
if xx == 17: |
if xx == 17: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WhatsThisCursor)) |
|||
FreeCAD.Console.PrintMessage("WhatsThisCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : WhatsThisCursor"+"\n") |
||
if xx == 18: |
if xx == 18: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BusyCursor)) |
|||
FreeCAD.Console.PrintMessage("BusyCursor"+"\n") |
FreeCAD.Console.PrintMessage(str(xx)+" : BusyCursor"+"\n") |
||
if xx == 19: |
if xx == 19: |
||
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QPixmap(FCCursor24x24_Icon))) # image include in macro |
|||
#QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QPixmap("C:/completePath/image.png"))) # image to disk |
|||
FreeCAD.Console.PrintMessage(" |
FreeCAD.Console.PrintMessage(str(xx)+" : FCCursor24x24_Icon"+"\n") |
||
xx = -1 |
xx = -1 |
||
elif (self.pos.upper() == "G"): |
elif (self.pos.upper() == "G"): |
||
Line 143: | Line 184: | ||
grid=coin.SoType.fromName("SoDrawingGrid").createInstance() |
grid=coin.SoType.fromName("SoDrawingGrid").createInstance() |
||
Gui.ActiveDocument.ActiveView.getSceneGraph().addChild(grid) |
Gui.ActiveDocument.ActiveView.getSceneGraph().addChild(grid) |
||
xx = -1 |
xx = -1 |
||
Line 156: | Line 198: | ||
except Exception: |
except Exception: |
||
FreeCAD.Console.PrintError("\n"+"Not document open"+"\n") |
FreeCAD.Console.PrintError("\n"+"Not document open"+"\n") |
||
}} |
}} |
Revision as of 09:06, 6 August 2020
Description |
---|
This macro turns the arrow of the mouse in a precision cross. Macro version: 0.05 Last modified: 2020-08-06 FreeCAD version: 0.18 and more Download: ToolBar icon Author: Mario52 |
Author |
Mario52 |
Download |
ToolBar icon |
Links |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
0.05 |
Date last modified |
2020-08-06 |
FreeCAD Version(s) |
0.18 and more |
Default shortcut |
C, A, G, X, Q |
See also |
None |
Description
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
Usage
- Press the C button to activate the cross.
- Press the A button to activate the arrow.
- Press the G button to activate the grid.
- Press the X button for visualise all cursor.
- Press the Q button to quit the 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. # ver 0.5 06/08/2020 PySide2 and add image in macro # __title__ = "Macro_Mouse_Cross" __author__ = "Mario52" __wiki__ = "https://www.freecadweb.org/wiki/Macro_Mouse_Cross" __url__ = "https://www.freecadweb.org/" __version__ = "0.05" __date__ = "06/08/2020" import PySide2 from PySide2 import QtWidgets, QtCore, QtGui from PySide2.QtGui import QColor, QPixmap, QImage, QPainter, QCursor from PySide2.QtCore import Qt,QUrl from PySide2.QtWidgets import QApplication from pivy import coin FCCursor24x24_Icon = [ "24 24 9 1", " c None", ". c #3A0202", "+ c #0E1245", "@ c #640A0A", "# c #B10A0B", "$ c #2A3E71", "% c #DF1F20", "& c #49699A", "* c #638EC0", ".............. ", ".%%%%%%%%%%%%. ", ".%%%%%%%%%%%%. ", ".%%%%%%%%%%%%. ", ".%%%%%%%%%%%%. ", ".%%%%......... ", ".%%%%. ++++ ", ".%%%%. +**+ ", ".%%%%. +++ +**+ +++ ", ".%%%%.....**+****+**+ ", ".%%%%%%%%.**********+ ", ".%%%%%%%%.+********+ ", ".%%%%%%%%.***++++***+ ", ".%%%%%....**++ ++**+++ ", ".%%%%..+****+ +****+ ", ".%%%%. +****+ +****+ ", ".%%%%. +++**++ ++**+++ ", ".%%%%. +***++++***+ ", ".%%%%. +********+ ", ".%%%%. +**********+ ", ".%%%%. +**+****+**+ ", ".%%%%. +++ +**+ +++ ", ".%%%%. +**+ ", "...... ++++ " ] 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"): QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) v.removeEventCallback("SoKeyboardEvent",c) FreeCAD.Console.PrintMessage("End Macro_Mouse_Cross"+"\n") if (self.pos.upper() == "C"): # change the cursor cross ( + ) QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor)) elif (self.pos.upper() == "A"): # change the cursor in Arrow QtWidgets.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: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : ArrowCursor"+"\n") if xx == 1: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.UpArrowCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : UpArrowCursor"+"\n") if xx == 2: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : CrossCursor"+"\n") if xx == 3: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : WaitCursor"+"\n") if xx == 4: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : IBeamCursor"+"\n") if xx == 5: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeVerCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SizeVerCursor"+"\n") if xx == 6: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeHorCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SizeHorCursor"+"\n") if xx == 7: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeBDiagCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SizeBDiagCursor"+"\n") if xx == 8: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeFDiagCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SizeFDiagCursor"+"\n") if xx == 9: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SizeAllCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SizeAllCursor"+"\n") if xx == 10: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BlankCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : BlankCursor"+"\n") if xx == 11: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SplitVCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SplitVCursor"+"\n") if xx == 12: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.SplitHCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : SplitHCursor"+"\n") if xx == 13: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : PointingHandCursor"+"\n") if xx == 14: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ForbiddenCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : ForbiddenCursor"+"\n") if xx == 15: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : OpenHandCursor"+"\n") if xx == 16: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ClosedHandCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : ClosedHandCursor"+"\n") if xx == 17: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WhatsThisCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : WhatsThisCursor"+"\n") if xx == 18: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.BusyCursor)) FreeCAD.Console.PrintMessage(str(xx)+" : BusyCursor"+"\n") if xx == 19: QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QPixmap(FCCursor24x24_Icon))) # image include in macro #QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QPixmap("C:/completePath/image.png"))) # image to disk FreeCAD.Console.PrintMessage(str(xx)+" : FCCursor24x24_Icon"+"\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")
Cursors that can be used
ArrowCursor, UpArrowCursor, CrossCursor, WaitCursor, IBeamCursor, SizeVerCursor, SizeHorCursor SizeBDiagCursor, SizeFDiagCursor, SizeAllCursor, BlankCursor, SplitVCursor, SplitHCursor PointingHandCursor, ForbiddenCursor, OpenHandCursor, ClosedHandCursor, WhatsThisCursor, BusyCursor, BitmapCursor
Limitation
The cursor can change appearance depending on the used Workbench, he must repeat the operation.
The cursor can be subtituer to the other sliders (ex: expansion of a window, corner...).
The grid is permanent.