Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///////////////////////////////////////////////////////////////////////////////
- // Autodesk.ADN.Viewing.Extension.Color
- //
- ///////////////////////////////////////////////////////////////////////////////
- AutodeskNamespace("Autodesk.ADN.Viewing.Extension");
- Autodesk.ADN.Viewing.Extension.Color = function(viewer, options) {
- Autodesk.Viewing.Extension.call(this, viewer, options);
- // var overlayName = "temperary-colored-overlay";
- var _self = this;
- _self.viewer = viewer;
- _self.materials = {};
- _self.load = function() {
- console.log("Autodesk.ADN.Viewing.Extension.Color loaded");
- ///////////////////////////////////////////////////////////////////////////
- // Generate GUID
- //
- ///////////////////////////////////////////////////////////////////////////
- function newGuid() {
- var d = new Date().getTime();
- var guid = "xxxx-xxxx-xxxx-xxxx-xxxx".replace(/[xy]/g, function(c) {
- var r = ((d + Math.random() * 16) % 16) | 0;
- d = Math.floor(d / 16);
- return (c == "x" ? r : (r & 0x7) | 0x8).toString(16);
- });
- return guid;
- }
- ///////////////////////////////////////////////////////////////////////////
- // add new material
- //
- ///////////////////////////////////////////////////////////////////////////
- function addMaterial(color, id) {
- _self.materials[id] = new THREE.MeshPhongMaterial({
- color: color
- });
- //viewer.impl.matman().addMaterial(newGuid(), material);
- _self.viewer.impl.createOverlayScene(
- id,
- _self.materials[id],
- _self.materials[id]
- );
- return _self.materials[id];
- }
- function hexToR(h) {
- return parseInt(cutHex(h).substring(0, 2), 16);
- }
- function hexToG(h) {
- return parseInt(cutHex(h).substring(2, 4), 16);
- }
- function hexToB(h) {
- return parseInt(cutHex(h).substring(4, 6), 16);
- }
- function cutHex(h) {
- return h.charAt(0) == "#" ? h.substring(1, 7) : h;
- }
- ///////////////////////////////////////////////////////////////////////////
- // Set color for nodes
- // objectIds should be an array of dbId
- //
- //
- ///////////////////////////////////////////////////////////////////////////
- Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(
- objectIds,
- color
- ) {
- for (var i = 0; i < objectIds.length; i++) {
- var dbid = objectIds[i];
- if (_self.materials[dbid]) {
- var R = hexToR(color) / 255;
- var G = hexToG(color) / 255;
- var B = hexToB(color) / 255;
- _self.materials[dbid].color.setRGB(R,G,B);
- console.log(_self.materials[dbid]);
- _self.viewer.impl.invalidate(false, false, true);
- } else {
- var material = addMaterial(color, dbid);
- //from dbid to node, to fragid
- var it = _self.viewer.model.getData().instanceTree;
- let test = null;
- it.enumNodeFragments(
- dbid,
- function(fragId) {
- var renderProxy = _self.viewer.impl.getRenderProxy(
- _self.viewer.model,
- fragId
- );
- test = renderProxy.geometry;
- renderProxy[dbid] = new THREE.Mesh(renderProxy.geometry,
- material);
- renderProxy[dbid].matrix.copy(renderProxy.matrixWorld);
- renderProxy[dbid].matrixWorldNeedsUpdate = true;
- renderProxy[dbid].matrixAutoUpdate = false;
- renderProxy[dbid].frustumCulled = false;
- _self.viewer.impl.addOverlay(dbid, renderProxy[dbid]);
- _self.viewer.impl.invalidate(true);
- },
- false
- );
- }
- }
- };
- Autodesk.Viewing.Viewer3D.prototype.restoreColorMaterial = function(
- objectIds,
- ) {
- for (var i = 0; i < objectIds.length; i++) {
- var dbid = objectIds[i];
- //from dbid to node, to fragid
- var it = _self.viewer.model.getData().instanceTree;
- it.enumNodeFragments(
- dbid,
- function(fragId) {
- var renderProxy = _self.viewer.impl.getRenderProxy(
- _self.viewer.model,
- fragId
- );
- if (renderProxy[dbid]) {
- //remove all overlays with same name
- _self.viewer.impl.clearOverlay(dbid);
- //_self.viewer.impl.removeOverlay(id, renderProxy[id]);
- delete renderProxy[dbid];
- //refresh the sence
- _self.viewer.impl.invalidate(true);
- }
- },
- true
- );
- }
- };
- Autodesk.Viewing.Viewer3D.prototype.colorAllMaterials = function(
- objects) {
- for (var i = 0; i < objects.length; i++) {
- this.setColorMaterial(objects[i].ids, objects[i].color, objects[i]
- .id);
- }
- };
- Autodesk.Viewing.Viewer3D.prototype.restoreAllMaterialColor = function(
- objects
- ) {
- for (var i = 0; i < objects.length; i++) {
- this.restoreColorMaterial(objects[i].ids, objects[i].id);
- }
- };
- _self.unload = function() {
- console.log("Autodesk.ADN.Viewing.Extension.Color unloaded");
- return true;
- };
- return true;
- };
- };
- Autodesk.ADN.Viewing.Extension.Color.prototype = Object.create(
- Autodesk.Viewing.Extension.prototype
- );
- Autodesk.ADN.Viewing.Extension.Color.prototype.constructor =
- Autodesk.ADN.Viewing.Extension.Color;
- Autodesk.Viewing.theExtensionManager.registerExtension(
- "Autodesk.ADN.Viewing.Extension.Color",
- Autodesk.ADN.Viewing.Extension.Color
- );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement