X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelGeomAlgo%2FModelGeomAlgo_Point2D.h;h=471c973b8100fbd0a8e70ac45684008a7fdfd8d7;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=be1521bdc460313c56fb54362784d1b42d7d7099;hpb=59d8f084644a30cab1ce8aa90cf4555d59a64c0a;p=modules%2Fshaper.git diff --git a/src/ModelGeomAlgo/ModelGeomAlgo_Point2D.h b/src/ModelGeomAlgo/ModelGeomAlgo_Point2D.h old mode 100755 new mode 100644 index be1521bdc..471c973b8 --- a/src/ModelGeomAlgo/ModelGeomAlgo_Point2D.h +++ b/src/ModelGeomAlgo/ModelGeomAlgo_Point2D.h @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: ModelGeomAlgo_Point2D.h -// Created: 20 Jul 2016 -// Author: Natalia ERMOLAEVA +// Copyright (C) 2014-2023 CEA/DEN, EDF R&D +// +// This library 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. +// +// This library 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 this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifndef ModelGeomAlgo_Point2D_H #define ModelGeomAlgo_Point2D_H @@ -21,10 +34,12 @@ class GeomDataAPI_Point2D; #include #include #include +#include -namespace ModelGeomAlgo_Point2D { - +class ModelGeomAlgo_Point2D +{ +public: /// Searches Point2D attribute of reference of the attribute of given feature /// \param theFeature a feature to obtain AttributeRefAttr /// \param theAttribute a name of AttributeRefAttr on the given feature @@ -32,7 +47,7 @@ namespace ModelGeomAlgo_Point2D { /// \param theObjectFeatureAttribute a feature attribute in object that satisfies the search /// \param isSkipFeatureAttributes a boolean value if coincidences to the feature attributes /// \returns found point attribute or NULL - MODELGEOMALGO_EXPORT std::shared_ptr getPointOfRefAttr( + static MODELGEOMALGO_EXPORT std::shared_ptr getPointOfRefAttr( ModelAPI_Feature* theFeature, const std::string& theAttribute, const std::string& theObjectFeatureKind = "", @@ -41,19 +56,39 @@ namespace ModelGeomAlgo_Point2D { /// Fills container of point 2D attributes, which refer to the feature through the references /// features with the given kind /// \param theObject an object where references should be searched (e.g. a sketch line or result) - /// \param theReferenceFeatureKind a kind of the feature to be processed (e.g. coincidence constraint) + /// \param theReferenceFeatureKind a kind of the feature to be processed + /// (e.g. coincidence constraint) /// \param theAttributes a container of found point 2D attributes /// \param theObjectFeatureKind a feature kind in object of attribute that satisfies the search /// \param theObjectFeatureAttribute a feature attribute in object that satisfies the search /// \param isSkipFeatureAttributes a boolean value if coincidences to the feature attributes /// should be skipped /// \returns found point attribute or NULL - MODELGEOMALGO_EXPORT void getPointsOfReference(const std::shared_ptr& theObject, - const std::string& theReferenceFeatureKind, - std::set >& theAttributes, - const std::string& theObjectFeatureKind = "", - const std::string& theObjectFeatureAttribute = "", - const bool isSkipFeatureAttributes = true); + static MODELGEOMALGO_EXPORT + void getPointsOfReference(const std::shared_ptr& theObject, + const std::string& theReferenceFeatureKind, + std::set >& theAttributes, + const std::string& theObjectFeatureKind = "", + const std::string& theObjectFeatureAttribute = "", + const bool isSkipFeatureAttributes = true); + + /// Find points of intersection between the shape of the feature and all features in the sketch + /// \param theBaseFeature a feature: line, arc or circle that will be intersected + /// \param theFeatures a container of features to intersect with the base feature + /// \param thePoints a container of 3D points belong to the shape + /// \param theObjectToPoint a container of object to point + typedef std::map, + std::pair >, + std::list > > > PointToRefsMap; + + static MODELGEOMALGO_EXPORT void getPointsIntersectedShape( + const std::shared_ptr& theBaseFeature, + const std::list >& theFeatures, + PointToRefsMap& thePointToAttributeOrObject); + + static MODELGEOMALGO_EXPORT std::list > getSetOfPntIntersectedShape( + const std::shared_ptr& theBaseFeature, + const std::list >& theFeatures); /// Removes attributes which points are out of the base shape /// \param theBaseShape a shape of check @@ -62,21 +97,65 @@ namespace ModelGeomAlgo_Point2D { /// \param theDirX plane X direction to generate 3D point by 2D attribute point /// \param theDirY plane X direction to generate 3D point by 2D attribute point /// \param thePoints a container of 3D points belong to the shape - MODELGEOMALGO_EXPORT void getPointsInsideShape( + /// \param theAttributeToPoint a container of attribute to point + static MODELGEOMALGO_EXPORT void getPointsInsideShape( + const std::shared_ptr theBaseShape, + const std::set >& theAttributes, + const std::shared_ptr& theOrigin, + const std::shared_ptr& theDirX, + const std::shared_ptr& theDirY, + PointToRefsMap& thePointToAttributeOrObject); + + /// Removes attributes which points are out of the base shape + /// \param theBaseShape a shape of check + /// \param theAttributes a container of point 2D attributes + /// \param theOrigin origin of a plane to generate 3D point by 2D attribute point + /// \param theDirX plane X direction to generate 3D point by 2D attribute point + /// \param theDirY plane X direction to generate 3D point by 2D attribute point + /// \param thePoints a container of 3D points belong to the shape + /// \param theAttributeToPoint a container of attribute to point + static MODELGEOMALGO_EXPORT void getPointsInsideShape_p( const std::shared_ptr theBaseShape, const std::set >& theAttributes, const std::shared_ptr& theOrigin, const std::shared_ptr& theDirX, const std::shared_ptr& theDirY, - std::set >& thePoints); - + std::list >& thePoints, + std::map, + std::shared_ptr >& theAttributeToPoint); /// Finds projected point to the given shape line /// \param theBaseShape a shape of check /// \param thePoint [in] a point to project /// \param theProjectedPoint [out] a projected point - MODELGEOMALGO_EXPORT bool isPointOnEdge(const std::shared_ptr theBaseShape, + static MODELGEOMALGO_EXPORT bool isPointOnEdge(const std::shared_ptr theBaseShape, + const std::shared_ptr& thePoint, + std::shared_ptr& theProjectedPoint); + + /// Finds projected point to the given shape, which does not placed on the shape boundaries + /// \param theBaseShape a shape of check + /// \param thePoint [in] a point to project + /// \param theProjectedPoint [out] a projected point + static MODELGEOMALGO_EXPORT bool isInnerPointOnEdge( + const std::shared_ptr theBaseShape, const std::shared_ptr& thePoint, std::shared_ptr& theProjectedPoint); -} + +#ifdef _DEBUG + /// Return feature name, kind and point values united in a string info + /// \param theFeature an investigated feature + /// \param theAttributesOnly a container of necessary attributes, if empty, all + /// \return string value + static MODELGEOMALGO_EXPORT std::string getPontAttributesInfo( + const std::shared_ptr& theFeature, + const std::set >& theAttributesOnly); + + /// Return point attribute string info + /// \param theAttribute an investigated attribute + /// \return string value + static MODELGEOMALGO_EXPORT std::string getPointAttributeInfo( + const std::shared_ptr& theAttribute); + +#endif +}; #endif