Skip to content
Snippets Groups Projects
Select Git revision
  • main
1 result

connector.PNG

Blame
  • elementMenu.js 2.25 KiB
    /**
     * Created by aghassaei on 1/8/15.
     */
    
    $(function(){
    
        three = three || {};
        modelMesh = modelMesh || {};
        workers = workers || {};
    
        $("#elementCube").click(function(e){
            e.preventDefault();
    
            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 localEnv = {boundingBox:boundingBox,cubeDim:cubeDim,modelMesh:modelMesh};
    
    //        workers.map(xRange, fillWithElements, localEnv, incrCallback);
            for (x=boundingBox.min.x;x<boundingBox.max.x;x+=cubeDim){
                var boxOrigins = fillWithElements(x);
                _.each(boxOrigins, function(origin){
                    var mesh = createCubeGeometry(cubeDim);
                    mesh.position.set(origin[0], origin[1], origin[2]);
                    mesh.updateMatrix();
                    mesh.matrixAutoUpdate = false;
                    three.scene.add(mesh);
                });
            }
            three.render();
    
            function incrCallback(result){
                console.log(result);
            }
    
    
            function fillWithElements(x){
                var origins = [];
                var cubeDim = localEnv.cubeDim;
                var boundingBox = localEnv.boundingBox;
                for (var y=boundingBox.min.y;y<boundingBox.max.y;y+=cubeDim){
                    for (var z=boundingBox.min.z;z<boundingBox.max.z;z+=cubeDim){
                        var raycaster = new THREE.Raycaster(new THREE.Vector3(x+cubeDim/2, y+cubeDim/2, z+cubeDim/2),
                            new THREE.Vector3(0, 0, 1), 0, boundingBox.max.z-z+cubeDim/2);
                        var numIntersections = raycaster.intersectObject(modelMesh).length;
                        if (numIntersections % 2 == 1){
                            origins.push([x,y,z]);
                        } else if (numIntersections == 0){
                            break;
                        }
                    }
                }
                return origins;
            }
        });
    
        function createCubeGeometry(size){
            var geometry = new THREE.BoxGeometry(size, size, size);
            var material = new THREE.MeshLambertMaterial( { color:0xffffff} );
            return new THREE.Mesh( geometry, material );
        }
    
    });