Mesh: [skip ci] improve support of asymptote export

This commit is contained in:
wmayer
2020-08-27 12:53:36 +02:00
parent 50bbd52281
commit 58a92681cf

View File

@@ -2417,9 +2417,12 @@ bool MeshOutput::SaveAsymptote(std::ostream &out) const
clIter.Begin();
clEnd.End();
const MeshPointArray& rPoints = _rclMesh.GetPoints();
const MeshFacetArray& rFacets = _rclMesh.GetFacets();
bool saveFaceColor = (_material && _material->binding == MeshIO::PER_FACE &&
_material->diffuseColor.size() == rFacets.size());
bool saveVertexColor = (_material && _material->binding == MeshIO::PER_VERTEX &&
_material->diffuseColor.size() == rPoints.size());
bool saveFaceColor = (_material && _material->binding == MeshIO::PER_FACE &&
_material->diffuseColor.size() == rFacets.size());
std::size_t index = 0;
const MeshGeomFacet *pclFacet;
@@ -2435,14 +2438,25 @@ bool MeshOutput::SaveAsymptote(std::ostream &out) const
<< pclFacet->_aclPoints[i].z << ")--";
}
out << "cycle),\n";
out << "cycle";
if (saveFaceColor) {
if (saveVertexColor) {
const MeshFacet& face = rFacets[index];
out << ",\n new pen[] {";
for (int i = 0; i < 3; i++) {
const App::Color& c = _material->diffuseColor[face._aulPoints[i]];
out << "rgb(" << c.r << ", " << c.g << ", " << c.b << ")";
if (i < 3)
out << ", ";
}
out << "}));\n";
}
else if (saveFaceColor) {
const App::Color& c = _material->diffuseColor[index];
out << " rgb(" << c.r << ", " << c.g << ", " << c.b << "));\n";
out << "),\n rgb(" << c.r << ", " << c.g << ", " << c.b << "));\n";
}
else {
out << " rgb(0.8, 0.8, 0.8));\n";
out << "),\n rgb(0.8, 0.8, 0.8));\n";
}
++clIter;