#include "OCCViewer_VService.h"
#include "OCCViewer_ViewPort3d.h"
#include "OCCViewer_ClippingDlg.h"
+#include "OCCViewer_Utilities.h"
#include "SUIT_ViewWindow.h"
#include "SUIT_ViewManager.h"
#include "ViewerData_AISShape.hxx"
+#include <Basics_OCCTVersion.hxx>
+
#include "QtxActionToolMgr.h"
#include "QtxBackgroundTool.h"
#include <AIS_ListOfInteractive.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <Graphic3d_Texture2Dmanual.hxx>
+#include <Graphic3d_TextureParams.hxx>
+
#include <Geom_Axis2Placement.hxx>
#include <Prs3d_Drawer.hxx>
#include <Prs3d_DatumAspect.hxx>
#include <Visual3d_View.hxx>
-
-// VSR: Uncomment below line to allow texture background support in OCC viewer
-#define OCC_ENABLE_TEXTURED_BACKGROUND
-
/*!
Get data for supported background modes: gradient types, identifiers and supported image formats
*/
Diagonal1Gradient << Diagonal2Gradient <<
Corner1Gradient << Corner2Gradient <<
Corner3Gradient << Corner4Gradient;
-#if OCC_VERSION_LARGE > 0x06050200 // enabled since OCCT 6.5.3, since in previous version this functionality is buggy
-#ifdef OCC_ENABLE_TEXTURED_BACKGROUND
txtList << Qtx::CenterTexture << Qtx::TileTexture << Qtx::StretchTexture;
-#endif
-#endif
return tr("BG_IMAGE_FILES");
}
//myV3dViewer->Init(); // to avoid creation of the useless perspective view (see OCCT issue 0024267)
myV3dViewer->SetDefaultLights();
-#if OCC_VERSION_LARGE <= 0x06060000 // Porting to OCCT higher 6.6.0 version
- myV3dCollector = OCCViewer_VService::CreateViewer( TCollection_ExtendedString("Collector3d").ToExtString() );
- //myV3dCollector->Init(); // to avoid creation of the useless perspective view (see OCCT issue 0024267)
- myV3dCollector->SetDefaultLights();
-#endif
-
// init selector
-#if OCC_VERSION_LARGE <= 0x06060000
- myAISContext = new AIS_InteractiveContext( myV3dViewer, myV3dCollector );
-#else
myAISContext = new AIS_InteractiveContext( myV3dViewer );
-#endif
myAISContext->SelectionColor( Quantity_NOC_WHITE );
// display isoline on planar faces (box for ex.)
// selection
mySelectionEnabled = true;
myMultiSelectionEnabled = true;
-
-
- SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
- if(resMgr)
- myShowStaticTrihedron = resMgr->booleanValue( "3DViewer", "show_static_trihedron", true );
}
/*!
{
myAISContext.Nullify();
myV3dViewer.Nullify();
-#if OCC_VERSION_LARGE <= 0x06060000
- myV3dCollector.Nullify();
-#endif
}
/*!
if ( vp3d )
{
vp3d->getView()->SetSurfaceDetail(V3d_TEX_ALL);
+ // connect signal from viewport
+ connect(vp3d, SIGNAL(vpClosed(OCCViewer_ViewPort3d*)), this, SLOT(onViewClosed(OCCViewer_ViewPort3d*)));
+ connect(vp3d, SIGNAL(vpMapped(OCCViewer_ViewPort3d*)), this, SLOT(onViewMapped(OCCViewer_ViewPort3d*)));
}
}
}
initView( vw );
// set default background for view window
vw->setBackground( background(0) ); // 0 means MAIN_VIEW (other views are not yet created here)
- // connect signal from viewport
- connect(view->getViewPort(), SIGNAL(vpClosed()), this, SLOT(onViewClosed()));
- connect(view->getViewPort(), SIGNAL(vpMapped()), this, SLOT(onViewMapped()));
+
return view;
}
emit selectionChanged();
}
-void OCCViewer_Viewer::onViewClosed()
+void OCCViewer_Viewer::onViewClosed(OCCViewer_ViewPort3d*)
{
Standard_Integer aViewsNb = 0;
for ( myV3dViewer->InitActiveViews(); myV3dViewer->MoreActiveViews(); myV3dViewer->NextActiveViews())
}
}
-void OCCViewer_Viewer::onViewMapped()
+void OCCViewer_Viewer::onViewMapped(OCCViewer_ViewPort3d* viewPort)
{
setTrihedronShown( true );
+ bool showStaticTrihedron = true;
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ if ( resMgr ) showStaticTrihedron = resMgr->booleanValue( "3DViewer", "show_static_trihedron", true );
+ viewPort->showStaticTrihedron( showStaticTrihedron );
}
int OCCViewer_Viewer::getTopLayerId()
{
-#if OCC_VERSION_LARGE > 0x06050200
if ( myTopLayerId == 0 && !myAISContext->CurrentViewer().IsNull() )
myAISContext->CurrentViewer()->AddZLayer( myTopLayerId );
-#endif
return myTopLayerId;
}
AIS_ListOfInteractive List;
myAISContext->DisplayedObjects(List);
-#if OCC_VERSION_LARGE <= 0x06060000
- if( !onlyInViewer )
- {
- AIS_ListOfInteractive List1;
- myAISContext->ObjectsInCollector(List1);
- List.Append(List1);
- }
-#endif
-
AIS_ListIteratorOfListOfInteractive ite(List);
for ( ; ite.More(); ite.Next() )
if( ite.Value()==obj )
*/
OCCViewer_ViewWindow* OCCViewer_Viewer::createSubWindow()
{
- return new OCCViewer_ViewWindow( 0, this);
+ return new OCCViewer_ViewWindow(0, this);
}
// obsolete
/*!
Set the show static trihedron flag
*/
-void OCCViewer_Viewer::setStaticTrihedronDisplayed(const bool on) {
- if(myShowStaticTrihedron != on) {
- OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView());
- if(!aView)
- return;
-
- OCCViewer_ViewPort3d* vp3d = aView->getViewPort();
- if(vp3d) {
- myShowStaticTrihedron = on;
- vp3d->updateStaticTriedronVisibility();
- }
- }
+void OCCViewer_Viewer::setStaticTrihedronDisplayed(const bool on)
+{
+ OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView());
+ if ( aView ) aView->showStaticTrihedron( on );
}
/*!
double aMaxSide = 0;
double Xmin = 0, Ymin = 0, Zmin = 0, Xmax = 0, Ymax = 0, Zmax = 0;
+#if OCC_VERSION_LARGE > 0x06070100
+ Bnd_Box aBox = view3d->View()->MinMaxValues();
+ 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
if ( Xmin != RealFirst() && Ymin != RealFirst() && Zmin != RealFirst() &&
Xmax != RealLast() && Ymax != RealLast() && Zmax != RealLast() )
}
}
-
+/*!
+ Creates clipping plane based on the incoming plane
+*/
+Handle(Graphic3d_ClipPlane) OCCViewer_Viewer::createClipPlane(const gp_Pln& thePlane, const Standard_Boolean theIsOn)
+{
+ Handle(Graphic3d_ClipPlane) aGraphic3dPlane = new Graphic3d_ClipPlane( thePlane );
+ 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 );
+ }
+ }
+ return aGraphic3dPlane;
+}
/*!
Applies clipping planes to clippable objects
*/
gp_Pnt anOrigin( aPlane.X, aPlane.Y, aPlane.Z );
gp_Dir aDirection( aDx, aDy, aDz );
- Handle(Graphic3d_ClipPlane) aGraphic3dPlane = new Graphic3d_ClipPlane( gp_Pln( anOrigin, aDirection ) );
- aGraphic3dPlane->SetOn( aPlane.IsOn );
-
- myInternalClipPlanes.Append( aGraphic3dPlane );
+ myInternalClipPlanes.Append( createClipPlane( gp_Pln( anOrigin, aDirection ), aPlane.IsOn ) );
myClipPlanes.push_back( aPlane );
}