From c0da76313bca081632f221ae3a2f8c5650a8e103 Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Sat, 10 Jan 2015 02:03:04 -0500 Subject: [PATCH] working on cube function --- js/elementMenu.js | 50 ++++++++++++++++++++++++++++++++++++----------- js/importMenu.js | 9 ++++++--- main.html | 3 +++ 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/js/elementMenu.js b/js/elementMenu.js index f0ff7292..035c212d 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 9c447ef5..18a60cf6 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 f8c5f130..ef4d14b7 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> -- GitLab