]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Implemented a new method of displaying shading with edges mode of object using OCC...
authormpa <mpa@opencascade.com>
Thu, 17 Jul 2014 10:56:46 +0000 (14:56 +0400)
committermpa <mpa@opencascade.com>
Thu, 17 Jul 2014 10:56:46 +0000 (14:56 +0400)
src/GEOMGUI/GEOM_Displayer.cxx
src/OBJECT/GEOM_AISShape.cxx
src/OBJECT/GEOM_AISShape.hxx
src/OBJECT/GEOM_Actor.cxx
src/OBJECT/GEOM_Actor.h

index 8a896949271b40b99d762c45b03a59ac6300492f..09c3ccf2d0f1d225ff912c269ee202c168982ce1 100644 (file)
@@ -853,9 +853,6 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
   
   // - color for edges in shading+edges mode
   AISShape->SetEdgesInShadingColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::OutlineColor ) ).value<QColor>() ) );
-  
-  // ???
-  AISShape->storeBoundaryColors();
 
   // set display mode
   AISShape->SetDisplayMode( HasDisplayMode() ? 
@@ -864,6 +861,13 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
                             // display mode from properties
                             propMap.value( GEOM::propertyName( GEOM::DisplayMode ) ).toInt() );
 
+  // - face boundaries color
+  if( AISShape->DisplayMode() == GEOM_AISShape::ShadingWithEdges )
+    AISShape->Attributes()->SetFaceBoundaryDraw( Standard_True );
+  anAspect = AISShape->Attributes()->FaceBoundaryAspect();
+  anAspect->SetColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::OutlineColor ) ).value<QColor>() ) );
+  AISShape->Attributes()->SetFaceBoundaryAspect( anAspect );
+
   // set display vectors flag
   AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() );
 
index e790b807240a0d780d8c418e39c53004699b20eb..462eed0c24c5187b9046e1cac56ad8eae2ed0026 100644 (file)
@@ -158,14 +158,9 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape,
 
   myShadingColor = Quantity_Color( Quantity_NOC_GOLDENROD );
   myPrevDisplayMode = 0;
-  storeBoundaryColors();
-
 
   myEdgesInShadingColor = Quantity_Color( Quantity_NOC_GOLDENROD );
 
-  myUIsoNumber = -1;
-  myVIsoNumber = -1;
-
   myTopLevel = Standard_False;
   Graphic3d_MaterialAspect aMatAspect;
   if ( !HasMaterial() ) {
@@ -226,9 +221,6 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent
     case 0://StdSelect_DM_Wireframe: 
     case CustomHighlight:
     {
-      restoreIsoNumbers();
-      // Restore wireframe edges colors
-      restoreBoundaryColors();
       if(isTopLev) {
               SetColor(topLevelColor());
               Handle(Prs3d_LineAspect) anAspect = Attributes()->WireAspect();
@@ -243,10 +235,16 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent
     }
     case 1://StdSelect_DM_Shading:
     {
-      restoreIsoNumbers();
       shadingMode(aPresentationManager, aPrs, aMode);
-      // Store wireframe edges colors
-      storeBoundaryColors();
+      break;
+    }
+    case 2: { //ShadingWithEdges
+      //Shaded faces
+      shadingMode(aPresentationManager, aPrs, AIS_Shaded);
+      myDrawer->SetFaceBoundaryDraw( Standard_True );
+      Handle(Prs3d_LineAspect) aBoundaryAspect =
+        new Prs3d_LineAspect ( myEdgesInShadingColor, Aspect_TOL_SOLID, myOwnWidth );
+      myDrawer->SetFaceBoundaryAspect (aBoundaryAspect);
       break;
     }
     case 3: //StdSelect_DM_HLR:
@@ -258,38 +256,6 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent
       break;
     }
   }
-
-  if ( aMode == ShadingWithEdges ) {
-    // Temporary store number of iso lines in order to recover its later 
-    // when display mode is achnged to 'Wirefame' or 'Shading'.
-    // Iso lines are not displayed in 'Shading with edges' mode.
-    storeIsoNumbers();
-
-    // Reset number of iso lines to 0
-    resetIsoNumbers();
-
-    //Shaded faces
-    shadingMode(aPresentationManager, aPrs, AIS_Shaded);
-
-    // Store wireframe edges colors
-    storeBoundaryColors();
-
-    // Coloring edges
-    Handle(Prs3d_LineAspect) anAspect = myDrawer->UnFreeBoundaryAspect();
-    anAspect->SetColor( myEdgesInShadingColor );
-    myDrawer->SetUnFreeBoundaryAspect( anAspect );
-    
-    anAspect = myDrawer->FreeBoundaryAspect();
-    anAspect->SetColor( myEdgesInShadingColor );
-    myDrawer->SetFreeBoundaryAspect( anAspect );
-
-    // Add edges to presentation
-    if( anIsColorField && myFieldDimension == 1 )
-      drawField( aPrs );
-    else
-      StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer);
-  }
-
   if (isShowVectors())
   {
     const bool isVector = IsKind(STANDARD_TYPE(GEOM_AISVector));
@@ -428,61 +394,6 @@ void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPre
   }
 }
 
