文章目录

  • 前言
  • 一、怎样设置构件颜色?
    • 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)相关推荐

  1. Bentley MicroStation (*.dgn) 模型 一键输出 3D Tiles 和 glTF/glb

    Bentley(dgn) 模型一键输出 3D Tiles (for Cesium) 和 glTF/glb 功能描述: 基于 Bentley MicroStation CE 平台,原始模型支持 *.dg ...

  2. MicroStation CONNECT Edition Update 15.2

    MicroStation 开发团队很高兴地宣布推出 MicroStation CONNECT 版本更新 15.2(版本 10.15.02.11).此更新侧重于通过许多性能改进和节省时间的功能更快地完成 ...

  3. Bentley MicroStation V8i安装教程

    1. 双击 2. 安装 3. 双击运行程序' 4. 这里可以更换路径, 5. 下一步 6. 接受 7. 验证组件 8. 安装完成推出 9. 将破解文件复制到安装目录默认目录C:\Program Fil ...

  4. GDI+ 学习记录(31) 图像颜色变换(TGPImageAttributes)

    //正常显示图片, 没有变换 varg:TGPGraphics;img:TGPImage; beging:=TGPGraphics.Create(Canvas.Handle);g.Clear(aclW ...

  5. jQuery Color Animate (jQuery 颜色变换动画) 插件

    转载地址: http://blog.netsh.org/posts/jquery-color-animate-plugin_619.netsh.html 弥补jQuery的不足 我们知道jQuery几 ...

  6. matlab gnuplot,Gnuplot 64位版(gnuplot颜色渲染)V5.2.3 安装版

    Gnuplot 64位版(gnuplot颜色渲染)是一款功能强大的命令行的交互式科学绘图工具.Gnuplot 64位版能够将高等函数运算进行图像化,让那个函数的变化更加的直观并且能够通过对图像的移动变 ...

  7. Qt5学习 模仿qq音乐播放器样式(2)——点击动画效果+歌词颜色变换展示

    拖的太久,主要再上一篇文章中,新学习了相关知识,做了右键菜单,点击按钮动画切换窗口和播放时歌词颜色显示当前播放位置. 主要为了实现功能的展示,所以很多文件读取都直接采用了本地文件这种比较low的方式. ...

  8. 【Python】-- python的基本图像处理(图像显示、保存、颜色变换、缩放与旋转等)

    目录 一.图像文件的读写 操作步骤: 显示图像文件的三个常用属性: 例: 二.图像文件的处理 常用的图像处理方法 1.图像的显示 2.图像的保存 3.图像的拷贝与粘贴 4.图像的缩放与旋转 5.图像的 ...

  9. Nutanix CE版安装

    Nutanix作为超融合的领头羊,超融合的核心是Xtreme Computing Platform,简称XCP.  XCP的两个基本软件部件: -Nutanix Acropolis -Nutanix ...

最新文章

  1. RabbitMQ死信实战(生产者)
  2. Spring Security 认证执行流程
  3. python访问网页速度_python实现用于测试网站访问速率的方法
  4. LeetCode 1368. 使网格图至少有一条有效路径的最小代价(BFS最短路径,难)
  5. 匈牙利算法-指派问题、二分图问题等
  6. python 模块 chardet下载方法及介绍
  7. cv mat的shape_将ndarray转换为cv::Mat的最简单方法是什么?
  8. GitHub建立个人网站(三)
  9. 使用爬虫爬去网上的图片并保存
  10. 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
  11. python程序基本结构总结_python总结
  12. 块级元素水平,垂直居中的两种方式
  13. 气候遇上AI:从此天有可测风云
  14. 第二章 Maxwell 安装部署
  15. Sqlmap命令使用
  16. 基于开路电压+安时积分法估算锂电池SOC(二)
  17. 计算机常用的数字编码是什么意思,编码是什么意思
  18. java 金庸群侠传_《金庸群侠传》MOD发展史(官方版本 转自铁血丹心论坛)
  19. 安装好maya后运行不了并弹出如图的错误
  20. excel表格多列数据中查找重复行数据

热门文章

  1. 京东云 linux无法远程,怎样远程登录京东云云主机.pdf
  2. Python:混合动力汽车能量管理_动态规划简版(2/2)
  3. android 同步短信到iphone,教你把短信从安卓同步到iPhone
  4. 学生用计算机怎么调,学生计算器怎么调时间
  5. 国外服务器 ping值不稳定,为什么美国服务器网络Ping值高
  6. 平衡电枢磁性扬声器行业调研报告 - 市场现状分析与发展前景预测
  7. Android Room 数据库最佳入门教程
  8. Jmeter打开badboy录制的脚本报类元素错误解决方法
  9. Word中在小方框里面打勾的正确方法
  10. 扩展RBAC用户角色权限设计方案(转载)