]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Validator for Pipe path selection which disables local selection of wires.
authordbv <dbv@opencascade.com>
Thu, 26 May 2016 15:16:08 +0000 (18:16 +0300)
committerdbv <dbv@opencascade.com>
Thu, 26 May 2016 15:16:08 +0000 (18:16 +0300)
src/FeaturesPlugin/FeaturesPlugin_Plugin.cpp
src/FeaturesPlugin/FeaturesPlugin_Validators.cpp
src/FeaturesPlugin/FeaturesPlugin_Validators.h
src/FeaturesPlugin/pipe_widget.xml

index d6fa48f3df31ef8bae8d151c5d7fda26f9eb3098..d42ede130fe27114837435ce2cd1bad0f8f3148c 100644 (file)
@@ -53,6 +53,8 @@ FeaturesPlugin_Plugin::FeaturesPlugin_Plugin()
                               new FeaturesPlugin_ValidatorRemoveSubShapesSelection);
   aFactory->registerValidator("FeaturesPlugin_ValidatorRemoveSubShapesResult",
                               new FeaturesPlugin_ValidatorRemoveSubShapesResult);
+  aFactory->registerValidator("FeaturesPlugin_ValidatorPipePath",
+                              new FeaturesPlugin_ValidatorPipePath);
 
   // register this plugin
   ModelAPI_Session::get()->registerPlugin(this);
index 1aee44fa68788d46be42a28fcb2167656b53af4f..7cf005d96cc3cfb2aa1b9c88d5dea37b4ab9ac3a 100644 (file)
 #include <GeomAlgoAPI_ShapeTools.h>
 #include <GeomAlgoAPI_WireBuilder.h>
 
+//==================================================================================================
+bool FeaturesPlugin_ValidatorPipePath::isValid(const AttributePtr& theAttribute,
+                                               const std::list<std::string>& theArguments,
+                                               std::string& theError) const
+{
+  AttributeSelectionPtr aPathAttrSelection = std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(theAttribute);
+  if(!aPathAttrSelection.get()) {
+    theError = "Error: This validator can only work with path selector in \"Pipe\" feature.";
+    return false;
+  }
+
+  GeomShapePtr aPathShape = aPathAttrSelection->value();
+  ResultPtr aContext = aPathAttrSelection->context();
+  if(!aContext.get()) {
+    theError = "Error: Empty context.";
+    return false;
+  }
+  GeomShapePtr aContextShape = aContext->shape();
+  if(aPathShape.get() && aPathShape->shapeType() == GeomAPI_Shape::WIRE && !aPathShape->isEqual(aContextShape)) {
+    theError = "Error: Local selection of wires not allowed.";
+    return false;
+  }
+
+  return true;
+}
+
 //==================================================================================================
 bool FeaturesPlugin_ValidatorPipeLocations::isValid(const std::shared_ptr<ModelAPI_Feature>& theFeature,
                                                     const std::list<std::string>& theArguments,
index fb05c2ab3e93af478eddb2b9b9432f860fc34c7d..da6180e58a7357b8fb4f176e10d5a707dc683b25 100644 (file)
 #include <ModelAPI_AttributeValidator.h>
 #include <ModelAPI_FeatureValidator.h>
 
+/// \class FeaturesPlugin_ValidatorPipePath
+/// \ingroup Validators
+/// \brief A validator for selection pipe path.
+class FeaturesPlugin_ValidatorPipePath: public ModelAPI_AttributeValidator
+{
+public:
+  //! \return True if the attribute is valid.
+  //! \param[in] theAttribute the checked attribute.
+  //! \param[in] theArguments arguments of the attribute.
+  //! \param[out] theError error message.
+   virtual bool isValid(const AttributePtr& theAttribute,
+                        const std::list<std::string>& theArguments,
+                        std::string& theError) const;
+};
+
 /// \class FeaturesPlugin_ValidatorPipeLocations
 /// \ingroup Validators
 /// \brief Validator for the pipe locations.
@@ -35,7 +50,7 @@ class FeaturesPlugin_ValidatorPipeLocations: public ModelAPI_FeatureValidator
 class FeaturesPlugin_ValidatorBaseForGeneration: public ModelAPI_AttributeValidator
 {
 public:
-  //! Returns true if attribute has selection type listed in the parameter arguments.
+  //! \return true if attribute has selection type listed in the parameter arguments.
   //! \param[in] theAttribute the checked attribute.
   //! \param[in] theArguments arguments of the attribute.
   //! \param[out] theError error message.
@@ -55,7 +70,7 @@ private:
 class FeaturesPlugin_ValidatorCompositeLauncher: public ModelAPI_AttributeValidator
 {
 public:
-  //! Returns true if attribute has selection type listed in the parameter arguments.
+  //! \return true if attribute has selection type listed in the parameter arguments.
   //! \param[in] theAttribute the checked attribute.
   //! \param[in] theArguments arguments of the attribute.
   //! \param[out] theError error message.
@@ -71,7 +86,7 @@ public:
 class FeaturesPlugin_ValidatorCanBeEmpty: public ModelAPI_FeatureValidator
 {
 public:
-  //! Returns true if attribute listed in the parameter arguments are planar.
+  //! \return true if attribute listed in the parameter arguments are planar.
   //! \param[in] theFeature the checked feature.
   //! \param[in] theArguments arguments of the attribute.
   //! \param[out] theError error message.
@@ -79,7 +94,7 @@ public:
                        const std::list<std::string>& theArguments,
                        std::string& theError) const;
 
-  /// Returns true if the attribute in feature is not obligatory for the feature execution
+  /// \return true if the attribute in feature is not obligatory for the feature execution
   virtual bool isNotObligatory(std::string theFeature, std::string theAttribute);
 
 private:
@@ -149,7 +164,7 @@ class FeaturesPlugin_ValidatorRemoveSubShapesResult: public ModelAPI_FeatureVali
                        const std::list<std::string>& theArguments,
                        std::string& theError) const;
 
-  /// Returns true if the attribute in feature is not obligatory for the feature execution
+  /// \return true if the attribute in feature is not obligatory for the feature execution
   virtual bool isNotObligatory(std::string theFeature, std::string theAttribute);
 };
 
index 591b9e420a0fa615dfa6e26a10b392225f374956..def2fd264a6fd0967a3272bc8be7c6b0746b6a05 100644 (file)
@@ -13,6 +13,7 @@
                   label="Path object:"
                   tooltip="Select an edge or wire for path"
                   shape_types="edge wire">
+    <validator id="FeaturesPlugin_ValidatorPipePath"/>
   </shape_selector>
   <toolbox id="creation_method">
     <box id="simple" title="Simple pipe by objects and path" icon="icons/Features/pipe_simple_32x32.png"/>