-void GEOM_AISShape::storeIsoNumbers()
-{
-  myUIsoNumber = myDrawer->UIsoAspect()->Number();
-  myVIsoNumber = myDrawer->VIsoAspect()->Number();
-}
-
-void GEOM_AISShape::restoreIsoNumbers()
-{
-  if ( myUIsoNumber > 0 ) {
-    // Restore number of U iso lines
-    Handle(Prs3d_IsoAspect) anAspect = myDrawer->UIsoAspect();
-    anAspect->SetNumber( myUIsoNumber );
-    myDrawer->SetUIsoAspect( anAspect );
-  }
-  
-  if ( myVIsoNumber > 0 ) {
-    // Restore number of V iso lines
-    Handle(Prs3d_IsoAspect) anAspect = myDrawer->VIsoAspect();
-    anAspect->SetNumber( myVIsoNumber );
-    myDrawer->SetVIsoAspect( anAspect );
-  }
-}
-
-void GEOM_AISShape::resetIsoNumbers()
-{
-  Handle(Prs3d_IsoAspect) anAspect = myDrawer->UIsoAspect();
-  anAspect->SetNumber( 0 );
-  myDrawer->SetUIsoAspect( anAspect );
-  
-  anAspect = myDrawer->VIsoAspect();
-  anAspect->SetNumber( 0 );
-  myDrawer->SetVIsoAspect( anAspect );
-}
-
-void GEOM_AISShape::storeBoundaryColors()
-{
-  Aspect_TypeOfLine aLT;
-  Standard_Real aW;
-
-  myDrawer->FreeBoundaryAspect()->Aspect()->Values( myFreeBoundaryColor, aLT, aW);
-  myDrawer->UnFreeBoundaryAspect()->Aspect()->Values( myUnFreeBoundaryColor, aLT, aW);
-}
-void GEOM_AISShape::restoreBoundaryColors()
-{
-  Handle(Prs3d_LineAspect) anAspect = myDrawer->FreeBoundaryAspect();
-  anAspect->SetColor( myFreeBoundaryColor );
-  myDrawer->SetFreeBoundaryAspect( anAspect );
-
-  anAspect = myDrawer->UnFreeBoundaryAspect();
-  anAspect->SetColor( myUnFreeBoundaryColor );
-  myDrawer->SetUnFreeBoundaryAspect( anAspect );
-}
-
-
 Standard_Boolean GEOM_AISShape::isTopLevel() {
   return myTopLevel;
 }
index b2881d2c6d353c3d6b9728e927400328e2a6f28c..d744a791af5a7d1df8c0969edfd5177375f2c496 100644 (file)
@@ -139,12 +139,6 @@ public:
         const Handle(Standard_Type)& DynamicType() const;
         Standard_Boolean             IsKind(const Handle(Standard_Type)&) const;
 
-        void storeIsoNumbers();
-        void restoreIsoNumbers();
-        void resetIsoNumbers();
-
-        void storeBoundaryColors();
-
         static Quantity_Color topLevelColor();
   static void           setTopLevelColor(const Quantity_Color c);
 
@@ -173,8 +167,6 @@ protected:
                    const Handle(Prs3d_Presentation)& aPrs,
                    const Standard_Integer aMode);
 
-  void restoreBoundaryColors();
-
   // Displaying the field data
   void drawField( const Handle(Prs3d_Presentation)& thePrs,
                   const bool theIsText = false,
@@ -185,15 +177,8 @@ protected:
                                              gp_Pnt& theCenter );
 
   Quantity_Color myShadingColor;
-
-  Quantity_Color myFreeBoundaryColor;
-  Quantity_Color myUnFreeBoundaryColor;
-
   Quantity_Color myEdgesInShadingColor;
 
-  int            myUIsoNumber;
-  int            myVIsoNumber;
-
 private: 
   TCollection_AsciiString  myName;
   bool                     myDisplayVectors;
