return SKETCH_LINE_KIND;
}
-void PartSet_FeatureLinePrs::initFeature(FeaturePtr theFeature)
-{
- if (feature() && theFeature)
- {
- // use the last point of the previous feature as the first of the new one
- boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
- boost::shared_ptr<GeomDataAPI_Point2D> anInitPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>
- (aData->attribute(LINE_ATTR_END));
- PartSet_Tools::setFeaturePoint(feature(), anInitPoint->x(), anInitPoint->y(), LINE_ATTR_START);
- PartSet_Tools::setFeaturePoint(feature(), anInitPoint->x(), anInitPoint->y(), LINE_ATTR_END);
-
- aData = feature()->data();
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>
- (aData->attribute(LINE_ATTR_START));
- PartSet_Tools::createConstraint(sketch(), anInitPoint, aPoint);
- }
-}
-
PartSet_SelectionMode PartSet_FeatureLinePrs::setPoint(double theX, double theY,
const PartSet_SelectionMode& theMode)
{
return aMode;
}
+PartSet_SelectionMode PartSet_FeatureLinePrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode)
+{
+ PartSet_SelectionMode aMode = theMode;
+ if (feature() && theFeature && theMode == SM_FirstPoint)
+ {
+ // use the last point of the previous feature as the first of the new one
+ boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+ boost::shared_ptr<GeomDataAPI_Point2D> anInitPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>
+ (aData->attribute(LINE_ATTR_END));
+ PartSet_Tools::setFeaturePoint(feature(), anInitPoint->x(), anInitPoint->y(), LINE_ATTR_START);
+ PartSet_Tools::setFeaturePoint(feature(), anInitPoint->x(), anInitPoint->y(), LINE_ATTR_END);
+
+ aData = feature()->data();
+ boost::shared_ptr<GeomDataAPI_Point2D> aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>
+ (aData->attribute(LINE_ATTR_START));
+ PartSet_Tools::createConstraint(sketch(), anInitPoint, aPoint);
+ aMode = SM_SecondPoint;
+ }
+ return aMode;
+}
+
std::string PartSet_FeatureLinePrs::getAttribute(const PartSet_SelectionMode& theMode) const
{
std::string aAttribute;
return aMode;
}
-void PartSet_FeatureLinePrs::move(double theDeltaX, double theDeltaY)
-{
- boost::shared_ptr<ModelAPI_Data> aData = feature()->data();
- if (!aData->isValid())
- return;
-
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint1 =
- boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
- aPoint1->setValue(aPoint1->x() + theDeltaX, aPoint1->y() + theDeltaY);
-
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint2 =
- boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
- aPoint2->setValue(aPoint2->x() + theDeltaX, aPoint2->y() + theDeltaY);
-}
-
void PartSet_FeatureLinePrs::projectPointOnLine(FeaturePtr theFeature,
const PartSet_SelectionMode& theMode,
const gp_Pnt& thePoint, Handle(V3d_View) theView,
double& theX, double& theY)
{
if (theFeature && theFeature->getKind() == getKind()) {
- double X0, X1, X2, X3;
- double Y0, Y1, Y2, Y3;
- getLinePoint(theFeature, LINE_ATTR_START, X2, Y2);
- getLinePoint(theFeature, LINE_ATTR_END, X3, Y3);
+ double X0, X1;
+ double Y0, Y1;
PartSet_Tools::convertTo2D(thePoint, sketch(), theView, X1, Y1);
boost::shared_ptr<GeomAPI_Pnt2d> aPoint = boost::shared_ptr<GeomAPI_Pnt2d>(new GeomAPI_Pnt2d(X1, Y1));
- boost::shared_ptr<GeomAPI_Lin2d> aFeatureLin = boost::shared_ptr<GeomAPI_Lin2d>
- (new GeomAPI_Lin2d(X2, Y2, X3, Y3));
+ boost::shared_ptr<GeomAPI_Lin2d> aFeatureLin = PartSet_FeatureLinePrs::createLin2d(theFeature);
+
switch (theMode) {
case SM_FirstPoint: {
boost::shared_ptr<GeomAPI_Pnt2d> aResult = aFeatureLin->project(aPoint);
}
}
-double PartSet_FeatureLinePrs::distanceToPoint(FeaturePtr theFeature,
- double theX, double theY)
+boost::shared_ptr<GeomAPI_Lin2d> PartSet_FeatureLinePrs::createLin2d(FeaturePtr theFeature)
{
- double aDelta = 0;
- if (!theFeature || theFeature->getKind() != getKind())
- return aDelta;
-
- boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint1 =
- boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint2 =
- boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
-
- GeomAPI_Lin2d aLin2d(aPoint1->x(), aPoint1->y(), aPoint2->x(), aPoint2->y());
- boost::shared_ptr<GeomAPI_Pnt2d> aPoint = boost::shared_ptr<GeomAPI_Pnt2d>(new GeomAPI_Pnt2d(theX, theY));
-
- if (false/*projection*/) { // TODO: if it has not been necessary, remove this block
- boost::shared_ptr<GeomAPI_Pnt2d> aResult = aLin2d.project(aPoint);
- aDelta = aResult->distance(aPoint);
- }
- else { // distance
- aDelta = aLin2d.distance(aPoint);
- }
-
- return aDelta;
-}
+ boost::shared_ptr<GeomAPI_Lin2d> aFeatureLin;
+ if (!theFeature || theFeature->getKind() != PartSet_FeatureLinePrs::getKind())
+ return aFeatureLin;
-boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureLinePrs::findPoint(FeaturePtr theFeature,
- double theX, double theY)
-{
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint2D;
- if (!theFeature || theFeature->getKind() != getKind())
- return aPoint2D;
+ double aStartX, aStartY, anEndX, anEndY;
+ getLinePoint(theFeature, LINE_ATTR_START, aStartX, aStartY);
+ getLinePoint(theFeature, LINE_ATTR_END, anEndX, anEndY);
- boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
- boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
- boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
- if (fabs(aPoint->x() - theX) < Precision::Confusion() &&
- fabs(aPoint->y() - theY) < Precision::Confusion())
- aPoint2D = aPoint;
- else {
- aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
- if (fabs(aPoint->x() - theX) < Precision::Confusion() &&
- fabs(aPoint->y() - theY) < Precision::Confusion())
- aPoint2D = aPoint;
- }
- return aPoint2D;
+ aFeatureLin = boost::shared_ptr<GeomAPI_Lin2d>
+ (new GeomAPI_Lin2d(aStartX, aStartY, anEndX, anEndY));
+ return aFeatureLin;
}
boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureLinePrs::featurePoint