+void PartSet_Tools::setConstraints(FeaturePtr theSketch, FeaturePtr theFeature,
+ const std::string& theAttribute,
+ double theClickedX, double theClickedY)
+{
+ // find a feature point by the selection mode
+ //boost::shared_ptr<GeomDataAPI_Point2D> aPoint = featurePoint(theMode);
+ boost::shared_ptr<GeomDataAPI_Point2D> aFeaturePoint =
+ boost::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
+ boost::shared_ptr<ModelAPI_Data> aData = theSketch->data();
+ boost::shared_ptr<ModelAPI_AttributeRefList> aRefList =
+ boost::dynamic_pointer_cast<ModelAPI_AttributeRefList>(aData->attribute(SKETCH_ATTR_FEATURES));
+
+ std::list<FeaturePtr > aFeatures = aRefList->list();
+ std::list<FeaturePtr >::const_iterator anIt = aFeatures.begin(), aLast = aFeatures.end();
+ std::list<boost::shared_ptr<ModelAPI_Attribute> > anAttiributes;
+ boost::shared_ptr<GeomAPI_Pnt2d> aClickedPoint = boost::shared_ptr<GeomAPI_Pnt2d>
+ (new GeomAPI_Pnt2d(theClickedX, theClickedY));
+ for (; anIt != aLast; anIt++)
+ {
+ FeaturePtr aFeature = *anIt;
+ // find the given point in the feature attributes
+ anAttiributes = aFeature->data()->attributes(GeomDataAPI_Point2D::type());
+ std::list<boost::shared_ptr<ModelAPI_Attribute> >::const_iterator anIt = anAttiributes.begin(),
+ aLast = anAttiributes.end();
+ boost::shared_ptr<GeomDataAPI_Point2D> aFPoint;
+ for (;anIt!=aLast && !aFPoint; anIt++) {
+ boost::shared_ptr<GeomDataAPI_Point2D> aCurPoint =
+ boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(*anIt);
+ if (aCurPoint && aCurPoint->pnt()->distance(aClickedPoint) < Precision::Confusion())
+ aFPoint = aCurPoint;
+ }
+ if (aFPoint)
+ PartSet_Tools::createConstraint(theSketch, aFPoint, aFeaturePoint);
+ }
+}
+
+boost::shared_ptr<GeomAPI_Pln> PartSet_Tools::sketchPlane(FeaturePtr theSketch)
+{
+ boost::shared_ptr<GeomAPI_Pln> aPlane;
+ double aA, aB, aC, aD;
+
+ boost::shared_ptr<ModelAPI_Data> aData = theSketch->data();
+ boost::shared_ptr<GeomDataAPI_Point> anOrigin =
+ boost::dynamic_pointer_cast<GeomDataAPI_Point>(aData->attribute(SKETCH_ATTR_ORIGIN));
+ boost::shared_ptr<GeomDataAPI_Dir> aNormal =
+ boost::dynamic_pointer_cast<GeomDataAPI_Dir>(aData->attribute(SKETCH_ATTR_NORM));
+ aA = aNormal->x();
+ aB = aNormal->y();
+ aC = aNormal->z();
+ aD = 0;
+
+ aPlane = boost::shared_ptr<GeomAPI_Pln>(new GeomAPI_Pln(aA, aB, aC, aD));
+ return aPlane;
+}
+
+boost::shared_ptr<GeomAPI_Pnt> PartSet_Tools::point3D(
+ boost::shared_ptr<GeomAPI_Pnt2d> thePoint2D,
+ FeaturePtr theSketch)