index 92860af3e66d20007486a00028423dd41ce335af..47bc66b176d03b06d2c5c4c9ef2ea03f7a16e4fb 100644 (file)
@@ -186,9 +186,6 @@ GEOM_Actor::GEOM_Actor():
 
   myShadingFaceActor->SetProperty(myShadingFaceProp.GetPointer());
 
-  myNbIsos[0] = -1;
-  myNbIsos[1] = -1;
-
   // Toggle display mode 
   setDisplayMode(0); // WIRE FRAME
   SetVectorMode(0);  //
@@ -296,16 +293,6 @@ setDisplayMode(int theMode)
 #ifdef MYDEBUG
   MESSAGE ( "GEOM_Actor::setDisplayMode = "<<theMode );
 #endif
-  
-  if ( theMode == (int)eShading || theMode == (int)eShadingWithEdges ) {
-    // Temporary store number of iso lines in order to recover its later 
-    // when display mode is changed to 'Wirefame'
-    // Iso lines are not displayed in 'Shading' and 'Shading with edges' modes.
-    StoreIsoNumbers();
-
-    // Reset number of iso lines to 0
-    ResetIsoNumbers();
-  }
 
   if ( theMode == (int)eShadingWithEdges ) {
     // Coloring edges
@@ -320,9 +307,6 @@ setDisplayMode(int theMode)
                                                myEdgesInShadingColor[2]);
   }
   else {
-    // Restore number of iso-lines
-    RestoreIsoNumbers();
-
     // Coloring edges
     myIsolatedEdgeActor->GetProperty()->SetColor(myIsolatedEdgeColor[0],
                                                  myIsolatedEdgeColor[1],
@@ -896,14 +880,6 @@ GEOM_Actor
   MESSAGE ( this << " GEOM_Actor::Highlight myIsSelected="<<myIsSelected );
 #endif
 
-  if ( myDisplayMode == (int)eShading || myDisplayMode == (int)eShadingWithEdges ) {
-    if ( theIsHighlight )
-      RestoreIsoNumbers();
-    else
-      // Reset number of iso lines to 0
-      ResetIsoNumbers();
-  }
-
   SALOME_Actor::Highlight(theIsHighlight); // this method call ::highlight(theIsHighlight) in the end
   SetVisibility(GetVisibility());
 }
@@ -924,14 +900,6 @@ GEOM_Actor
   if ( !GetPickable() )
     return false;  
 
-  if ( myDisplayMode == (int)eShading || myDisplayMode == (int)eShadingWithEdges ) {
-    if ( theIsHighlight )
-      RestoreIsoNumbers();
-    else
-      // Reset number of iso lines to 0
-      ResetIsoNumbers();
-  }
-
   myPreHighlightActor->SetVisibility( false );
   bool anIsPreselected = myIsPreselected;
   
@@ -1081,11 +1049,6 @@ void GEOM_Actor::SetEdgesInShadingColor(double r,double g,double b)
   myEdgesInShadingColor[2] = b;
 }
 
-void GEOM_Actor::StoreIsoNumbers()
-{  
-  myWireframeFaceSource->GetNbIso(myNbIsos[0], myNbIsos[1]);
-}
-
 void GEOM_Actor::SetIsosWidth(const int width) {
   myWireframeFaceActor->GetProperty()->SetLineWidth(width);
 }
@@ -1106,16 +1069,3 @@ void GEOM_Actor::SetWidth(const int width) {
 int GEOM_Actor::GetWidth() const {
   return (int)myIsolatedEdgeActor->GetProperty()->GetLineWidth();
 }
-    
-void GEOM_Actor::RestoreIsoNumbers()
-{
-  if ( myNbIsos[0] > 0 || myNbIsos[1] > 0 )
-    // Restore number of U and (or) V iso lines
-    myWireframeFaceSource->SetNbIso(myNbIsos);
-}
-  
-void GEOM_Actor::ResetIsoNumbers()
-{
-  int aNb[2] = {0, 0};
-  myWireframeFaceSource->SetNbIso(aNb);
-}
index 68766393298606618560f4f8828352f62e548085..fa7193a0f4b2c9ccf54f19900cad11eaa6727705 100644 (file)
@@ -201,15 +201,6 @@ public:
   virtual
   bool
   GetVectorMode();
-  
-  void
-  StoreIsoNumbers();
-
-  void
-  RestoreIsoNumbers();
-  
-  void
-  ResetIsoNumbers();
 
 protected:
   void SetModified();
@@ -221,7 +212,6 @@ protected:
 
 private:
   TopoDS_Shape myShape;
-  int myNbIsos[2];
   bool isOnlyVertex;
 
   float myDeflection;