]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Validators correction for merge branch 'Dev_1.1.0' of newgeom:newgeom.git into Dev_1.1.0
authornds <natalia.donis@opencascade.com>
Fri, 27 Mar 2015 07:27:47 +0000 (10:27 +0300)
committernds <natalia.donis@opencascade.com>
Fri, 27 Mar 2015 07:27:47 +0000 (10:27 +0300)
src/GeomValidators/GeomValidators_Tools.cpp
src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp
src/PartSet/PartSet_Validators.cpp
src/PartSet/PartSet_Validators.h
src/PartSet/PartSet_WidgetShapeSelector.cpp
src/SketchPlugin/SketchPlugin_Validators.cpp
src/SketchPlugin/plugin-Sketch.xml

index 898296961797985cb3289a1a3bb066020a559a0b..9a78b5016b657e7ba80ff19dd66cab3f53c15b23 100644 (file)
@@ -23,12 +23,12 @@ namespace GeomValidators_Tools {
     }
     if (anAttrType == ModelAPI_AttributeSelection::typeId()) {
       AttributeSelectionPtr anAttr = std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(theAttribute);
-      if (anAttr != NULL && anAttr->isInitialized())
+      if (anAttr != NULL)
         anObject = anAttr->context();
     }
     if (anAttrType == ModelAPI_AttributeReference::typeId()) {
       AttributeReferencePtr anAttr = std::dynamic_pointer_cast<ModelAPI_AttributeReference>(theAttribute);
-      if (anAttr.get() != NULL && anAttr->isInitialized())
+      if (anAttr.get() != NULL)
         anObject = anAttr->value();
     }
     return anObject;
index c0e4faacff2ee5aa7af6fc1c1af5024f157dd20d..ef46fa06220feb56ad5b131594aab1b1d19ae299 100644 (file)
@@ -423,15 +423,6 @@ bool ModuleBase_WidgetShapeSelector::setSelection(const Handle_SelectMgr_EntityO
     std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator aIt;
     for (aIt = aResList.cbegin(); aIt != aResList.cend(); ++aIt) {
       if ((*aIt) == aRes)
-// TODO(nds): v1.0.2 (master)
-//  // Check the acceptability of the object as attribute
-//  aValidator = aValidators.begin();
-//  std::list<std::list<std::string> >::iterator aArgs = anArguments.begin();
-//  for (; aValidator != aValidators.end(); aValidator++, aArgs++) {
-//    const ModelAPI_RefAttrValidator* aAttrValidator =
-//        dynamic_cast<const ModelAPI_RefAttrValidator*>(*aValidator);
-//    if (aAttrValidator) {
-//      if (!aAttrValidator->isValid(myFeature, *aArgs, theObj, theShape)) {
         return false;
     }
   }
