コード例 #1
0
ファイル: Window.py プロジェクト: braineo/qt_scene_editor
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.resize(960, 480)
        self.setWindowTitle("Scene editor")
        self.save_path = "./settings.json"
        self.object_list = self.load_object_list()
        if not self.object_list:
            self.object_list = {
                1: {"Type": "Cube", "Position": "1,2,3", "Dimension": 0.1},
                2: {"Type": "Sphere", "Position": "-1,-2,-3", "Dimension": 0.2},
            }

        self.glWidget = ObjectView(self)
        self.table_widget = ObjectTable(len(self.object_list), 4, self)

        self.connect(
            self.table_widget.selectionModel(),
            QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"),
            self.select_obj,
        )
        self.table_widget.itemChanged.connect(self.update_object)
        self.connect(self, QtCore.SIGNAL("table_update_obj"), self.glWidget.glWidget.updateGL)
        self.connect(self.glWidget.glWidget, QtCore.SIGNAL("drag_update_obj"), self.table_widget.set_data)

        self.mode_cbk = QtGui.QCheckBox("Drag mode", self)
        self.mode_cbk.stateChanged.connect(self.glWidget.glWidget.drag_mode)

        button_layout = QtGui.QHBoxLayout()
        button_layout.addWidget(self.mode_cbk)
        self.x_d = QtGui.QRadioButton("X", self)
        self.y_d = QtGui.QRadioButton("Y", self)
        self.z_d = QtGui.QRadioButton("Z", self)
        self.axis_group = QtGui.QButtonGroup(self)
        self.axis_group.addButton(self.x_d)
        button_layout.addWidget(self.x_d)
        self.axis_group.addButton(self.y_d)
        button_layout.addWidget(self.y_d)
        self.axis_group.addButton(self.z_d)
        button_layout.addWidget(self.z_d)
        radio_buttons = QtGui.QWidget(self)
        radio_buttons.setLayout(button_layout)
        self.axis_group.buttonClicked.connect(self.glWidget.glWidget.set_drag_direction)
        layout = QtGui.QGridLayout()
        layout.addWidget(self.glWidget, 0, 0)
        layout.addWidget(self.table_widget, 0, 1)
        # layout.addWidget(self.mode_cbk, 1, 0)
        layout.addWidget(radio_buttons, 1, 0)

        self.setLayout(layout)
コード例 #2
0
ファイル: Window.py プロジェクト: braineo/qt_scene_editor
class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.resize(960, 480)
        self.setWindowTitle("Scene editor")
        self.save_path = "./settings.json"
        self.object_list = self.load_object_list()
        if not self.object_list:
            self.object_list = {
                1: {"Type": "Cube", "Position": "1,2,3", "Dimension": 0.1},
                2: {"Type": "Sphere", "Position": "-1,-2,-3", "Dimension": 0.2},
            }

        self.glWidget = ObjectView(self)
        self.table_widget = ObjectTable(len(self.object_list), 4, self)

        self.connect(
            self.table_widget.selectionModel(),
            QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"),
            self.select_obj,
        )
        self.table_widget.itemChanged.connect(self.update_object)
        self.connect(self, QtCore.SIGNAL("table_update_obj"), self.glWidget.glWidget.updateGL)
        self.connect(self.glWidget.glWidget, QtCore.SIGNAL("drag_update_obj"), self.table_widget.set_data)

        self.mode_cbk = QtGui.QCheckBox("Drag mode", self)
        self.mode_cbk.stateChanged.connect(self.glWidget.glWidget.drag_mode)

        button_layout = QtGui.QHBoxLayout()
        button_layout.addWidget(self.mode_cbk)
        self.x_d = QtGui.QRadioButton("X", self)
        self.y_d = QtGui.QRadioButton("Y", self)
        self.z_d = QtGui.QRadioButton("Z", self)
        self.axis_group = QtGui.QButtonGroup(self)
        self.axis_group.addButton(self.x_d)
        button_layout.addWidget(self.x_d)
        self.axis_group.addButton(self.y_d)
        button_layout.addWidget(self.y_d)
        self.axis_group.addButton(self.z_d)
        button_layout.addWidget(self.z_d)
        radio_buttons = QtGui.QWidget(self)
        radio_buttons.setLayout(button_layout)
        self.axis_group.buttonClicked.connect(self.glWidget.glWidget.set_drag_direction)
        layout = QtGui.QGridLayout()
        layout.addWidget(self.glWidget, 0, 0)
        layout.addWidget(self.table_widget, 0, 1)
        # layout.addWidget(self.mode_cbk, 1, 0)
        layout.addWidget(radio_buttons, 1, 0)

        self.setLayout(layout)

    def select_obj(self, selected, deselected):
        for i in deselected.indexes():
            if i.row() < len(self.object_list):
                self.object_list[i.row()].selected = False
        for i in selected.indexes():
            if i.row() < len(self.object_list):
                self.object_list[i.row()].selected = True

    def update_object(self, item):
        if item.row() < len(self.object_list):
            i = item.row()
            if item.column() == 1:
                self.object_list[i].center = map(float, item.text().split(","))
            if item.column() == 3:
                self.object_list[i].dimension = float(item.text())

            self.emit(QtCore.SIGNAL("table_update_obj"))

    def closeEvent(self, event):
        self.save_object_list()
        # report_session()

    def load_object_list(self):
        try:
            with open(self.save_path, "rb") as infile:
                data = json.load(infile)
            data = byteify(data)
            ret = []
            for i in range(1, len(data.values()) + 1):
                new_obj = SceneObject(data[str(i)])
                ret.append(new_obj)
            return ret
        except IOError:
            return None

    def save_object_list(self):
        with open(self.save_path, "wb") as outfile:
            outdata = {}
            for i, obj in enumerate(self.object_list):
                outdata[i + 1] = {
                    "Position": ",".join(map(str, obj.center)),
                    "Type": obj.type,
                    "Dimension": str(obj.dimension),
                }
            json.dump(outdata, outfile)