-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include <QDesktopWidget>
#include <AIS_Axis.hxx>
-#include <AIS_Drawer.hxx>
+#if OCC_VERSION_LARGE > 0x06080000
+ #include <Prs3d_Drawer.hxx>
+#else
+ #include <AIS_Drawer.hxx>
+#endif
#include <AIS_ListOfInteractive.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
#include <Graphic3d_Texture2Dmanual.hxx>
+#include <Graphic3d_MaterialAspect.hxx>
#include <Graphic3d_TextureParams.hxx>
#include <Geom_Axis2Placement.hxx>
//myTrihedron->SetColor( Col );
myTrihedron->SetArrowColor( Col.Name() );
myTrihedron->SetSize(100);
- Handle(AIS_Drawer) drawer = myTrihedron->Attributes();
- if (drawer->HasDatumAspect()) {
+#if OCC_VERSION_LARGE > 0x06080000
+ Handle(Prs3d_Drawer) drawer = myTrihedron->Attributes();
+ if (drawer->HasOwnDatumAspect()) {
+#else
+ Handle(AIS_Drawer) drawer = myTrihedron->Attributes();
+ if (drawer->HasDatumAspect()) {
+#endif
Handle(Prs3d_DatumAspect) daspect = drawer->DatumAspect();
daspect->FirstAxisAspect()->SetColor(Quantity_Color(1.0, 0.0, 0.0, Quantity_TOC_RGB));
daspect->SecondAxisAspect()->SetColor(Quantity_Color(0.0, 1.0, 0.0, Quantity_TOC_RGB));
// selection
mySelectionEnabled = true;
myMultiSelectionEnabled = true;
+
+ //set clipping color and texture to standard
+ myClippingColor = QColor( 50, 50, 50 );
+ myDefaultTextureUsed = true;
+ myClippingTexture = QString();
+ myTextureModulated = true;
+ myClippingTextureScale = 1.0;
+
}
/*!
myEndPnt.setX(theEvent->x()); myEndPnt.setY(theEvent->y());
bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
- if (!aHasShift) emit deselection();
+ if (!aHasShift) {
+ myAISContext->ClearCurrents( false );
+ emit deselection();
+ }
if (myStartPnt == myEndPnt)
{
void OCCViewer_Viewer::onKeyPress(SUIT_ViewWindow* theWindow, QKeyEvent* theEvent)
{
if (!mySelectionEnabled) return;
- if (theEvent->key() != Qt::Key_S) return;
- if (!theWindow->inherits("OCCViewer_ViewWindow")) return;
- OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*) theWindow;
- if (!aView || aView->interactionStyle() != SUIT_ViewModel::KEY_FREE)
- return;
+ OCCViewer_ViewWindow* aView = qobject_cast<OCCViewer_ViewWindow*>( theWindow );
+ if ( !aView ) return;
- emit deselection();
+ bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
- if ( !isPreselectionEnabled() ) {
- Handle(V3d_View) aView3d = aView->getViewPort()->getView();
- if ( !aView3d.IsNull() ) {
- myAISContext->MoveTo(myCurPnt.x(), myCurPnt.y(), aView3d);
+ switch ( theEvent->key() ) {
+ case Qt::Key_S:
+ if (!aHasShift) {
+ myAISContext->ClearCurrents( false );
+ emit deselection();
}
- }
- myAISContext->Select();
+ if ( !isPreselectionEnabled() ) {
+ Handle(V3d_View) aView3d = aView->getViewPort()->getView();
+ if ( !aView3d.IsNull() ) {
+ myAISContext->MoveTo(myCurPnt.x(), myCurPnt.y(), aView3d);
+ }
+ }
- emit selectionChanged();
+ if (aHasShift && myMultiSelectionEnabled)
+ myAISContext->ShiftSelect();
+ else
+ myAISContext->Select();
+
+ emit selectionChanged();
+
+ break;
+ case Qt::Key_N:
+ if ( isPreselectionEnabled() ) {
+ if ( getAISContext()->HasOpenedContext() )
+ getAISContext()->HilightNextDetected( aView->getViewPort()->getView() );
+ }
+ break;
+ case Qt::Key_P:
+ if ( isPreselectionEnabled() ) {
+ if ( getAISContext()->HasOpenedContext() )
+ getAISContext()->HilightPreviousDetected( aView->getViewPort()->getView() );
+ }
+ break;
+ default:
+ break;
+ }
}
void OCCViewer_Viewer::onViewClosed(OCCViewer_ViewPort3d*)
}
}
+/*!
+ Sets a color of the clipped region
+ \param theColor - a new color of the clipped region
+*/
+void OCCViewer_Viewer::setClippingColor( const QColor& theColor )
+{
+ myClippingColor = theColor;
+
+ if( myInternalClipPlanes.IsEmpty() )
+ return;
+
+ Graphic3d_MaterialAspect aMaterialAspect = Graphic3d_MaterialAspect();
+ aMaterialAspect.SetColor( Quantity_Color( theColor.redF(), theColor.greenF(),
+ theColor.blueF(), Quantity_TOC_RGB ) );
+
+ for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
+ myInternalClipPlanes.Value(i)->SetCappingMaterial( aMaterialAspect );
+
+ update();
+}
+
+/*!
+ \return clipping color
+*/
+QColor OCCViewer_Viewer::clippingColor() const
+{
+ return myClippingColor;
+}
+
+// initialize a texture for clipped region
+Handle(Graphic3d_Texture2Dmanual) initClippingTexture( const bool isDefault, const QString& theTexture,
+ const bool isModulate, const double theScale )
+{
+ QString aTextureFile = isDefault ? ":images/hatch.png" : theTexture;
+ QPixmap px( aTextureFile );
+ const Handle(Image_PixMap) aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() );
+ Handle(Graphic3d_Texture2Dmanual) aTexture = new Graphic3d_Texture2Dmanual( aPixmap );
+ if( aTexture->IsDone() ) {
+ aTexture->EnableRepeat();
+ isModulate ? aTexture->EnableModulate() : aTexture->DisableModulate();
+ aTexture->GetParams()->SetScale( Graphic3d_Vec2( 1/( theScale*100 ), -1 / ( theScale*100 ) ) );
+ }
+ return aTexture;
+}
+
+/*!
+ Sets default texture parameters
+ \param isDefault - use/non-use default texture
+ \param theTexture - new texture of the clipped region
+ \param isModulate - enable/disable texture modulate mode
+ \param theScale - scale factor.
+*/
+void OCCViewer_Viewer::setClippingTextureParams( const bool isDefault, const QString& theTexture,
+ const bool isModulate, const double theScale )
+{
+ myDefaultTextureUsed = isDefault;
+ myClippingTexture = theTexture;
+ myTextureModulated = isModulate;
+ myClippingTextureScale = theScale;
+
+ if( myInternalClipPlanes.IsEmpty() )
+ return;
+
+ Handle(Graphic3d_Texture2Dmanual) aTexture =
+ initClippingTexture( myDefaultTextureUsed, myClippingTexture,
+ myTextureModulated, myClippingTextureScale );
+
+ for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
+ myInternalClipPlanes.Value(i)->SetCappingTexture( aTexture );
+
+ update();
+}
+
+/*!
+ \return true if default texture is used
+*/
+bool OCCViewer_Viewer::isDefaultTextureUsed() const
+{
+ return myDefaultTextureUsed;
+}
+
+/*!
+ \return clipping texture
+*/
+QString OCCViewer_Viewer::clippingTexture() const
+{
+ return myClippingTexture;
+}
+
+/*!
+ \return true if texture is modulated
+*/
+bool OCCViewer_Viewer::isTextureModulated() const
+{
+ return myTextureModulated;
+}
+
+/*!
+ \return scale factor of texture
+*/
+double OCCViewer_Viewer::clippingTextureScale() const
+{
+ return myClippingTextureScale;
+}
+
/*!
Builds popup for occ viewer
*/
#if OCC_VERSION_LARGE > 0x06070100
Bnd_Box aBox = view3d->View()->MinMaxValues();
- Xmin = aBox.CornerMin().X();
- Ymin = aBox.CornerMin().Y();
- Zmin = aBox.CornerMin().Z();
- Xmax = aBox.CornerMax().X();
- Ymax = aBox.CornerMax().Y();
- Zmax = aBox.CornerMax().Z();
+ Xmin = aBox.IsVoid() ? RealFirst() : aBox.CornerMin().X();
+ Ymin = aBox.IsVoid() ? RealFirst() : aBox.CornerMin().Y();
+ Zmin = aBox.IsVoid() ? RealFirst() : aBox.CornerMin().Z();
+ Xmax = aBox.IsVoid() ? RealLast() : aBox.CornerMax().X();
+ Ymax = aBox.IsVoid() ? RealLast() : aBox.CornerMax().Y();
+ Zmax = aBox.IsVoid() ? RealLast() : aBox.CornerMax().Z();
#else
view3d->View()->MinMaxValues( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax );
#endif
aGraphic3dPlane->SetOn( theIsOn );
aGraphic3dPlane->SetCapping( Standard_True );
- // load capping texture
- QPixmap px( ":images/hatch.png" );
- if( !px.isNull() ) {
- const Handle(Image_PixMap) aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() );
- Handle(Graphic3d_Texture2Dmanual) aTexture = new Graphic3d_Texture2Dmanual( aPixmap );
- if( aTexture->IsDone() ) {
- aTexture->EnableModulate();
- aTexture->EnableRepeat();
- aTexture->GetParams()->SetScale( Graphic3d_Vec2( 0.01, 0.01 ) );
- aGraphic3dPlane->SetCappingTexture( aTexture );
- }
- }
+ // set capping color
+ Graphic3d_MaterialAspect aMaterialAspect = Graphic3d_MaterialAspect();
+ aMaterialAspect.SetColor( Quantity_Color( myClippingColor.redF(), myClippingColor.greenF(),
+ myClippingColor.blueF(), Quantity_TOC_RGB ) );
+ aGraphic3dPlane->SetCappingMaterial( aMaterialAspect );
+
+ // set capping texture
+ aGraphic3dPlane->SetCappingTexture( initClippingTexture( myDefaultTextureUsed, myClippingTexture,
+ myTextureModulated, myClippingTextureScale ) );
+
return aGraphic3dPlane;
}
/*!