index 0e2ca6f20592abd11060e753f01e1273f1cf504a..be4ffafa81d8b37cb8275b03249195f74cec84cd 100644 (file)
@@ -118,127 +118,84 @@ bool PartSet_DifferentObjectsValidator::isValid(const AttributePtr& theAttribute
 {
   FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
 
-  // 1. check whether the object of the attribute is not among the feature attributes
-  // find the attribute's object
-  ObjectPtr anObject =  GeomValidators_Tools::getObject(theAttribute);
+  // the type of validated attributes should be equal, attributes with different types are not validated
+  // Check RefAttr attributes
+  std::string anAttrType = theAttribute->attributeType();
+  std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs;
 
-  // check whether the object is not among other feature attributes
-  if (anObject.get() != NULL) {
-    // Check RefAttr attributes
-    std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs = aFeature->data()->attributes("");
-    //if (anAttrs.size() > 0) {
-    std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anIt = anAttrs.begin();
-    for(; anIt != anAttrs.end(); anIt++) {
-      AttributePtr anAttr = *anIt;
-      // the function parameter attribute should be skipped
-      if (anAttr.get() == NULL || anAttr->id() == theAttribute->id())
-        continue;
-      ObjectPtr aCurObject =  GeomValidators_Tools::getObject(anAttr);
-      if (aCurObject  && aCurObject == anObject)
-        return false;
+  if (anAttrType == ModelAPI_AttributeRefAttr::typeId()) {
+    AttributeRefAttrPtr anAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
+    bool isObject = anAttr->isObject();
+    ObjectPtr anObject = anAttr->object();
+    AttributePtr anAttributeAttr = anAttr->attr();
+
+    anAttrs = aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
+    if (anAttrs.size() > 0) {
+      std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
+      for(; anAttr != anAttrs.end(); anAttr++) {
+      if ((*anAttr).get() && (*anAttr)->id() != theAttribute->id()) {
+          std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
+                                      std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
+          if (aRef->isObject() != isObject)
+            continue;
+          if (isObject) {
+            if (aRef->object() == anObject)
+              return false;
+          }
+          else { // the attribute reference
+            if (aRef->attr() == theAttribute)
+              return false;
+          }
+        }
+      }
+    }
+  }
+  else if (anAttrType == ModelAPI_AttributeRefAttr::typeId()) {
+    AttributeSelectionPtr anAttr = std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(theAttribute);
+    ResultPtr aContext = anAttr->context();
+    GeomShapePtr aShape = anAttr->value();
+
+    // Check selection attributes
+    anAttrs = aFeature->data()->attributes(ModelAPI_AttributeSelection::typeId());
+    if (anAttrs.size() > 0) {
+      std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
+      for(; anAttr != anAttrs.end(); anAttr++) {
+        if ((*anAttr).get() && (*anAttr)->id() != theAttribute->id()) {
+          std::shared_ptr<ModelAPI_AttributeSelection> aRef =
+                                        std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(*anAttr);
+          // check the object is already presented
+          if (aRef->context() == aContext) {
+            bool aHasShape = aShape.get() != NULL;
+            if (!aHasShape || aRef->value()->isEqual(aShape))
+              return false;
+          }
+        }
+      }
     }
   }
-  else {
-    // 2. collect object referenced by theAttribute and ...
-    if (featureHasReferences(theAttribute)) {
-      // 3. check whether the attribute value is not among other feature attributes
-      std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs = 
-        aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
+  else if (anAttrType == ModelAPI_AttributeReference::typeId()) {
+    AttributeReferencePtr anAttr = std::dynamic_pointer_cast<ModelAPI_AttributeReference>(theAttribute);
+    ObjectPtr anObject = anAttr->value();
+    // Check selection attributes
+    anAttrs = aFeature->data()->attributes(ModelAPI_AttributeReference::typeId());
+    if (anAttrs.size() > 0) {
       std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
       for(; anAttr != anAttrs.end(); anAttr++) {
-        if (*anAttr) {
-          std::shared_ptr<ModelAPI_AttributeRefAttr> aRef = 
-            std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
+        if ((*anAttr).get() && (*anAttr)->id() != theAttribute->id()) {
+          std::shared_ptr<ModelAPI_AttributeReference> aRef =
+            std::dynamic_pointer_cast<ModelAPI_AttributeReference>(*anAttr);
           // check the object is already presented
-          if (!aRef->isObject() && aRef->attr() == theAttribute)
+          if (aRef->value() == anObject)
             return false;
         }
-// TODO(nds) v1.0.2 master
-//bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
-//                                                const std::list<std::string>& theArguments,
-//                                                const ObjectPtr& theObject,
-//                                                const GeomShapePtr& theShape) const
-//{
-//  // Check RefAttr attributes
-//  std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
-//    theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
-//  if (anAttrs.size() > 0) {
-//    std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//    for(; anAttr != anAttrs.end(); anAttr++) {
-//      if (*anAttr) {
-//        std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
-//          std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
-//        // check the object is already presented
-//        if (aRef->isObject() && aRef->object() == theObject)
-//          return false;
-//      }
-//    }
-//  }
-//  // Check selection attributes
-//  anAttrs = theFeature->data()->attributes(ModelAPI_AttributeSelection::typeId());
-//  if (anAttrs.size() > 0) {
-//    std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//    for(; anAttr != anAttrs.end(); anAttr++) {
-//      if (*anAttr) {
-//        std::shared_ptr<ModelAPI_AttributeSelection> aRef =
-//          std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(*anAttr);
-//        // check the object is already presented
-//        if (aRef->isInitialized() && aRef->context() == theObject) {
-//          if (theShape.get() != NULL) {
-//            if (aRef->value()->isEqual(theShape))
-//              return false;
-//          } else
-//            return false;
-//        }
-//      }
-//    }
-//  }
-//  // Check selection attributes
-//  anAttrs = theFeature->data()->attributes(ModelAPI_AttributeReference::typeId());
-//  if (anAttrs.size() > 0) {
-//    std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//    for(; anAttr != anAttrs.end(); anAttr++) {
-//      if (*anAttr) {
-//        std::shared_ptr<ModelAPI_AttributeReference> aRef =
-//          std::dynamic_pointer_cast<ModelAPI_AttributeReference>(*anAttr);
-//        // check the object is already presented
-//        if (aRef->isInitialized() && aRef->value() == theObject)
-//          return false;
-// ======= end of todo
+        return true;
       }
-      return true;
     }
   }
-  return true;
+  return !featureHasReferences(theAttribute);
 }
 
 bool PartSet_DifferentObjectsValidator::featureHasReferences(const AttributePtr& theAttribute) const
-// TODO(nds) v1.0.2 master
-//bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
-//                                                const std::list<std::string>& theArguments,
-//                                                const AttributePtr& theAttribute) const
-//{
-//  if (PartSet_DifferentObjectsValidator::isValid(theAttribute, theArguments)) {
-//    std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
-//      theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
-//    std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//    for(; anAttr != anAttrs.end(); anAttr++) {
-//      if (*anAttr) {
-//        std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
-//          std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
-//        // check the object is already presented
-//        if (!aRef->isObject() && aRef->attr() == theAttribute)
-//          return false;
-//      }
-//    }
-//    return true;
-//  }
-//  return false;
-//}
-//
-//bool PartSet_DifferentObjectsValidator::isValid(const AttributePtr& theAttribute,
-//                                                const std::list<std::string>& theArguments) const
-// ======= end of todo
 {
   std::list<std::pair<std::string, std::list<ObjectPtr> > > allRefs;
   if (theAttribute->owner().get() && theAttribute->owner()->data().get())
@@ -251,7 +208,7 @@ bool PartSet_DifferentObjectsValidator::featureHasReferences(const AttributePtr&
       anAttrObjs = &(aRefIter->second);
   }
   if (!anAttrObjs || anAttrObjs->empty())
-    return true; // theAttribute does not references to anything
+    return false; // theAttribute does not references to anything
   // check with all others
   for(aRefIter = allRefs.begin(); aRefIter != allRefs.end(); aRefIter++) {
     if (theAttribute->id() == aRefIter->first)
@@ -261,11 +218,11 @@ bool PartSet_DifferentObjectsValidator::featureHasReferences(const AttributePtr&
       std::list<ObjectPtr>::iterator aReferencedByMe = anAttrObjs->begin();
       for(; aReferencedByMe != anAttrObjs->end(); aReferencedByMe++) {
         if (*aReferenced == *aReferencedByMe) // found same objects!
-          return false;
+          return true;
       }
     }
   }
-  return true;
+  return false;
 }
 
 bool PartSet_SketchEntityValidator::isValid(const AttributePtr& theAttribute,
index 02e73de5fd0308875f827dcb3d1c4a14dd1ffdca..eb9f8a06bd010532257cbcbe62c7c6a2454f53d5 100644 (file)
@@ -72,22 +72,6 @@ class PartSet_RigidValidator : public ModuleBase_SelectionValidator
 class PartSet_DifferentObjectsValidator : public ModelAPI_AttributeValidator
 {
  public:
-// TODO(nds) v1.0.2 master
-//   /// Returns True if the feature is valid
-//   /// \param theFeature a feature to check
-//   /// \param theArguments a list of arguments (names of attributes to check)
-//   /// \param theObject a selected object
-//   /// \param theShape a selected sub-shape
-//  virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
-//                       const ObjectPtr& theObject, const GeomShapePtr& theShape) const;
-//
-//  //! Returns true if the attribute is good for the feature attribute
-//  //! \param theFeature a feature to check
-//  //! \param theArguments a list of arguments (names of attributes to check)
-//  //! \param theAttribute an attribute
-//  virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
-//                       const AttributePtr& theAttribute) const;
-  // ======= end of todo
   //! Returns true if the attribute is good for the feature attribute
   //! \param theAttribute an attribute
   //! \param theArguments a list of arguments (names of attributes to check)
@@ -95,11 +79,6 @@ class PartSet_DifferentObjectsValidator : public ModelAPI_AttributeValidator
                        const std::list<std::string>& theArguments) const;
 
 protected:
-  //! Casts the attribute to an attribute kind and obtains an object value if it is possible
-  //! \param theAttribute a source attribute to find object
-  //! \return an attribute object or NULL
-  ObjectPtr getObject(const AttributePtr& theAttribute) const;
-
   //! Checks whethe other feature attributes has a reference to the given attribute
   //! \param theAttribute a source attribute to find object
   //! \return a boolean value
index 98c25d47b1dc4eda49d7e3e2af954673bc2ad324..578e1cdf9b7a7e7bc38d7919e96ce9d038635bd2 100644 (file)
@@ -111,40 +111,6 @@ void PartSet_WidgetShapeSelector::createExternal(ObjectPtr theSelectedObject,
   if (aObj != myExternalObject) {
     removeExternal();
     myExternalObject = aObj;
-// TODO(nds) v1.0.2 master
-//  // Check the acceptability of the object and shape as validator attribute
-//  AttributePtr aPntAttr;
-//  DataPtr aData = myFeature->data();
-//  if (theShape.get() != NULL) {
-//    AttributePtr aAttr = aData->attribute(attributeID());
-//    AttributeRefAttrPtr aRefAttr =
-//      std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
-//    if (aRefAttr) {
-//      TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
-//      aPntAttr = PartSet_Tools::findAttributeBy2dPoint(theObj, aShape, mySketch);
-//    }
-//  }
-//  // Check the acceptability of the object as attribute
-//  aValidator = aValidators.begin();
-//  std::list<std::list<std::string> >::iterator aArgs = anArguments.begin();
-//  for (; aValidator != aValidators.end(); aValidator++, aArgs++) {
-//    const ModelAPI_RefAttrValidator* aAttrValidator =
-//        dynamic_cast<const ModelAPI_RefAttrValidator*>(*aValidator);
-//    if (aAttrValidator) {
-//      if (aPntAttr.get() != NULL)
-//      {
-//        if (!aAttrValidator->isValid(myFeature, *aArgs, aPntAttr)) {
-//          return false;
-//        }
-//      }
-//      else
-//      {
-//        if (!aAttrValidator->isValid(myFeature, *aArgs, theObj, theShape)) {
-//          return false;
-//        }
-//      }
-//    }
-// ======= end of todo
   }
 }
 
index ca7df854dcdf26bcbf700b5da88ef40ad542951e..32a0b30b57cc3028c1311c8b1c5935d5c46841c8 100644 (file)
 
 bool SketchPlugin_DistanceAttrValidator::isValid(
   const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
-//bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature,
-//                                                 const std::list<std::string>& theArguments,
-//                                                 const ObjectPtr& theObject,
-//                                                 const GeomShapePtr& theShape) const
-// ======= end of todo master
 {
   // there is a check whether the feature contains a point and a linear edge or two point values
   std::string aParamA = theArguments.front();
@@ -65,84 +60,3 @@ bool SketchPlugin_DistanceAttrValidator::isValid(
   }
   return false;
 }
-// TODO(nds) v1.0.2, master
-//  return false;
-//}
-
-//bool SketchPlugin_DistanceAttrValidator::isValid(
-//  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
-//{
-//  // any point attribute is acceptable for the distance operation
-//  return true;
-//}
-//
-//bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature,
-//                                                 const std::list<std::string>& theArguments,
-//                                                 const AttributePtr& theAttribute) const
-//{
-//  return isValid(theAttribute, theArguments);
-//}
-
-// commented in v1.0.2, master:
-//bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
-//                                                 const std::list<std::string>& theArguments,
-//                                                 const ObjectPtr& theObject) const
-//{
-//  std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs = 
-//    theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
-//  std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//  for(; anAttr != anAttrs.end(); anAttr++) {
-//    if (*anAttr) {
-//      std::shared_ptr<ModelAPI_AttributeRefAttr> aRef = 
-//        std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
-//      // check the object is already presented
-//      if (aRef->isObject() && aRef->object() == theObject)
-//        return false;
-//    }
-//  }
-//  return true;
-//}
-
-//bool SketchPlugin_DifferentObjectsValidator::isValid(
-//  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
-//{
-//  std::shared_ptr<ModelAPI_AttributeRefAttr> anOrigAttr = 
-//    std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
-//  if (anOrigAttr && anOrigAttr->isObject()) {
-//    const ObjectPtr& anObj = theAttribute->owner();
-//    const FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(anObj);
-//
-//    std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs = 
-//      aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
-//    std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//    for(; anAttr != anAttrs.end(); anAttr++) {
-//      if (*anAttr && *anAttr != theAttribute) {
-//        std::shared_ptr<ModelAPI_AttributeRefAttr> aRef = 
-//          std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
-//        // check the object is already presented
-//        if (aRef->isObject() && aRef->object() == anOrigAttr->object())
-//          return false;
-//      }
-//    }
-//  }
-//  return true;
-//}
-
-//bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
-//  const std::list<std::string>& theArguments, const AttributePtr& theAttribute) const
-//{
-//  std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs = 
-//    theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
-//  std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
-//  for(; anAttr != anAttrs.end(); anAttr++) {
-//    if (*anAttr) {
-//      std::shared_ptr<ModelAPI_AttributeRefAttr> aRef = 
-//        std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
-//      // check the object is already presented
-//      if (!aRef->isObject() && aRef->attr() == theAttribute)
-//        return false;
-//    }
-//  }
-//  return true;
-//}
-// =========== end of todo
index 2691caeba4374ef605c898c9b71490321f2926d8..67ae5e124831b11a83e6a434597afde5ac233b20 100644 (file)
           <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
           <validator id="GeomValidators_EdgeOrVertex"/>
         </sketch_shape_selector>
- <!--
- TODO(nds): v1.0.2, master  
-                           shape_types="edge vertex">
-                       <validator id="PartSet_DifferentObjects"/>
-      <validator id="SketchPlugin_DistanceAttr" parameters="ConstraintEntityA"/>
-      <selection_filter id="MultiFilter" parameters="line,vertex"/>
-    </sketch_shape_selector>
-               
-        <sketch-2dpoint_selector id="ConstraintFlyoutValuePnt" internal="1" obligatory="0"/>
- -->
-        
         <sketch-2dpoint_selector id="ConstraintFlyoutValuePnt"  default="computed" internal="1" obligatory="0"/>
         
         <doublevalue_editor label="Value" tooltip="Distance" id="ConstraintValue" default="computed" min="0">
             <validator id="PartSet_DifferentObjects"/>
             <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
         </sketch_constraint_shape_selector>
-        
-<!--  
-  TODO(nds): v1.0.2, master  
-               <sketch_constraint_shape_selector id="ConstraintEntityA" 
-                       label="First line" tooltip="Select a line" shape_types="edge">
-                       <selection_filter id="EdgeFilter" parameters="line"/>
-               </sketch_constraint_shape_selector>
-               
-               <sketch_constraint_shape_selector id="ConstraintEntityB" label="Last line" tooltip="Select a line" 
-                       shape_types="edge">
-                       <selection_filter id="EdgeFilter" parameters="line"/>
-                       <validator id="PartSet_DifferentObjects"/>
-               </sketch_constraint_shape_selector>
-               
-        <sketch-2dpoint_selector id="ConstraintFlyoutValuePnt" internal="1" obligatory="0"/>
--->
         <validator id="PartSet_ParallelValidator"/>
       </feature>
       
           <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
             <validator id="GeomValidators_Edge" parameters="line"/>
         </sketch_constraint_shape_selector>
-<!--  
-  TODO(nds): v1.0.2, master
-               <sketch_constraint_shape_selector id="ConstraintEntityA" 
-                       label="First line" tooltip="Select an line" 
-                       shape_types="edge">
-      <selection_filter id="EdgeFilter" parameters="line"/>
-    </sketch_constraint_shape_selector>
-               
-               <sketch_constraint_shape_selector id="ConstraintEntityB" 
-                       label="Last line" tooltip="Select an line" 
-                       shape_types="edge">
-                       <validator id="PartSet_DifferentObjects"/>
-      <selection_filter id="EdgeFilter" parameters="line"/>
-    </sketch_constraint_shape_selector>
--->
         <validator id="PartSet_PerpendicularValidator"/>
       </feature>