diff --git a/modules/gui/pymod/CMakeLists.txt b/modules/gui/pymod/CMakeLists.txt index 200515b96aa0b9986eb890f68f03f957b6a1196e..f5b953d892e34215fef27c8980610ccab59cb1c7 100644 --- a/modules/gui/pymod/CMakeLists.txt +++ b/modules/gui/pymod/CMakeLists.txt @@ -58,6 +58,7 @@ loader_list_model.py loader_manager_widget.py immutable_loader_info_handler.py line_trace_widget.py +wireframe_widget.py ) if (ENABLE_IMG) list(APPEND OST_GUI_PYMOD_SOURCES diff --git a/modules/gui/pymod/scene/render_options_widget.py b/modules/gui/pymod/scene/render_options_widget.py index 93f88e35a1e6a4f86dea869a1a12baad56e9e60b..1d65fc87500addfb0757d5babfa28a786ef66b4e 100644 --- a/modules/gui/pymod/scene/render_options_widget.py +++ b/modules/gui/pymod/scene/render_options_widget.py @@ -23,6 +23,7 @@ from ost import gui from ost import gfx try: from ost import img + from wireframe_widget import WireframeWidget _img_present=True except ImportError: _img_present=False @@ -69,7 +70,7 @@ class RenderOptionsWidget(ComboOptionsWidget): self.img_widgets_ = list() self.img_widgets_.append(["", EmptyMode()]) - self.img_widgets_.append([gfx.RenderMode.SIMPLE, EmptyMode("Wireframe",gfx.RenderMode.SIMPLE)]) + self.img_widgets_.append([gfx.RenderMode.SIMPLE, WireframeWidget()]) self.img_widgets_.append([gfx.RenderMode.FILL, EmptyMode("Fill",gfx.RenderMode.FILL)]) self.setMinimumSize(250,200) diff --git a/modules/gui/pymod/scene/wireframe_widget.py b/modules/gui/pymod/scene/wireframe_widget.py new file mode 100644 index 0000000000000000000000000000000000000000..d5f131ca413106f8ba5d8c964d920ffa1ae223db --- /dev/null +++ b/modules/gui/pymod/scene/wireframe_widget.py @@ -0,0 +1,108 @@ +#------------------------------------------------------------------------------ +# This file is part of the OpenStructure project <www.openstructure.org> +# +# Copyright (C) 2008-2010 by the OpenStructure authors +# +# This library is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 3.0 of the License, or (at your option) +# any later version. +# This library 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 Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +#------------------------------------------------------------------------------ +# -*- coding: utf-8 -*- + +from ost import gui +from ost import gfx +from PyQt4 import QtCore, QtGui +try: + from ost import img + _img_present=True +except ImportError: + _img_present=False + pass + +#Wireframe Options +class WireframeWidget(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + #Title + self.text_ = "Wireframe" + + #Defaults + min_line_width = 0.01 + max_line_width = 20 + + #Set Render Mode + self.mode_ = gfx.RenderMode.SIMPLE + + #Create Ui elements + self.aa_rendering_cb_ = QtGui.QCheckBox() + + self.radius_spinbox_ = QtGui.QDoubleSpinBox() + self.radius_spinbox_.setRange(min_line_width, max_line_width) + self.radius_spinbox_.setDecimals(2) + self.radius_spinbox_.setSingleStep(0.1) + + simple_label = QtGui.QLabel("Wireframe Settings") + font = simple_label.font() + font.setBold(True) + + radius_label = QtGui.QLabel("Line Width") + aa_label = QtGui.QLabel("AA-Lines") + + grid = QtGui.QGridLayout() + grid.addWidget(simple_label,0,0,1,3) + grid.addWidget(aa_label, 1, 0, 1, 3) + grid.addWidget(self.aa_rendering_cb_, 1, 2, 1, 1) + grid.addWidget(radius_label,2,0,1,3) + grid.addWidget(self.radius_spinbox_,2,2,1,1) + grid.setRowStretch(5,1) + self.setLayout(grid) + + QtCore.QObject.connect(self.radius_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateLineWidth) + QtCore.QObject.connect(self.aa_rendering_cb_, QtCore.SIGNAL("stateChanged(int)"), self.UpdateAA) + + self.setMinimumSize(250,100) + + def UpdateAA(self, value): + scene_selection = gui.SceneSelection.Instance() + for i in range(0,scene_selection.GetActiveNodeCount()): + node = scene_selection.GetActiveNode(i) + node.SetAALines(value) + + def UpdateLineWidth(self, value): + scene_selection = gui.SceneSelection.Instance() + for i in range(0,scene_selection.GetActiveNodeCount()): + node = scene_selection.GetActiveNode(i) + node.SetLineWidth(value) + + def UpdateGui(self): + scene_selection = gui.SceneSelection.Instance() + node = scene_selection.GetActiveNode(0) + self.radius_spinbox_.setValue(node.GetLineWidth()) + + def Update(self): + self.setEnabled(True) + self.UpdateGui() + scene_selection = gui.SceneSelection.Instance() + if scene_selection.GetActiveNodeCount() > 0 : + for i in range(0,scene_selection.GetActiveNodeCount()): + node = scene_selection.GetActiveNode(i) + if _img_present and isinstance(node, gfx.MapIso): + self.setEnabled(False) + else: + self.setEnabled(False) + + def GetText(self): + return self.text_ + + def GetRenderMode(self): + return self.mode_ \ No newline at end of file