Bentley MicroStation CE版的颜色变换(CONNECT Edition)
文章目录
- 前言
- 一、怎样设置构件颜色?
- 1.直接设置颜色
- 2.设置为图层的颜色
- 二、获得构件颜色
- 2.1 如果在自动化com开发途径的话,要想获得RGB值,需要调用ActiveModelReference下的InternalColorToRGBColor得到颜色值,然后转为十六进制,然后通过与运算得到十进制的RGB值。
- 2.2 如果是C#的CE开发dll工程,通过ExtractElementColorInfo可得到RGB数值
- 2.3 C++版获得颜色的示例(Bentley官网论坛摘抄),在此一并贴一下
- 最后
前言
案例:近日,笔者在获得构件信息的时候,无法获得实体的真实颜色,对此进行了多方面的调查,发现MS平台的颜色系统还是有点拐弯的。
一、怎样设置构件颜色?
代码如下(示例):
1.直接设置颜色
ElementPropertiesSetter elePropSet = new ElementPropertiesSetter();
RgbColorDef rgbColor = new RgbColorDef((byte)AutoDimFormatInfo.rgbline.R, (byte)AutoDimFormatInfo.rgbline.G, (byte)AutoDimFormatInfo.rgbline.B);
uint colormap = DgnColorMap.CreateElementColor(rgbColor, null, null, dgnfile);
elePropSet.SetColor(colormap);
elePropSet.Apply(el);
listEle.Add(el);
2.设置为图层的颜色
C++版的代码如下(示例):
ElementPropertiesSetterPtr propEle = ElementPropertiesSetter::Create();
LevelId level = dgnModelPtr->GetLevelCache().GetLevelByName(L"CW_hatch 填充线").GetLevelId();propEle->SetLevel(level);
propEle->SetColor(COLOR_BYLEVEL);
propEle->SetLinestyle(STYLE_BYLEVEL,NULL);
propEle->SetWeight(WEIGHT_BYLEVEL);
propEle->Apply(eeh);
二、获得构件颜色
通过AnnounceElementDisplayParameters获得的ElementDisplayParameters,
然后ElementDisplayParameters里面含有FillColorTBGR信息,但是如果元素的颜色设置为随层的话,这个颜色基本就是一个无意义的数字。因此需要拿到它所在图层的颜色,通过图层的GetByLevelColor方法:
public LevelDefinitionColor GetByLevelColor();
此时,还未完结,因为获得的这个颜色是MS中特定的一个内部颜色InternalColor。其最低字节表示索引色表中与该颜色最接近的颜色的索引值,其余字节表示当前模型中真彩色表中的颜色索引值。
转换方法:
2.1 如果在自动化com开发途径的话,要想获得RGB值,需要调用ActiveModelReference下的InternalColorToRGBColor得到颜色值,然后转为十六进制,然后通过与运算得到十进制的RGB值。
rv = ((byte)((fillColor) & 0xff));
gv = ((byte)((fillColor >> 8) & 0xff));
bv = ((byte)((fillColor >> 16) & 0xff));
int t = ((byte)((fillColor >> 24) & 0xff));
2.2 如果是C#的CE开发dll工程,通过ExtractElementColorInfo可得到RGB数值
ColorInformation infoColor = DgnColorMap.ExtractElementColorInfo(fillColor, mDgnModel.GetDgnFile());
rv = infoColor.ColorDefinition.R;
gv = infoColor.ColorDefinition.G;
bv = infoColor.ColorDefinition.B;
2.3 C++版获得颜色的示例(Bentley官网论坛摘抄),在此一并贴一下
SymbologyReporter symbReporter(eh);UInt32 clrId, clrIdx;bool isTrueClr;WString bookName, clrName;double transparency;UInt index = 0;while (SUCCESS == symbReporter.GetColorID(clrId, index))index++;index--;symbReporter.GetTransparency(transparency, index);if (COLOR_BYLEVEL == clrId){LevelId lvlID;symbReporter.GetLevelId(lvlID, index);}else{DgnColorMapP pClrMap = DgnColorMap::GetForDisplay(eh.GetDgnModelP());IntColorDef clrDef = pClrMap->GetColor(clrId);pClrMap->ExtractElementColorInfo(&clrDef, &clrIdx, &isTrueClr, &bookName, &clrName, clrId, *eh.GetDgnFileP());RgbaColorDef rgbColor = clrDef.m_rgba;unsigned long red = (unsigned long)rgbColor.red;unsigned long green = (unsigned long)rgbColor.green;unsigned long blue = (unsigned long)rgbColor.blue;Byte alphaRevs = ~rgbColor.alpha;unsigned long alpha = (unsigned long)alphaRevs;unsigned long color = red | (green << 8) | (blue << 16) | (alpha << 24);}
最后
贴几个具体颜色的验证数值图片示例一下:
上图可见,通过按位与得到的颜色RGB是不对的。
通过ExtractElementColorInfo获得的浅青色的颜色 ,如上图所示RGB数值。
Bentley MicroStation CE版的颜色变换(CONNECT Edition)相关推荐
- Bentley MicroStation (*.dgn) 模型 一键输出 3D Tiles 和 glTF/glb
Bentley(dgn) 模型一键输出 3D Tiles (for Cesium) 和 glTF/glb 功能描述: 基于 Bentley MicroStation CE 平台,原始模型支持 *.dg ...
- MicroStation CONNECT Edition Update 15.2
MicroStation 开发团队很高兴地宣布推出 MicroStation CONNECT 版本更新 15.2(版本 10.15.02.11).此更新侧重于通过许多性能改进和节省时间的功能更快地完成 ...
- Bentley MicroStation V8i安装教程
1. 双击 2. 安装 3. 双击运行程序' 4. 这里可以更换路径, 5. 下一步 6. 接受 7. 验证组件 8. 安装完成推出 9. 将破解文件复制到安装目录默认目录C:\Program Fil ...
- GDI+ 学习记录(31) 图像颜色变换(TGPImageAttributes)
//正常显示图片, 没有变换 varg:TGPGraphics;img:TGPImage; beging:=TGPGraphics.Create(Canvas.Handle);g.Clear(aclW ...
- jQuery Color Animate (jQuery 颜色变换动画) 插件
转载地址: http://blog.netsh.org/posts/jquery-color-animate-plugin_619.netsh.html 弥补jQuery的不足 我们知道jQuery几 ...
- matlab gnuplot,Gnuplot 64位版(gnuplot颜色渲染)V5.2.3 安装版
Gnuplot 64位版(gnuplot颜色渲染)是一款功能强大的命令行的交互式科学绘图工具.Gnuplot 64位版能够将高等函数运算进行图像化,让那个函数的变化更加的直观并且能够通过对图像的移动变 ...
- Qt5学习 模仿qq音乐播放器样式(2)——点击动画效果+歌词颜色变换展示
拖的太久,主要再上一篇文章中,新学习了相关知识,做了右键菜单,点击按钮动画切换窗口和播放时歌词颜色显示当前播放位置. 主要为了实现功能的展示,所以很多文件读取都直接采用了本地文件这种比较low的方式. ...
- 【Python】-- python的基本图像处理(图像显示、保存、颜色变换、缩放与旋转等)
目录 一.图像文件的读写 操作步骤: 显示图像文件的三个常用属性: 例: 二.图像文件的处理 常用的图像处理方法 1.图像的显示 2.图像的保存 3.图像的拷贝与粘贴 4.图像的缩放与旋转 5.图像的 ...
- Nutanix CE版安装
Nutanix作为超融合的领头羊,超融合的核心是Xtreme Computing Platform,简称XCP. XCP的两个基本软件部件: -Nutanix Acropolis -Nutanix ...
最新文章
- RabbitMQ死信实战(生产者)
- Spring Security 认证执行流程
- python访问网页速度_python实现用于测试网站访问速率的方法
- LeetCode 1368. 使网格图至少有一条有效路径的最小代价(BFS最短路径,难)
- 匈牙利算法-指派问题、二分图问题等
- python 模块 chardet下载方法及介绍
- cv mat的shape_将ndarray转换为cv::Mat的最简单方法是什么?
- GitHub建立个人网站(三)
- 使用爬虫爬去网上的图片并保存
- 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
- python程序基本结构总结_python总结
- 块级元素水平,垂直居中的两种方式
- 气候遇上AI:从此天有可测风云
- 第二章 Maxwell 安装部署
- Sqlmap命令使用
- 基于开路电压+安时积分法估算锂电池SOC(二)
- 计算机常用的数字编码是什么意思,编码是什么意思
- java 金庸群侠传_《金庸群侠传》MOD发展史(官方版本 转自铁血丹心论坛)
- 安装好maya后运行不了并弹出如图的错误
- excel表格多列数据中查找重复行数据
热门文章
- 京东云 linux无法远程,怎样远程登录京东云云主机.pdf
- Python:混合动力汽车能量管理_动态规划简版(2/2)
- android 同步短信到iphone,教你把短信从安卓同步到iPhone
- 学生用计算机怎么调,学生计算器怎么调时间
- 国外服务器 ping值不稳定,为什么美国服务器网络Ping值高
- 平衡电枢磁性扬声器行业调研报告 - 市场现状分析与发展前景预测
- Android Room 数据库最佳入门教程
- Jmeter打开badboy录制的脚本报类元素错误解决方法
- Word中在小方框里面打勾的正确方法
- 扩展RBAC用户角色权限设计方案(转载)