diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index ac74cbe8cb..0b2d57427d 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -1179,7 +1179,6 @@ SET(Inventor_SRCS Inventor/Draggers/SoRotationDragger.h Inventor/Draggers/SoRotationDraggerGeometry.h Inventor/Draggers/Gizmo.h - Inventor/Draggers/GizmoHelper.h Inventor/Draggers/GizmoStyleParameters.h SoFCColorBar.h SoFCColorBarNotifier.h diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index 02a0b582d9..404dfc9d9b 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -556,6 +556,8 @@ SET(Part_SRCS Geometry.h Geometry2d.cpp Geometry2d.h + GizmoHelper.cpp + GizmoHelper.h ImportIges.cpp ImportIges.h ImportStep.cpp diff --git a/src/Gui/Inventor/Draggers/GizmoHelper.h b/src/Mod/Part/App/GizmoHelper.cpp similarity index 75% rename from src/Gui/Inventor/Draggers/GizmoHelper.h rename to src/Mod/Part/App/GizmoHelper.cpp index bb77c03d17..fc3a068073 100644 --- a/src/Gui/Inventor/Draggers/GizmoHelper.h +++ b/src/Mod/Part/App/GizmoHelper.cpp @@ -21,8 +21,7 @@ * * ***************************************************************************/ -#ifndef GIZMO_HELPER_H -#define GIZMO_HELPER_H +#include "GizmoHelper.h" #include @@ -39,19 +38,10 @@ #include #include -#include -#include #include -#include -#include -struct GuiExport EdgeMidPointProps -{ - Base::Vector3d position; - Base::Vector3d tangent; - double middle; -}; -inline EdgeMidPointProps getEdgeMidPointProps(Part::TopoShape& edge) + +EdgeMidPointProps getEdgeMidPointProps(Part::TopoShape& edge) { std::unique_ptr geom = Part::Geometry::fromShape(edge.getShape()); auto curve = freecad_cast(geom.get()); @@ -66,37 +56,41 @@ inline EdgeMidPointProps getEdgeMidPointProps(Part::TopoShape& edge) return {position, tangent, middle}; } - Base::Console().error("Failed to calculate tangent for the draggers! Please file a bug report for this."); - return {position, Base::Vector3d{0, 0, 0}, middle}; + Base::Console().error( + "Failed to calculate tangent for the draggers! Please file a bug report for this."); + return {position, Base::Vector3d {0, 0, 0}, middle}; } -inline Base::Vector3d getCentreOfMassFromFace(TopoDS_Face& face) +Base::Vector3d getCentreOfMassFromFace(TopoDS_Face& face) { GProp_GProps massProps; BRepGProp::SurfaceProperties(face, massProps); return Base::convertTo(massProps.CentreOfMass()); } -inline std::optional> +std::optional> getFaceNormalFromPointNearEdge(Part::TopoShape& edge, double middle, TopoDS_Face& face) { auto _edge = TopoDS::Edge(edge.getShape()); - + gp_Pnt _inwardPoint; gp_Dir _normal; Handle(IntTools_Context) context = new IntTools_Context; - if (!BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(_edge, face, middle, _inwardPoint, _normal, context)) { + if (!BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(_edge, + face, + middle, + _inwardPoint, + _normal, + context)) { return std::nullopt; } - return {{ - Base::convertTo(_inwardPoint), - Base::convertTo(_normal) - }}; + return { + {Base::convertTo(_inwardPoint), Base::convertTo(_normal)}}; } -inline Base::Vector3d getFaceNormalFromPoint(Base::Vector3d& point, TopoDS_Face& face) +Base::Vector3d getFaceNormalFromPoint(Base::Vector3d& point, TopoDS_Face& face) { Handle(Geom_Surface) surf = BRep_Tool::Surface(face); auto pt = Base::convertTo(point); @@ -109,14 +103,18 @@ inline Base::Vector3d getFaceNormalFromPoint(Base::Vector3d& point, TopoDS_Face& return Base::convertTo(props.Normal()); } -inline std::pair getAdjacentFacesFromEdge(Part::TopoShape& edge, Part::TopoShape& baseShape) +std::pair getAdjacentFacesFromEdge( + Part::TopoShape& edge, + Part::TopoShape& baseShape +) { TopTools_IndexedDataMapOfShapeListOfShape edgeToFaceMap; TopExp::MapShapesAndAncestors(baseShape.getShape(), TopAbs_EDGE, TopAbs_FACE, edgeToFaceMap); const TopTools_ListOfShape& faces = edgeToFaceMap.FindFromKey(edge.getShape()); - assert(faces.Extent() >= 2 && "This is probably a bug so please report it to the issue tracker"); + assert(faces.Extent() >= 2 + && "This is probably a bug so please report it to the issue tracker"); TopoDS_Face face1 = TopoDS::Face(faces.First()); TopoDS_Face face2 = TopoDS::Face(*(++faces.begin())); @@ -124,13 +122,7 @@ inline std::pair getAdjacentFacesFromEdge(Part::TopoSh return {face1, face2}; } -struct GuiExport DraggerPlacementProps -{ - Base::Vector3d position; - Base::Vector3d dir; - Base::Vector3d tangent; -}; -inline DraggerPlacementProps getDraggerPlacementFromEdgeAndFace(Part::TopoShape& edge, TopoDS_Face& face) +DraggerPlacementProps getDraggerPlacementFromEdgeAndFace(Part::TopoShape& edge, TopoDS_Face& face) { auto [position, tangent, middle] = getEdgeMidPointProps(edge); @@ -139,7 +131,8 @@ inline DraggerPlacementProps getDraggerPlacementFromEdgeAndFace(Part::TopoShape& if (auto ret = getFaceNormalFromPointNearEdge(edge, middle, face)) { inwardPoint = ret->first; normal = ret->second; - } else { + } + else { // Failed to compute the normal at a point on the face near the edge // Fallback to the COM and hope for the best inwardPoint = getCentreOfMassFromFace(face); @@ -157,13 +150,16 @@ inline DraggerPlacementProps getDraggerPlacementFromEdgeAndFace(Part::TopoShape& return {position, dir, tangent}; } -inline DraggerPlacementProps getDraggerPlacementFromEdgeAndFace(Part::TopoShape& edge, Part::TopoShape& face) +DraggerPlacementProps getDraggerPlacementFromEdgeAndFace( + Part::TopoShape& edge, + Part::TopoShape& face +) { TopoDS_Face _face = TopoDS::Face(face.getShape()); return getDraggerPlacementFromEdgeAndFace(edge, _face); } -inline std::vector getAdjacentEdgesFromFace(Part::TopoShape& face) +std::vector getAdjacentEdgesFromFace(Part::TopoShape& face) { assert(face.getShape().ShapeType() == TopAbs_FACE); @@ -175,13 +171,13 @@ inline std::vector getAdjacentEdgesFromFace(Part::TopoShape& fa return edges; } -inline Base::Vector3d getMidPointFromFace(Part::TopoShape& face) +Base::Vector3d getMidPointFromFace(Part::TopoShape& face) { TopoDS_Shape shape = face.getShape(); assert(shape.ShapeType() == TopAbs_FACE); std::unique_ptr geom = Part::Geometry::fromShape(shape); - Part::GeomSurface* surface = freecad_cast(geom.get()); + auto* surface = freecad_cast(geom.get()); TopoDS_Face _face = TopoDS::Face(shape); BRepAdaptor_Surface adaptorSurface = BRepAdaptor_Surface(_face, true); @@ -198,20 +194,24 @@ inline Base::Vector3d getMidPointFromFace(Part::TopoShape& face) if (auto sphere = freecad_cast(geom.get())) { midPoint = sphere->getLocation(); - } else if (auto cone = freecad_cast(geom.get())) { + } + else if (auto cone = freecad_cast(geom.get())) { midPoint = cone->getApex(); - } else if (auto point = surface->point(midU, midV)) { + } + else if (auto point = surface->point(midU, midV)) { midPoint = *point; - } else if (auto com = face.centerOfGravity()) { + } + else if (auto com = face.centerOfGravity()) { midPoint = *com; - } else { + } + else { midPoint = face.getBoundBox().GetCenter(); } return midPoint; } -inline Base::Vector3d getMidPointFromProfile(Part::TopoShape& profile) +Base::Vector3d getMidPointFromProfile(Part::TopoShape& profile) { TopoDS_Shape shape = profile.getShape(); @@ -225,5 +225,3 @@ inline Base::Vector3d getMidPointFromProfile(Part::TopoShape& profile) return midPoint; } - -#endif /* GIZMO_HELPER_H */ diff --git a/src/Mod/Part/App/GizmoHelper.h b/src/Mod/Part/App/GizmoHelper.h new file mode 100644 index 0000000000..1d920f0bc4 --- /dev/null +++ b/src/Mod/Part/App/GizmoHelper.h @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Sayantan Deb * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + ***************************************************************************/ + +#ifndef GIZMO_HELPER_H +#define GIZMO_HELPER_H + +#include +#include +#include + + +struct PartExport EdgeMidPointProps +{ + Base::Vector3d position; + Base::Vector3d tangent; + double middle; +}; +EdgeMidPointProps PartExport getEdgeMidPointProps(Part::TopoShape& edge); + +Base::Vector3d PartExport getCentreOfMassFromFace(TopoDS_Face& face); + +std::optional> +PartExport getFaceNormalFromPointNearEdge(Part::TopoShape& edge, double middle, TopoDS_Face& face); + +Base::Vector3d PartExport getFaceNormalFromPoint(Base::Vector3d& point, TopoDS_Face& face); + +std::pair PartExport getAdjacentFacesFromEdge(Part::TopoShape& edge, + Part::TopoShape& baseShape); + +struct PartExport DraggerPlacementProps +{ + Base::Vector3d position; + Base::Vector3d dir; + Base::Vector3d tangent; +}; +DraggerPlacementProps PartExport getDraggerPlacementFromEdgeAndFace(Part::TopoShape& edge, TopoDS_Face& face); + +DraggerPlacementProps PartExport getDraggerPlacementFromEdgeAndFace(Part::TopoShape& edge, + Part::TopoShape& face); + +std::vector PartExport getAdjacentEdgesFromFace(Part::TopoShape& face); + +Base::Vector3d PartExport getMidPointFromFace(Part::TopoShape& face); + +Base::Vector3d PartExport getMidPointFromProfile(Part::TopoShape& profile); + +#endif /* GIZMO_HELPER_H */ diff --git a/src/Mod/Part/Gui/TaskThickness.cpp b/src/Mod/Part/Gui/TaskThickness.cpp index 24c7c9fb9a..f9aeb683ea 100644 --- a/src/Mod/Part/Gui/TaskThickness.cpp +++ b/src/Mod/Part/Gui/TaskThickness.cpp @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include "TaskThickness.h" diff --git a/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp b/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp index ed8075f461..4bce984c71 100644 --- a/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp @@ -31,12 +31,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include diff --git a/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp b/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp index a619e8ff6a..74c396cd0c 100644 --- a/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp @@ -36,9 +36,9 @@ #include #include #include -#include #include #include +#include #include "ui_TaskDraftParameters.h" #include "TaskDraftParameters.h" diff --git a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp index 9546be0c14..ad68b7471f 100644 --- a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp @@ -30,10 +30,10 @@ #include #include #include -#include #include #include #include +#include #include "ui_TaskPadPocketParameters.h" #include "TaskExtrudeParameters.h" diff --git a/src/Mod/PartDesign/Gui/TaskFilletParameters.cpp b/src/Mod/PartDesign/Gui/TaskFilletParameters.cpp index 0fd374feb6..a3d56aedb9 100644 --- a/src/Mod/PartDesign/Gui/TaskFilletParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskFilletParameters.cpp @@ -31,13 +31,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include #include "ui_TaskFilletParameters.h" #include "TaskFilletParameters.h" diff --git a/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp b/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp index 3ea5853154..e3e8c2aa47 100644 --- a/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp @@ -35,10 +35,10 @@ #include #include #include -#include #include #include #include +#include #include "ReferenceSelection.h" #include "ui_TaskHelixParameters.h" diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp index bdb1b32026..dd71ab3cee 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp @@ -21,21 +21,24 @@ ***************************************************************************/ +#include #include +#include #include +#include #include #include #include #include #include #include -#include -#include "Gui/Inventor/Draggers/SoLinearDragger.h" #include #include #include #include +#include +#include #include "ui_TaskHoleParameters.h" #include "TaskHoleParameters.h" diff --git a/src/Mod/PartDesign/Gui/TaskThicknessParameters.cpp b/src/Mod/PartDesign/Gui/TaskThicknessParameters.cpp index ea79c95d9f..9ab7dec603 100644 --- a/src/Mod/PartDesign/Gui/TaskThicknessParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskThicknessParameters.cpp @@ -33,8 +33,8 @@ #include #include #include -#include #include +#include #include "ui_TaskThicknessParameters.h" #include "TaskThicknessParameters.h"