X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Transformation.cpp;h=929148d60ba25a5408a1bbd9b2fc985d4d843101;hb=a5746a7f8fd8bcd555fb16f98e312c86ca1210da;hp=dcbe96667a82d537539bf8b6d19d67c5d492264b;hpb=59d420c1b61bd4d6e194e7848c43de74e9f681ef;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Transformation.cpp b/src/SketcherPrs/SketcherPrs_Transformation.cpp index dcbe96667..929148d60 100644 --- a/src/SketcherPrs/SketcherPrs_Transformation.cpp +++ b/src/SketcherPrs/SketcherPrs_Transformation.cpp @@ -9,10 +9,17 @@ #include "SketcherPrs_PositionMgr.h" #include +#include +#include #include +#include #include #include +#include +#include +#include +#include @@ -31,13 +38,20 @@ SketcherPrs_Transformation::SketcherPrs_Transformation(ModelAPI_Feature* theCons bool SketcherPrs_Transformation::updatePoints(double theStep) const { std::shared_ptr aData = myConstraint->data(); + // Get transformated objects list std::shared_ptr anAttrB = aData->reflist(SketchPlugin_Constraint::ENTITY_B()); if (anAttrB.get() == NULL) return false; int aNbB = anAttrB->size(); if (aNbB == 0) + { +#ifdef DEBUG_SENSITIVE_TO_BE_CORRECTED + //if (!myPntArray.IsNull()) + // mySPoints.Clear(); +#endif return false; + } SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); myPntArray = new Graphic3d_ArrayOfPoints(aNbB); @@ -45,6 +59,7 @@ bool SketcherPrs_Transformation::updatePoints(double theStep) const int i; ObjectPtr aObj; gp_Pnt aP1; + // Compute points of symbols for (i = 0; i < aNbB; i++) { aObj = anAttrB->object(i); aP1 = aMgr->getPosition(aObj, this, theStep); @@ -63,9 +78,42 @@ void SketcherPrs_Transformation::drawLines(const Handle(Prs3d_Presentation)& the Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup(thePrs); - Handle(Graphic3d_AspectLine3d) aLineAspect = new Graphic3d_AspectLine3d(theColor, Aspect_TOL_SOLID, 2); - aGroup->SetPrimitivesAspect(aLineAspect); + //Handle(Graphic3d_AspectLine3d) aLineAspect = new Graphic3d_AspectLine3d(theColor, Aspect_TOL_SOLID, 2); + //aGroup->SetPrimitivesAspect(aLineAspect); + + // drawListOfShapes uses myDrawer for attributes definition + Handle(Prs3d_LineAspect) aLnAspect = new Prs3d_LineAspect(theColor, Aspect_TOL_SOLID, 1); + myDrawer->SetLineAspect(aLnAspect); drawListOfShapes(anAttrB, thePrs); + if (myConstraint->getKind() == SketchPlugin_MultiTranslation::ID()) { + // If it is translation + std::shared_ptr aStart = std::dynamic_pointer_cast( + aData->attribute(SketchPlugin_MultiTranslation::START_POINT_ID())); + std::shared_ptr aEnd = std::dynamic_pointer_cast( + aData->attribute(SketchPlugin_MultiTranslation::END_POINT_ID())); + + if (aStart.get() && aEnd.get() && aStart->isInitialized() && aEnd->isInitialized()) { + // Add start point + std::shared_ptr aPnt = myPlane->to3D(aStart->x(), aStart->y()); + Handle(Geom_CartesianPoint) aPoint = new Geom_CartesianPoint(aPnt->impl()); + StdPrs_Point::Add(thePrs, aPoint, myDrawer); + + // Add end point + aPnt = myPlane->to3D(aEnd->x(), aEnd->y()); + aPoint = new Geom_CartesianPoint(aPnt->impl()); + StdPrs_Point::Add(thePrs, aPoint, myDrawer); + } + } else if (myConstraint->getKind() == SketchPlugin_MultiRotation::ID()) { + // if it is rotation + std::shared_ptr aCenter = std::dynamic_pointer_cast( + aData->attribute(SketchPlugin_MultiRotation::CENTER_ID())); + if (aCenter.get() && aCenter->isInitialized()) { + // Show center of rotation + std::shared_ptr aPnt = myPlane->to3D(aCenter->x(), aCenter->y()); + Handle(Geom_CartesianPoint) aPoint = new Geom_CartesianPoint(aPnt->impl()); + StdPrs_Point::Add(thePrs, aPoint, myDrawer); + } + } }