import sys from PySide2 import QtGui from pivy import coin, quarter from PySide2.QtWidgets import QApplication, QDialog, QLineEdit, QPushButton import FreeCADGui as Gui import os import _utils path = os.path.dirname(_utils.__file__) def insert(): sg = Gui.ActiveDocument.ActiveView.getSceneGraph() shaders = list() vert = coin.SoVertexShader() vert.sourceProgram = os.path.join(path,"shaders_vertex.glsl") shaders.append(vert) frag = coin.SoFragmentShader() frag.sourceProgram = os.path.join(path,"shaders_fragment.glsl") shaders.append(frag) pro = coin.SoShaderProgram() pro.shaderObject.setValues(0,len(shaders),shaders) sg.insertChild(pro,0) return pro def remove(): sg = Gui.ActiveDocument.ActiveView.getSceneGraph() sg.removeChild(0) def main(): app = QApplication(sys.argv) root = coin.SoSeparator() vert = coin.SoVertexShader() vert.sourceProgram = "vertex.glsl" frag = coin.SoFragmentShader() frag.sourceProgram = "frag.glsl" shaders = [vert,frag] pro = coin.SoShaderProgram() pro.shaderObject.setValues(0,len(shaders),shaders) mat = coin.SoMaterial() mat.diffuseColor.setValue(coin.SbColor(0.8, 0.8, 0.8)) mat.specularColor.setValue(coin.SbColor(1, 1, 1)) mat.shininess.setValue(1.0) mat.transparency.setValue(0.5) sphere = coin.SoSphere() sphere.radius = 1.2 root.addChild(pro) root.addChild(sphere) root.addChild(mat) root.addChild(coin.SoCube()) viewer = quarter.QuarterWidget() viewer.setSceneGraph(root) viewer.setWindowTitle("minimal") viewer.show() sys.exit(app.exec_()) if __name__ == '__main__': main()