diff --git a/js/elementMenu.js b/js/elementMenu.js index f0ff7292060b45eb4d9a7f6d20c1206d0f459b91..035c212de2fcd04f6fa7b1d2bf5e93ed46251c0f 100644 --- a/js/elementMenu.js +++ b/js/elementMenu.js @@ -2,26 +2,54 @@ * Created by aghassaei on 1/8/15. */ +var Parallel = Parallel || {}; + $(function(){ + three = three || {}; + modelMesh = modelMesh || {}; + $("#elementCube").click(function(e){ e.preventDefault(); - for ( var i = 0; i < 500; i ++ ) { - var mesh = createCubeGeometry(10); - mesh.position.x = ( Math.random() - 0.5 ) * 1000; - mesh.position.y = ( Math.random() - 0.5 ) * 1000; - mesh.position.z = ( Math.random() - 0.5 ) * 1000; - mesh.updateMatrix(); - mesh.matrixAutoUpdate = false; - three.scene.add( mesh ); + var cubeDim = 10; + var boundingBox = new THREE.Box3(); + boundingBox.setFromObject(modelMesh); + + var xRange = []; + for (var x=boundingBox.min.x;x<boundingBox.max.x;x+=cubeDim){ + xRange.push(x); + } + + var threads = new Parallel(xRange, {env:{boundingBox:boundingBox, three:three, cubeDim:cubeDim, modelMesh:modelMesh}}).require( + {fn:THREE.Vector3,name:'Vector3'}, {fn:THREE.Raycaster,name:'Raycaster'}, {fn:THREE.Ray,name:'Ray'}, + createCubeGeometry, {fn:THREE.BoxGeometry,name:'BoxGeometry'}, {fn:THREE.MeshLambertMaterial,name:'MeshLambertMaterial'}, + {fn:THREE.Geometry,name:'Geometry'} + ); + threads.map(fillWithElements).then(three.render); + + function fillWithElements(x){ + var cubeDim = global.env.cubeDim; + + for (var y=global.env.boundingBox.min.y;y<global.env.boundingBox.max.y;y+=cubeDim){ + for (var z=global.env.boundingBox.min.z;z<global.env.boundingBox.max.z;z+=cubeDim){ + var raycaster = new Raycaster(new Vector3(x+cubeDim/2, y+cubeDim/2, z+cubeDim/2), + new Vector3(0, 0, 1), 0, global.env.boundingBox.max.z-z+cubeDim/2); +// if (raycaster.intersectObject(global.env.modelMesh).length % 2 == 1) { + var mesh = createCubeGeometry(cubeDim); + mesh.position.set(x+cubeDim/2, y+cubeDim/2, z+cubeDim/2); + mesh.updateMatrix(); + mesh.matrixAutoUpdate = false; + global.env.three.scene.add(mesh); +// } + } + } } - three.render(); }); function createCubeGeometry(size){ - var geometry = new THREE.BoxGeometry(size, size, size); - var material = new THREE.MeshLambertMaterial( { color:0xffffff, shading: THREE.FlatShading } ); + var geometry = new BoxGeometry(size, size, size); + var material = new MeshLambertMaterial( { color:0xffffff} ); return new THREE.Mesh( geometry, material ); } diff --git a/js/importMenu.js b/js/importMenu.js index 9c447ef5999f367a02877936a309cd9286db0746..18a60cf636f683c776bc3fa53e918c9fde2c2ea3 100644 --- a/js/importMenu.js +++ b/js/importMenu.js @@ -8,7 +8,7 @@ $(function(){ three = three || {}; - var modelMesh = {}; + modelMesh = {}; var modelScaleSlider = $('#stlModelScale'); function loadSTL(file){ @@ -16,7 +16,8 @@ $(function(){ loader.addEventListener( 'load', function (e) { var geometry = e.content; resetUI(); - modelMesh = new THREE.Mesh(geometry); + var material = new THREE.MeshLambertMaterial( { color:0xffa500, shading: THREE.FlatShading, transparent:true, opacity:0.5, side:THREE.DoubleSide} ); + modelMesh = new THREE.Mesh(geometry, material); three.scene.add(modelMesh); three.render(); showDimensions(1); @@ -33,7 +34,9 @@ $(function(){ $(".stlImport").click(function(e){ e.preventDefault(); - loadSTL('data/' + $(this).data("file")); + var fileName = $(this).data("file"); + loadSTL('data/' + fileName); + setFileName(fileName); }); $("#uploadSTL").change(function() { diff --git a/main.html b/main.html index f8c5f130962784ae6cb900af0a30e8d87c101715..ef4d14b71dff62d91d6e2a32d06dc317f5ecdb93 100644 --- a/main.html +++ b/main.html @@ -30,6 +30,9 @@ <!--stl export--> <script src="dependencies/THREE2STL.js"></script> + <!--CSG--> + <script src="dependencies/ThreeCSG.js"></script> + <!--multi-threading--> <script src="dependencies/parallel.js"></script>