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