Hey,
I am loading stl object from directory(which is totally fine 'cause I can add it to the scene and everything works fine) but when I want to play with that mesh in csg.js (in my case making a intersect with another object and union doesn’t work either) and then the final object return to the three scene the object is not appearing and leaving me with the empty scene.
CSG library I am using is - https://github.com/manthrax/THREE-CSGMesh
My project - https://github.com/Ondurur/Three
Just to be clear I am trying to make it work in CSGDemo.html
Console error is on this part of code:
CSG.fromGeometry=function(geom){ if(geom.isBufferGeometry) geom = new THREE.Geometry().fromBufferGeometry(geom) var fs = geom.faces; var vs = geom.vertices; var polys=[] var fm=['a','b','c'] //console.log(geom) for(var i=0;i<fs.length;i++){ var f = fs[i]; var vertices=[] for(var j=0;j<3;j++) vertices.push(new Vertex(vs[f[fm[j]]],f.vertexNormals[j],geom.faceVertexUvs[0][i][j])) //Console told that right there is a problem with geometry faceVertexUvs polys.push(new Polygon(vertices)) } return CSG.fromPolygons(polys) } CSG._tmpm3 = new THREE.Matrix3(); CSG.fromMesh=function(mesh){ var csg = CSG.fromGeometry(mesh.geometry) CSG._tmpm3.getNormalMatrix(mesh.matrix); for(var i=0;i<csg.polygons.length;i++){ var p = csg.polygons[i] for(var j=0;j<p.vertices.length;j++){ var v=p.vertices[j] v.pos.applyMatrix4(mesh.matrix); v.normal.applyMatrix3(CSG._tmpm3); } } return csg; }
My code which calls the MeshCSG functions:
function doCSG(a,b,op,mat,ax,ay,az,bx,by,bz){
var bspA = CSG.fromMesh( a ); var bspB = CSG.fromMesh( b ); bspA.c = [ax,ay,az]; bspB.c = [bx,by,bz]; var bspC = bspA[op]( bspB ); var result = CSG.toMesh( bspC, a.matrix ); result.material = mat; result.castShadow = result.receiveShadow = true; return result; }
function splitGetA(objMesh) {
//get objMesh bounding objMesh.geometry.computeBoundingBox(); let bounding = objMesh.geometry.boundingBox.clone(); let size = new THREE.Vector3(); scene.updateMatrixWorld(); objMesh.updateMatrixWorld(true); bounding.copy( objMesh.geometry.boundingBox ).applyMatrix4( objMesh.matrixWorld ); //create cut obj let cut = new THREE.Mesh(new THREE.BoxGeometry(bounding.min,bounding.max/2,bounding.getSize(size) ),mkMat('grey')) console.log(bounding.min) console.log(bounding.max) console.log(bounding.getSize(size)) cut.parent = scene return doCSG(objMesh,cut,'intersect', mkMat('red'), 0,0,0,0,0,0); };
If my problem is not clear enough then feel free to ask. Afterall it is my problem to deal with.