Skip to content
Snippets Groups Projects
indexBeamComparison.html 10.5 KiB
Newer Older
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
<!DOCTYPE html>
<html lang="en">
	<head>
		<title>MetaVoxel</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<!-- <link type="text/css" rel="stylesheet" href="main.css"> -->
		<style>
			body {
				background-color: #f0f0f0;
				color: #444;
			}
			a {
				color: #08f;
			}
        </style>
        
        <link rel="stylesheet" type="text/css" href="style.css" media="screen"/>

	</head>
	<body>

        <div id="threejs">
            <div class="header1">
                    <i> Hierarchical Simulation</i>
                    <!-- Three.js -->
            </div>
            
            <div id="webgl"></div>
             
        </div>

        <div id="graph">
            <div class="header2">
                    <div class="dragbar"></div> 
                <i>.   Detailed Simulation</i>
            </div>
            <div class="dragbar"></div> 
            <div id="webgl1"></div>
            
        </div>

        <div class="footer1">
            <strong>left-click left window</strong>: orbit, <strong>right-click</strong>: zoom
        </div>
    
        <div class="footer2" id="footer2">
            <!-- update change to more instructions/feedback -->
            <i> Loading RhinoScript</i>
        </div>



        <!-- <div id="container"></div>
        <div id="container"></div> -->

		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

		<script type="text/javascript" src="https://files.mcneel.com/rhino3dm/js/latest/rhino3dm.js"></script>
		
		<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js"></script>

		<!-- <script src="./lib/require.js"></script> -->

		<script src="../lib/three.min.js"></script>

        <script src="../lib/stats.js"></script>
        <script src="../lib/dat.gui.js"></script>

		<script src="../lib/SVGRenderer.js"></script>
		

        <script src="../lib/DragControls.js"></script>
        <script src="../lib/OrbitControls.js"></script>
		<script src="../lib/TransformControls.js"></script>
		
		<script src="../lib/js-colormaps.js"></script>
		<script src="../lib/LineSegments2.js"></script>
		<script src="../lib/LineSegmentsGeometry.js"></script>
		<script src="../lib/Line2.js"></script>
		<script src="../lib/LineMaterial.js"></script>
		<script src="../lib/LineGeometry.js"></script>
		<script src="../lib/GeometryUtils.js"></script>

		<script src="../visualization/utils.js"></script> 
		<script src="../visualization/geometry.js"></script> 

		<!-- <script src="./beamFea.js"></script> 
		<script src="./geometry.js"></script>  -->
		<script src="../visualization/main.js"></script> 

		<script src="../fea/parallelFea.js"></script> 


		<script type="text/javascript" src="./rhino3dm.js"></script>
		<!-- <script src="../visualization/draw.js"></script>  -->

		<script>
			
			////////////////////////dragbar///////////////
            $('.dragbar').mousedown(function(e){
       
                e.preventDefault();
                $(document).mousemove(function(e){
                //   $('#position').html(e.pageX +', '+ e.pageY);
                    $('#threejs').css("width",e.pageX+2);

                    $('#webgl').css("width",e.pageX+2);

                    $('#graph').css("left",e.pageX+2);
                    // $('#json').css("left",e.pageX+2);
                    $('.footer1').css("width",e.pageX+2);
                    $('.footer2').css("left",e.pageX+2);
                    
                })
                onWindowResize();//todo change location
            });
            $(document).mouseup(function(e){
                $(document).unbind('mousemove');
                onWindowResize();//todo change location
			});
			//////////////////////////////////////////////////////////////////
			
			/////////////////seemless mirror control/////////////////////

			
			$('#graph').on('click mousedown touchstart', function(){
				three.controls = new THREE.OrbitControls( camera, three.renderer.domElement );
			})

			$('#threejs').on('click mousedown touchstart', function(){
				three1.controls = new THREE.OrbitControls( camera, three1.renderer.domElement );
			})
			
			
        </script>
        <script>
            var three; //todo change location
            var three1; //todo change location
            var setup;
            var setup1;
            var globalSetup={
                exaggeration:10e3,
                speed:3.0

            };
            var ex=gui.add(globalSetup, 'exaggeration', 0, 10e4).listen();
            var sp=gui.add(globalSetup, 'speed', 0, 5).listen();

            ex.onChange(updateExSpeed);
            sp.onChange();


            rhino3dm().then(async m => {
                console.log('Loaded rhino3dm.');

                document.getElementById("footer2").innerHTML = "Loaded rhino3dm.";
                _rhino3dm = m; // global

                var latticeSize=3;
                var voxelSize=5;
                
                
                setup=JSON.parse(JSON.stringify(setupEmpty));

                var material={
                    area:1.0,
                    density:0.028,
                    stiffness:10000000
                };
                
                var material2={
                    area:1.0,
                    density:0.028,
                    stiffness:10000000
                };

                setup.hierarchical=false;
                setup.voxelSize=voxelSize;

                const position=new THREE.Vector3(0,0,0);
                const position2=new THREE.Vector3(voxelSize*2,0,0);

                ///
                //try bounding box conditions
                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]);
                
                var temp=voxelSize*latticeSize-voxelSize/8;
                
                var load=new _rhino3dm.BoundingBox([-voxelSize/2+position.x,temp-voxelSize/2+position.y,-voxelSize/2+position.z], [voxelSize/2+position.x,temp+voxelSize/2+position.y,+voxelSize/2+position.z]);

                var support2=new _rhino3dm.BoundingBox([-voxelSize/2+position2.x,-voxelSize/2+position2.y,-voxelSize/2+position2.z], [voxelSize/2+position2.x,voxelSize/2+position2.y,voxelSize/2+position2.z]);
                var load2=new _rhino3dm.BoundingBox([-voxelSize/2+position2.x,temp-voxelSize/2+position2.y,-voxelSize/2+position2.z], [voxelSize/2+position2.x,temp+voxelSize/2+position2.y,0+voxelSize/2+position2.z]);


                var temp1=voxelSize*latticeSize-3*voxelSize;

                var matB=new _rhino3dm.BoundingBox([-voxelSize/2+position2.x,-voxelSize/2+position2.y,temp1-voxelSize/2+position2.z], [voxelSize/2+position2.x,voxelSize/2+position2.y,temp]);

                var dof=[true,true,true,true,true,true];
                var supports=[[support,dof],[support2,dof]];
                var loads=[[load,{x:0,y:-400,z:0}],[load2,{x:0,y:-400,z:0}]];
                var diffMaterialBox=[[matB,material2]];

                ///
                

                lateralLoadSetup1(setup,position,latticeSize,voxelSize,createChiralVoxel,[],[],material);
                lateralLoadSetup1(setup,position2,latticeSize,voxelSize,createVoxel,supports,loads,material2);
                // changeMaterialFromBox(setup,diffMaterialBox);


                setup.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
                setup.viz.minStress=10e6;
                setup.viz.maxStress=-10e6;

                setup.viz.exaggeration=globalSetup.exaggeration;
                setup.solve=solveParallel;
                setup.numTimeSteps=100;
                setup.supports=supports;
                setup.loads=loads;

            
                three= new threejs(setup,"webgl1","graph");
                three.init();
                three.drawConstraintBoundingBoxes([support],[load]);
            

                ////////////////////////////////////
                setup1=JSON.parse(JSON.stringify(setupEmpty));

                setup1.hierarchical=true;
                setup1.voxelSize=voxelSize;

                

                lateralLoadSetup1(setup1,position,latticeSize,voxelSize,createHierarchalVoxel,[],[],material);
                lateralLoadSetup1(setup1,position2,latticeSize,voxelSize,createHierarchalVoxel,supports,loads,material2);
                // changeMaterialFromBox(setup1,diffMaterialBox);

                setup1.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
                setup1.viz.minStress=10e6;
                setup1.viz.maxStress=-10e6;

                setup1.viz.exaggeration=globalSetup.exaggeration;
                setup1.solve=solveParallel;
                setup1.supports=supports;
                setup1.loads=loads;

                

                three1= new threejs(setup1,"webgl","threejs");
                three1.init();

                gui.add(three.setup,"numTimeSteps", 0, 500).listen();
                gui.add(three.setup,"solve");
                
                
                
                document.getElementById("footer2").innerHTML = "Press solve for structure simulation.";

            // more stuff
            });

            function solveParallel(){
                document.getElementById("footer2").innerHTML = "Running...";
                var numTimeSteps=250;
                /////////////////////////////////////////////////////
                

                var dt=0.0251646; //?? todo change to recommended step
                // var dt=0.01; //?? todo change to recommended step
                

                setTimeout(function() { 
                    simulateParallel(setup,three.setup.numTimeSteps,dt); 
                    simulateParallel(setup1,three.setup.numTimeSteps,dt);
                }, 1);

                // var dt=0.0251646; //?? todo change to recommended step
                // simulateParallel(setup1,numTimeSteps,dt);

                ///////////////////////////////////////
                // updateColors();
                // three.animate();
                // three1.animate();
                
                /////////////////////

            }

            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;

            }

        </script>

		


    </body>
</html>