- if (aFeature) // TODO: generate an error if feature was not created
- aFeature->execute();
-}
-
-/*std::shared_ptr<GeomDataAPI_Point2D> PartSet_Tools::
- findAttributePoint(CompositeFeaturePtr theSketch, double theX, double theY,
- double theTolerance, const QList<FeaturePtr>& theIgnore)
-{
- std::shared_ptr<GeomAPI_Pnt2d> aClickedPoint = std::shared_ptr<GeomAPI_Pnt2d>(
- new GeomAPI_Pnt2d(theX, theY));
-
- std::list<std::shared_ptr<ModelAPI_Attribute> > anAttiributes;
- for (int i = 0; i < theSketch->numberOfSubs(); i++) {
- FeaturePtr aFeature = theSketch->subFeature(i);
- if (!theIgnore.contains(aFeature)) {
- anAttiributes = aFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
-
- std::list<std::shared_ptr<ModelAPI_Attribute> >::const_iterator anIt;
- for (anIt = anAttiributes.cbegin(); anIt != anAttiributes.cend(); ++anIt) {
- std::shared_ptr<GeomDataAPI_Point2D> aCurPoint =
- std::dynamic_pointer_cast<GeomDataAPI_Point2D>(*anIt);
- double x = aCurPoint->x();
- double y = aCurPoint->y();
- if (aCurPoint && (aCurPoint->pnt()->distance(aClickedPoint) < theTolerance)) {
- return aCurPoint;
- }
- }
- }
- }
- return std::shared_ptr<GeomDataAPI_Point2D>();
-}*/
-
-
-void PartSet_Tools::setConstraints(CompositeFeaturePtr theSketch, FeaturePtr theFeature,
- const std::string& theAttribute, double theClickedX,
- double theClickedY)
-{
- // find a feature point by the selection mode
- //std::shared_ptr<GeomDataAPI_Point2D> aPoint = featurePoint(theMode);
- std::shared_ptr<GeomDataAPI_Point2D> aFeaturePoint = std::dynamic_pointer_cast<
- GeomDataAPI_Point2D>(theFeature->data()->attribute(theAttribute));
- if (!aFeaturePoint)
- return;
-
- // get all sketch features. If the point with the given coordinates belong to any sketch feature,
- // the constraint is created between the feature point and the found sketch point
- std::shared_ptr<ModelAPI_Data> aData = theSketch->data();
- std::shared_ptr<ModelAPI_AttributeRefList> aRefList = std::dynamic_pointer_cast<
- ModelAPI_AttributeRefList>(aData->attribute(SketchPlugin_Sketch::FEATURES_ID()));
-
- std::list<ObjectPtr> aFeatures = aRefList->list();
- std::list<ObjectPtr>::const_iterator anIt = aFeatures.begin(), aLast = aFeatures.end();
- std::list<std::shared_ptr<ModelAPI_Attribute> > anAttiributes;
- std::shared_ptr<GeomAPI_Pnt2d> aClickedPoint = std::shared_ptr<GeomAPI_Pnt2d>(
- new GeomAPI_Pnt2d(theClickedX, theClickedY));
- for (; anIt != aLast; anIt++) {
- FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*anIt);
- if (!aFeature.get() || theFeature == aFeature)
- continue;
- // find the given point in the feature attributes
- anAttiributes = aFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
- std::list<std::shared_ptr<ModelAPI_Attribute> >::const_iterator anIt = anAttiributes.begin(),
- aLast = anAttiributes.end();
- std::shared_ptr<GeomDataAPI_Point2D> aFPoint;
- for (; anIt != aLast && !aFPoint; anIt++) {
- std::shared_ptr<GeomDataAPI_Point2D> aCurPoint =
- std::dynamic_pointer_cast<GeomDataAPI_Point2D>(*anIt);
- if (aCurPoint && (aCurPoint->pnt()->distance(aClickedPoint) < Precision::Confusion())) {
- aFPoint = aCurPoint;
- break;
- }
- }
- if (aFPoint)
- PartSet_Tools::createConstraint(theSketch, aFPoint, aFeaturePoint);
- }