@@ -21,22 +21,25 @@
|
||||
* *
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include "ExportOCAFGui.h"
|
||||
#include <Gui/Application.h>
|
||||
#include <Mod/Part/Gui/ViewProvider.h>
|
||||
|
||||
using namespace ImportGui;
|
||||
|
||||
|
||||
ExportOCAFGui::ExportOCAFGui(Handle(TDocStd_Document) hDoc, bool explicitPlacement)
|
||||
: ExportOCAF(hDoc, explicitPlacement)
|
||||
{}
|
||||
|
||||
void ExportOCAFGui::findColors(Part::Feature* part, std::vector<Base::Color>& colors) const
|
||||
{
|
||||
Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(part);
|
||||
if (vp && vp->isDerivedFrom<PartGui::ViewProviderPartExt>()) {
|
||||
colors = static_cast<PartGui::ViewProviderPartExt*>(vp)->ShapeAppearance.getDiffuseColors();
|
||||
if (auto vp = Gui::Application::Instance->getViewProvider(part)) {
|
||||
if (auto vppe = freecad_cast<PartGui::ViewProviderPartExt*>(vp)) {
|
||||
colors = vppe->ShapeAppearance.getDiffuseColors();
|
||||
auto transp = vppe->ShapeAppearance.getTransparency();
|
||||
for (auto& it : colors) {
|
||||
it.setTransparency(transp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,15 @@ void ImportOCAFGui::applyFaceColors(Part::Feature* part, const std::vector<Base:
|
||||
}
|
||||
else {
|
||||
vp->ShapeAppearance.setDiffuseColors(colors);
|
||||
std::vector<float> transp;
|
||||
transp.reserve(colors.size());
|
||||
std::transform(
|
||||
colors.cbegin(),
|
||||
colors.cend(),
|
||||
std::back_inserter(transp),
|
||||
[](const Base::Color& col) { return col.transparency(); }
|
||||
);
|
||||
vp->ShapeAppearance.setTransparencies(transp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
|
||||
|
||||
# Registered in Part's Init.py file
|
||||
FreeCAD.changeImportModule("IGES format (*.iges *.IGES *.igs *.IGS)", "Part", "ImportGui")
|
||||
FreeCAD.changeExportModule("IGES format (*.iges *.igs)", "Part", "ImportGui")
|
||||
FreeCAD.changeImportModule("STEP with colors (*.step *.STEP *.stp *.STP)", "Import", "ImportGui")
|
||||
FreeCAD.changeExportModule("STEP with colors (*.step *.stp)", "Import", "ImportGui")
|
||||
FreeCAD.changeExportModule("glTF (*.gltf *.glb)", "Import", "ImportGui")
|
||||
|
||||
@@ -759,7 +759,7 @@ std::map<std::string, Base::Color> ViewProviderPartExt::getElementColors(const c
|
||||
|
||||
if (!element || !element[0]) {
|
||||
auto color = ShapeAppearance.getDiffuseColor();
|
||||
color.setTransparency(Base::fromPercent(Transparency.getValue()));
|
||||
color.setTransparency(ShapeAppearance.getTransparency());
|
||||
ret["Face"] = color;
|
||||
ret["Edge"] = LineColor.getValue();
|
||||
ret["Vertex"] = PointColor.getValue();
|
||||
@@ -773,18 +773,16 @@ std::map<std::string, Base::Color> ViewProviderPartExt::getElementColors(const c
|
||||
color.setTransparency(Base::fromPercent(Transparency.getValue()));
|
||||
bool singleColor = true;
|
||||
for (int i = 0; i < size; ++i) {
|
||||
Base::Color faceColor = ShapeAppearance.getDiffuseColor(i);
|
||||
faceColor.setTransparency(ShapeAppearance.getTransparency(i));
|
||||
if (faceColor != color) {
|
||||
ret[std::string(element, 4) + std::to_string(i + 1)] = faceColor;
|
||||
auto color_i = ShapeAppearance.getDiffuseColor(i);
|
||||
color_i.setTransparency(ShapeAppearance.getTransparency(i));
|
||||
if (color_i != color) {
|
||||
ret[std::string(element, 4) + std::to_string(i + 1)] = color_i;
|
||||
}
|
||||
Base::Color firstFaceColor = ShapeAppearance.getDiffuseColor(0);
|
||||
firstFaceColor.setTransparency(ShapeAppearance.getTransparency(0));
|
||||
singleColor = singleColor && (faceColor == firstFaceColor);
|
||||
singleColor = singleColor && color == color_i;
|
||||
}
|
||||
if (size > 0 && singleColor) {
|
||||
color = ShapeAppearance.getDiffuseColor(0);
|
||||
color.setTransparency(ShapeAppearance.getTransparency(0));
|
||||
color.setTransparency(ShapeAppearance.getTransparency());
|
||||
ret.clear();
|
||||
}
|
||||
ret["Face"] = color;
|
||||
@@ -792,13 +790,17 @@ std::map<std::string, Base::Color> ViewProviderPartExt::getElementColors(const c
|
||||
else {
|
||||
int idx = atoi(element + 4);
|
||||
if (idx > 0 && idx <= size) {
|
||||
ret[element] = ShapeAppearance.getDiffuseColor(idx - 1);
|
||||
auto color_i = ShapeAppearance.getDiffuseColor(idx - 1);
|
||||
color_i.setTransparency(ShapeAppearance.getTransparency(idx - 1));
|
||||
ret[element] = color_i;
|
||||
}
|
||||
else {
|
||||
ret[element] = ShapeAppearance.getDiffuseColor();
|
||||
auto color_i = ShapeAppearance.getDiffuseColor();
|
||||
color_i.setTransparency(ShapeAppearance.getTransparency());
|
||||
ret[element] = color_i;
|
||||
}
|
||||
if (size == 1) {
|
||||
ret[element].setTransparency(Base::fromPercent(Transparency.getValue()));
|
||||
ret[element].setTransparency(ShapeAppearance.getTransparency());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user