From 97c4387b817af8d9d66fe214e414934f97be40dc Mon Sep 17 00:00:00 2001
From: Joseph Mirabel <jmirabel@laas.fr>
Date: Tue, 28 Jun 2016 16:25:15 +0200
Subject: [PATCH] Add plugin to export datas to blender.

---
 pyplugins/gepetto/gui/blenderexport.py | 98 ++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)
 create mode 100644 pyplugins/gepetto/gui/blenderexport.py

diff --git a/pyplugins/gepetto/gui/blenderexport.py b/pyplugins/gepetto/gui/blenderexport.py
new file mode 100644
index 0000000..93659b0
--- /dev/null
+++ b/pyplugins/gepetto/gui/blenderexport.py
@@ -0,0 +1,98 @@
+from PythonQt import QtGui, Qt
+from gepetto.corbaserver import Client
+
+def separator():
+    line = QtGui.QFrame()
+    line.frameShape = QtGui.QFrame.HLine
+    line.frameShadow = QtGui.QFrame.Sunken
+    return line
+
+### This class represents one special tab of the new QDockWidget
+class _Widget (QtGui.QWidget):
+    def __init__(self, parent, plugin):
+        super(_Widget, self).__init__ (parent)
+        self.plugin = plugin
+        self.bodies = []
+        self.makeWidget ()
+
+    def makeWidget(self):
+        box = QtGui.QVBoxLayout(self)
+
+        box.addWidget(self.bindFunctionToButton("Get selected bodies", self.updateBodyList))
+
+        box.addWidget(QtGui.QLabel("Current selected bodies:"))
+        self.bodyList = QtGui.QListWidget()
+        self.bodyList
+        box.addWidget(self.bodyList)
+
+        box.addWidget(separator())
+
+        box.addWidget(self.bindFunctionToButton("Export model", self.exportModel))
+
+        box.addWidget(separator())
+
+        self.transformFrame = QtGui.QLabel ("output.yaml")
+        box.addWidget(self.addWidgetsInHBox( [
+            self.transformFrame, 
+            self.bindFunctionToButton("Select transform file", self.changeTransformFile)
+            ]))
+
+        box.addWidget(separator())
+
+        onRefresh = self.bindFunctionToButton("Automatic export", self.setOnRefresh)
+        onRefresh.checkable = True
+        box.addWidget(onRefresh)
+
+        box.addWidget(self.bindFunctionToButton("Write current frame", self.writeCurrentFrame))
+
+    def updateBodyList(self):
+        self.bodies = [ str(b.text()) for b in self.plugin.main.bodyTree().selectedBodies() ]
+        self.bodyList.clear()
+        for b in self.bodies: self.bodyList.addItem(b)
+
+    def exportModel(self):
+        fn = QtGui.QFileDialog.getSaveFileName()
+        self.plugin.gui.writeBlenderScript(str(fn), self.bodies)
+
+    def changeTransformFile(self):
+        fn = QtGui.QFileDialog.getSaveFileName()
+        self.transformFrame.text = fn
+        self.plugin.gui.setCaptureTransform(str(fn), self.bodies)
+
+    def writeCurrentFrame(self):
+        self.plugin.gui.captureTransform()
+
+    def setOnRefresh(self, checked):
+        self.plugin.gui.captureTransformOnRefresh(checked)
+
+    def addWidgetsInHBox(self, widgets):
+        nameParentW = QtGui.QWidget(self)
+        hboxName = QtGui.QHBoxLayout(nameParentW)
+        for w in widgets:
+            hboxName.addWidget(w)
+        return nameParentW
+
+    def bindFunctionToButton (self, buttonLabel, func):
+        button = QtGui.QPushButton(self)
+        button.text = buttonLabel
+        button.connect ('clicked(bool)', func)
+        return button
+
+class Plugin(QtGui.QDockWidget):
+    """
+    Blender export helper plugin
+    """
+    def __init__ (self, mainWindow, flags = None):
+        if flags is None:
+            super(Plugin, self).__init__ ("Blender export plugin", mainWindow)
+        else:
+            super(Plugin, self).__init__ ("Blender export plugin", mainWindow, flags)
+        self.resetConnection()
+        # Initialize the widget
+        mainWidget = _Widget(self, self)
+        self.setWidget (mainWidget)
+        self.main = mainWindow
+
+    def resetConnection(self):
+        self.client = Client()
+        self.gui = self.client.gui
-- 
GitLab