Skip to content
Snippets Groups Projects
rover.js 5.09 KiB
Newer Older
  • Learn to ignore specific revisions
  • Amira Abdel-Rahman's avatar
    Amira Abdel-Rahman committed
    // Amira Abdel-Rahman
    // (c) Massachusetts Institute of Technology 2020
    
    ///////////call from node app.js code///////////////
    // wait for the rhino3dm web assembly to load asynchronously
    // rhino3dm().then(function(m) {// todo change call to app.js
    // 	_rhino3dm = m; // global
    // 	initRhino3dm(1,10,createVoxel,true,true);
    // 	saveJSON();
    // });
    /////////////////////////////////////
    
    var three; //todo change location
    var setup=JSON.parse(JSON.stringify(setupEmpty));
    
    var globalSetup={
        exaggeration:0.5,
        speed:3.0,
        updateStress:false
    
    };
    // var ex=gui.add(globalSetup, 'exaggeration', 0, 10e4).listen();
    // var sp=gui.add(globalSetup, 'speed', 0, 5).listen();
    // var sp=gui.add(globalSetup, 'updateStress').listen();
    
    var static=true;
    
    var latticeSize=15;
    var voxelSize=5.0;
    
    rhino3dm().then(async m => {
        console.log('Loaded rhino3dm.');
    
        // document.getElementById("footer2").innerHTML = "Loaded rhino3dm.";
        _rhino3dm = m; // global
    
        var material={
    		area:2.38*2.38,
    		density:0.028,
    		stiffness:2000
        };
    
        var material1={
    		area:2.38*2.38,
    		density:0.028,
    		stiffness:500
        };
        
    
        setup.hierarchical=false;
        setup.voxelSize=voxelSize;
    
        const position=new THREE.Vector3(0,0,0);
        const position2=new THREE.Vector3(voxelSize*2,0,0);
    
        var voxelList=[
            [0,0,0,material],
            [0,0,1,material],
            [0,0,2,material],
            [0,0,3,material],
            [0,0,4,material],
    
            [-1,0,0,material1],
            [-2,0,0,material1],
            [-3,0,0,material1],
    
            [1,0,0,material1],
            [2,0,0,material1],
            [3,0,0,material1],
    
            [-1,0,4,material1],
            [-2,0,4,material1],
            [-3,0,4,material1],
    
            [1,0,4,material1],
            [2,0,4,material1],
            [3,0,4,material1]
            ];
    
        for (var count=0;count<voxelList.length;count++){
            const i=voxelList[count][0];
            const j=voxelList[count][1];
            const k=voxelList[count][2];
            const m=voxelList[count][3];
    
            createVoxel(setup,voxelSize,new THREE.Vector3(i*voxelSize+position.x,j*voxelSize+position.y,k*voxelSize+position.z),m);
    
    Amira Abdel-Rahman's avatar
    Amira Abdel-Rahman committed
        }
    
        var support=new _rhino3dm.BoundingBox(
            [
                -voxelSize/2+position.x,
                -voxelSize/2+position.y,
                -voxelSize/2+position.z
            ], 
            [
                voxelSize/2+position.x,
                voxelSize/2+position.y,
                voxelSize/2+position.z+voxelSize*5.0
            ]);
    
        var load=new _rhino3dm.BoundingBox(
            [
                -voxelSize/4+position.x+voxelSize*1.0,
                -voxelSize/2+position.y,
                -voxelSize/2+position.z
            ], 
            [
                voxelSize/4+position.x+voxelSize*1.0,
                voxelSize/2+position.y,
                voxelSize/2+position.z+voxelSize*5.0
            ]);
            
        var load1=new _rhino3dm.BoundingBox(
            [
                -voxelSize/4+position.x-voxelSize*1.0,
                -voxelSize/2+position.y,
                -voxelSize/2+position.z
            ], 
            [
                voxelSize/4+position.x-voxelSize*1.0,
                voxelSize/2+position.y,
                voxelSize/2+position.z+voxelSize*5.0
            ]);
    
    
        var loads=[[load,{x:0.0,y:0,z:1.0}],[load1,{x:0.0,y:0,z:2.0}]];
    
        var dof=[true,true,true,true,true,true];
        var supports=[[support,dof]];
    
        // restrainFromBox(setup,supports);
    	loadFromBox(setup,loads);
    
    
        // setup.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
        setup.viz.minStress=10e6;
        setup.viz.maxStress=-10e6;
        setup.viz.exaggeration=0.5;
    
        // setup.viz.exaggeration=globalSetup.exaggeration;
        // setup.solve=solveParallel;
        // setup.numTimeSteps=100;
    
        // setup.supports=[
        //     [{
        //         min:[
        //             support.min[0],
        //             support.min[1],
        //             support.min[2]
        //         ],
        //         max:[
        //             support.max[0],
        //             support.max[1],
        //             support.max[2]
        //         ]
        //     }]
        // ];
        setup.loads=[
            [{
                min:[
                    load.min[0],
                    load.min[1],
                    load.min[2]
                ],
                max:[
                    load.max[0],
                    load.max[1],
                    load.max[2]
                ]
            }],
            [{
                min:[
                    load1.min[0],
                    load1.min[1],
                    load1.min[2]
                ],
                max:[
                    load1.max[0],
                    load1.max[1],
                    load1.max[2]
                ]
            }]
        ];
    
        setup.floorEnabled=true;
        setup.gravityEnabled=true;
        setup.staticSimulation=false;
        setup.poisson=false;
        setup.scale=1;
        setup.linear=true;
        setup.globalDamping=0.2;
    
       
        // three= new threejs(setup,"webgl1","graph",static);
        // three.init();
        // three.drawConstraintBoundingBoxes([support],[load]);
       
        ////////////////////////////////////
    
        saveJSON();
        
        // more stuff
    });
    
    
    function updateExSpeed(){
        three.setup.animation.exaggeration=globalSetup.exaggeration;
        three1.setup.animation.exaggeration=globalSetup.exaggeration;
        three.setup.animation.speed=globalSetup.speed;
        three1.setup.animation.speed=globalSetup.speed;
    }