大家在使用View and Data API开发过程中,经常会用到的就是改变某些元素的颜色已区别显示。比如根据某些属性做不同颜色的专题显示,或者用不同颜色表示施工进度,或者只是简单的以颜色变化来提醒用户以示区别。作为开发者,一定会喜欢看的这样的API:

//load the extension
viewer.loadExtension('Autodesk.ADN.Viewing.Extension.Color');
// an array of node Id
var elementIds= [1735, 1736];
//set color to red
viewer.setColorMaterial(elementIds,0xff0000);
//restore to original color
viewer.restoreColorMaterial(elementIds);

可惜View and Data API中并没有提供这样的API,不过我们可以自己来做。下面就是一个这样的扩展,如果你正好需要,可以直接拿去用。

///////////////////////////////////////////////////////////////////////////////
// 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.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) {
var material = new THREE.MeshPhongMaterial({
color: color
});
//viewer.impl.matman().addMaterial(newGuid(), material);
viewer.impl.createOverlayScene(overlayName, material, material);
return material;
} ///////////////////////////////////////////////////////////////////////////
// Set color for nodes
// objectIds should be an array of dbId
//
//
///////////////////////////////////////////////////////////////////////////
Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(objectIds, color) {
var material = addMaterial(color); for (var i=0; i<objectIds.length; i++) { var dbid = objectIds[i]; //from dbid to node, to fragid
var it = viewer.model.getData().instanceTree; it.enumNodeFragments(dbid, function (fragId) { var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId); renderProxy.meshProxy = new THREE.Mesh(renderProxy.geometry, renderProxy.material); renderProxy.meshProxy.matrix.copy(renderProxy.matrixWorld);
renderProxy.meshProxy.matrixWorldNeedsUpdate = true;
renderProxy.meshProxy.matrixAutoUpdate = false;
renderProxy.meshProxy.frustumCulled = false; viewer.impl.addOverlay(overlayName, renderProxy.meshProxy);
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 = viewer.model.getData().instanceTree; it.enumNodeFragments(dbid, function (fragId) { var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId); if(renderProxy.meshProxy){ //remove all overlays with same name
viewer.impl.clearOverlay(overlayName);
//viewer.impl.removeOverlay(overlayName, renderProxy.meshProxy);
delete renderProxy.meshProxy; //refresh the sence viewer.impl.invalidate(true); } }, true);
} } _self.unload = function() {
console.log('Autodesk.ADN.Viewing.Extension.Color unloaded');
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);
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

这段代码我也在我的IoT示例中使用,源代码在 github 上。

在View and Data API中更改指定元素的颜色的更多相关文章

  1. 使用AxisHelper帮助理解View and Data API中的坐标系统

    大家使用View and Data API做三维模型开发,必然首先要理解View and Data API的坐标系统,即XYZ三个轴向分别是怎么定义的.Three.js里面提供了一个AxisHelpe ...

  2. 特大喜讯,View and Data API 现在支持中文界面了

    大家经常会问到,使用View and Data API怎么做界面的本地化,来显示中文,现在好消息来了,从v1.2.19起,View and Data API开始支持多国语言界面了.你需要制定版本号为v ...

  3. View and Data API tips: 缓存Access Token

    对于云API服务,常见的方式就是按照API调用次数收费,某些API调用也就有某些限制,比如在特定时间内只允许调用指定的次数以免造成滥用.虽然Autodesk的view and Data API目前还没 ...

  4. Autodesk View and Data API二次开发学习指南

    什么是View and Data API? 使用View and Data API,你可以轻松的在网页上显示大型三维模型或者二维图纸而不需要安装任何插件.通过View and Data API,你可以 ...

  5. Using View and Data API with Meteor

    By Daniel Du I have been studying Meteor these days, and find that Meteor is really a mind-blowing f ...

  6. View and Data API Tips: Constrain Viewer Within a div Container

    By Daniel Du When working with View and Data API, you probably want to contain viewer into a <div ...

  7. View and Data API Tips: Hide elements in viewer completely

    By Daniel Du With View and Data API, you can hide some elements in viewer by calling "viewer.hi ...

  8. View and Data API 现在支持IE11了

    By Daniel Du After a long time waiting, IE11 finally supports WebGL, which enables us viewing our 3D ...

  9. View and Data API Tips: how to make viewer full screen

    By Daniel Du If you have not heard of View and Data API, here is the idea, the View & Data API e ...

随机推荐

  1. 续 CentOS7(mini) 运行MVC5 + Mariadb

    上一篇,介绍了在CentOS7上使用mono官方二进制安装包快速安装mono环境 并且成功运行了一个Owin自宿主应用(Booker) 由于Owin自宿主应用不需要System.Web的支持,所以可以 ...

  2. .NET Portability Analyzer 已开源

    在一年前介绍过<介绍.NET 开发必备工具 .NET Portability Analyzer>,微软已经把代码开源到Github:https://github.com/Microsoft ...

  3. ZooKeeper简介

    本文中,我们将对ZooKeeper进行介绍.简单地说,ZooKeeper是一个用来在构成应用的各个子服务之间进行协调的一个服务. 由于其本身并没有特别复杂的机制,因此我们将会把更多的笔墨集中在如何对Z ...

  4. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

  5. Electron的环境配置

    原文地址http://huisky.com/blog/161218121551123 本文介绍了Electron的环境配置,包括Electron下载.nodejs下载安装.NPM+Bower安装配置. ...

  6. Android-Eclipse-INSTALL_FAILED_UPDATE_INCOMPATIBLE错误

    电脑重装了系统,环境问题一大堆,唉,搞死人,这不,今天就出现了这样的一个奇怪的问题. INSTALL_FAILED_UPDATE_INCOMPATIBLE 最后搜了一遍,发现是因为已经安装了这个包,包 ...

  7. iOS 之项目中遇到的问题总结

    昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下. 问题: 1.两表联动 所谓的两表联动就是有左右两个表格 ...

  8. java调用CXF WebService接口的两种方式

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...

  9. BootStrap_03之组件(手风琴、导航)

    1.BootStrap组件--按钮组: .btn-group>.btn*5: .btn-group-justified: .btn-group-lg/sm/xs: .btn-group-vert ...

  10. copy()之绝版应用

    我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏幕).这是一种典型的处理方式,程序本身具备 ...