使用 Mayo 展示 OCCT 转出的 STEP 文件, 从 TDF_Label 创建的 XCAFPrs_AISObject 死活设不上颜色, setColor 接口只有在 SetFaceBoundaryDraw(true) 设置边框颜色以后只对边框生效.
这里对 TDF_Label 设置一下颜色, 处理方法如下:
void GraphicsShapeObjectDriver::setShapeColor(const TDF_Label& label) const
{
//临时定义几个颜色
std::map<int, Quantity_NameOfColor> mapColors = {
{0,Quantity_NOC_FORESTGREEN},
{1,Quantity_NOC_RED},
{2,Quantity_NOC_MAROON},
{3,Quantity_NOC_BLUE},
{4,Quantity_NOC_GREEN},
{5,Quantity_NOC_ORANGE},
{6,Quantity_NOC_YELLOW1},
{7,Quantity_NOC_PURPLE},
{8,Quantity_NOC_PINK},
{9,Quantity_NOC_CORAL},
{10,Quantity_NOC_PLUM},
{11,Quantity_NOC_CYAN},
{12,Quantity_NOC_LIGHTSEAGREEN},
{13,Quantity_NOC_TAN3},
{14,Quantity_NOC_INDIANRED},
{15,Quantity_NOC_GOLD2}
};
auto nLabelId = label.Tag();
nLabelId = nLabelId % 16;
Handle(XCAFDoc_ColorTool) rootColorTool = XCAFDoc_DocumentTool::ColorTool(label);
if (!rootColorTool->IsSet(label, XCAFDoc_ColorSurf))
{
rootColorTool->SetColor(label, mapColors[nLabelId], XCAFDoc_ColorSurf);
}
}
GraphicsObjectPtr GraphicsShapeObjectDriver::createObject(const TDF_Label& label) const
{
if (XCaf::isShape(label))
{
setShapeColor(label); //设置颜色
auto object = new XCAFPrs_AISObject(label);
object->SetDisplayMode(AIS_Shaded);
object->SetMaterial(Graphic3d_NOM_WATER); //材质
object->Attributes()->SetFaceBoundaryDraw(true); //绘制边界
object->Attributes()->SetFaceBoundaryAspect(new Prs3d_LineAspect(Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.));
object->Attributes()->SetIsoOnTriangulation(true);
object->SetOwner(this);
return object;
}
else if (CafUtils::hasAttribute<DataTriangulation>(label)) {
}
return {};
}
效果: