请问老师,
如下模型中,我使用下面代码获取颜色。无法获取正确的显示颜色。displayParams.GetLineColorTBGR();可以获取正确颜色,但是对于正常模型,此方法获取到的却是错误的颜色。请问这个如果解决?
virtual void _AnnounceElemDisplayParams(ElemDisplayParamsCR displayParams) { if(displayParams.IsFillColorTBGR()){ color = displayParams.GetFillColorTBGR(); }else if (displayParams.IsLineColorTBGR()) { color = displayParams.GetLineColorTBGR(); }else { color = displayParams.GetLineColor(); } //color = displayParams.GetLineColorTBGR(); material_struct.transparency = displayParams.GetTransparency(); }
3554.ttt.dgn
请参考下面代码:
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); LevelCacheR lvlCache = eh.GetDgnModelP()->GetLevelCacheR(); LevelHandle lvlHandle = lvlCache.GetLevel(lvlID); clrId = lvlHandle.GetByLevelColor().GetColor(); } DgnColorMapP pClrMap = DgnColorMap::GetForDisplay(eh.GetDgnModelP()); IntColorDef clrDef = pClrMap->GetColor(clrId); pClrMap->ExtractElementColorInfo(&clrDef, &clrIdx, &isTrueClr, &bookName, &clrName, clrId, *eh.GetDgnFileP()); value["colors"].append((double)clrDef.m_rgb.red/255); value["colors"].append((double)clrDef.m_rgb.green/255); value["colors"].append((double)clrDef.m_rgb.blue/255); value["colors"].append(1.0 - transparency);
这个代码我测试过,不行的。
重写_AnnounceElemMatSymb函数:
#define PTExtractTfromTBGR(tbgr) ((byte)((tbgr >> 24) & 0xff)) #define PTExtractBfromTBGR(tbgr) ((byte)((tbgr >> 16) & 0xff)) #define PTExtractGfromTBGR(tbgr) ((byte)((tbgr >> 8) & 0xff)) #define PTExtractRfromTBGR(tbgr) ((byte)((tbgr ) & 0xff)) void IElementGraphicsProcessorTest::_AnnounceElemMatSymb(ElemMatSymbCR matSymb) { UInt32 tbgr= matSymb.GetLineColorTBGR(); byte r = PTExtractRfromTBGR(tbgr); byte g = PTExtractGfromTBGR(tbgr); byte b = PTExtractBfromTBGR(tbgr); byte t= PTExtractTfromTBGR(tbgr); RgbaColorDef rgbColorDef = { r,g,b,t }; printf("R=%d,G=%d,B=%d\n", rgbColorDef.red, rgbColorDef.green, rgbColorDef.blue);
Answer Verified By: Yongan.Fu
byte r = PTExtractRfromTBGR(tbgr); byte g = PTExtractGfromTBGR(tbgr); byte b = PTExtractBfromTBGR(tbgr); byte t= PTExtractTfromTBGR(tbgr); RgbaColorDef rgbColorDef = { r,g,b,t };
这个方法可以。