X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_ResultPrs.cpp;h=69ef0e7517952f6f6d9e84f8b8fdef16fe1a52fc;hb=f9fd953bf814fad40ae045f6164c7f80229b0872;hp=5031dac249edaa366522b15c03060c7eac8b0ffa;hpb=38afbd899a8645c83e17f2c24a17a2b7414911b4;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_ResultPrs.cpp b/src/ModuleBase/ModuleBase_ResultPrs.cpp index 5031dac24..69ef0e751 100644 --- a/src/ModuleBase/ModuleBase_ResultPrs.cpp +++ b/src/ModuleBase/ModuleBase_ResultPrs.cpp @@ -5,21 +5,23 @@ // Author: Vitaly SMETANNIKOV #include "ModuleBase_ResultPrs.h" +#include "ModuleBase_Tools.h" #include +#include #include -#include #include -#include +#include +#include #include #include -IMPLEMENT_STANDARD_HANDLE(ModuleBase_ResultPrs, AIS_Shape); -IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_ResultPrs, AIS_Shape); +IMPLEMENT_STANDARD_HANDLE(ModuleBase_ResultPrs, ViewerData_AISShape); +IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_ResultPrs, ViewerData_AISShape); ModuleBase_ResultPrs::ModuleBase_ResultPrs(ResultPtr theResult) - : AIS_Shape(TopoDS_Shape()), myResult(theResult), myIsSketchMode(false) + : ViewerData_AISShape(TopoDS_Shape()), myResult(theResult), myIsSketchMode(false) { std::shared_ptr aShapePtr = ModelAPI_Tools::shape(theResult); std::shared_ptr aWirePtr = @@ -28,18 +30,16 @@ ModuleBase_ResultPrs::ModuleBase_ResultPrs(ResultPtr theResult) if (aWirePtr->hasPlane() ) { // If this is a wire with plane defined thin it is a sketch-like object // It must have invisible faces - GeomAlgoAPI_SketchBuilder::createFaces(aWirePtr->origin(), aWirePtr->dirX(), - aWirePtr->dirY(), aWirePtr->norm(), aWirePtr, myFacesList); - - myOriginalShape = aWirePtr->impl(); - Set(myOriginalShape); myIsSketchMode = true; - } else { - Set(aWirePtr->impl()); } - } else { - Set(aShapePtr->impl()); } + TopoDS_Shape aShape = aShapePtr->impl(); + Set(aShape); + Handle(Prs3d_Drawer) aDrawer = Attributes(); + if (aDrawer->HasOwnPointAspect()) + aDrawer->PointAspect()->SetTypeOfMarker(Aspect_TOM_PLUS); + else + aDrawer->SetPointAspect(new Prs3d_PointAspect(Aspect_TOM_PLUS, Quantity_NOC_YELLOW, 1.)); } @@ -50,15 +50,40 @@ void ModuleBase_ResultPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& t std::shared_ptr aShapePtr = ModelAPI_Tools::shape(myResult); if (!aShapePtr) return; + if (myIsSketchMode) { + myFacesList.clear(); + ResultConstructionPtr aConstruction = + std::dynamic_pointer_cast(myResult); + if (aConstruction.get()) { + int aFacesNum = aConstruction->facesNum(); + for(int aFaceIndex = 0; aFaceIndex < aFacesNum; aFaceIndex++) { + myFacesList.push_back(aConstruction->face(aFaceIndex)); + } + } + } myOriginalShape = aShapePtr->impl(); - Set(aShapePtr->impl()); - AIS_Shape::Compute(thePresentationManager, thePresentation, theMode); + if (!myOriginalShape.IsNull()) { + Set(myOriginalShape); + + // change deviation coefficient to provide more precise circle + Handle(Prs3d_Drawer) aDrawer = Attributes(); + Standard_Real aPrevDeviation = aDrawer->DeviationCoefficient(); + //aDrawer->SetDeviationCoefficient(ModuleBase_Tools::defaultDeviationCoefficient()); + + AIS_Shape::Compute(thePresentationManager, thePresentation, theMode); + + //aDrawer->SetDeviationCoefficient(aPrevDeviation); + } } void ModuleBase_ResultPrs::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) { + if (aMode > TopAbs_SHAPE) + // In order to avoid using custom selection modes + return; + if (myIsSketchMode) { if (aMode == TopAbs_FACE) { BRep_Builder aBuilder;