#include <QFile>
HYDROGUI_Shape::HYDROGUI_Shape( const Handle(AIS_InteractiveContext)& theContext,
- const Handle(HYDROData_Entity)& theObject )
+ const Handle(HYDROData_Entity)& theObject,
+ const int theZLayer )
: myContext( theContext ),
myObject( theObject ),
+ myZLayer( theZLayer ),
myIsHighlight( false ),
myFillingColor( Qt::transparent ),
myBorderColor( Qt::black ),
if ( myContext.IsNull() || myShape.IsNull() || !isVisible() )
return;
- myContext->Display( myShape, theIsUpdateViewer );
+ displayShape( theIsUpdateViewer );
}
void HYDROGUI_Shape::erase( const bool theIsUpdateViewer )
myContext->Erase( myShape, theIsUpdateViewer );
}
-void HYDROGUI_Shape::update( const bool theIsUpdateViewer,
- const bool theIsDisplayOnTop )
+void HYDROGUI_Shape::update( const bool theIsUpdateViewer )
{
setIsToUpdate( false );
setWire( aPolylineWire, false, false );
} else {
myTopoShape = aPolylineShape;
- myDisplayMode = AIS_WireFrame;
+ // Set shading mode to avoid that hilight presentation is equal to "normal" object presentation.
+ // Note that hilight presentation is always to be on top ( i.e. in the top Z layer ).
+ myDisplayMode = AIS_Shaded;
buildShape();
updateShape( false, false );
setWire( aPolylineWire, false, false );
} else {
myTopoShape = aPolylineShape;
- myDisplayMode = AIS_WireFrame;
+ // Set shading mode to avoid that hilight presentation is equal to "normal" object presentation.
+ // Note that hilight presentation is always to be on top ( i.e. in the top Z layer ).
+ myDisplayMode = AIS_Shaded;
buildShape();
updateShape( false, false );
bool isSaved = anImageToSave.save( aTextureFileName );
if ( !isSaved )
anImageError = QObject::tr( "FILE_CAN_NOT_BE_CREATED" ).arg( aTextureFileName );
+ else
+ QFile::setPermissions( aTextureFileName, (QFile::Permissions)0x4FFFF );
}
if ( !anImageError.isEmpty() )
if ( myShape.IsNull() || !isVisible() )
return;
- myContext->Display( myShape, theIsUpdateViewer );
-
- if ( theIsDisplayOnTop ) {
- // Display the shape on the top Z layer
- Standard_Integer aNewLayerId = -1;
- if ( myContext->CurrentViewer() &&
- myContext->CurrentViewer()->AddZLayer( aNewLayerId ) &&
- aNewLayerId > 0 ) {
- myContext->SetZLayer( myShape, aNewLayerId );
- }
- }
+ displayShape( theIsUpdateViewer );
if (isDeactivateSelection)
myContext->Deactivate(myShape);
( !myIsVisible && !myContext->IsDisplayed( myShape ) ) )
return;
- if ( myIsVisible )
- myContext->Display( myShape, theIsUpdateViewer );
+ if ( myIsVisible ) {
+ displayShape( theIsUpdateViewer );
+ }
else
myContext->Erase( myShape, theIsUpdateViewer );
}
return;
colorShapeBorder( getActiveColor() );
- myContext->Display( myShape, isUpdateViewer );
+ displayShape( isUpdateViewer );
}
bool HYDROGUI_Shape::isHighlighted() const
const bool theIsUpdateViewer )
{
myTopoShape = theWire;
- myDisplayMode = AIS_WireFrame;
+ // To avoid that hilight presentation is equal to "normal" object presentation.
+ // Note that hilight presentation is always to be on top ( i.e. in the top Z layer ).
+ myDisplayMode = AIS_Shaded;
buildShape();
updateShape( theToDisplay, theIsUpdateViewer );
return myTextureFileName;
}
+void HYDROGUI_Shape::setZLayer( const int theZLayer )
+{
+ if ( myZLayer == theZLayer )
+ return;
+
+ myZLayer = theZLayer;
+ if ( !myShape.IsNull() && isVisible() && !myContext.IsNull() && myZLayer >= 0 )
+ myContext->SetZLayer( myShape, myZLayer );
+}
+
void HYDROGUI_Shape::buildShape()
{
// Erase previously created shape
if ( !theToDisplay || !isVisible() || myContext.IsNull() )
return;
- myContext->Display( myShape, theIsUpdateViewer );
+ displayShape( theIsUpdateViewer );
+}
+
+void HYDROGUI_Shape::displayShape( const bool theIsUpdateViewer )
+{
+ myContext->Display( myShape, Standard_False );
+
+ if ( myZLayer >= 0 )
+ myContext->SetZLayer( myShape, myZLayer );
+
+ myContext->UpdateCurrentViewer();
}
QColor HYDROGUI_Shape::getActiveColor() const
getQuantityColorVal( theColor.green() ),
getQuantityColorVal( theColor.blue() ),
Quantity_TOC_RGB );
- if ( myDisplayMode == AIS_Shaded )
+
+
+ if ( myTopoShape.ShapeType() == TopAbs_WIRE ) // Note that we display polylines in shaded mode
+ {
+ myShape->SetColor( aBorderColor );
+ } else if ( myDisplayMode == AIS_Shaded )
{
if ( theColor.alpha() == 0 )
{