Skip to content
Snippets Groups Projects
indexScaling.html 6.26 KiB
Newer Older
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
<head>
    <style> body { margin: 0; } </style>
    <title>MetaVoxel</title>
    <script src="//unpkg.com/three"></script>
  
    <script src="../lib/js-colormaps.js"></script>
  
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="//unpkg.com/3d-force-graph"></script>
    <!-- <script src="../lib/3d-force-graph.js"></script> -->
    <script src="//unpkg.com/three-spritetext"></script>

    <script src="../visualization/utils.js"></script>
  </head>
  
  <body>
    <div id="3d-graph"></div>
  
    <script>
      var color1= 0xffffff; /*white*/
      var color2= '#020227';  /*kohly*/
      var color3= 0x1c5c61; /*teal*/
      var color4= "#fa6e70"; //red/orange
      var color5="#380152"; //purple
      var color6="#696767"; //grey
      var color7="#03dbfc"; //blue
  

  

	  $.getJSON("../json/setupScaling.json", function(json) {
      var setup=json.setup;
      setup.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];

      scale=10.0;

      var stress=0.0;


      function getColor(stress){
        // console.log(stress)
        var val=map(stress,setup.viz.minStress,setup.viz.maxStress,1.0,0.0);
        color=interpolateLinearly(val, setup.viz.colorMaps[setup.viz.colorMap]);
        return new THREE.Color(color[0],color[1],color[2]).getHex();

      }
      

      const gData = {
        nodes: setup.nodes.map(node => ({ 
          id: node.id,
          px:node.position.x*scale,
          py:node.position.y*scale,
          pz:node.position.z*scale,
          dx:node.displacement.x*scale,
          dy:node.displacement.y*scale,
          dz:node.displacement.z*scale
        })),
        links: setup.edges
          .filter(edge => edge.id)
          .map(edge => ({
            source: 'n'+edge.source,
            target: 'n'+edge.target,
            color:getColor(edge.stress)
          }))
      };
      //color=interpolateLinearly(i / l, this.setup.viz.colorMaps[this.setup.viz.colorMap]);
      

      const Graph = ForceGraph3D().backgroundColor(color2)
        (document.getElementById('3d-graph'))
        .d3Force('center', null)
        .d3Force('charge', null)
        // .linkDirectionalParticles(0.5)

        // .linkThreeObject(link => {
        //   // extend link with text sprite
        //   const sprite = new SpriteText(`${link.source} > ${link.target}`);
        //   sprite.color = 'lightgrey';
        //   sprite.textHeight = 1.5;
        //   return sprite;
        // })
        // .linkPositionUpdate((sprite, { start, end }) => {
        //   const middlePos = Object.assign(...['x', 'y', 'z'].map(c => ({
        //     [c]: start[c] + (end[c] - start[c]) / 2 // calc middle point
        //   })));

        //   // Position sprite
        //   Object.assign(sprite.position, middlePos);
        // })

        .linkWidth(1.0)
        .linkOpacity(1.0)
        // .linkColor(color3)
        .nodeThreeObject(({ id }) => new THREE.Mesh(
            new THREE.BoxGeometry(scale, scale, scale)
            ,
          new THREE.MeshLambertMaterial({
            color: color3,
            transparent: true,
            opacity: 0.8
          })
        ))
        .d3Force('box', () => {

          gData.nodes.forEach(node => {
            node.fx=node.px;
            node.fy=node.py;
            node.fz=node.pz;

          });
        })
        
        .cooldownTime(Infinity)
        .graphData(gData);


      var count=0;
      var totalCount=0;
      var increment=true;
      var speed=100;
      var exaggeration=10000.0;
      setInterval(() => {

        Graph.d3Force('box', () => {

          gData.nodes.forEach(node => {


            node.fx=node.px+count/speed*node.dx*exaggeration;
            node.fy=node.py+count/speed*node.dy*exaggeration;
            node.fz=node.pz+count/speed*node.dz*exaggeration;

          });
        });


        if(count>speed){
          increment=false;
        }else if (count<0){
          increment=true;
        }


        if(increment){
          count++;
        }else{
          count--;
        }
        // totalCount++;
        // console.log(totalCount);
      }, 1);


      var helper = new THREE.GridHelper( 100, 100 );
      helper.position.y = -5.0*scale;
      helper.material.opacity = 0.5;
      helper.material.transparent = true;
      helper.scale.x=2.0*scale
      helper.scale.z=2.0*scale
      Graph.scene().add(helper);

  });


    function drawConstraintBoundingBoxes(setup,scene,scale){

        //grid helper
        var helper = new THREE.GridHelper( 100, 100 );
        helper.position.y = -5.0*scale;
        helper.material.opacity = 0.5;
        helper.material.transparent = true;
        helper.scale.x=2.0*scale
        helper.scale.z=2.0*scale
        scene.add(helper);

        let supports=setup.supports;
        let loads=setup.loads;
        let mat=setup.materials;
        let disps=setup.fixedDisplacements;
        if (supports ) {
            for (var i=0;i< supports.length;i++) {
                let s=supports[i][0];
                drawBox(s.min,s.max,color4,scene,scale);
            }
        }
        if (loads ) {
            for (var i=0;i< loads.length;i++) {
                let l=loads[i][0];
                drawBox(l.min,l.max,color7,scene,scale);
            }
            
        }
        if (disps ) {
            for (var i=0;i< disps.length;i++) {
                let l=disps[i][0];
                drawBox(l.min,l.max,color7,scene,scale);
            }
            
        }
        if (mat ) {
            
            for (var i=0;i< mat.length;i++) {
                let l=mat[i][0];
                // console.log(l)
                drawBox(l.min,l.max,color5,scene,scale);
            }
            
        }
        
    };

    function drawBox (min,max,color,scene,scale) {
        var box = new THREE.Box3(new THREE.Vector3(min.x*scale,min.y*scale,min.z*scale),new THREE.Vector3(max.x*scale,max.y*scale,max.z*scale));
        var helper = new THREE.Box3Helper( box, color );
        scene.add( helper );
        // todo add name??
    };

    function getColor(viz,stress){
        // console.log(stress)
        var val=map(stress,viz.minStress,viz.maxStress,1.0,0.0);
        color=interpolateLinearly(val, viz.colorMaps[viz.colorMap]);
        return new THREE.Color(color[0],color[1],color[2]).getHex();

    }
  
    
  
  
    </script>
  </body>