From c988f1d4726a515980c369b90278434957b26dfc Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 27 Nov 2022 16:45:16 +0100 Subject: [PATCH] Base: start of refactoring of InventorBuilder --- src/Base/Builder3D.cpp | 269 ++++++++++++++--------------- src/Base/Builder3D.h | 106 +++++------- src/Mod/Mesh/App/Mesh.cpp | 10 +- src/Mod/MeshPart/App/MeshAlgos.cpp | 6 +- src/Mod/Part/App/TopoShape.cpp | 6 +- src/Mod/Points/App/PointsPyImp.cpp | 3 +- 6 files changed, 186 insertions(+), 214 deletions(-) diff --git a/src/Base/Builder3D.cpp b/src/Base/Builder3D.cpp index c83835b40e..fd18b60348 100644 --- a/src/Base/Builder3D.cpp +++ b/src/Base/Builder3D.cpp @@ -70,6 +70,41 @@ float ColorRGB::valueInRange(float value) return std::clamp(value, valueMinLegal, valueMaxLegal); } +const char* DrawStyle::styleAsString() const +{ + switch (style) { + case Style::Filled: + return "FILLED"; + case Style::Lines: + return "LINES"; + case Style::Points: + return "POINTS"; + case Style::Invisible: + return "INVISIBLE"; + } + return "FILLED"; +} + +std::string DrawStyle::patternAsString() const +{ + std::stringstream str; + str << "0x" << std::hex << linePattern; + return str.str(); +} + +const char* PolygonOffset::styleAsString() const +{ + switch (style) { + case Style::Filled: + return "FILLED"; + case Style::Lines: + return "LINES"; + case Style::Points: + return "POINTS"; + } + return "FILLED"; +} + /** * A constructor. * A more elaborate description of the constructor. @@ -171,7 +206,6 @@ void Builder3D::addText(const Base::Vector3f& point, const char * text, const Ba << "Transform { translation " << point.x << " "<< point.y << " "<< point.z << "} " << "Text2 { string \" " << text << "\" " << "} " << "} "; - } void Builder3D::clear () @@ -188,8 +222,7 @@ void Builder3D::clear () void Builder3D::addSingleLine(const Base::Line3f& line, DrawStyle drawStyle, const ColorRGB& color) { - char pattern[20]; - sprintf(pattern, "0x%x", drawStyle.linePattern); + std::string pattern = drawStyle.patternAsString(); result << "Separator { " << "Material { diffuseColor " << color.red() << " "<< color.green() << " "<< color.blue() << "} " @@ -277,7 +310,7 @@ void Builder3D::addTransformation(const Base::Placement& transform) { Base::Vector3d translation = transform.getPosition(); Base::Vector3d rotationaxis; - double angle; + double angle{}; transform.getRotation().getValue(rotationaxis, angle); result << "Transform {"; result << " translation " << translation.x << " " << translation.y << " " << translation.z; @@ -377,21 +410,21 @@ void InventorBuilder::addLabel(const char* text) result << Base::blanks(indent) << "} \n"; } -void InventorBuilder::addBaseColor(float color_r, float color_g, float color_b) +void InventorBuilder::addBaseColor(const ColorRGB& rgb) { result << Base::blanks(indent) << "BaseColor { \n"; result << Base::blanks(indent) << " rgb " - << color_r << " " << color_g << " " << color_b << '\n'; + << rgb.red() << " " << rgb.green() << " " << rgb.blue() << '\n'; result << Base::blanks(indent) << "} \n"; } -void InventorBuilder::addMaterial(float color_r, float color_g, float color_b, float color_a) +void InventorBuilder::addMaterial(const ColorRGB& rgb, float transparency) { result << Base::blanks(indent) << "Material { \n"; result << Base::blanks(indent) << " diffuseColor " - << color_r << " " << color_g << " " << color_b << '\n'; - if (color_a > 0) - result << Base::blanks(indent) << " transparency " << color_a << '\n'; + << rgb.red() << " " << rgb.green() << " " << rgb.blue() << '\n'; + if (transparency > 0) + result << Base::blanks(indent) << " transparency " << transparency << '\n'; result << Base::blanks(indent) << "} \n"; } @@ -411,9 +444,9 @@ void InventorBuilder::endMaterial() result << Base::blanks(indent) << "}\n"; } -void InventorBuilder::addColor(float color_r, float color_g, float color_b) +void InventorBuilder::addColor(const ColorRGB& rgb) { - result << color_r << " " << color_g << " " << color_b << '\n'; + result << rgb.red() << " " << rgb.green() << " " << rgb.blue() << '\n'; } void InventorBuilder::addMaterialBinding(const char* bind) @@ -422,30 +455,30 @@ void InventorBuilder::addMaterialBinding(const char* bind) << bind << " } \n"; } -void InventorBuilder::addDrawStyle(short pointSize, short lineWidth, unsigned short linePattern, const char* style) +void InventorBuilder::addDrawStyle(DrawStyle drawStyle) { result << Base::blanks(indent) << "DrawStyle {\n" - << Base::blanks(indent) << " style " << style << '\n' - << Base::blanks(indent) << " pointSize " << pointSize << '\n' - << Base::blanks(indent) << " lineWidth " << lineWidth << '\n' - << Base::blanks(indent) << " linePattern " << linePattern << '\n' + << Base::blanks(indent) << " style " << drawStyle.styleAsString() << '\n' + << Base::blanks(indent) << " pointSize " << drawStyle.pointSize << '\n' + << Base::blanks(indent) << " lineWidth " << drawStyle.lineWidth << '\n' + << Base::blanks(indent) << " linePattern " << drawStyle.linePattern << '\n' << Base::blanks(indent) << "}\n"; } -void InventorBuilder::addShapeHints(float crease) +void InventorBuilder::addShapeHints(float creaseAngle) { result << Base::blanks(indent) << "ShapeHints {\n" - << Base::blanks(indent) << " creaseAngle " << crease << '\n' + << Base::blanks(indent) << " creaseAngle " << creaseAngle << '\n' << Base::blanks(indent) << "}\n"; } -void InventorBuilder::addPolygonOffset(float factor, float units, const char* styles, bool on) +void InventorBuilder::addPolygonOffset(PolygonOffset polygonOffset) { result << Base::blanks(indent) << "PolygonOffset {\n" - << Base::blanks(indent) << " factor " << factor << '\n' - << Base::blanks(indent) << " units " << units << '\n' - << Base::blanks(indent) << " styles " << styles << '\n' - << Base::blanks(indent) << " on " << (on ? "TRUE" : "FALSE") << '\n' + << Base::blanks(indent) << " factor " << polygonOffset.factor << '\n' + << Base::blanks(indent) << " units " << polygonOffset.units << '\n' + << Base::blanks(indent) << " styles " << polygonOffset.styleAsString() << '\n' + << Base::blanks(indent) << " on " << (polygonOffset.on ? "TRUE" : "FALSE") << '\n' << Base::blanks(indent) << "}\n"; } @@ -468,21 +501,16 @@ void InventorBuilder::beginPoints() } /// insert a point in a point set -void InventorBuilder::addPoint(float x, float y, float z) +void InventorBuilder::addPoint(const Vector3f& pnt) { - result << Base::blanks(indent) << x << " " << y << " " << z << ",\n"; + result << Base::blanks(indent) << pnt.x << " " << pnt.y << " " << pnt.z << ",\n"; } -/// add a vector to a point set -void InventorBuilder::addPoint(const Vector3f &vec) +void InventorBuilder::addPoints(const std::vector& points) { - addPoint(vec.x, vec.y, vec.z); -} - -void InventorBuilder::addPoints(const std::vector &vec) -{ - for (std::vector::const_iterator it = vec.begin(); it != vec.end(); ++it) - addPoint(it->x, it->y, it->z); + for (const auto& pnt : points) { + addPoint(pnt); + } } /** @@ -530,66 +558,53 @@ void InventorBuilder::addLineSet() * lower leftmost corner. * @param pos_x,pos_y,pos_z origin of the text * @param text the text to display. - * @param color_r red part of the text color (0.0 - 1.0). - * @param color_g green part of the text color (0.0 - 1.0). - * @param color_b blue part of the text color (0.0 - 1.0). + * @param color text color. */ -void InventorBuilder::addText(float pos_x, float pos_y, float pos_z, const char * text, float color_r, float color_g, float color_b) +void InventorBuilder::addText(const Vector3f& pnt, const char * text, const ColorRGB& rgb) { result << Base::blanks(indent) << "Separator { \n" << Base::blanks(indent) << " Material { diffuseColor " - << color_r << " "<< color_g << " "<< color_b << "} \n" + << rgb.red() << " "<< rgb.green() << " "<< rgb.blue() << "} \n" << Base::blanks(indent) << " Transform { translation " - << pos_x << " "<< pos_y << " "<< pos_z << "} \n" + << pnt.x << " "<< pnt.y << " "<< pnt.z << "} \n" << Base::blanks(indent) << " Text2 { string \" " << text << "\" " << "} \n" << Base::blanks(indent) << "}\n"; } -void InventorBuilder::addText(const Vector3f &vec, const char * text, float color_r, float color_g, float color_b) -{ - addText(vec.x, vec.y , vec.z,text, color_r,color_g,color_b); -} - //************************************************************************** // line/arrow handling -void InventorBuilder::addSingleLine(const Vector3f& pt1, const Vector3f& pt2, short lineSize, - float color_r, float color_g, float color_b, unsigned short linePattern) +void InventorBuilder::addSingleLine(const Base::Line3f& line, Base::DrawStyle drawStyle, const ColorRGB& rgb) { - char lp[20]; - sprintf(lp, "0x%x", linePattern); - //char lp[20] = "0x"; - //itoa(linePattern, buf, 16); - //strcat(lp, buf); + std::string pattern = drawStyle.patternAsString(); - result << " Separator { \n" - << " Material { diffuseColor " << color_r << " "<< color_g << " "<< color_b << "} \n" - << " DrawStyle { lineWidth " << lineSize << " linePattern " << lp << " } \n" - << " Coordinate3 { \n" - << " point [ " - << pt1.x << " " << pt1.y << " " << pt1.z << "," - << pt2.x << " " << pt2.y << " " << pt2.z - << " ] \n" - << " } \n" - << " LineSet { } \n" - << " } \n"; + result << " Separator { \n" + << " Material { diffuseColor " << rgb.red() << " "<< rgb.green() << " "<< rgb.blue() << "} \n" + << " DrawStyle { lineWidth " << drawStyle.lineWidth << " linePattern " << pattern << " } \n" + << " Coordinate3 { \n" + << " point [ " + << line.p1.x << " " << line.p1.y << " " << line.p1.z << "," + << line.p2.x << " " << line.p2.y << " " << line.p2.z + << " ] \n" + << " } \n" + << " LineSet { } \n" + << " } \n"; } -void InventorBuilder::addSingleArrow(const Vector3f& pt1, const Vector3f& pt2, short lineSize, - float color_r, float color_g, float color_b, unsigned short /*linePattern*/) +void InventorBuilder::addSingleArrow(const Base::Line3f& line, Base::DrawStyle drawStyle, const ColorRGB& rgb) { - float l = (pt2 - pt1).Length(); + float l = line.Length(); float cl = l / 10.0f; float cr = cl / 2.0f; - Vector3f dir = pt2 - pt1; + Vector3f dir = line.GetDirection(); dir.Normalize(); dir.Scale(l-cl, l-cl, l-cl); - Vector3f pt2s = pt1 + dir; + Vector3f pt2s = line.p1 + dir; dir.Normalize(); dir.Scale(l-cl/2.0f, l-cl/2.0f, l-cl/2.0f); - Vector3f cpt = pt1 + dir; + Vector3f cpt = line.p1 + dir; Vector3f rot = Vector3f(0.0f, 1.0f, 0.0f) % dir; rot.Normalize(); @@ -597,12 +612,12 @@ void InventorBuilder::addSingleArrow(const Vector3f& pt1, const Vector3f& pt2, s result << Base::blanks(indent) << "Separator { \n" << Base::blanks(indent) << " Material { diffuseColor " - << color_r << " "<< color_g << " "<< color_b << "} \n" + << rgb.red() << " "<< rgb.green() << " "<< rgb.blue() << "} \n" << Base::blanks(indent) << " DrawStyle { lineWidth " - << lineSize << "} \n" + << drawStyle.lineWidth << "} \n" << Base::blanks(indent) << " Coordinate3 { \n" << Base::blanks(indent) << " point [ " - << pt1.x << " " << pt1.y << " " << pt1.z << "," + << line.p1.x << " " << line.p1.y << " " << line.p1.z << "," << pt2s.x << " " << pt2s.y << " " << pt2s.z << " ] \n" << Base::blanks(indent) << " } \n" @@ -620,45 +635,31 @@ void InventorBuilder::addSingleArrow(const Vector3f& pt1, const Vector3f& pt2, s /** Add a line defined by a list of points whereat always a pair (i.e. a point and the following point) builds a line. * The size of the list must then be even. */ -void InventorBuilder::addLineSet(const std::vector& points, short lineSize, - float color_r, float color_g, float color_b, unsigned short linePattern) +void InventorBuilder::addLineSet(const std::vector& points, DrawStyle drawStyle, const ColorRGB& rgb) { - char lp[20]; - sprintf(lp, "0x%x", linePattern); + std::string pattern = drawStyle.patternAsString(); - result << " Separator { \n" - << " Material { diffuseColor " << color_r << " "<< color_g << " "<< color_b << "} \n" - << " DrawStyle { lineWidth " << lineSize << " linePattern " << lp << " } \n" - << " Coordinate3 { \n" - << " point [ "; - std::vector::const_iterator it = points.begin(); - if ( it != points.end() ) - { - result << it->x << " " << it->y << " " << it->z; - for ( ++it ; it != points.end(); ++it ) - result << ",\n " << it->x << " " << it->y << " " << it->z; - } - - result << " ] \n" - << " } \n" - << " LineSet { \n" - << " numVertices [ "; - /*size_t ct = points.size() / 2; - if ( ct > 0 ) - { - result << "2"; - for (size_t i=1; i::const_iterator it = points.begin(); + if ( it != points.end() ) { - result << ","; - if (i%16==0) - result << "\n "; - result << "2"; + result << it->x << " " << it->y << " " << it->z; + for ( ++it ; it != points.end(); ++it ) + result << ",\n " << it->x << " " << it->y << " " << it->z; } - }*/ - result << " -1 "; - result << " ] \n" - << " } \n" - << " } \n"; + + result << " ] \n" + << " } \n" + << " LineSet { \n" + << " numVertices [ "; + result << " -1 "; + result << " ] \n" + << " } \n" + << " } \n"; } //************************************************************************** @@ -736,23 +737,21 @@ void InventorBuilder::addNormalBinding(const char* binding) << Base::blanks(indent) << "}\n"; } -void InventorBuilder::addSingleTriangle(const Vector3f& pt0, const Vector3f& pt1, const Vector3f& pt2, - bool filled, short lineSize, float color_r, float color_g, float color_b) +void InventorBuilder::addSingleTriangle(const Triangle& triangle, DrawStyle drawStyle, const ColorRGB& rgb) { std::string fs = ""; - if (filled) - { + if (drawStyle.style == DrawStyle::Style::Filled) { fs = " FaceSet { } "; } result << " Separator { \n" - << " Material { diffuseColor " << color_r << " "<< color_g << " "<< color_b << "} \n" - << " DrawStyle { lineWidth " << lineSize << "} \n" + << " Material { diffuseColor " << rgb.red() << " "<< rgb.green() << " "<< rgb.blue() << "} \n" + << " DrawStyle { lineWidth " << drawStyle.lineWidth << "} \n" << " Coordinate3 { \n" << " point [ " - << pt0.x << " " << pt0.y << " " << pt0.z << "," - << pt1.x << " " << pt1.y << " " << pt1.z << "," - << pt2.x << " " << pt2.y << " " << pt2.z + << triangle.getPoint1().x << " " << triangle.getPoint1().y << " " << triangle.getPoint1().z << "," + << triangle.getPoint2().x << " " << triangle.getPoint2().y << " " << triangle.getPoint2().z << "," + << triangle.getPoint3().x << " " << triangle.getPoint3().y << " " << triangle.getPoint3().z << "] \n" << " } \n" << " IndexedLineSet { coordIndex[ 0, 1, 2, 0, -1 ] } \n" @@ -761,22 +760,20 @@ void InventorBuilder::addSingleTriangle(const Vector3f& pt0, const Vector3f& pt1 } void InventorBuilder::addSinglePlane(const Vector3f& base, const Vector3f& eX, const Vector3f& eY, - float length, float width, bool filled, short lineSize, - float color_r, float color_g, float color_b) + float length, float width, DrawStyle drawStyle, const ColorRGB& rgb) { Vector3f pt0 = base; Vector3f pt1 = base + length * eX; Vector3f pt2 = base + length * eX + width * eY; Vector3f pt3 = base + width * eY; std::string fs = ""; - if (filled) - { + if (drawStyle.style == DrawStyle::Style::Filled) { fs = " FaceSet { } "; } result << " Separator { \n" - << " Material { diffuseColor " << color_r << " "<< color_g << " "<< color_b << "} \n" - << " DrawStyle { lineWidth " << lineSize << "} \n" + << " Material { diffuseColor " << rgb.red() << " "<< rgb.green() << " " << rgb.blue() << "} \n" + << " DrawStyle { lineWidth " << drawStyle.lineWidth << "} \n" << " Coordinate3 { \n" << " point [ " << pt0.x << " " << pt0.y << " " << pt0.z << "," @@ -861,8 +858,7 @@ void InventorBuilder::addSphere(float radius) << Base::blanks(indent) << "}\n"; } -void InventorBuilder::addBoundingBox(const Vector3f& pt1, const Vector3f& pt2, short lineWidth, - float color_r, float color_g, float color_b) +void InventorBuilder::addBoundingBox(const Vector3f& pt1, const Vector3f& pt2, DrawStyle drawStyle, const ColorRGB& rgb) { Base::Vector3f pt[8]; pt[0].Set(pt1.x, pt1.y, pt1.z); @@ -875,8 +871,8 @@ void InventorBuilder::addBoundingBox(const Vector3f& pt1, const Vector3f& pt2, s pt[7].Set(pt2.x, pt2.y, pt2.z); result << " Separator { \n" - << " Material { diffuseColor " << color_r << " "<< color_g << " "<< color_b << "} \n" - << " DrawStyle { lineWidth " << lineWidth << "} \n" + << " Material { diffuseColor " << rgb.red() << " "<< rgb.green() << " "<< rgb.blue() << "} \n" + << " DrawStyle { lineWidth " << drawStyle.lineWidth << "} \n" << " Coordinate3 { \n" << " point [ " << " " << pt[0].x << " " << pt[0].y << " " << pt[0].z << ",\n" @@ -900,23 +896,24 @@ void InventorBuilder::addBoundingBox(const Vector3f& pt1, const Vector3f& pt2, s void InventorBuilder::addTransformation(const Matrix4D& transform) { - Vector3f cAxis, cBase; - float fAngle = 0.0f, fTranslation = 0.0f; - transform.toAxisAngle(cBase, cAxis,fAngle,fTranslation); - cBase.x = static_cast(transform[0][3]); - cBase.y = static_cast(transform[1][3]); - cBase.z = static_cast(transform[2][3]); - addTransformation(cBase,cAxis,fAngle); + Base::Placement placement; + placement.fromMatrix(transform); + addTransformation(placement); } -void InventorBuilder::addTransformation(const Vector3f& translation, const Vector3f& rotationaxis, float fAngle) +void InventorBuilder::addTransformation(const Base::Placement& transform) { + Base::Vector3d translation = transform.getPosition(); + Base::Vector3d rotationaxis; + double angle{}; + transform.getRotation().getValue(rotationaxis, angle); + result << Base::blanks(indent) << "Transform {\n"; result << Base::blanks(indent) << " translation " << translation.x << " " << translation.y << " " << translation.z << '\n'; result << Base::blanks(indent) << " rotation " << rotationaxis.x << " " << rotationaxis.y << " " << rotationaxis.z - << " " << fAngle << '\n'; + << " " << angle << '\n'; result << Base::blanks(indent) << "}" << '\n'; } diff --git a/src/Base/Builder3D.h b/src/Base/Builder3D.h index c283a77852..f642d0f480 100644 --- a/src/Base/Builder3D.h +++ b/src/Base/Builder3D.h @@ -66,24 +66,6 @@ protected: } Rgb; }; -class BaseExport ColorRGBA : public ColorRGB -{ -public: - ColorRGBA() : _alpha {1.0F} { - } - explicit ColorRGBA(float red, float green, float blue, float alpha) - : ColorRGB(red, green, blue) - , _alpha {valueInRange(alpha)} { - } - ~ColorRGBA() = default; - float alpha() const { - return _alpha; - } - -private: - float _alpha; -}; - class BaseExport DrawStyle { public: @@ -94,12 +76,30 @@ public: Invisible }; + const char* styleAsString() const; + std::string patternAsString() const; Style style = Style::Filled; unsigned short pointSize = 2; unsigned short lineWidth = 2; unsigned short linePattern = 0xffff; }; +class BaseExport PolygonOffset +{ +public: + enum class Style { + Filled, + Lines, + Points + }; + + const char* styleAsString() const; + float factor = 1.0F; + float units = 1.0F; + Style style = Style::Filled; + bool on = true; +}; + class BaseExport Triangle { public: @@ -232,7 +232,7 @@ public: * This automatically opens a separator node. * \param str - stream to write the content into */ - InventorBuilder(std::ostream& str); + explicit InventorBuilder(std::ostream& str); /*! * \brief Destruction of an InventorBuilder instance */ @@ -265,19 +265,12 @@ public: //@{ /*! * \brief Sets a base color node. The colors are in the range [0, 1]. - * \param color_r - red color - * \param color_g - green color - * \param color_b - blue color */ - void addBaseColor(float color_r,float color_g,float color_b); + void addBaseColor(const ColorRGB& rgb); /*! * \brief Sets a material node. The colors are in the range [0, 1]. - * \param color_r - red color - * \param color_g - green color - * \param color_b - blue color - * \param color_a - transparency */ - void addMaterial(float color_r,float color_g,float color_b,float color_a=0); + void addMaterial(const ColorRGB& rgb, float transparency=0); /*! * \brief Starts a material node. The node must be closed with \ref endMaterial * and the colors must be added with \ref addColor(). @@ -289,11 +282,8 @@ public: void endMaterial(); /*! * \brief Adds a color to a material node. The colors are in the range [0, 1]. - * \param color_r - red color - * \param color_g - green color - * \param color_b - blue color */ - void addColor(float color_r,float color_g,float color_b); + void addColor(const ColorRGB& rgb); /*! * \brief Sets a material binding node. * \param binding - binding of the material. Allowed values are: @@ -303,36 +293,25 @@ public: void addMaterialBinding(const char* binding = "OVERALL"); /*! * \brief Sets a draw style node. - * \param pointSize - the point size - * \param lineWidth - the line width - * \param linePattern - the line pattern - * \param style - the draw style */ - void addDrawStyle(short pointSize, short lineWidth, - unsigned short linePattern = 0xffff, const char* style="FILLED"); + void addDrawStyle(DrawStyle drawStyle); /*! * \brief Sets a shape hints node. * \param crease - the crease angle in radians */ - void addShapeHints(float crease=0.0f); + void addShapeHints(float creaseAngle=0.0f); /*! * \brief Sets a polygon offset node. - * \param factor - Offset multiplication factor. - * \param units - Offset translation multiplication factor. - * \param styles - Can be FILLED, LINES or POINTS. - * \param on - Whether the offset is on or off. */ - void addPolygonOffset(float factor=1.0f, float units=1.0f, const char* styles="FILLED", bool on=true); + void addPolygonOffset(PolygonOffset polygonOffset); //@} /** @name Add coordinates */ //@{ /// add a single point - void addPoint(float x, float y, float z); - /// add a single point - void addPoint(const Vector3f &vec); + void addPoint(const Vector3f& pnt); /// add a list of points - void addPoints(const std::vector &vec); + void addPoints(const std::vector& points); //@} /** @name Point set handling */ @@ -357,15 +336,12 @@ public: /** @name Line/Direction handling */ //@{ - /// add a line defined by 2 Vector3D - void addSingleLine(const Vector3f& pt1, const Vector3f& pt2, short lineSize=2, - float color_r=1.0,float color_g=1.0,float color_b=1.0, unsigned short linePattern = 0xffff); - /// add a arrow (directed line) by 2 Vector3D. The arrow shows in direction of point 2. - void addSingleArrow(const Vector3f& pt1, const Vector3f& pt2, short lineSize=2, - float color_r=1.0,float color_g=1.0,float color_b=1.0, unsigned short linePattern = 0xffff); + /// add a line + void addSingleLine(const Base::Line3f& line, DrawStyle drawStyle, const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); + /// add a arrow + void addSingleArrow(const Base::Line3f& line, DrawStyle drawStyle, const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); /// add a line defined by a list of points whereat always a pair (i.e. a point and the following point) builds a line. - void addLineSet(const std::vector& points, short lineSize=2, - float color_r=1.0,float color_g=1.0,float color_b=1.0, unsigned short linePattern = 0xffff); + void addLineSet(const std::vector& points, DrawStyle drawStyle, const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); /// add an SoLineSet node void addLineSet(); //@} @@ -373,10 +349,9 @@ public: /** @name Triangle handling */ //@{ /// add a (filled) triangle defined by 3 vectors - void addSingleTriangle(const Vector3f& pt0, const Vector3f& pt1, const Vector3f& pt2, bool filled = true, short lineSize=2, - float color_r=1.0,float color_g=1.0,float color_b=1.0); - void addSinglePlane(const Vector3f& base, const Vector3f& eX, const Vector3f& eY, float length, float width, bool filled = true, - short lineSize=2, float color_r=1.0,float color_g=1.0,float color_b=1.0); + void addSingleTriangle(const Triangle& triangle, DrawStyle drawStyle, const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); + void addSinglePlane(const Vector3f& base, const Vector3f& eX, const Vector3f& eY, float length, float width, DrawStyle drawStyle, + const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); void addIndexedFaceSet(const std::vector& indices); void addFaceSet(const std::vector& vertices); //@} @@ -392,24 +367,21 @@ public: /** @name Bounding Box handling */ //@{ - void addBoundingBox(const Vector3f& pt1, const Vector3f& pt2, short lineWidth=2, - float color_r=1.0,float color_g=1.0,float color_b=1.0); + void addBoundingBox(const Vector3f& pt1, const Vector3f& pt2, DrawStyle drawStyle, + const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); //@} /** @name Transformation */ //@{ /// adds a transformation void addTransformation(const Matrix4D&); - void addTransformation(const Vector3f& translation, const Vector3f& rotationaxis, float fAngle); + void addTransformation(const Base::Placement&); //@} /** @name Text handling */ //@{ /// add a text - void addText(float pos_x, float pos_y , float pos_z,const char * text, - float color_r=1.0,float color_g=1.0,float color_b=1.0); - /// add a text - void addText(const Vector3f &vec,const char * text, float color_r=1.0,float color_g=1.0,float color_b=1.0); + void addText(const Vector3f &vec,const char * text, const ColorRGB& rgb = ColorRGB{1.0F, 1.0F, 1.0F}); //@} private: diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index a629056fd2..48a1b20fad 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -1172,15 +1172,15 @@ void MeshObject::trimByPlane(const Base::Vector3f& base, const Base::Vector3f& n // Apply the inverted mesh placement to the plane because the trimming is done // on the untransformed mesh data - Base::Vector3f baseL, normalL; + Base::Vector3f basePlane, normalPlane; Base::Placement meshPlacement = getPlacement(); meshPlacement.invert(); - meshPlacement.multVec(base, baseL); - meshPlacement.getRotation().multVec(normal, normalL); + meshPlacement.multVec(base, basePlane); + meshPlacement.getRotation().multVec(normal, normalPlane); MeshCore::MeshFacetGrid meshGrid(this->_kernel); - trim.CheckFacets(meshGrid, baseL, normalL, trimFacets, removeFacets); - trim.TrimFacets(trimFacets, baseL, normalL, triangle); + trim.CheckFacets(meshGrid, basePlane, normalPlane, trimFacets, removeFacets); + trim.TrimFacets(trimFacets, basePlane, normalPlane, triangle); if (!removeFacets.empty()) this->deleteFacets(removeFacets); if (!triangle.empty()) diff --git a/src/Mod/MeshPart/App/MeshAlgos.cpp b/src/Mod/MeshPart/App/MeshAlgos.cpp index 4c5194be30..88dd7aaf25 100644 --- a/src/Mod/MeshPart/App/MeshAlgos.cpp +++ b/src/Mod/MeshPart/App/MeshAlgos.cpp @@ -273,8 +273,8 @@ MeshCore::MeshKernel* MeshAlgos::boolean(MeshCore::MeshKernel* pMesh1, self_intersects = gts_surface_is_self_intersecting (s3); if (self_intersects != NULL) { // if (verbose) -// gts_surface_print_stats (self_intersects, stderr); - // gts_surface_write (self_intersects, stdout); +// gts_surface_print_stats (self_intersects, stderr); +// gts_surface_write (self_intersects, stdout); gts_object_destroy (GTS_OBJECT (self_intersects)); gts_object_destroy (GTS_OBJECT (s1)); gts_object_destroy (GTS_OBJECT (s2)); @@ -350,7 +350,7 @@ GtsSurface* MeshAlgos::createGTSSurface(MeshCore::MeshKernel* Mesh) // creating the edges and add the face to the surface gts_surface_add_face (Surf, - gts_face_new (Surf->face_class, + gts_face_new (Surf->face_class, new_edge (aVertex[p1],aVertex[p2]), new_edge (aVertex[p2],aVertex[p3]), new_edge (aVertex[p3],aVertex[p1]))); diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index f327a59dff..a21cd40c55 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1091,7 +1091,7 @@ void TopoShape::exportFaceSet(double dev, double ca, builder.addShapeHints((float)ca); if (supportFaceColors) { App::Color c = colors[index]; - builder.addMaterial(c.r, c.g, c.b, c.a); + builder.addMaterial(Base::ColorRGB{c.r, c.g, c.b}, c.a); } builder.beginPoints(); @@ -1133,7 +1133,9 @@ void TopoShape::exportLineSet(std::ostream& str) const vertices.push_back(Base::convertTo(p)); }); - builder.addLineSet(vertices, 2, 0, 0, 0); + Base::DrawStyle drawStyle; + drawStyle.lineWidth = 2.0F; + builder.addLineSet(vertices, drawStyle, Base::ColorRGB{0, 0, 0}); } } diff --git a/src/Mod/Points/App/PointsPyImp.cpp b/src/Mod/Points/App/PointsPyImp.cpp index b8ae561a70..f5380d6f8d 100644 --- a/src/Mod/Points/App/PointsPyImp.cpp +++ b/src/Mod/Points/App/PointsPyImp.cpp @@ -25,6 +25,7 @@ #include "Mod/Points/App/Points.h" #include +#include #include #include #include @@ -126,7 +127,7 @@ PyObject* PointsPy::writeInventor(PyObject * args) builder.beginPoints(); PointKernel* kernel = getPointKernelPtr(); for (Points::PointKernel::const_iterator it = kernel->begin(); it != kernel->end(); ++it) - builder.addPoint((float)it->x,(float)it->y,(float)it->z); + builder.addPoint(Base::convertTo(*it)); builder.endPoints(); builder.addPointSet(); builder.close();