diff --git a/src/qtpyvcp/plugins/offset_table.py b/src/qtpyvcp/plugins/offset_table.py index 8ce0680a6..479083a4a 100644 --- a/src/qtpyvcp/plugins/offset_table.py +++ b/src/qtpyvcp/plugins/offset_table.py @@ -46,7 +46,6 @@ from qtpyvcp.actions.machine_actions import issue_mdi - CMD = linuxcnc.command() LOG = getLogger(__name__) STATUS = getPlugin('status') @@ -573,6 +572,9 @@ def loadOffsetTable(self): return self.g5x_offset_table + def getTableColumnsIndex(self): + return self.column_labels + def getOffsetTable(self): return self.g5x_offset_table diff --git a/src/qtpyvcp/utilities/config_loader.py b/src/qtpyvcp/utilities/config_loader.py index 3ded509a1..6a9cf6120 100644 --- a/src/qtpyvcp/utilities/config_loader.py +++ b/src/qtpyvcp/utilities/config_loader.py @@ -45,7 +45,7 @@ def load_config_files(*files): undefined=LogUndefined) cfg_dict = hiyapyco.load(expanded_files, - method=hiyapyco.METHOD_MERGE, + method=hiyapyco.METHOD_SUBSTITUTE, interpolate=True, failonmissingfiles=True) @@ -59,8 +59,7 @@ def load_config_files(*files): def process_templates(files): env = Environment(loader=FileSystemLoader(searchpath=[os.path.dirname(config_file) for config_file in files]), - undefined=LogUndefined, - ) + undefined=Undefined) expanded_templates = [] for config_file in files: diff --git a/src/qtpyvcp/widgets/display_widgets/vtk_backplot/linuxcnc_datasource.py b/src/qtpyvcp/widgets/display_widgets/vtk_backplot/linuxcnc_datasource.py index 5177bdc0f..4bc634efd 100644 --- a/src/qtpyvcp/widgets/display_widgets/vtk_backplot/linuxcnc_datasource.py +++ b/src/qtpyvcp/widgets/display_widgets/vtk_backplot/linuxcnc_datasource.py @@ -42,7 +42,8 @@ def __init__(self): self._is_lathe = bool(self._inifile.find("DISPLAY", "LATHE")) self._is_foam = bool(self._inifile.find("DISPLAY", "FOAM")) self._is_jet = bool(self._inifile.find("DISPLAY", "JET")) - self._machine_bounds = str(self._inifile.find("VTK", "BOUNDARIES")) + self._machine_bounds = str(self._inifile.find("DISPLAY", "BOUNDARIES")) + self._nav_helper = bool(self._inifile.find("DISPLAY", "NAV")) or False self._status.file.notify(self.__handleProgramLoaded) self._status.position.notify(self.__handlePositionChanged) @@ -52,7 +53,7 @@ def __init__(self): self._status.g5x_index.notify(self.__handleG5xIndexChange) self._status.rotation_xy.notify(self.__handleRotationChangeXY) - + # self._offsettable.offset_table_changed.connect(self.__handleOffsetTableChanged) # self._offsettable.active_offset_changed.connect(self.__handleActiveOffsetChanged) @@ -165,6 +166,9 @@ def getKeyboardJog(self): def getMachineBounds(self): return self._machine_bounds + + def getNavHelper(self): + return self._nav_helper def getActiveWcsIndex(self): # in the stat, the first one the list is G53 (Machine Coordinates) @@ -191,5 +195,5 @@ def getWcsOffsets(self): # returns a dictionary with the coordinate systems from 0 to 8 (g54 up to g59.3) return self._offsettable.getOffsetTable() - def getOffsetColumns(self): - return self._offsettable.column_labels + def getOffsetColumnsIndex(self): + return self._offsettable.getTableColumnsIndex() diff --git a/src/qtpyvcp/widgets/display_widgets/vtk_backplot/vtk_backplot.py b/src/qtpyvcp/widgets/display_widgets/vtk_backplot/vtk_backplot.py index c811f51fd..93cb628be 100644 --- a/src/qtpyvcp/widgets/display_widgets/vtk_backplot/vtk_backplot.py +++ b/src/qtpyvcp/widgets/display_widgets/vtk_backplot/vtk_backplot.py @@ -1,12 +1,27 @@ -# import pydevd;pydevd.settrace() +# Copyright (c) 2018 Kurt Jacobson +# +# +# This file is part of QtPyVCP. +# +# QtPyVCP is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# QtPyVCP is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with QtPyVCP. If not, see . import yaml -# from pprint import pprint import linuxcnc import os from collections import OrderedDict -from operator import add + import time import vtk @@ -133,7 +148,10 @@ def __init__(self, parent=None): self._datasource = LinuxCncDataSource() - print(self._datasource.getKeyboardJog()) + if self._datasource.getKeyboardJog(): + LOG.info("keyboard JOG enabled") + else: + LOG.info("keyboard JOG disabled") if self._datasource.getKeyboardJog().lower() in ['true', '1', 't', 'y', 'yes']: event_filter = InteractorEventFilter(self) @@ -146,6 +164,20 @@ def __init__(self, parent=None): self.parent = parent self.ploter_enabled = True self.touch_enabled = False + + view_default_setting = getSetting("backplot.view").value + view_options_setting = getSetting("backplot.view").enum_options + view_options = list() + + for option in view_options_setting: + view_options.append(option.split(':')[0]) + + print(view_options_setting) + print(view_options) + + self.default_view = view_options[view_default_setting] + + self.program_view_when_loading_program = False self.program_view_when_loading_program_view = 'p' self.pan_mode = False @@ -337,12 +369,16 @@ def initialize(self): self._datasource.g5xOffsetChanged.connect(self.update_g5x_offset) self._datasource.g92OffsetChanged.connect(self.update_g92_offset) + # self._datasource.offsetTableChanged.connect(self.on_offset_table_changed) # self._datasource.activeOffsetChanged.connect(self.update_active_wcs) self._datasource.toolTableChanged.connect(self.update_tool) self._datasource.toolOffsetChanged.connect(self.update_tool) # self.status.g5x_index.notify(self.update_g5x_index) + + self.offsetTableColumnsIndex = self._datasource.getOffsetColumnsIndex() + self.canon = VTKCanon(colors=self.path_colors) self.path_actors = self.canon.get_path_actors() @@ -390,6 +426,8 @@ def initialize(self): self.renderer.AddActor(self.axes_actor) self.renderer.AddActor(self.path_cache_actor) + self.setView(self.default_view) + self.interactor.ReInitialize() self.renderer.ResetCameraClippingRange() @@ -1102,8 +1140,23 @@ def setViewPersp(self): @Slot(str) @Slot(object) def setView(self, view): - if isinstance(view, int): - view = ['X', 'XZ', 'XZ2', 'Y', 'Z', 'Z2', 'P'][view] + +# if isinstance(view, int): +# view = ['X', 'XZ', 'XZ2', 'Y', 'Z', 'Z2', 'P'][view] + + if isinstance(view, int): + view_options_setting = getSetting("backplot.view").enum_options + view_options = list() + + for option in view_options_setting: + view_options.append(option.split(':')[0]) + + print(view_options_setting) + print(view_options) + print(view) + + view = view_options[view] + view = view.upper() LOG.debug("Setting view to: %s", view) @@ -1126,7 +1179,9 @@ def setView(self, view): @Slot() def setViewP(self): self.active_view = 'P' + position = self.wcs_offsets[self.active_wcs_index] + self.camera.SetPosition(self.position_mult, -self.position_mult, self.position_mult) self.camera.SetFocalPoint(position[:3]) self.camera.SetViewUp(0, 0, 1) @@ -1135,54 +1190,193 @@ def setViewP(self): @Slot() def setViewX(self): self.active_view = 'X' + position = self.wcs_offsets[self.active_wcs_index] - self.camera.SetPosition(position[0], position[1] - self.position_mult, position[2]) - self.camera.SetFocalPoint(position[:3]) + ot_columns_index = self.offsetTableColumnsIndex + + column_x = ot_columns_index.get('X') + column_y = ot_columns_index.get('Y') + column_z = ot_columns_index.get('Z') + + + if column_x is not None: + position_x = position[column_x] + else: + position_x = 0.0 + + if column_y is not None: + position_y = position[column_y] + else: + position_y = 0.0 + + if column_z is not None: + position_z = position[column_z] + else: + position_z = 0.0 + + + self.camera.SetPosition(position_x, position_y - self.position_mult, position_z) + self.camera.SetFocalPoint((position_x, position_y, position_z)) self.camera.SetViewUp(0, 0, 1) self.__doCommonSetViewWork() @Slot() def setViewXZ(self): self.active_view = 'XZ' + position = self.wcs_offsets[self.active_wcs_index] - self.camera.SetPosition(position[0], position[1] + self.position_mult, position[2]) - self.camera.SetFocalPoint(position[:3]) + ot_columns_index = self.offsetTableColumnsIndex + + column_x = ot_columns_index.get('X') + column_y = ot_columns_index.get('Y') + column_z = ot_columns_index.get('Z') + + + if column_x is not None: + position_x = position[column_x] + else: + position_x = 0.0 + + if column_y is not None: + position_y = position[column_y] + else: + position_y = 0.0 + + if column_z is not None: + position_z = position[column_z] + else: + position_z = 0.0 + + self.camera.SetPosition(position_x, position_y + self.position_mult, position_z) + self.camera.SetFocalPoint((position_x, position_y, position_z)) self.camera.SetViewUp(1, 0, 0) self.__doCommonSetViewWork() @Slot() def setViewXZ2(self): self.active_view = 'XZ2' + position = self.wcs_offsets[self.active_wcs_index] - self.camera.SetPosition(position[0], position[1] - self.position_mult, position[2]) - self.camera.SetFocalPoint(position[:3]) + ot_columns_index = self.offsetTableColumnsIndex + + column_x = ot_columns_index.get('X') + column_y = ot_columns_index.get('Y') + column_z = ot_columns_index.get('Z') + + + if column_x is not None: + position_x = position[column_x] + else: + position_x = 0.0 + + if column_y is not None: + position_y = position[column_y] + else: + position_y = 0.0 + + if column_z is not None: + position_z = position[column_z] + else: + position_z = 0.0 + + self.camera.SetPosition(position_x, position_y - self.position_mult, position_z) + self.camera.SetFocalPoint((position_x, position_y, position_z)) self.camera.SetViewUp(-1, 0, 0) self.__doCommonSetViewWork() @Slot() def setViewY(self): self.active_view = 'Y' + position = self.wcs_offsets[self.active_wcs_index] - self.camera.SetPosition(position[0] + self.position_mult, position[1], position[2]) - self.camera.SetFocalPoint(position[:3]) + ot_columns_index = self.offsetTableColumnsIndex + + column_x = ot_columns_index.get('X') + column_y = ot_columns_index.get('Y') + column_z = ot_columns_index.get('Z') + + + if column_x is not None: + position_x = position[column_x] + else: + position_x = 0.0 + + if column_y is not None: + position_y = position[column_y] + else: + position_y = 0.0 + + if column_z is not None: + position_z = position[column_z] + else: + position_z = 0.0 + + self.camera.SetPosition(position_x + self.position_mult, position_y, position_z) + self.camera.SetFocalPoint((position_x, position_y, position_z)) self.camera.SetViewUp(0, 0, 1) self.__doCommonSetViewWork() @Slot() def setViewZ(self): self.active_view = 'Z' + position = self.wcs_offsets[self.active_wcs_index] - self.camera.SetPosition(position[0], position[1], position[2] + self.position_mult) - self.camera.SetFocalPoint(position[:3]) + ot_columns_index = self.offsetTableColumnsIndex + + column_x = ot_columns_index.get('X') + column_y = ot_columns_index.get('Y') + column_z = ot_columns_index.get('Z') + + + if column_x is not None: + position_x = position[column_x] + else: + position_x = 0.0 + + if column_y is not None: + position_y = position[column_y] + else: + position_y = 0.0 + + if column_z is not None: + position_z = position[column_z] + else: + position_z = 0.0 + + self.camera.SetPosition(position_x, position_y, position_z + self.position_mult) + self.camera.SetFocalPoint((position_x, position_y, position_z)) self.camera.SetViewUp(0, 1, 0) self.__doCommonSetViewWork() @Slot() def setViewZ2(self): self.active_view = 'Z2' + position = self.wcs_offsets[self.active_wcs_index] - self.camera.SetPosition(position[0], position[1], position[2] + self.position_mult) - self.camera.SetFocalPoint(position[:3]) + ot_columns_index = self.offsetTableColumnsIndex + + column_x = ot_columns_index.get('X') + column_y = ot_columns_index.get('Y') + column_z = ot_columns_index.get('Z') + + + if column_x is not None: + position_x = position[column_x] + else: + position_x = 0.0 + + if column_y is not None: + position_y = position[column_y] + else: + position_y = 0.0 + + if column_z is not None: + position_z = position[column_z] + else: + position_z = 0.0 + + self.camera.SetPosition(position_x, position_y, position_z + self.position_mult) + self.camera.SetFocalPoint((position_x, position_y, position_z)) self.camera.SetViewUp(1, 0, 0) self.__doCommonSetViewWork() diff --git a/src/qtpyvcp/yaml_lib/default_config.yml b/src/qtpyvcp/yaml_lib/default_config.yml index 515f375a4..dd3b7b004 100644 --- a/src/qtpyvcp/yaml_lib/default_config.yml +++ b/src/qtpyvcp/yaml_lib/default_config.yml @@ -172,12 +172,12 @@ settings: default_value: false backplot.perspective-view: - default_value: True + default_value: false backplot.view: default_value: 0 options: ["X: Front View", "XZ: Lathe View", "XZ2: Lathe View", "Y: Front View", "Z: Top View", "Z2: Bottom View", "P: Isometric"] backplot.multitool-colors: - default_value: True + default_value: false