X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Transformation.cpp;h=e4a4899ffef79ba0ba1ca34292bd270ac2d32994;hb=acb27733bf87bc7fb401f82aca26d7a8c0b608d3;hp=43a57aa9f0636b7d630d248a805a96e9a4443d7b;hpb=0284999c9db26f1fdc4db2b11876d0dd6ae2c508;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Transformation.cpp b/src/SketcherPrs/SketcherPrs_Transformation.cpp index 43a57aa9f..e4a4899ff 100644 --- a/src/SketcherPrs/SketcherPrs_Transformation.cpp +++ b/src/SketcherPrs/SketcherPrs_Transformation.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -34,13 +35,49 @@ SketcherPrs_Transformation::SketcherPrs_Transformation(ModelAPI_Feature* theCons { } -bool SketcherPrs_Transformation::updatePoints(double theStep) const +bool SketcherPrs_Transformation::IsReadyToDisplay(ModelAPI_Feature* theConstraint, + const std::shared_ptr&/* thePlane*/) { - std::shared_ptr aData = myConstraint->data(); + bool aReadyToDisplay = false; + + std::shared_ptr aData = theConstraint->data(); + // Get transformated objects list std::shared_ptr anAttrB = aData->reflist(SketchPlugin_Constraint::ENTITY_B()); if (anAttrB.get() == NULL) + return aReadyToDisplay; + + int aNbB = anAttrB->size(); + aReadyToDisplay = aNbB > 0; + +#ifdef DEBUG_HIDE_COPY_ATTRIBUTE + // additional check + if (theConstraint->getKind() == SketchPlugin_MultiTranslation::ID()) { + // If it is translation + AttributePoint2DPtr aStart = GeomDataAPI_Point2D::getPoint2D(aData, + SketchPlugin_MultiTranslation::START_POINT_ID()); + AttributePoint2DPtr aEnd = GeomDataAPI_Point2D::getPoint2D(aData, + SketchPlugin_MultiTranslation::END_POINT_ID()); + + aReadyToDisplay = aStart.get() && aEnd.get() && aStart->isInitialized() && aEnd->isInitialized(); + } + else if (theConstraint->getKind() == SketchPlugin_MultiRotation::ID()) { + // if it is rotation + AttributePoint2DPtr aCenter = GeomDataAPI_Point2D::getPoint2D(aData, SketchPlugin_MultiRotation::CENTER_ID()); + aReadyToDisplay = aCenter.get() && aCenter->isInitialized(); + } +#endif + return aReadyToDisplay; +} + +bool SketcherPrs_Transformation::updateIfReadyToDisplay(double theStep) const +{ + if (!IsReadyToDisplay(myConstraint, myPlane)) return false; + std::shared_ptr aData = myConstraint->data(); + // Get transformated objects list + std::shared_ptr anAttrB = aData->reflist(SketchPlugin_Constraint::ENTITY_B()); + int aNbB = anAttrB->size(); if (aNbB == 0) { @@ -48,7 +85,6 @@ bool SketcherPrs_Transformation::updatePoints(double theStep) const //if (!myPntArray.IsNull()) // mySPoints.Clear(); #endif - return false; } SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); @@ -57,8 +93,11 @@ 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); + if (SketcherPrs_Tools::getShape(aObj).get() == NULL) + continue; aP1 = aMgr->getPosition(aObj, this, theStep); myPntArray->SetVertice(i + 1, aP1); } @@ -75,29 +114,37 @@ 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()) { - 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 it is translation + AttributePoint2DPtr aStart = GeomDataAPI_Point2D::getPoint2D(aData, + SketchPlugin_MultiTranslation::START_POINT_ID()); + AttributePoint2DPtr aEnd = GeomDataAPI_Point2D::getPoint2D(aData, + 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()) { - std::shared_ptr aCenter = std::dynamic_pointer_cast( - aData->attribute(SketchPlugin_MultiRotation::CENTER_ID())); + // if it is rotation + AttributePoint2DPtr aCenter = GeomDataAPI_Point2D::getPoint2D(aData, 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);