diff --git a/src/Mod/Arch/importWebGL.py b/src/Mod/Arch/importWebGL.py index dbb49b7d9..6a2830848 100644 --- a/src/Mod/Arch/importWebGL.py +++ b/src/Mod/Arch/importWebGL.py @@ -25,19 +25,14 @@ import FreeCAD,FreeCADGui,Arch,Draft from DraftTools import translate tab = " " +addWireframe = False if open.__module__ == '__builtin__': pythonopen = open def export(exportList,filename): "exports the given objects to a .html file" - - # get three.min.js - threejspath = Arch.download("https://raw.github.com/mrdoob/three.js/master/build/three.min.js") - threejsfile = pythonopen(threejspath,"r") - threeminjs = threejsfile.read() - threejsfile.close() - + # get objects data objectsData = '' for obj in exportList: @@ -45,7 +40,6 @@ def export(exportList,filename): # build the final file template = getTemplate() - template = template.replace("$ThreeMinJs",threeminjs) template = template.replace("$CameraData",getCameraData()) template = template.replace("$ObjectsData",objectsData) template = template.replace("$TestData",getTestData()) @@ -80,8 +74,11 @@ def getCameraData(): def getObjectData(obj): "returns the geometry data of an object as three.js snippet" + + result = "" if obj.isDerivedFrom("Part::Feature"): + fcmesh = obj.Shape.tessellate(0.1) result = "var geom = new THREE.Geometry();\n" @@ -96,21 +93,9 @@ def getObjectData(obj): # adding facets data for f in fcmesh[1]: result += tab+"geom.faces.push( new THREE.Face3"+str(f)+" );\n" - - # adding material - col = obj.ViewObject.ShapeColor - rgb = Draft.getrgb(col,testbw=False) - #rgb = "#888888" # test color - result += tab+"var material = new THREE.MeshBasicMaterial( { color: 0x"+str(rgb)[1:]+" } );\n" - - # adding the mesh to the scene - result += tab+"var mesh = new THREE.Mesh( geom, material );\n" - result += tab+"scene.add( mesh );\n"+tab - - # print result - return result - + elif obj.isDerivedFrom("Mesh::Feature"): + mesh = obj.Mesh result = "var geom = new THREE.Geometry();\n" @@ -126,21 +111,26 @@ def getObjectData(obj): # adding facets data for f in mesh.Facets: result += tab+"geom.faces.push( new THREE.Face3"+str(f.PointIndices)+" );\n" + + if result: - # adding material + # adding a base material col = obj.ViewObject.ShapeColor rgb = Draft.getrgb(col,testbw=False) #rgb = "#888888" # test color - result += tab+"var material = new THREE.MeshBasicMaterial( { color: 0x"+str(rgb)[1:]+" } );\n" + result += tab+"var basematerial = new THREE.MeshBasicMaterial( { color: 0x"+str(rgb)[1:]+" } );\n" + + # adding a wireframe material + result += tab+"var wireframe = new THREE.MeshBasicMaterial( { color: " + result += "0x000000, wireframe: true, transparent: true } );\n" + result += tab+"var material = [ basematerial, wireframe ];\n" # adding the mesh to the scene - result += tab+"var mesh = new THREE.Mesh( geom, material );\n" + #result += tab+"var mesh = new THREE.Mesh( geom, basematerial );\n" + result += tab+"var mesh = new THREE.SceneUtils.createMultiMaterialObject( geom, material );\n" result += tab+"scene.add( mesh );\n"+tab - # print result - return result - - return "" + return result def getTestData(): "returns a simple cube as three.js snippet" @@ -158,26 +148,42 @@ def getTemplate(): result = """ - FreeCAD model - + FreeCAD model +