Reputation: 11
I am working on importing a STEP file and then exporting it back but changing their appearance using color and material. I am able to export color information for Compounds and Solids but when I try to do it for Faces it doesn't export. I have verified that the face label created has the color information before exporting. The below code I am adding a color for each face but it doesn't get exported. Here's my export code:
void ShapeNode::Export(std::string fileName)
{
Handle (XCAFApp_Application)
app = XCAFApp_Application::GetApplication();
// Create a new XDE document
Handle (TDocStd_Document) doc;
app->NewDocument("MDTV-XCAF", doc);
// Access the shape, color, and material tools
Handle (XCAFDoc_ShapeTool)
shapeTool = XCAFDoc_DocumentTool::ShapeTool(doc->Main());
Handle (XCAFDoc_ColorTool)
colorTool = XCAFDoc_DocumentTool::ColorTool(doc->Main());
Handle (XCAFDoc_MaterialTool)
materialTool = XCAFDoc_DocumentTool::MaterialTool(doc->Main());
// Add the root shape to the document
TDF_Label shapeLabel = shapeTool->AddShape(shape);
// Set the name using TDataStd_Name attribute
TDataStd_Name::Set(shapeLabel, name.c_str());
if (material.GetName() != "")
{
std::vector<double> color;
if (material.GetAttribute(color, "Color"))
{
Quantity_Color col(color[0], color[1], color[2], Quantity_TOC_RGB);
// Set the color
colorTool->SetColor(shapeLabel, col, XCAFDoc_ColorGen);
}
Handle (TCollection_HAsciiString)
matName = new TCollection_HAsciiString(material.GetName().c_str());
Handle (TCollection_HAsciiString)
matDes = new TCollection_HAsciiString(material.GetName().c_str());
double density = 0.0;
if (material.GetAttribute(density, "Density"))
{
TDF_Label matLabel = materialTool->AddMaterial(matName,
matDes,
density,
matDes,
matDes);
materialTool->SetMaterial(shapeLabel, matLabel);
}
}
for (TopExp_Explorer itf(shape, TopAbs_FACE); itf.More(); itf.Next())
{
TopoDS_Face face = TopoDS::Face(itf.Current());
Quantity_Color color;
if (!colorTool->SetColor(face, color, XCAFDoc_ColorSurf))
{
TDF_Label faceLabel;
if (!shapeTool->FindSubShape(shapeLabel, face, faceLabel))
{
faceLabel = shapeTool->AddSubShape(shapeLabel, face);
}
colorTool->SetColor(faceLabel,
Quantity_Color(1, 0, 0, Quantity_TOC_RGB),
XCAFDoc_ColorSurf);
}
}
// Write to STEP file
STEPCAFControl_Writer writer;
writer.Transfer(doc, STEPControl_AsIs);
if (writer.Write(fileName.c_str()) != IFSelect_RetDone)
{
std::cout << "Failed to write STEP file." << std::endl;
}
}
The expected result from the above code was to see the colors per face on the output STEP file but that did not happen.
Upvotes: 1
Views: 45