Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Autodesk.ADN.Viewing.Extension.Color
  3. //
  4. ///////////////////////////////////////////////////////////////////////////////
  5. AutodeskNamespace("Autodesk.ADN.Viewing.Extension");
  6. Autodesk.ADN.Viewing.Extension.Color = function(viewer, options) {
  7.   Autodesk.Viewing.Extension.call(this, viewer, options);
  8.  
  9.   // var overlayName = "temperary-colored-overlay";
  10.   var _self = this;
  11.   _self.viewer = viewer;
  12.   _self.materials = {};
  13.   _self.load = function() {
  14.     console.log("Autodesk.ADN.Viewing.Extension.Color loaded");
  15.     ///////////////////////////////////////////////////////////////////////////
  16.     // Generate GUID
  17.     //
  18.     ///////////////////////////////////////////////////////////////////////////
  19.     function newGuid() {
  20.       var d = new Date().getTime();
  21.       var guid = "xxxx-xxxx-xxxx-xxxx-xxxx".replace(/[xy]/g, function(c) {
  22.         var r = ((d + Math.random() * 16) % 16) | 0;
  23.         d = Math.floor(d / 16);
  24.         return (c == "x" ? r : (r & 0x7) | 0x8).toString(16);
  25.       });
  26.       return guid;
  27.     }
  28.  
  29.     ///////////////////////////////////////////////////////////////////////////
  30.     // add new material
  31.     //
  32.     ///////////////////////////////////////////////////////////////////////////
  33.     function addMaterial(color, id) {
  34.       _self.materials[id] = new THREE.MeshPhongMaterial({
  35.         color: color
  36.       });
  37.       //viewer.impl.matman().addMaterial(newGuid(), material);
  38.  
  39.       _self.viewer.impl.createOverlayScene(
  40.         id,
  41.         _self.materials[id],
  42.         _self.materials[id]
  43.       );
  44.       return _self.materials[id];
  45.     }
  46.  
  47.     function hexToR(h) {
  48.       return parseInt(cutHex(h).substring(0, 2), 16);
  49.     }
  50.  
  51.     function hexToG(h) {
  52.       return parseInt(cutHex(h).substring(2, 4), 16);
  53.     }
  54.  
  55.     function hexToB(h) {
  56.       return parseInt(cutHex(h).substring(4, 6), 16);
  57.     }
  58.  
  59.     function cutHex(h) {
  60.       return h.charAt(0) == "#" ? h.substring(1, 7) : h;
  61.     }
  62.     ///////////////////////////////////////////////////////////////////////////
  63.     // Set color for nodes
  64.     // objectIds should be an array of dbId
  65.     //
  66.     //
  67.     ///////////////////////////////////////////////////////////////////////////
  68.     Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(
  69.       objectIds,
  70.       color
  71.     ) {
  72.       for (var i = 0; i < objectIds.length; i++) {
  73.         var dbid = objectIds[i];
  74.  
  75.  
  76.         if (_self.materials[dbid]) {
  77.           var R = hexToR(color) / 255;
  78.           var G = hexToG(color) / 255;
  79.           var B = hexToB(color) / 255;
  80.           _self.materials[dbid].color.setRGB(R,G,B);
  81.           console.log(_self.materials[dbid]);
  82.           _self.viewer.impl.invalidate(false, false, true);
  83.         } else {
  84.  
  85.  
  86.  
  87.           var material = addMaterial(color, dbid);
  88.  
  89.           //from dbid to node, to fragid
  90.           var it = _self.viewer.model.getData().instanceTree;
  91.  
  92.           let test = null;
  93.           it.enumNodeFragments(
  94.             dbid,
  95.             function(fragId) {
  96.               var renderProxy = _self.viewer.impl.getRenderProxy(
  97.                 _self.viewer.model,
  98.                 fragId
  99.               );
  100.               test = renderProxy.geometry;
  101.               renderProxy[dbid] = new THREE.Mesh(renderProxy.geometry,
  102.                 material);
  103.  
  104.               renderProxy[dbid].matrix.copy(renderProxy.matrixWorld);
  105.               renderProxy[dbid].matrixWorldNeedsUpdate = true;
  106.               renderProxy[dbid].matrixAutoUpdate = false;
  107.               renderProxy[dbid].frustumCulled = false;
  108.  
  109.               _self.viewer.impl.addOverlay(dbid, renderProxy[dbid]);
  110.               _self.viewer.impl.invalidate(true);
  111.             },
  112.             false
  113.           );
  114.         }
  115.       }
  116.     };
  117.  
  118.     Autodesk.Viewing.Viewer3D.prototype.restoreColorMaterial = function(
  119.       objectIds,
  120.     ) {
  121.       for (var i = 0; i < objectIds.length; i++) {
  122.         var dbid = objectIds[i];
  123.  
  124.         //from dbid to node, to fragid
  125.         var it = _self.viewer.model.getData().instanceTree;
  126.  
  127.         it.enumNodeFragments(
  128.           dbid,
  129.           function(fragId) {
  130.             var renderProxy = _self.viewer.impl.getRenderProxy(
  131.               _self.viewer.model,
  132.               fragId
  133.             );
  134.  
  135.             if (renderProxy[dbid]) {
  136.               //remove all overlays with same name
  137.               _self.viewer.impl.clearOverlay(dbid);
  138.               //_self.viewer.impl.removeOverlay(id, renderProxy[id]);
  139.               delete renderProxy[dbid];
  140.  
  141.               //refresh the sence
  142.               _self.viewer.impl.invalidate(true);
  143.             }
  144.           },
  145.           true
  146.         );
  147.       }
  148.     };
  149.  
  150.     Autodesk.Viewing.Viewer3D.prototype.colorAllMaterials = function(
  151.       objects) {
  152.       for (var i = 0; i < objects.length; i++) {
  153.         this.setColorMaterial(objects[i].ids, objects[i].color, objects[i]
  154.           .id);
  155.       }
  156.     };
  157.  
  158.     Autodesk.Viewing.Viewer3D.prototype.restoreAllMaterialColor = function(
  159.       objects
  160.     ) {
  161.       for (var i = 0; i < objects.length; i++) {
  162.         this.restoreColorMaterial(objects[i].ids, objects[i].id);
  163.       }
  164.     };
  165.  
  166.     _self.unload = function() {
  167.       console.log("Autodesk.ADN.Viewing.Extension.Color unloaded");
  168.       return true;
  169.     };
  170.  
  171.     return true;
  172.   };
  173. };
  174. Autodesk.ADN.Viewing.Extension.Color.prototype = Object.create(
  175.   Autodesk.Viewing.Extension.prototype
  176. );
  177. Autodesk.ADN.Viewing.Extension.Color.prototype.constructor =
  178.   Autodesk.ADN.Viewing.Extension.Color;
  179. Autodesk.Viewing.theExtensionManager.registerExtension(
  180.   "Autodesk.ADN.Viewing.Extension.Color",
  181.   Autodesk.ADN.Viewing.Extension.Color
  182. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement