- some more work in the Excellon Editor - Drill adding
- some fixes in the image loader when clicking the an image that is in the list of previous loaded files
- a small fin in the SVG parser
- added a new Tcl command that is returning the name of the active object ('get_active') to accompany the 'set_active' command
- a small fix for the 2d graphic mode by replacing the q5agg matplotlib backend with the qtagg backend which should work with the Qt6
123 lines
4.4 KiB
Python
123 lines
4.4 KiB
Python
import pkgutil
|
|
import sys
|
|
|
|
# allowed command modules (please append them alphabetically ordered)
|
|
import tclCommands.TclCommandAddAperture
|
|
import tclCommands.TclCommandAddCircle
|
|
import tclCommands.TclCommandAddDrill
|
|
import tclCommands.TclCommandAddPolygon
|
|
import tclCommands.TclCommandAddPolyline
|
|
import tclCommands.TclCommandAddRectangle
|
|
import tclCommands.TclCommandAddSlot
|
|
import tclCommands.TclCommandAlignDrill
|
|
import tclCommands.TclCommandAlignDrillGrid
|
|
import tclCommands.TclCommandBbox
|
|
import tclCommands.TclCommandBounds
|
|
import tclCommands.TclCommandBuffer
|
|
import tclCommands.TclCommandClearShell
|
|
import tclCommands.TclCommandCncjob
|
|
import tclCommands.TclCommandCopperClear
|
|
import tclCommands.TclCommandCutout
|
|
import tclCommands.TclCommandDelete
|
|
import tclCommands.TclCommandDrillcncjob
|
|
import tclCommands.TclCommandExportDXF
|
|
import tclCommands.TclCommandExportExcellon
|
|
import tclCommands.TclCommandExportGerber
|
|
import tclCommands.TclCommandExportGcode
|
|
import tclCommands.TclCommandExportSVG
|
|
import tclCommands.TclCommandExteriors
|
|
import tclCommands.TclCommandFollow
|
|
import tclCommands.TclCommandGeoCutout
|
|
import tclCommands.TclCommandGeoUnion
|
|
import tclCommands.TclCommandGetActive
|
|
import tclCommands.TclCommandGetNames
|
|
import tclCommands.TclCommandGetPath
|
|
import tclCommands.TclCommandGetSys
|
|
import tclCommands.TclCommandHelp
|
|
import tclCommands.TclCommandInteriors
|
|
import tclCommands.TclCommandIsolate
|
|
import tclCommands.TclCommandJoinExcellon
|
|
import tclCommands.TclCommandJoinGeometry
|
|
import tclCommands.TclCommandListSys
|
|
import tclCommands.TclCommandListPP
|
|
import tclCommands.TclCommandMillDrills
|
|
import tclCommands.TclCommandMillSlots
|
|
import tclCommands.TclCommandMirror
|
|
import tclCommands.TclCommandNew
|
|
import tclCommands.TclCommandNregions
|
|
import tclCommands.TclCommandNewExcellon
|
|
import tclCommands.TclCommandNewGeometry
|
|
import tclCommands.TclCommandNewGerber
|
|
import tclCommands.TclCommandOffset
|
|
import tclCommands.TclCommandOpenDXF
|
|
import tclCommands.TclCommandOpenExcellon
|
|
import tclCommands.TclCommandOpenFolder
|
|
import tclCommands.TclCommandOpenGCode
|
|
import tclCommands.TclCommandOpenGerber
|
|
import tclCommands.TclCommandOpenProject
|
|
import tclCommands.TclCommandOpenSVG
|
|
import tclCommands.TclCommandOptions
|
|
import tclCommands.TclCommandPaint
|
|
import tclCommands.TclCommandPanelize
|
|
import tclCommands.TclCommandPlotAll
|
|
import tclCommands.TclCommandPlotObjects
|
|
import tclCommands.TclCommandQuit
|
|
import tclCommands.TclCommandSaveProject
|
|
import tclCommands.TclCommandSaveSys
|
|
import tclCommands.TclCommandScale
|
|
import tclCommands.TclCommandSetActive
|
|
import tclCommands.TclCommandSetOrigin
|
|
import tclCommands.TclCommandSetPath
|
|
import tclCommands.TclCommandSetSys
|
|
import tclCommands.TclCommandSkew
|
|
import tclCommands.TclCommandSplitGeometry
|
|
import tclCommands.TclCommandSubtractPoly
|
|
import tclCommands.TclCommandSubtractRectangle
|
|
import tclCommands.TclCommandVersion
|
|
import tclCommands.TclCommandWriteGCode
|
|
|
|
|
|
__all__ = []
|
|
|
|
for loader, name, is_pkg in pkgutil.walk_packages(__path__):
|
|
module = loader.find_module(name).load_module(name)
|
|
__all__.append(name)
|
|
|
|
|
|
def register_all_commands(app, commands):
|
|
"""
|
|
Static method which registers all known commands.
|
|
|
|
Command should be for now in directory tclCommands and module should start with TCLCommand
|
|
Class have to follow same name as module.
|
|
|
|
we need import all modules in top section:
|
|
import tclCommands.TclCommandExteriors
|
|
at this stage we can include only wanted commands with this, auto loading may be implemented in future
|
|
I have no enough knowledge about python's anatomy. Would be nice to include all classes which are descendant etc.
|
|
|
|
:param app: FlatCAMApp
|
|
:param commands: List of commands being updated
|
|
:return: None
|
|
"""
|
|
|
|
tcl_modules = {k: v for k, v in list(
|
|
sys.modules.items()) if k.startswith('tclCommands.TclCommand')}
|
|
|
|
for key, mod in list(tcl_modules.items()):
|
|
if key != 'tclCommands.TclCommand':
|
|
class_name = key.split('.')[1]
|
|
class_type = getattr(mod, class_name)
|
|
command_instance = class_type(app)
|
|
|
|
for alias in command_instance.aliases:
|
|
try:
|
|
description = command_instance.description
|
|
except AttributeError:
|
|
description = ''
|
|
commands[alias] = {
|
|
'fcn': command_instance.execute_wrapper,
|
|
'help': command_instance.get_decorated_help(),
|
|
'description': description
|
|
}
|