Salome HOME
Merge branch 'master' of newgeom:newgeom
authornds <natalia.donis@opencascade.com>
Tue, 24 Jun 2014 12:59:36 +0000 (16:59 +0400)
committernds <natalia.donis@opencascade.com>
Tue, 24 Jun 2014 12:59:36 +0000 (16:59 +0400)
1  2 
src/SketchPlugin/SketchPlugin_ConstraintDistance.cpp
src/SketchPlugin/SketchPlugin_ConstraintLength.cpp
src/SketchPlugin/SketchPlugin_ConstraintLength.h
src/SketchPlugin/SketchPlugin_Line.cpp

index 76563c003cb6d1f1869210c0633ea8b76c3d18b5,4ec9e30ce42a328991b6d668f193a562094b3d5a..6e48926c662b7f26eeedfd4cedab1b415ce5d7b6
@@@ -3,9 -3,8 +3,10 @@@
  // Author:  Artem ZHIDKOV
  
  #include "SketchPlugin_ConstraintLength.h"
+ #include <SketchPlugin_Line.h>
  
 +#include <GeomDataAPI_Point2D.h>
 +
  #include <ModelAPI_AttributeDouble.h>
  #include <ModelAPI_Data.h>
  
@@@ -25,20 -29,81 +32,92 @@@ void SketchPlugin_ConstraintLength::exe
  {
  }
  
- 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);
 +}
 +
index 52719e7652b1510ae4f8b16c4e441a8fbcd2030c,28e3627c3b742f6e334a6cce9fa1cb8c01e86f1c..52012c4194eb8a87983cf8a89549d4e59bf6e8f4
@@@ -38,14 -38,9 +38,14 @@@ public
    /// \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();
  };