FreeCAD/src/Mod/TemplatePyMod/Automation.py
2014-09-01 22:47:05 +02:00

89 lines
2.2 KiB
Python

# FreeCAD TemplatePyMod module
# (c) 2010 Werner Mayer LGPL
"""
The module can be executed with:
FreeCAD -P <path_to_file> Automation.py
FreeCADCmd -P <path_to_file> Automation.py
"""
import FreeCAD, Part
def makeSnapshotWithGui():
from PySide import QtGui
import FreeCADGui
def getMainWindow():
toplevel = QtGui.qApp.topLevelWidgets()
for i in toplevel:
if i.metaObject().className() == "Gui::MainWindow":
return i
raise RuntimeError("No main window found")
mw=getMainWindow()
mw.hide()
#mw.showMinimized()
# Create a test geometry and add it to the document
obj=Part.makeCone(10,8,10)
doc = FreeCAD.newDocument()
Part.show(obj)
# switch off animation so that the camera is moved to the final position immediately
view = FreeCADGui.getDocument(doc.Name).activeView()
view.setAnimationEnabled(False)
view.viewAxometric()
view.fitAll()
view.saveImage('crystal.png',800,600,'Current')
FreeCAD.closeDocument(doc.Name)
# close the application
QtGui.qApp.quit()
def makeSnapshotWithoutGui():
from pivy import coin
# create a test geometry and create an IV representation as string
box=Part.makeCone(10,8,10)
iv=box.writeInventor()
# load it into a buffer
inp=coin.SoInput()
inp.setBuffer(iv)
# and create a scenegraph
data = coin.SoDB.readAll(inp)
base = coin.SoBaseColor()
base.rgb.setValue(0.6,0.7,1.0)
data.insertChild(base,0)
# add light and camera so that the rendered geometry is visible
root = coin.SoSeparator()
light = coin.SoDirectionalLight()
cam = coin.SoOrthographicCamera()
root.addChild(cam)
root.addChild(light)
root.addChild(data)
# do the rendering now
axo = coin.SbRotation(-0.353553, -0.146447, -0.353553, -0.853553)
viewport=coin.SbViewportRegion(400,400)
cam.orientation.setValue(axo)
cam.viewAll(root,viewport)
off=coin.SoOffscreenRenderer(viewport)
root.ref()
off.render(root)
root.unref()
# export the image, PS is always available
off.writeToPostScript("crystal.ps")
# Other formats are only available if simage package is installed
if off.isWriteSupported("PNG"):
print "Save as PNG"
off.writeToFile("crystal.png","PNG")
if FreeCAD.GuiUp:
makeSnapshotWithGui()
else:
makeSnapshotWithoutGui()