From ac9e5f39dc1d69c65cc46fca7ba1aa58e772803e Mon Sep 17 00:00:00 2001 From: nds Date: Fri, 20 Jun 2014 19:25:44 +0400 Subject: [PATCH] refs #80 - Sketch base GUI: create/draw point, circle and arc 1. Rename constraint feature presentations 2. Add createPresentation() to each constraint feature prs. --- src/PartSet/CMakeLists.txt | 12 +- src/PartSet/PartSet_ConstraintDistancePrs.cpp | 222 +++++++++++++++++ ...sPrs.h => PartSet_ConstraintDistancePrs.h} | 24 +- ...rs.cpp => PartSet_ConstraintLengthPrs.cpp} | 25 +- ...gthPrs.h => PartSet_ConstraintLengthPrs.h} | 14 +- src/PartSet/PartSet_ConstraintRadiusPrs.cpp | 228 ++++++++++++++++++ ...ncePrs.h => PartSet_ConstraintRadiusPrs.h} | 24 +- src/PartSet/PartSet_FeatureDistancePrs.cpp | 137 ----------- src/PartSet/PartSet_FeatureRadiusPrs.cpp | 143 ----------- .../PartSet_OperationCreateConstraint.cpp | 12 +- src/PartSet/PartSet_Presentation.cpp | 12 +- src/PartSet/PartSet_Tools.cpp | 18 +- .../SketchSolver_ConstraintManager.cpp | 1 + 13 files changed, 535 insertions(+), 337 deletions(-) create mode 100644 src/PartSet/PartSet_ConstraintDistancePrs.cpp rename src/PartSet/{PartSet_FeatureRadiusPrs.h => PartSet_ConstraintDistancePrs.h} (76%) rename src/PartSet/{PartSet_FeatureLengthPrs.cpp => PartSet_ConstraintLengthPrs.cpp} (86%) rename src/PartSet/{PartSet_FeatureLengthPrs.h => PartSet_ConstraintLengthPrs.h} (91%) create mode 100644 src/PartSet/PartSet_ConstraintRadiusPrs.cpp rename src/PartSet/{PartSet_FeatureDistancePrs.h => PartSet_ConstraintRadiusPrs.h} (76%) delete mode 100644 src/PartSet/PartSet_FeatureDistancePrs.cpp delete mode 100644 src/PartSet/PartSet_FeatureRadiusPrs.cpp diff --git a/src/PartSet/CMakeLists.txt b/src/PartSet/CMakeLists.txt index 37822dd00..495fe7e75 100644 --- a/src/PartSet/CMakeLists.txt +++ b/src/PartSet/CMakeLists.txt @@ -5,15 +5,15 @@ SET(CMAKE_AUTOMOC ON) SET(PROJECT_HEADERS PartSet.h PartSet_Constants.h + PartSet_ConstraintDistancePrs.h + PartSet_ConstraintLengthPrs.h + PartSet_ConstraintRadiusPrs.h PartSet_EditLine.h PartSet_FeatureArcPrs.h PartSet_FeatureCirclePrs.h - PartSet_FeatureDistancePrs.h PartSet_FeaturePrs.h - PartSet_FeatureLengthPrs.h PartSet_FeatureLinePrs.h PartSet_FeaturePointPrs.h - PartSet_FeatureRadiusPrs.h PartSet_Listener.h PartSet_Module.h PartSet_OperationCreateConstraint.h @@ -28,15 +28,15 @@ SET(PROJECT_HEADERS ) SET(PROJECT_SOURCES + PartSet_ConstraintDistancePrs.cpp + PartSet_ConstraintLengthPrs.cpp + PartSet_ConstraintRadiusPrs.cpp PartSet_EditLine.cpp PartSet_FeaturePrs.cpp PartSet_FeatureArcPrs.cpp PartSet_FeatureCirclePrs.cpp - PartSet_FeatureDistancePrs.cpp - PartSet_FeatureLengthPrs.cpp PartSet_FeatureLinePrs.cpp PartSet_FeaturePointPrs.cpp - PartSet_FeatureRadiusPrs.cpp PartSet_Listener.cpp PartSet_Module.cpp PartSet_OperationCreateConstraint.cpp diff --git a/src/PartSet/PartSet_ConstraintDistancePrs.cpp b/src/PartSet/PartSet_ConstraintDistancePrs.cpp new file mode 100644 index 000000000..29a0d19c2 --- /dev/null +++ b/src/PartSet/PartSet_ConstraintDistancePrs.cpp @@ -0,0 +1,222 @@ +// File: PartSet_FeaturePrs.h +// Created: 16 Jun 2014 +// Author: Natalia ERMOLAEVA + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +using namespace std; + +PartSet_ConstraintDistancePrs::PartSet_ConstraintDistancePrs(FeaturePtr theSketch) +: PartSet_FeaturePrs(theSketch) +{ +} + +std::string PartSet_ConstraintDistancePrs::getKind() +{ + return SKETCH_CONSTRAINT_DISTANCE_KIND; +} + +bool PartSet_ConstraintDistancePrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode) +{ + bool aResult = false; + if (feature() && theFeature && theFeature->getKind() == SKETCH_LINE_KIND && theMode == SM_FirstPoint) + { + // set length feature + boost::shared_ptr aData = feature()->data(); + boost::shared_ptr aRef = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); + aRef->setFeature(theFeature); + + // set length value + aData = theFeature->data(); + boost::shared_ptr aPoint1 = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_START)); + boost::shared_ptr aPoint2 = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_END)); + + double aLenght = aPoint1->pnt()->distance(aPoint2->pnt()); + PartSet_Tools::setFeatureValue(feature(), aLenght, CONSTRAINT_ATTR_VALUE); + aResult = true; + } + return aResult; +} + +PartSet_SelectionMode PartSet_ConstraintDistancePrs::setPoint(double theX, double theY, + const PartSet_SelectionMode& theMode) +{ + PartSet_SelectionMode aMode = theMode; + switch (theMode) + { + case SM_SecondPoint: { + boost::shared_ptr aData = feature()->data(); + boost::shared_ptr anAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); + FeaturePtr aFeature; + if (anAttr) { + aFeature = anAttr->feature(); + if (aFeature->getKind() != SKETCH_LINE_KIND) { + aFeature = FeaturePtr(); + } + } + boost::shared_ptr aPoint = boost::shared_ptr + (new GeomAPI_Pnt2d(theX, theY)); + boost::shared_ptr aFeatureLin = PartSet_FeatureLinePrs::createLin2d(aFeature); + boost::shared_ptr aResult = aFeatureLin->project(aPoint); + double aDistance = aPoint->distance(aResult); + + double aStartX, aStartY; + PartSet_FeatureLinePrs::getLinePoint(aFeature, LINE_ATTR_START, aStartX, aStartY); + + if (!aFeatureLin->isRight(aPoint)) + aDistance = -aDistance; + + AttributeDoublePtr aFlyoutAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE)); + aFlyoutAttr->setValue(aDistance); + + aMode = SM_DonePoint; + } + break; + default: + break; + } + return aMode; +} + +Handle(AIS_InteractiveObject) PartSet_ConstraintDistancePrs::createPresentation(FeaturePtr theFeature, + FeaturePtr theSketch, + Handle(AIS_InteractiveObject) thePreviuos) +{ + Handle(AIS_InteractiveObject) anAIS = thePreviuos; + if (!theFeature || !theSketch) + return anAIS; + /* + boost::shared_ptr aData = theSketch->data(); + boost::shared_ptr anOrigin = + boost::dynamic_pointer_cast(aData->attribute(SKETCH_ATTR_ORIGIN)); + boost::shared_ptr aNormal = + boost::dynamic_pointer_cast(aData->attribute(SKETCH_ATTR_NORM)); + gp_Pln aPlane(aNormal->x(), aNormal->y(), aNormal->z(), 0); + + aData = theFeature->data(); + boost::shared_ptr anAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); + if (!anAttr) + return thePreviuos; + FeaturePtr aFeature = anAttr->feature(); + if (!aFeature || aFeature->getKind() != SKETCH_LINE_KIND) + return thePreviuos; + + boost::shared_ptr aFlyoutAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE)); + double aFlyout = aFlyoutAttr->value(); + + aData = aFeature->data(); + if (!aData->isValid()) + return thePreviuos; + + boost::shared_ptr aPointStart = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_START)); + boost::shared_ptr aPointEnd = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_END)); + + gp_Pnt aPoint1, aPoint2; + PartSet_Tools::convertTo3D(aPointStart->x(), aPointStart->y(), theSketch, aPoint1); + PartSet_Tools::convertTo3D(aPointEnd->x(), aPointEnd->y(), theSketch, aPoint2); + + //Build dimension here + gp_Pnt aP1 = aPoint1; + gp_Pnt aP2 = aPoint2; + if (aFlyout < 0) { + aP1 = aPoint2; + aP2 = aPoint1; + } + + Handle(AIS_InteractiveObject) anAIS = thePreviuos; + if (anAIS.IsNull()) + { + Handle(AIS_LengthDimension) aDimAIS = new AIS_LengthDimension (aP1, aP2, aPlane); + + Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect(); + anAspect->MakeArrows3d (Standard_False); + anAspect->MakeText3d(false); + anAspect->TextAspect()->SetHeight(CONSTRAINT_TEXT_HEIGHT); + anAspect->MakeTextShaded(false); + aDimAIS->DimensionAspect()->MakeUnitsDisplayed(false); + //if (isUnitsDisplayed) + //{ + // aDimAIS->SetDisplayUnits (aDimDlg->GetUnits ()); + //} + aDimAIS->SetDimensionAspect (anAspect); + aDimAIS->SetFlyout(aFlyout); + aDimAIS->SetSelToleranceForText2d(CONSTRAINT_TEXT_SELECTION_TOLERANCE); + + anAIS = aDimAIS; + } + else { + // update presentation + Handle(AIS_LengthDimension) aDimAIS = Handle(AIS_LengthDimension)::DownCast(anAIS); + if (!aDimAIS.IsNull()) { + aDimAIS->SetMeasuredGeometry(aPoint1, aPoint2, aPlane); + aDimAIS->SetFlyout(aFlyout); + + aDimAIS->Redisplay(Standard_True); + } + } +*/ + return anAIS; +} + +std::string PartSet_ConstraintDistancePrs::getAttribute(const PartSet_SelectionMode& theMode) const +{ + return ""; +} + +PartSet_SelectionMode PartSet_ConstraintDistancePrs::getNextMode(const std::string& theAttribute) const +{ + return SM_FirstPoint; +} + +void PartSet_ConstraintDistancePrs::move(double theDeltaX, double theDeltaY) +{ +} + +double PartSet_ConstraintDistancePrs::distanceToPoint(FeaturePtr theFeature, + double theX, double theY) +{ + return 0; +} + +boost::shared_ptr PartSet_ConstraintDistancePrs::findPoint(FeaturePtr theFeature, + double theX, double theY) +{ + boost::shared_ptr aPoint2D; + return aPoint2D; +} + +boost::shared_ptr PartSet_ConstraintDistancePrs::featurePoint + (const PartSet_SelectionMode& theMode) +{ + return boost::shared_ptr(); +} diff --git a/src/PartSet/PartSet_FeatureRadiusPrs.h b/src/PartSet/PartSet_ConstraintDistancePrs.h similarity index 76% rename from src/PartSet/PartSet_FeatureRadiusPrs.h rename to src/PartSet/PartSet_ConstraintDistancePrs.h index fcdaa6425..a6fe31eac 100644 --- a/src/PartSet/PartSet_FeatureRadiusPrs.h +++ b/src/PartSet/PartSet_ConstraintDistancePrs.h @@ -1,9 +1,9 @@ -// File: PartSet_FeatureRadiusPrs.h +// File: PartSet_ConstraintDistancePrs.h // Created: 16 Jun 2014 // Author: Natalia ERMOLAEVA -#ifndef PartSet_FeatureRadiusPrs_H -#define PartSet_FeatureRadiusPrs_H +#ifndef PartSet_ConstraintDistancePrs_H +#define PartSet_ConstraintDistancePrs_H #include "PartSet.h" @@ -11,14 +11,15 @@ #include "PartSet_Constants.h" class GeomDataAPI_Point2D; +class Handle_AIS_InteractiveObject; /*! - \class PartSet_FeatureRadiusPrs + \class PartSet_ConstraintDistancePrs * \brief The class to define the circle feature manipulation. It is created for * the feature create operation to move out the feature properties set and use one operation * for any type of features. */ -class PARTSET_EXPORT PartSet_FeatureRadiusPrs : public PartSet_FeaturePrs +class PARTSET_EXPORT PartSet_ConstraintDistancePrs : public PartSet_FeaturePrs { public: /// Returns the feature type processed by this presentation @@ -27,9 +28,9 @@ public: /// Constructor /// \param theSketch the sketch feature - PartSet_FeatureRadiusPrs(FeaturePtr theSketch); + PartSet_ConstraintDistancePrs(FeaturePtr theSketch); /// Destructor - virtual ~PartSet_FeatureRadiusPrs() {}; + virtual ~PartSet_ConstraintDistancePrs() {}; /// Sets the feature to to a feature attribute depending on the selection mode /// \param theFeature a feature instance @@ -45,6 +46,15 @@ public: virtual PartSet_SelectionMode setPoint(double theX, double theY, const PartSet_SelectionMode& theMode); + /// Creates an AIS presentation if the previous is null or update the given one + /// \param theFeature a feature + /// \param theSketch a feature sketch + /// \param thePrevious a previuos AIS presentation + /// \return a created/changed AIS object with the feature parameters + static Handle_AIS_InteractiveObject createPresentation(FeaturePtr theFeature, + FeaturePtr theSketch, + Handle_AIS_InteractiveObject thePreviuos); + /// Returns the feature attribute name for the selection mode /// \param theMode the current operation selection mode. The feature attribute depends on the mode virtual std::string getAttribute(const PartSet_SelectionMode& theMode) const; diff --git a/src/PartSet/PartSet_FeatureLengthPrs.cpp b/src/PartSet/PartSet_ConstraintLengthPrs.cpp similarity index 86% rename from src/PartSet/PartSet_FeatureLengthPrs.cpp rename to src/PartSet/PartSet_ConstraintLengthPrs.cpp index bd4bdd8c6..716b435eb 100644 --- a/src/PartSet/PartSet_FeatureLengthPrs.cpp +++ b/src/PartSet/PartSet_ConstraintLengthPrs.cpp @@ -2,7 +2,7 @@ // Created: 16 Jun 2014 // Author: Natalia ERMOLAEVA -#include +#include #include #include @@ -28,23 +28,24 @@ #include #include +#include #include #include #include using namespace std; -PartSet_FeatureLengthPrs::PartSet_FeatureLengthPrs(FeaturePtr theSketch) +PartSet_ConstraintLengthPrs::PartSet_ConstraintLengthPrs(FeaturePtr theSketch) : PartSet_FeaturePrs(theSketch) { } -std::string PartSet_FeatureLengthPrs::getKind() +std::string PartSet_ConstraintLengthPrs::getKind() { return SKETCH_CONSTRAINT_LENGTH_KIND; } -bool PartSet_FeatureLengthPrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode) +bool PartSet_ConstraintLengthPrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode) { bool aResult = false; if (feature() && theFeature && theFeature->getKind() == SKETCH_LINE_KIND && theMode == SM_FirstPoint) @@ -69,7 +70,7 @@ bool PartSet_FeatureLengthPrs::setFeature(FeaturePtr theFeature, const PartSet_S return aResult; } -PartSet_SelectionMode PartSet_FeatureLengthPrs::setPoint(double theX, double theY, +PartSet_SelectionMode PartSet_ConstraintLengthPrs::setPoint(double theX, double theY, const PartSet_SelectionMode& theMode) { PartSet_SelectionMode aMode = theMode; @@ -111,7 +112,7 @@ PartSet_SelectionMode PartSet_FeatureLengthPrs::setPoint(double theX, double the return aMode; } -Handle(AIS_InteractiveObject) PartSet_FeatureLengthPrs::createPresentation(FeaturePtr theFeature, +Handle(AIS_InteractiveObject) PartSet_ConstraintLengthPrs::createPresentation(FeaturePtr theFeature, FeaturePtr theSketch, Handle(AIS_InteractiveObject) thePreviuos) { @@ -193,34 +194,34 @@ Handle(AIS_InteractiveObject) PartSet_FeatureLengthPrs::createPresentation(Featu return anAIS; } -std::string PartSet_FeatureLengthPrs::getAttribute(const PartSet_SelectionMode& theMode) const +std::string PartSet_ConstraintLengthPrs::getAttribute(const PartSet_SelectionMode& theMode) const { return ""; } -PartSet_SelectionMode PartSet_FeatureLengthPrs::getNextMode(const std::string& theAttribute) const +PartSet_SelectionMode PartSet_ConstraintLengthPrs::getNextMode(const std::string& theAttribute) const { return SM_FirstPoint; } -void PartSet_FeatureLengthPrs::move(double theDeltaX, double theDeltaY) +void PartSet_ConstraintLengthPrs::move(double theDeltaX, double theDeltaY) { } -double PartSet_FeatureLengthPrs::distanceToPoint(FeaturePtr theFeature, +double PartSet_ConstraintLengthPrs::distanceToPoint(FeaturePtr theFeature, double theX, double theY) { return 0; } -boost::shared_ptr PartSet_FeatureLengthPrs::findPoint(FeaturePtr theFeature, +boost::shared_ptr PartSet_ConstraintLengthPrs::findPoint(FeaturePtr theFeature, double theX, double theY) { boost::shared_ptr aPoint2D; return aPoint2D; } -boost::shared_ptr PartSet_FeatureLengthPrs::featurePoint +boost::shared_ptr PartSet_ConstraintLengthPrs::featurePoint (const PartSet_SelectionMode& theMode) { return boost::shared_ptr(); diff --git a/src/PartSet/PartSet_FeatureLengthPrs.h b/src/PartSet/PartSet_ConstraintLengthPrs.h similarity index 91% rename from src/PartSet/PartSet_FeatureLengthPrs.h rename to src/PartSet/PartSet_ConstraintLengthPrs.h index 90b1edd4a..5c8f85d56 100644 --- a/src/PartSet/PartSet_FeatureLengthPrs.h +++ b/src/PartSet/PartSet_ConstraintLengthPrs.h @@ -1,9 +1,9 @@ -// File: PartSet_FeatureLengthPrs.h +// File: PartSet_ConstraintLengthPrs.h // Created: 16 Jun 2014 // Author: Natalia ERMOLAEVA -#ifndef PartSet_FeatureLengthPrs_H -#define PartSet_FeatureLengthPrs_H +#ifndef PartSet_ConstraintLengthPrs_H +#define PartSet_ConstraintLengthPrs_H #include "PartSet.h" @@ -14,12 +14,12 @@ class GeomDataAPI_Point2D; class Handle_AIS_InteractiveObject; /*! - \class PartSet_FeatureLengthPrs + \class PartSet_ConstraintLengthPrs * \brief The class to define the circle feature manipulation. It is created for * the feature create operation to move out the feature properties set and use one operation * for any type of features. */ -class PARTSET_EXPORT PartSet_FeatureLengthPrs : public PartSet_FeaturePrs +class PARTSET_EXPORT PartSet_ConstraintLengthPrs : public PartSet_FeaturePrs { public: /// Returns the feature type processed by this presentation @@ -28,9 +28,9 @@ public: /// Constructor /// \param theSketch the sketch feature - PartSet_FeatureLengthPrs(FeaturePtr theSketch); + PartSet_ConstraintLengthPrs(FeaturePtr theSketch); /// Destructor - virtual ~PartSet_FeatureLengthPrs() {}; + virtual ~PartSet_ConstraintLengthPrs() {}; /// Sets the feature to to a feature attribute depending on the selection mode /// \param theFeature a feature instance diff --git a/src/PartSet/PartSet_ConstraintRadiusPrs.cpp b/src/PartSet/PartSet_ConstraintRadiusPrs.cpp new file mode 100644 index 000000000..bee75f1c3 --- /dev/null +++ b/src/PartSet/PartSet_ConstraintRadiusPrs.cpp @@ -0,0 +1,228 @@ +// File: PartSet_FeaturePrs.h +// Created: 16 Jun 2014 +// Author: Natalia ERMOLAEVA + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +using namespace std; + +PartSet_ConstraintRadiusPrs::PartSet_ConstraintRadiusPrs(FeaturePtr theSketch) +: PartSet_FeaturePrs(theSketch) +{ +} + +std::string PartSet_ConstraintRadiusPrs::getKind() +{ + return SKETCH_CONSTRAINT_RADIUS_KIND; +} + +bool PartSet_ConstraintRadiusPrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode) +{ + bool aResult = false; + if (feature() && theMode == SM_FirstPoint && + (theFeature && theFeature->getKind() == SKETCH_CIRCLE_KIND || + theFeature && theFeature->getKind() == SKETCH_ARC_KIND)) { + // set length feature + boost::shared_ptr aData = feature()->data(); + boost::shared_ptr aRef = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); + aRef->setFeature(theFeature); + + // set length value + /*aData = theFeature->data(); + boost::shared_ptr aPoint1 = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_START)); + boost::shared_ptr aPoint2 = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_END)); + + double aLenght = aPoint1->pnt()->distance(aPoint2->pnt()); + */ + double aLenght = 50; + PartSet_Tools::setFeatureValue(feature(), aLenght, CONSTRAINT_ATTR_VALUE); + aResult = true; + } + return aResult; +} + +PartSet_SelectionMode PartSet_ConstraintRadiusPrs::setPoint(double theX, double theY, + const PartSet_SelectionMode& theMode) +{ + PartSet_SelectionMode aMode = theMode; + switch (theMode) + { + case SM_SecondPoint: { + boost::shared_ptr aData = feature()->data(); + /*boost::shared_ptr anAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); + FeaturePtr aFeature; + if (anAttr) { + aFeature = anAttr->feature(); + if (aFeature->getKind() != SKETCH_LINE_KIND) { + aFeature = FeaturePtr(); + } + } + boost::shared_ptr aPoint = boost::shared_ptr + (new GeomAPI_Pnt2d(theX, theY)); + boost::shared_ptr aFeatureLin = PartSet_FeatureLinePrs::createLin2d(aFeature); + boost::shared_ptr aResult = aFeatureLin->project(aPoint); + double aDistance = aPoint->distance(aResult); + + double aStartX, aStartY; + PartSet_FeatureLinePrs::getLinePoint(aFeature, LINE_ATTR_START, aStartX, aStartY); + + if (!aFeatureLin->isRight(aPoint)) + aDistance = -aDistance; + */ + double aDistance = 40; + AttributeDoublePtr aFlyoutAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE)); + aFlyoutAttr->setValue(aDistance); + + aMode = SM_DonePoint; + } + break; + default: + break; + } + return aMode; +} + +Handle(AIS_InteractiveObject) PartSet_ConstraintRadiusPrs::createPresentation(FeaturePtr theFeature, + FeaturePtr theSketch, + Handle(AIS_InteractiveObject) thePreviuos) +{ + Handle(AIS_InteractiveObject) anAIS = thePreviuos; + if (!theFeature || !theSketch) + return anAIS; + /* + boost::shared_ptr aData = theSketch->data(); + boost::shared_ptr anOrigin = + boost::dynamic_pointer_cast(aData->attribute(SKETCH_ATTR_ORIGIN)); + boost::shared_ptr aNormal = + boost::dynamic_pointer_cast(aData->attribute(SKETCH_ATTR_NORM)); + gp_Pln aPlane(aNormal->x(), aNormal->y(), aNormal->z(), 0); + + aData = theFeature->data(); + boost::shared_ptr anAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); + if (!anAttr) + return thePreviuos; + FeaturePtr aFeature = anAttr->feature(); + if (!aFeature || aFeature->getKind() != SKETCH_LINE_KIND) + return thePreviuos; + + boost::shared_ptr aFlyoutAttr = + boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE)); + double aFlyout = aFlyoutAttr->value(); + + aData = aFeature->data(); + if (!aData->isValid()) + return thePreviuos; + + boost::shared_ptr aPointStart = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_START)); + boost::shared_ptr aPointEnd = + boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_END)); + + gp_Pnt aPoint1, aPoint2; + PartSet_Tools::convertTo3D(aPointStart->x(), aPointStart->y(), theSketch, aPoint1); + PartSet_Tools::convertTo3D(aPointEnd->x(), aPointEnd->y(), theSketch, aPoint2); + + //Build dimension here + gp_Pnt aP1 = aPoint1; + gp_Pnt aP2 = aPoint2; + if (aFlyout < 0) { + aP1 = aPoint2; + aP2 = aPoint1; + } + + Handle(AIS_InteractiveObject) anAIS = thePreviuos; + if (anAIS.IsNull()) + { + Handle(AIS_LengthDimension) aDimAIS = new AIS_LengthDimension (aP1, aP2, aPlane); + + Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect(); + anAspect->MakeArrows3d (Standard_False); + anAspect->MakeText3d(false); + anAspect->TextAspect()->SetHeight(CONSTRAINT_TEXT_HEIGHT); + anAspect->MakeTextShaded(false); + aDimAIS->DimensionAspect()->MakeUnitsDisplayed(false); + //if (isUnitsDisplayed) + //{ + // aDimAIS->SetDisplayUnits (aDimDlg->GetUnits ()); + //} + aDimAIS->SetDimensionAspect (anAspect); + aDimAIS->SetFlyout(aFlyout); + aDimAIS->SetSelToleranceForText2d(CONSTRAINT_TEXT_SELECTION_TOLERANCE); + + anAIS = aDimAIS; + } + else { + // update presentation + Handle(AIS_LengthDimension) aDimAIS = Handle(AIS_LengthDimension)::DownCast(anAIS); + if (!aDimAIS.IsNull()) { + aDimAIS->SetMeasuredGeometry(aPoint1, aPoint2, aPlane); + aDimAIS->SetFlyout(aFlyout); + + aDimAIS->Redisplay(Standard_True); + } + } +*/ + return anAIS; +} + +std::string PartSet_ConstraintRadiusPrs::getAttribute(const PartSet_SelectionMode& theMode) const +{ + return ""; +} + +PartSet_SelectionMode PartSet_ConstraintRadiusPrs::getNextMode(const std::string& theAttribute) const +{ + return SM_FirstPoint; +} + +void PartSet_ConstraintRadiusPrs::move(double theDeltaX, double theDeltaY) +{ +} + +double PartSet_ConstraintRadiusPrs::distanceToPoint(FeaturePtr theFeature, + double theX, double theY) +{ + return 0; +} + +boost::shared_ptr PartSet_ConstraintRadiusPrs::findPoint(FeaturePtr theFeature, + double theX, double theY) +{ + boost::shared_ptr aPoint2D; + return aPoint2D; +} + +boost::shared_ptr PartSet_ConstraintRadiusPrs::featurePoint + (const PartSet_SelectionMode& theMode) +{ + return boost::shared_ptr(); +} diff --git a/src/PartSet/PartSet_FeatureDistancePrs.h b/src/PartSet/PartSet_ConstraintRadiusPrs.h similarity index 76% rename from src/PartSet/PartSet_FeatureDistancePrs.h rename to src/PartSet/PartSet_ConstraintRadiusPrs.h index 4f7282969..c71ac902b 100644 --- a/src/PartSet/PartSet_FeatureDistancePrs.h +++ b/src/PartSet/PartSet_ConstraintRadiusPrs.h @@ -1,9 +1,9 @@ -// File: PartSet_FeatureDistancePrs.h +// File: PartSet_ConstraintRadiusPrs.h // Created: 16 Jun 2014 // Author: Natalia ERMOLAEVA -#ifndef PartSet_FeatureDistancePrs_H -#define PartSet_FeatureDistancePrs_H +#ifndef PartSet_ConstraintRadiusPrs_H +#define PartSet_ConstraintRadiusPrs_H #include "PartSet.h" @@ -11,14 +11,15 @@ #include "PartSet_Constants.h" class GeomDataAPI_Point2D; +class Handle_AIS_InteractiveObject; /*! - \class PartSet_FeatureDistancePrs + \class PartSet_ConstraintRadiusPrs * \brief The class to define the circle feature manipulation. It is created for * the feature create operation to move out the feature properties set and use one operation * for any type of features. */ -class PARTSET_EXPORT PartSet_FeatureDistancePrs : public PartSet_FeaturePrs +class PARTSET_EXPORT PartSet_ConstraintRadiusPrs : public PartSet_FeaturePrs { public: /// Returns the feature type processed by this presentation @@ -27,9 +28,9 @@ public: /// Constructor /// \param theSketch the sketch feature - PartSet_FeatureDistancePrs(FeaturePtr theSketch); + PartSet_ConstraintRadiusPrs(FeaturePtr theSketch); /// Destructor - virtual ~PartSet_FeatureDistancePrs() {}; + virtual ~PartSet_ConstraintRadiusPrs() {}; /// Sets the feature to to a feature attribute depending on the selection mode /// \param theFeature a feature instance @@ -45,6 +46,15 @@ public: virtual PartSet_SelectionMode setPoint(double theX, double theY, const PartSet_SelectionMode& theMode); + /// Creates an AIS presentation if the previous is null or update the given one + /// \param theFeature a feature + /// \param theSketch a feature sketch + /// \param thePrevious a previuos AIS presentation + /// \return a created/changed AIS object with the feature parameters + static Handle_AIS_InteractiveObject createPresentation(FeaturePtr theFeature, + FeaturePtr theSketch, + Handle_AIS_InteractiveObject thePreviuos); + /// Returns the feature attribute name for the selection mode /// \param theMode the current operation selection mode. The feature attribute depends on the mode virtual std::string getAttribute(const PartSet_SelectionMode& theMode) const; diff --git a/src/PartSet/PartSet_FeatureDistancePrs.cpp b/src/PartSet/PartSet_FeatureDistancePrs.cpp deleted file mode 100644 index e3e903a89..000000000 --- a/src/PartSet/PartSet_FeatureDistancePrs.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// File: PartSet_FeaturePrs.h -// Created: 16 Jun 2014 -// Author: Natalia ERMOLAEVA - -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -using namespace std; - -PartSet_FeatureDistancePrs::PartSet_FeatureDistancePrs(FeaturePtr theSketch) -: PartSet_FeaturePrs(theSketch) -{ -} - -std::string PartSet_FeatureDistancePrs::getKind() -{ - return SKETCH_CONSTRAINT_DISTANCE_KIND; -} - -bool PartSet_FeatureDistancePrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode) -{ - bool aResult = false; - if (feature() && theFeature && theFeature->getKind() == SKETCH_LINE_KIND && theMode == SM_FirstPoint) - { - // set length feature - boost::shared_ptr aData = feature()->data(); - boost::shared_ptr aRef = - boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); - aRef->setFeature(theFeature); - - // set length value - aData = theFeature->data(); - boost::shared_ptr aPoint1 = - boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_START)); - boost::shared_ptr aPoint2 = - boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_END)); - - double aLenght = aPoint1->pnt()->distance(aPoint2->pnt()); - PartSet_Tools::setFeatureValue(feature(), aLenght, CONSTRAINT_ATTR_VALUE); - aResult = true; - } - return aResult; -} - -PartSet_SelectionMode PartSet_FeatureDistancePrs::setPoint(double theX, double theY, - const PartSet_SelectionMode& theMode) -{ - PartSet_SelectionMode aMode = theMode; - switch (theMode) - { - case SM_SecondPoint: { - boost::shared_ptr aData = feature()->data(); - boost::shared_ptr anAttr = - boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); - FeaturePtr aFeature; - if (anAttr) { - aFeature = anAttr->feature(); - if (aFeature->getKind() != SKETCH_LINE_KIND) { - aFeature = FeaturePtr(); - } - } - boost::shared_ptr aPoint = boost::shared_ptr - (new GeomAPI_Pnt2d(theX, theY)); - boost::shared_ptr aFeatureLin = PartSet_FeatureLinePrs::createLin2d(aFeature); - boost::shared_ptr aResult = aFeatureLin->project(aPoint); - double aDistance = aPoint->distance(aResult); - - double aStartX, aStartY; - PartSet_FeatureLinePrs::getLinePoint(aFeature, LINE_ATTR_START, aStartX, aStartY); - - if (!aFeatureLin->isRight(aPoint)) - aDistance = -aDistance; - - AttributeDoublePtr aFlyoutAttr = - boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE)); - aFlyoutAttr->setValue(aDistance); - - aMode = SM_DonePoint; - } - break; - default: - break; - } - return aMode; -} - -std::string PartSet_FeatureDistancePrs::getAttribute(const PartSet_SelectionMode& theMode) const -{ - return ""; -} - -PartSet_SelectionMode PartSet_FeatureDistancePrs::getNextMode(const std::string& theAttribute) const -{ - return SM_FirstPoint; -} - -void PartSet_FeatureDistancePrs::move(double theDeltaX, double theDeltaY) -{ -} - -double PartSet_FeatureDistancePrs::distanceToPoint(FeaturePtr theFeature, - double theX, double theY) -{ - return 0; -} - -boost::shared_ptr PartSet_FeatureDistancePrs::findPoint(FeaturePtr theFeature, - double theX, double theY) -{ - boost::shared_ptr aPoint2D; - return aPoint2D; -} - -boost::shared_ptr PartSet_FeatureDistancePrs::featurePoint - (const PartSet_SelectionMode& theMode) -{ - return boost::shared_ptr(); -} diff --git a/src/PartSet/PartSet_FeatureRadiusPrs.cpp b/src/PartSet/PartSet_FeatureRadiusPrs.cpp deleted file mode 100644 index 0c6567956..000000000 --- a/src/PartSet/PartSet_FeatureRadiusPrs.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// File: PartSet_FeaturePrs.h -// Created: 16 Jun 2014 -// Author: Natalia ERMOLAEVA - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -using namespace std; - -PartSet_FeatureRadiusPrs::PartSet_FeatureRadiusPrs(FeaturePtr theSketch) -: PartSet_FeaturePrs(theSketch) -{ -} - -std::string PartSet_FeatureRadiusPrs::getKind() -{ - return SKETCH_CONSTRAINT_RADIUS_KIND; -} - -bool PartSet_FeatureRadiusPrs::setFeature(FeaturePtr theFeature, const PartSet_SelectionMode& theMode) -{ - bool aResult = false; - if (feature() && theMode == SM_FirstPoint && - (theFeature && theFeature->getKind() == SKETCH_CIRCLE_KIND || - theFeature && theFeature->getKind() == SKETCH_ARC_KIND)) { - // set length feature - boost::shared_ptr aData = feature()->data(); - boost::shared_ptr aRef = - boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); - aRef->setFeature(theFeature); - - // set length value - /*aData = theFeature->data(); - boost::shared_ptr aPoint1 = - boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_START)); - boost::shared_ptr aPoint2 = - boost::dynamic_pointer_cast(aData->attribute(LINE_ATTR_END)); - - double aLenght = aPoint1->pnt()->distance(aPoint2->pnt()); - */ - double aLenght = 50; - PartSet_Tools::setFeatureValue(feature(), aLenght, CONSTRAINT_ATTR_VALUE); - aResult = true; - } - return aResult; -} - -PartSet_SelectionMode PartSet_FeatureRadiusPrs::setPoint(double theX, double theY, - const PartSet_SelectionMode& theMode) -{ - PartSet_SelectionMode aMode = theMode; - switch (theMode) - { - case SM_SecondPoint: { - boost::shared_ptr aData = feature()->data(); - /*boost::shared_ptr anAttr = - boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_ENTITY_A)); - FeaturePtr aFeature; - if (anAttr) { - aFeature = anAttr->feature(); - if (aFeature->getKind() != SKETCH_LINE_KIND) { - aFeature = FeaturePtr(); - } - } - boost::shared_ptr aPoint = boost::shared_ptr - (new GeomAPI_Pnt2d(theX, theY)); - boost::shared_ptr aFeatureLin = PartSet_FeatureLinePrs::createLin2d(aFeature); - boost::shared_ptr aResult = aFeatureLin->project(aPoint); - double aDistance = aPoint->distance(aResult); - - double aStartX, aStartY; - PartSet_FeatureLinePrs::getLinePoint(aFeature, LINE_ATTR_START, aStartX, aStartY); - - if (!aFeatureLin->isRight(aPoint)) - aDistance = -aDistance; - */ - double aDistance = 40; - AttributeDoublePtr aFlyoutAttr = - boost::dynamic_pointer_cast(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE)); - aFlyoutAttr->setValue(aDistance); - - aMode = SM_DonePoint; - } - break; - default: - break; - } - return aMode; -} - -std::string PartSet_FeatureRadiusPrs::getAttribute(const PartSet_SelectionMode& theMode) const -{ - return ""; -} - -PartSet_SelectionMode PartSet_FeatureRadiusPrs::getNextMode(const std::string& theAttribute) const -{ - return SM_FirstPoint; -} - -void PartSet_FeatureRadiusPrs::move(double theDeltaX, double theDeltaY) -{ -} - -double PartSet_FeatureRadiusPrs::distanceToPoint(FeaturePtr theFeature, - double theX, double theY) -{ - return 0; -} - -boost::shared_ptr PartSet_FeatureRadiusPrs::findPoint(FeaturePtr theFeature, - double theX, double theY) -{ - boost::shared_ptr aPoint2D; - return aPoint2D; -} - -boost::shared_ptr PartSet_FeatureRadiusPrs::featurePoint - (const PartSet_SelectionMode& theMode) -{ - return boost::shared_ptr(); -} diff --git a/src/PartSet/PartSet_OperationCreateConstraint.cpp b/src/PartSet/PartSet_OperationCreateConstraint.cpp index d4e9e5175..20558f3cb 100644 --- a/src/PartSet/PartSet_OperationCreateConstraint.cpp +++ b/src/PartSet/PartSet_OperationCreateConstraint.cpp @@ -19,9 +19,9 @@ #include */ -#include -#include -#include +#include +#include +#include #include @@ -64,9 +64,9 @@ PartSet_OperationCreateConstraint::~PartSet_OperationCreateConstraint() bool PartSet_OperationCreateConstraint::canProcessKind(const std::string& theId) { // changed - return theId == PartSet_FeatureLengthPrs::getKind() || - theId == PartSet_FeatureDistancePrs::getKind() || - theId == PartSet_FeatureRadiusPrs::getKind(); + return theId == PartSet_ConstraintLengthPrs::getKind() || + theId == PartSet_ConstraintDistancePrs::getKind() || + theId == PartSet_ConstraintRadiusPrs::getKind(); } bool PartSet_OperationCreateConstraint::canBeCommitted() const diff --git a/src/PartSet/PartSet_Presentation.cpp b/src/PartSet/PartSet_Presentation.cpp index 5d174047b..09ecbaa65 100644 --- a/src/PartSet/PartSet_Presentation.cpp +++ b/src/PartSet/PartSet_Presentation.cpp @@ -5,7 +5,9 @@ #include #include -#include +#include +#include +#include #include @@ -28,8 +30,12 @@ Handle(AIS_InteractiveObject) PartSet_Presentation::createPresentation( Handle(AIS_InteractiveObject) anAIS; std::string aKind = theFeature->getKind(); - if (aKind == PartSet_FeatureLengthPrs::getKind()) - anAIS = PartSet_FeatureLengthPrs::createPresentation(theFeature, theSketch, thePreviuos); + if (aKind == PartSet_ConstraintLengthPrs::getKind()) + anAIS = PartSet_ConstraintLengthPrs::createPresentation(theFeature, theSketch, thePreviuos); + else if (aKind == PartSet_ConstraintDistancePrs::getKind()) + anAIS = PartSet_ConstraintDistancePrs::createPresentation(theFeature, theSketch, thePreviuos); + else if (aKind == PartSet_ConstraintRadiusPrs::getKind()) + anAIS = PartSet_ConstraintRadiusPrs::createPresentation(theFeature, theSketch, thePreviuos); else { anAIS = createFeature(theFeature, theShape, thePreviuos); if (theFeature->getKind() == SKETCH_KIND) diff --git a/src/PartSet/PartSet_Tools.cpp b/src/PartSet/PartSet_Tools.cpp index a8868beb7..30bdc0b13 100644 --- a/src/PartSet/PartSet_Tools.cpp +++ b/src/PartSet/PartSet_Tools.cpp @@ -25,9 +25,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include @@ -156,14 +156,14 @@ boost::shared_ptr PartSet_Tools::createFeaturePrs(const std: else if (theKind == PartSet_FeatureArcPrs::getKind()) { aFeaturePrs = boost::shared_ptr(new PartSet_FeatureArcPrs(theSketch)); } - else if (theKind == PartSet_FeatureLengthPrs::getKind()) { - aFeaturePrs = boost::shared_ptr(new PartSet_FeatureLengthPrs(theSketch)); + else if (theKind == PartSet_ConstraintLengthPrs::getKind()) { + aFeaturePrs = boost::shared_ptr(new PartSet_ConstraintLengthPrs(theSketch)); } - else if (theKind == PartSet_FeatureRadiusPrs::getKind()) { - aFeaturePrs = boost::shared_ptr(new PartSet_FeatureRadiusPrs(theSketch)); + else if (theKind == PartSet_ConstraintRadiusPrs::getKind()) { + aFeaturePrs = boost::shared_ptr(new PartSet_ConstraintRadiusPrs(theSketch)); } - else if (theKind == PartSet_FeatureDistancePrs::getKind()) { - aFeaturePrs = boost::shared_ptr(new PartSet_FeatureDistancePrs(theSketch)); + else if (theKind == PartSet_ConstraintDistancePrs::getKind()) { + aFeaturePrs = boost::shared_ptr(new PartSet_ConstraintDistancePrs(theSketch)); } diff --git a/src/SketchSolver/SketchSolver_ConstraintManager.cpp b/src/SketchSolver/SketchSolver_ConstraintManager.cpp index e91d65a16..ed3a1b2a7 100644 --- a/src/SketchSolver/SketchSolver_ConstraintManager.cpp +++ b/src/SketchSolver/SketchSolver_ConstraintManager.cpp @@ -361,6 +361,7 @@ boost::shared_ptr SketchSolver_ConstraintManager::findWork // ============================================================================ void SketchSolver_ConstraintManager::resolveConstraints() { + return; // myConstrSolver.solve() gives an exception std::vector::iterator aGroupIter; for (aGroupIter = myGroups.begin(); aGroupIter != myGroups.end(); aGroupIter++) (*aGroupIter)->resolveConstraints(); -- 2.39.2