// Author: Artem ZHIDKOV
#include "SketchPlugin_ConstraintLength.h"
+ #include <SketchPlugin_Line.h>
+#include <GeomDataAPI_Point2D.h>
+
#include <ModelAPI_AttributeDouble.h>
#include <ModelAPI_Data.h>
{
}
- const boost::shared_ptr<GeomAPI_Shape>& SketchPlugin_ConstraintLength::preview()
+ Handle(AIS_InteractiveObject) SketchPlugin_ConstraintLength::getAISShape(
+ Handle_AIS_InteractiveObject thePrevious)
{
- /// \todo Preview for distance constraint
- return getPreview();
+ if (!sketch())
+ return thePrevious;
+
+ boost::shared_ptr<GeomAPI_Pln> aPlane = sketch()->plane();
+
+ boost::shared_ptr<ModelAPI_AttributeRefAttr> anAttr =
+ boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(data()->attribute(CONSTRAINT_ATTR_ENTITY_A));
+ if (!anAttr)
+ return thePrevious;
+ FeaturePtr aFeature = anAttr->feature();
+ if (!aFeature || aFeature->getKind() != SKETCH_LINE_KIND)
+ return thePrevious;
+
+ boost::shared_ptr<ModelAPI_AttributeDouble> aFlyoutAttr =
+ boost::dynamic_pointer_cast<ModelAPI_AttributeDouble>(data()->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE));
+ double aFlyout = aFlyoutAttr->value();
+
+ boost::shared_ptr<ModelAPI_AttributeDouble> aValueAttr =
+ boost::dynamic_pointer_cast<ModelAPI_AttributeDouble>(data()->attribute(CONSTRAINT_ATTR_VALUE));
+ double aValue = aValueAttr->value();
+
+ boost::shared_ptr<ModelAPI_Data> aData = aFeature->data();
+ if (!aData->isValid())
+ return thePrevious;
+
+ boost::shared_ptr<GeomDataAPI_Point2D> aPointStart =
+ boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
+ boost::shared_ptr<GeomDataAPI_Point2D> aPointEnd =
+ boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
+
+ //Build dimension here
+ boost::shared_ptr<GeomAPI_Pnt> aPoint1 = sketch()->to3D(aPointStart->x(), aPointStart->y());
+ boost::shared_ptr<GeomAPI_Pnt> aPoint2 = sketch()->to3D(aPointEnd->x(), aPointEnd->y());
+ if (aFlyout < 0)
+ aPoint1.swap(aPoint2);
+
+ Handle(AIS_InteractiveObject) anAIS = thePrevious;
+ if (anAIS.IsNull())
+ {
+ Handle(AIS_LengthDimension) aDimAIS =
+ new AIS_LengthDimension(aPoint1->impl<gp_Pnt>(), aPoint2->impl<gp_Pnt>(), aPlane->impl<gp_Pln>());
+ aDimAIS->SetCustomValue(aValue);
+
+ Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
+ anAspect->MakeArrows3d (Standard_False);
+ anAspect->MakeText3d(false/*is text 3d*/);
+ anAspect->TextAspect()->SetHeight(CONSTRAINT_TEXT_HEIGHT);
+ anAspect->MakeTextShaded(false/*is test shaded*/);
+ aDimAIS->DimensionAspect()->MakeUnitsDisplayed(false/*is units displayed*/);
+ /*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->impl<gp_Pnt>(), aPoint2->impl<gp_Pnt>(), aPlane->impl<gp_Pln>());
+ aDimAIS->SetCustomValue(aValue);
+ aDimAIS->SetFlyout(aFlyout);
+
+ aDimAIS->Redisplay(Standard_True);
+ }
+ }
+ return anAIS;
}
+void SketchPlugin_ConstraintLength::move(double theDeltaX, double theDeltaY)
+{
+ boost::shared_ptr<ModelAPI_Data> aData = data();
+ if (!aData->isValid())
+ return;
+
+ boost::shared_ptr<GeomDataAPI_Point2D> aPoint1 =
+ boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(CONSTRAINT_ATTR_FLYOUT_VALUE_PNT));
+ aPoint1->setValue(aPoint1->x() + theDeltaX, aPoint1->y() + theDeltaY);
+}
+
/// \brief Request for initialization of data model of the feature: adding all attributes
SKETCHPLUGIN_EXPORT virtual void initAttributes();
- /// \brief Returns the sketch preview
- SKETCHPLUGIN_EXPORT virtual const boost::shared_ptr<GeomAPI_Shape>& preview();
+ /// Returns the AIS preview
+ SKETCHPLUGIN_EXPORT virtual Handle_AIS_InteractiveObject getAISShape(Handle_AIS_InteractiveObject thePrevious);
+ /// Moves the feature
+ /// \param theDeltaX the delta for X coordinate is moved
+ /// \param theDeltaY the delta for Y coordinate is moved
+ SKETCHPLUGIN_EXPORT virtual void move(const double theDeltaX, const double theDeltaY);
+
/// \brief Use plugin manager for features creation
SketchPlugin_ConstraintLength();
};