-// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 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
// Author :
#include "OCCViewer_ViewWindow.h"
+#include "OCCViewer_ViewFrame.h"
#include "OCCViewer_ViewModel.h"
#include "OCCViewer_ViewPort3d.h"
#include "OCCViewer_ViewManager.h"
#include "OCCViewer_AxialScaleDlg.h"
#include "OCCViewer_CubeAxesDlg.h"
#include "OCCViewer_ClippingDlg.h"
+#include "OCCViewer_RayTracingDlg.h"
+#include "OCCViewer_EnvTextureDlg.h"
+#include "OCCViewer_LightSourceDlg.h"
+#include "OCCViewer_Utilities.h"
#include <SUIT_Desktop.h>
#include <SUIT_Session.h>
#include <QtxMultiAction.h>
#include <QtxRubberBand.h>
-#include <Basics_OCCTVersion.hxx>
-
#include <QPainter>
#include <QTime>
#include <QImage>
#include <Graphic3d_MapOfStructure.hxx>
#include <Graphic3d_Structure.hxx>
#include <Graphic3d_ExportFormat.hxx>
-#if OCC_VERSION_LARGE > 0x06090000
#include <Graphic3d_StereoMode.hxx>
#include <Graphic3d_RenderingParams.hxx>
-#endif
-
-#include <Visual3d_View.hxx>
#include <V3d_Plane.hxx>
#include <V3d_Light.hxx>
static QEvent* l_mbPressEvent = 0;
-#ifdef WIN32
-# include <QWindowsStyle>
-#endif
+//#ifdef WIN32
+//# include <QWindowsStyle>
+//#endif
+#ifdef __APPLE__
+#include <OpenGL/gl.h>
+#else
#include <GL/gl.h>
+#endif
// To avoid conflict between KeyPress from the X.h (define KeyPress 2)
// and QEvent::KeyPress (qevent.h)
#undef KeyPress
#endif
+// Enable ray tracing features
+#define ENABLE_RAY_TRACING
+
const char* imageZoomCursor[] = {
"32 32 3 1",
". c None",
myModel = theModel;
myRestoreFlag = 0;
myEnableDrawMode = false;
+ myDrawRectEnabled = true;
myDrawRect=false;
updateEnabledDrawMode();
myScalingDlg = 0;
setCentralWidget(myViewPort);
myOperation = NOTHING;
- myCurrPointType = GRAVITY;
- myPrevPointType = GRAVITY;
+ myCurrPointType = BBCENTER;
+ myPrevPointType = BBCENTER;
mySelectedPoint = gp_Pnt(0.,0.,0.);
myRotationPointSelection = false;
if ( aEvent->modifiers().testFlag(Qt::ControlModifier) ) {
Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
- if ( isPreselectionEnabled() && ic->HasOpenedContext() ) {
+ if ( isPreselectionEnabled() && myModel->useLocalSelection() ) {
if ( aEvent->delta() > 0 ) {
ic->HilightNextDetected( myViewPort->getView() );
} else {
ic->HilightPreviousDetected( myViewPort->getView() );
}
}
- } else {
+ }
+ else {
+ emit vpTransformationStarted ( ZOOMVIEW );
myViewPort->startZoomAtPoint( aEvent->x(), aEvent->y() );
double delta = (double)( aEvent->delta() ) / ( 15 * 8 );
int x = aEvent->x();
int x1 = (int)( aEvent->x() + width()*delta/100 );
int y1 = (int)( aEvent->y() + height()*delta/100 );
myViewPort->zoom( x, y, x1, y1 );
- myViewPort->getView()->ZFitAll();
+ emit vpTransformationFinished ( ZOOMVIEW );
}
}
return true;
return SUIT_ViewWindow::eventFilter(watched, e);
}
+/*!
+ \brief Enable / disable draw rect (rubber band) mode
+*/
+bool OCCViewer_ViewWindow::enableDrawMode( bool on )
+{
+ bool prev = myDrawRectEnabled;
+ myDrawRectEnabled = on;
+ updateEnabledDrawMode();
+ return prev;
+}
+
/*!
\brief Update state of enable draw mode state.
*/
void OCCViewer_ViewWindow::updateEnabledDrawMode()
{
+ myEnableDrawMode = myDrawRectEnabled;
if ( myModel )
- myEnableDrawMode = myModel->isSelectionEnabled() && myModel->isMultiSelectionEnabled();
+ myEnableDrawMode = myEnableDrawMode && myModel->isSelectionEnabled() && myModel->isMultiSelectionEnabled();
}
/*!
if ( theEvent->button() == Qt::LeftButton )
{
Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
- ic->Select();
+ ic->Select( Standard_True );
for ( ic->InitSelected(); ic->MoreSelected(); ic->NextSelected() )
{
TopoDS_Shape aShape = ic->SelectedShape();
}
if ( ic->NbSelected() == 0 ) myCurrPointType = myPrevPointType;
if ( mySetRotationPointDlg ) mySetRotationPointDlg->toggleChange();
- ic->CloseAllContexts();
+ ic->CloseAllContexts( Standard_True );
myOperation = NOTHING;
myViewPort->setCursor( myCursor );
myCursorIsHand = false;
}
/* notify that we start a transformation */
if ( transformRequested() )
- emit vpTransformationStarted ( myOperation );
+ emit vpTransformationStarted ( myOperation );
}
if ( transformRequested() )
setTransformInProcess( true );
// the ones which lie within the screen limits
Standard_Real aScreenLimits[4] = { 0.0, 0.0, 0.0, 0.0 };
-#if OCC_VERSION_LARGE > 0x06070100
// NDC space screen limits
aScreenLimits[0] = -1.0;
aScreenLimits[1] = 1.0;
aScreenLimits[2] = -1.0;
aScreenLimits[3] = 1.0;
-#else
- aView3d->View()->ViewMapping().WindowLimit( aScreenLimits[0],
- aScreenLimits[1],
- aScreenLimits[2],
- aScreenLimits[3] );
-#endif
Standard_Integer aPointsNb = 0;
for( ; aStructureIt.More(); aStructureIt.Next() ) {
const Handle(Graphic3d_Structure)& aStructure = aStructureIt.Key();
- if ( aStructure->IsEmpty() ) {
+ if ( aStructure->IsEmpty() || !aStructure->IsVisible() || aStructure->CStructure()->IsForHighlight )
continue;
- }
-#if OCC_VERSION_LARGE > 0x06070100
Bnd_Box aBox = aStructure->MinMaxValues();
aXmin = aBox.IsVoid() ? RealFirst() : aBox.CornerMin().X();
aYmin = aBox.IsVoid() ? RealFirst() : aBox.CornerMin().Y();
aXmax = aBox.IsVoid() ? RealLast() : aBox.CornerMax().X();
aYmax = aBox.IsVoid() ? RealLast() : aBox.CornerMax().Y();
aZmax = aBox.IsVoid() ? RealLast() : aBox.CornerMax().Z();
-#else
- aStructure->MinMaxValues( aXmin, aYmin, aZmin, aXmax, aYmax, aZmax );
-#endif
// Infinite structures are skipped
Standard_Real aLIM = ShortRealLast() - 1.0;
for ( Standard_Integer aPointIt = 0; aPointIt < 8; ++aPointIt ) {
const gp_Pnt& aBBPoint = aPoints[aPointIt];
-#if OCC_VERSION_LARGE > 0x06070100
gp_Pnt aProjected = aView3d->Camera()->Project( aBBPoint );
const Standard_Real& U = aProjected.X();
const Standard_Real& V = aProjected.Y();
-#else
- Standard_Real U = 0.0;
- Standard_Real V = 0.0;
- Standard_Real W = 0.0;
- aView3d->View()->Projects( aBBPoint.X(), aBBPoint.Y(), aBBPoint.Z(), U, V, W );
-#endif
if (U >= aScreenLimits[0]
&& U <= aScreenLimits[1]
if ( myRotationPointSelection )
{
Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
- ic->CloseAllContexts();
+ ic->CloseAllContexts( Standard_True );
myOperation = NOTHING;
myViewPort->setCursor( myCursor );
myCursorIsHand = false;
}
myPrevPointType = myCurrPointType;
- myCurrPointType = GRAVITY;
+ myCurrPointType = BBCENTER;
Standard_Real Xcenter, Ycenter, Zcenter;
- if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) )
+ if ( OCCViewer_Utilities::computeVisibleBBCenter( myViewPort->getView(), Xcenter, Ycenter, Zcenter ) )
mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter );
}
*/
void OCCViewer_ViewWindow::updateGravityCoords()
{
- if ( mySetRotationPointDlg && mySetRotationPointDlg->isVisible() && myCurrPointType == GRAVITY )
+ if ( mySetRotationPointDlg && mySetRotationPointDlg->isVisible() && myCurrPointType == BBCENTER )
{
Standard_Real Xcenter, Ycenter, Zcenter;
- if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) )
+ if ( OCCViewer_Utilities::computeVisibleBBCenter( myViewPort->getView(), Xcenter, Ycenter, Zcenter ) )
mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter );
}
}
if ( myRotationPointSelection )
{
Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
- ic->CloseAllContexts();
+ ic->CloseAllContexts( Standard_True );
myOperation = NOTHING;
myViewPort->setCursor( myCursor );
myCursorIsHand = false;
case PANVIEW:
case ZOOMVIEW:
- myViewPort->getView()->ZFitAll();
resetState();
break;
return;
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
+ if( !aResMgr )
+ return;
QtxAction* aAction;
aAction->setStatusTip(tr("DSC_PERSPECTIVE_MODE"));
aAction->setCheckable(true);
toolMgr()->registerAction( aAction, PerspectiveId );
-#if OCC_VERSION_LARGE > 0x06090000
+
// - stereo projection
aAction = new QtxAction(tr("MNU_STEREO_MODE"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_STEREO" ) ),
tr( "MNU_STEREO_MODE" ), 0, this);
aAction->setCheckable(true);
toolMgr()->registerAction( aAction, StereoId );
connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onStereoType(bool)));
-#endif
+
// - add exclusive action group
QActionGroup* aProjectionGroup = new QActionGroup( this );
aProjectionGroup->addAction( toolMgr()->action( OrthographicId ) );
// Synchronize View
toolMgr()->registerAction( synchronizeAction(), SynchronizeId );
+#ifdef ENABLE_RAY_TRACING
+ // Ray tracing
+ aAction = new QtxAction( tr("MNU_RAY_TRACING"), aResMgr->loadPixmap( "OCCViewer", tr("ICON_OCCVIEWER_RAY_TRACING") ),
+ tr("MNU_RAY_TRACING"), 0, this );
+ aAction->setStatusTip( tr("DSC_RAY_TRACING") );
+ connect( aAction, SIGNAL( triggered() ), this, SLOT( onRayTracing() ) );
+ toolMgr()->registerAction( aAction, RayTracingId );
+
+ // Environment texture
+ aAction = new QtxAction( tr("MNU_ENV_TEXTURE"), aResMgr->loadPixmap( "OCCViewer", tr("ICON_OCCVIEWER_ENV_TEXTURE") ),
+ tr("MNU_ENV_TEXTURE"), 0, this );
+ aAction->setStatusTip( tr("DSC_ENV_TEXTURE") );
+ connect( aAction, SIGNAL( triggered() ), this, SLOT( onEnvTexture() ) );
+ toolMgr()->registerAction( aAction, EnvTextureId );
+
+ // Light source
+ aAction = new QtxAction( tr("MNU_LIGHT_SOURCE"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_LIGHT_SOURCE" ) ),
+ tr( "MNU_LIGHT_SOURCE" ), 0, this );
+ aAction->setStatusTip( tr("DSC_LIGHT_SOURCE") );
+ connect( aAction, SIGNAL( triggered() ), this, SLOT( onLightSource() ) );
+ toolMgr()->registerAction( aAction, LightSourceId );
+#endif
}
/*!
QtxMultiAction* aScaleAction = new QtxMultiAction( this );
aScaleAction->insertAction( toolMgr()->action( FitAllId ) );
aScaleAction->insertAction( toolMgr()->action( FitRectId ) );
-#if OCC_VERSION_LARGE > 0x06090000
aScaleAction->insertAction( toolMgr()->action( FitSelectionId ) );
-#endif
aScaleAction->insertAction( toolMgr()->action( ZoomId ) );
toolMgr()->append( aScaleAction, tid );
toolMgr()->append( OrthographicId, tid );
toolMgr()->append( PerspectiveId, tid );
-#if OCC_VERSION_LARGE > 0x06090000
toolMgr()->append( StereoId, tid );
-#endif
toolMgr()->append( ResetId, tid );
}
toolMgr()->append( MaximizedId, tid );
toolMgr()->append( SynchronizeId, tid );
+#ifdef ENABLE_RAY_TRACING
+ toolMgr()->append( RayTracingId, tid );
+ toolMgr()->append( EnvTextureId, tid );
+ toolMgr()->append( LightSourceId, tid );
+#endif
}
/*!
if (theAction == toolMgr()->action( OrthographicId )) {
myModel->setProjectionType(Orthographic);
aCamera->SetProjectionType ( Graphic3d_Camera::Projection_Orthographic );
+ aCamera->SetFOVy(45.0);
}
else if (theAction == toolMgr()->action( PerspectiveId )) {
myModel->setProjectionType(Perspective);
aCamera->SetProjectionType ( Graphic3d_Camera::Projection_Perspective );
+ aCamera->SetFOVy(30.0);
}
-#if OCC_VERSION_LARGE > 0x06090000
- if (toolMgr()->action( StereoId )->isChecked())
+ if (toolMgr()->action( StereoId )->isChecked()) {
aCamera->SetProjectionType ( Graphic3d_Camera::Projection_Stereo );
-#endif
+ aCamera->SetFOVy(30.0);
+ }
aView3d->Redraw();
onViewFitAll();
}
*/
void OCCViewer_ViewWindow::onStereoType( bool activate )
{
-#if OCC_VERSION_LARGE > 0x06090000
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
onViewFitAll();
}
- if ( isQuadBufferSupport() && !isOpenGlStereoSupport() && stereoType() == QuadBuffer )
+ if ( isQuadBufferSupport() && !isOpenGlStereoSupport() && stereoType() == QuadBuffer &&
+ toolMgr()->action( StereoId )->isChecked() )
SUIT_MessageBox::warning( 0, tr( "WRN_WARNING" ), tr( "WRN_SUPPORT_QUAD_BUFFER" ) );
-#endif
}
/*!
setProjectionType( Orthographic );
if (toolMgr()->action( PerspectiveId )->isChecked())
setProjectionType( Perspective );
-#if OCC_VERSION_LARGE > 0x06090000
if (toolMgr()->action( StereoId )->isChecked())
setProjectionType( Stereo );
-#endif
emit vpTransformationFinished( PROJECTION );
}
{
QtxAction* anOrthographicAction = dynamic_cast<QtxAction*>( toolMgr()->action( OrthographicId ) );
QtxAction* aPerspectiveAction = dynamic_cast<QtxAction*>( toolMgr()->action( PerspectiveId ) );
-#if OCC_VERSION_LARGE > 0x06090000
QtxAction* aStereoAction = dynamic_cast<QtxAction*>( toolMgr()->action( StereoId ) );
-#endif
switch ( mode ) {
case Orthographic:
onProjectionType( anOrthographicAction );
// update action state if method is called outside
if ( mode == Orthographic && !anOrthographicAction->isChecked() ) {
anOrthographicAction->setChecked( true );
- #if OCC_VERSION_LARGE > 0x06090000
aStereoAction->setChecked( false );
- #endif
}
if ( mode == Perspective && !aPerspectiveAction->isChecked() ) {
aPerspectiveAction->setChecked( true );
- #if OCC_VERSION_LARGE > 0x06090000
aStereoAction->setChecked( false );
- #endif
}
-#if OCC_VERSION_LARGE > 0x06090000
if ( mode == Stereo ) {
aStereoAction->setChecked( true );
if ( anOrthographicAction->isEnabled() ) {
if ( aPerspectiveAction->isEnabled() ) {
aPerspectiveAction->setEnabled( false );
aPerspectiveAction->setChecked( true );
- if ( isQuadBufferSupport() && !isOpenGlStereoSupport() && stereoType() == QuadBuffer )
+ if ( isQuadBufferSupport() && !isOpenGlStereoSupport() && stereoType() == QuadBuffer &&
+ toolMgr()->action( StereoId )->isChecked() )
SUIT_MessageBox::warning( 0, tr( "WRN_WARNING" ), tr( "WRN_SUPPORT_QUAD_BUFFER" ) );
}
else {
if ( !aPerspectiveAction->isEnabled() )
aPerspectiveAction->setEnabled( true );
}
-#endif
}
/*!
void OCCViewer_ViewWindow::onFitSelection()
{
emit vpTransformationStarted( FITSELECTION );
-#if OCC_VERSION_LARGE > 0x06090000
myModel->getAISContext()->FitSelected( getViewPort()->getView() );
-#endif
emit vpTransformationFinished( FITSELECTION );
}
if (!mySetRotationPointDlg->isVisible())
{
//if (mySetRotationPointDlg->IsFirstShown())
- if (myCurrPointType == GRAVITY)
+ if (myCurrPointType == BBCENTER)
{
Standard_Real Xcenter, Ycenter, Zcenter;
- if (computeGravityCenter(Xcenter, Ycenter, Zcenter))
+ if (OCCViewer_Utilities::computeVisibleBBCenter(myViewPort->getView(), Xcenter, Ycenter, Zcenter))
mySetRotationPointDlg->setCoords(Xcenter, Ycenter, Zcenter);
}
mySetRotationPointDlg->show();
SUIT_ViewWindow* vw = myManager->createViewWindow();
//vw->show();
emit viewCloned( vw );
+ OCCViewer_ViewWindow* occVw = dynamic_cast<OCCViewer_ViewWindow*> (vw);
+ if(occVw && occVw->getView(OCCViewer_ViewFrame::MAIN_VIEW)) {
+ occVw->getView(OCCViewer_ViewFrame::MAIN_VIEW)->synchronize(this);
+ }
}
/*!
void OCCViewer_ViewWindow::onAxialScale()
{
if ( !myScalingDlg )
- myScalingDlg = new OCCViewer_AxialScaleDlg( this );
+ myScalingDlg = new OCCViewer_AxialScaleDlg( this , myModel );
if ( !myScalingDlg->isVisible() )
{
aView3d->SetProj( anItem.projX, anItem.projY, anItem.projZ );
aView3d->SetAxialScale( anItem.scaleX, anItem.scaleY, anItem.scaleZ );
-#if OCC_VERSION_LARGE > 0x06070100
if ( anItem.centerX != 0.0 || anItem.centerY != 0.0 )
{
double anUpX = 0.0, anUpY = 0.0, anUpZ = 0.0;
aView3d->SetAt( anAt.X(), anAt.Y(), anAt.Z() );
aView3d->SetProj( anItem.projX, anItem.projY, anItem.projZ );
}
-#else
- aView3d->SetCenter( anItem.centerX, anItem.centerY );
-#endif
if ( !baseParamsOnly ) {
// update action state if method is called outside
QtxAction* a = dynamic_cast<QtxAction*>( toolMgr()->action( SwitchInteractionStyleId ) );
- if ( a->isChecked() != on )
+ if ( a && a->isChecked() != on )
a->setChecked( on );
}
// update action state if method is called outside
QtxAction* a = dynamic_cast<QtxAction*>( toolMgr()->action( SwitchZoomingStyleId ) );
- if ( a->isChecked() != on )
+ if ( a && a->isChecked() != on )
a->setChecked( on );
}
\brief Dump view window contents to the pixmap.
\return pixmap containing all scene rendered in the window
*/
+//#define USE_OLD_IMPLEMENTATION
QImage OCCViewer_ViewWindow::dumpView()
{
Handle(V3d_View) view = myViewPort->getView();
int aWidth = myViewPort->width();
int aHeight = myViewPort->height();
- // rnv: An old approach to dump the OCCViewer content
- // Now used OCCT built-in procedure.
- /*
- QApplication::syncX();
- view->Redraw(); // In order to reactivate GL context
- //view->Update();
+#ifdef USE_OLD_IMPLEMENTATION
+ // rnv: Old approach to dump the OCCViewer content via Frame Buffer Object
+
+ view->Redraw();
#ifndef DISABLE_GLVIEWER
OpenGLUtils_FrameBuffer aFrameBuffer;
- if( aFrameBuffer.init( aWidth, aHeight ) )
+ if ( aFrameBuffer.init( aWidth, aHeight ) )
{
- QImage anImage( aWidth, aHeight, QImage::Format_RGB32 );
-
glPushAttrib( GL_VIEWPORT_BIT );
glViewport( 0, 0, aWidth, aHeight );
aFrameBuffer.bind();
aFrameBuffer.unbind();
glPopAttrib();
+ QImage anImage( aWidth, aHeight, QImage::Format_RGB32 );
+
aFrameBuffer.bind();
glReadPixels( 0, 0, aWidth, aHeight, GL_RGBA, GL_UNSIGNED_BYTE, anImage.bits() );
aFrameBuffer.unbind();
anImage = anImage.mirrored();
return anImage;
}
- // if frame buffers are unsupported, use old functionality
- //view->Redraw();
-
- unsigned char* data = new unsigned char[ aWidth*aHeight*4 ];
- QPoint p = myViewPort->mapFromParent(myViewPort->geometry().topLeft());
+ // if frame buffers are unsupported, use old approach
+ unsigned char* data = new unsigned char[ aWidth*aHeight*4 ];
+ QPoint p = myViewPort->mapFromParent( myViewPort->geometry().topLeft() );
glReadPixels( p.x(), p.y(), aWidth, aHeight, GL_RGBA, GL_UNSIGNED_BYTE,
data);
-#endif
- */
+ QImage anImage( data, aWidth, aHeight, QImage::Format_ARGB32 );
+ anImage = anImage.mirrored();
+ anImage = anImage.rgbSwapped();
+ return anImage;
- Image_PixMap aPix;
- view->ToPixMap(aPix,aWidth, aHeight,Graphic3d_BT_RGBA);
+#else // DISABLE_GLVIEWER
- QImage anImage( aPix.Data(), aWidth, aHeight, QImage::Format_ARGB32 );
- anImage = anImage.mirrored();
+ return QImage();
+
+#endif // DISABLE_GLVIEWER
+
+#else // USE_OLD_IMPLEMENTATION
+ // rnv: New approach is to use OCCT built-in procedure
+
+ Image_PixMap aPix;
+ view->ToPixMap(aPix, aWidth, aHeight, Graphic3d_BT_RGB);
+
+ QImage anImage( aWidth, aHeight, QImage::Format_ARGB32 );
+ for ( int i = 0; i < aWidth; i++ ) {
+ for ( int j = 0; j < aHeight; j++ ) {
+ Quantity_Color pixel = aPix.PixelColor( i, j ).GetRGB();
+ QColor color = QColor::fromRgbF( pixel.Red(), pixel.Green(), pixel.Blue() );
+ anImage.setPixelColor( i, j, color );
+ }
+ }
+
+ if ( aPix.IsTopDown() )
+ anImage = anImage.mirrored();
return anImage;
+
+#endif // USE_OLD_IMPLEMENTATION
}
bool OCCViewer_ViewWindow::dumpViewToFormat( const QImage& img,
const QString& fileName,
const QString& format )
{
+ bool res = false;
+ QApplication::setOverrideCursor( Qt::WaitCursor );
if ( format != "PS" && format != "EPS")
- return SUIT_ViewWindow::dumpViewToFormat( img, fileName, format );
+ res = myViewPort->getView()->Dump( fileName.toStdString().c_str() );
- Handle(Visual3d_View) a3dView = myViewPort->getView()->View();
+ Handle(Graphic3d_CView) a3dView = myViewPort->getView()->View();
if (format == "PS")
- a3dView->Export(strdup(qPrintable(fileName)), Graphic3d_EF_PostScript);
+ res = a3dView->Export(strdup(qPrintable(fileName)), Graphic3d_EF_PostScript);
else if (format == "EPS")
- a3dView->Export(strdup(qPrintable(fileName)), Graphic3d_EF_EnhPostScript);
+ res = a3dView->Export(strdup(qPrintable(fileName)), Graphic3d_EF_EnhPostScript);
- return true;
+ QApplication::restoreOverrideCursor();
+ return res;
}
gp_Pln pln (gp_Pnt(x, y, z), gp_Dir(dx, dy, dz));
double a, b, c, d;
pln.Coefficients(a, b, c, d);
-
- Graphic3d_SequenceOfHClipPlane aPlanes = view->GetClipPlanes();
- if(aPlanes.Size() > 0 ) {
- Graphic3d_SequenceOfHClipPlane::Iterator anIter (aPlanes);
+ Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = view->ClipPlanes();
+ Graphic3d_SequenceOfHClipPlane::Iterator anIter (*aPlanes);
+ if(aPlanes->Size() > 0 ) {
Handle(Graphic3d_ClipPlane) aClipPlane = anIter.Value();
aClipPlane->SetEquation(pln);
aClipPlane->SetOn(Standard_True);
}
}
else {
- Graphic3d_SequenceOfHClipPlane aPlanes = view->GetClipPlanes();
- Graphic3d_SequenceOfHClipPlane::Iterator anIter (aPlanes);
+ Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = view->ClipPlanes();
+ Graphic3d_SequenceOfHClipPlane::Iterator anIter (*aPlanes);
for( ;anIter.More();anIter.Next() ){
Handle(Graphic3d_ClipPlane) aClipPlane = anIter.Value();
aClipPlane->SetOn(Standard_False);
{
Handle(V3d_View) view = myViewPort->getView();
bool res = false;
- Graphic3d_SequenceOfHClipPlane aPlanes = view->GetClipPlanes();
- Graphic3d_SequenceOfHClipPlane::Iterator anIter (aPlanes);
+ Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = view->ClipPlanes();
+ Graphic3d_SequenceOfHClipPlane::Iterator anIter (*aPlanes);
for( ;anIter.More();anIter.Next() ) {
Handle(Graphic3d_ClipPlane) aClipPlane = anIter.Value();
if(aClipPlane->IsOn()) {
params.isVisible= isShown;
params.size = size;
-#if OCC_VERSION_LARGE <= 0x06070100 // the property is deprecated after OCCT 6.7.1
- aView3d->Center( params.centerX, params.centerY );
-#endif
-
// graduated trihedron
bool anIsVisible = false;
OCCViewer_AxisWidget::AxisData anAxisData[3];
QStringList data;
data << QString( "scale=%1" ) .arg( params.scale, 0, 'e', 12 );
-#if OCC_VERSION_LARGE <= 0x06070100 // the property is deprecated after OCCT 6.7.1
- data << QString( "centerX=%1" ) .arg( params.centerX, 0, 'e', 12 );
- data << QString( "centerY=%1" ) .arg( params.centerY, 0, 'e', 12 );
-#endif
data << QString( "projX=%1" ) .arg( params.projX, 0, 'e', 12 );
data << QString( "projY=%1" ) .arg( params.projY, 0, 'e', 12 );
data << QString( "projZ=%1" ) .arg( params.projZ, 0, 'e', 12 );
data << QString( "gtTickmarkLengthX=%1" ).arg( params.gtTickmarkLengthX );
data << QString( "gtTickmarkLengthY=%1" ).arg( params.gtTickmarkLengthY );
data << QString( "gtTickmarkLengthZ=%1" ).arg( params.gtTickmarkLengthZ );
+
+ // ray tracing parameters
+ Graphic3d_RenderingParams rendParams = this->getViewPort()->getView()->RenderingParams();
+ if ( rendParams.Method == Graphic3d_RM_RAYTRACING ) {
+ QString RayTracing = "rayTracing=";
+ RayTracing += QString( "rtDepth~%1;" ).arg( rendParams.RaytracingDepth );
+ RayTracing += QString( "rtReflection~%1;" ).arg( rendParams.IsReflectionEnabled );
+ RayTracing += QString( "rtAntialiasing~%1;" ).arg( rendParams.IsAntialiasingEnabled );
+ RayTracing += QString( "rtShadow~%1;" ).arg( rendParams.IsShadowEnabled );
+ RayTracing += QString( "rtTransShadow~%1;" ).arg( rendParams.IsTransparentShadowEnabled );
+ data << RayTracing;
+ }
+
+ // environment texture parameters
+ Handle(Graphic3d_TextureEnv) aTexture = this->getViewPort()->getView()->TextureEnv();
+ if ( !aTexture.IsNull() ) {
+ QString EnvTexture = "envTexture=";
+ if ( aTexture->Name() == Graphic3d_NOT_ENV_UNKNOWN ) {
+ TCollection_AsciiString aFileName;
+ aTexture->Path().SystemName( aFileName );
+ EnvTexture += QString( "etFile~%1;" ).arg( aFileName.ToCString() );
+ }
+ else
+ EnvTexture += QString( "etNumber~%1;" ).arg( aTexture->Name() );
+ data << EnvTexture;
+ }
+
+ // light source parameters
+ myModel->getViewer3d()->InitDefinedLights();
+ while ( myModel->getViewer3d()->MoreDefinedLights() )
+ {
+ Handle(V3d_Light) aLight = myModel->getViewer3d()->DefinedLight();
+ if ( aLight->Type() != V3d_AMBIENT ) {
+ QString LightSource = QString( "lightSource=" );
+ LightSource += QString( "lightType~%1;" ).arg( aLight->Type() );
+ double aX, aY, aZ;
+ if ( aLight->Type() == V3d_DIRECTIONAL )
+ Handle(V3d_DirectionalLight)::DownCast( aLight )->Direction( aX, aY, aZ );
+ else if ( aLight->Type() == V3d_POSITIONAL )
+ Handle(V3d_PositionalLight)::DownCast( aLight )->Position( aX, aY, aZ );
+ LightSource += QString( "lightX~%1;" ).arg( aX );
+ LightSource += QString( "lightY~%1;" ).arg( aY );
+ LightSource += QString( "lightZ~%1;" ).arg( aZ );
+ LightSource += QString( "lightColorR~%1;" ).arg( aLight->Color().Red() );
+ LightSource += QString( "lightColorG~%1;" ).arg( aLight->Color().Green() );
+ LightSource += QString( "lightColorB~%1;" ).arg( aLight->Color().Blue() );
+ LightSource += QString( "lightHeadlight~%1;" ).arg( aLight->Headlight() );
+ data << LightSource;
+ }
+ myModel->getViewer3d()->NextDefinedLights();
+ }
+
QString bg = Qtx::backgroundToString( background() ).replace( "=", "$" );
data << QString( "background=%1" ).arg( bg );
else if ( paramName == "gtTickmarkLengthX" ) params.gtTickmarkLengthX = paramValue.toInt();
else if ( paramName == "gtTickmarkLengthY" ) params.gtTickmarkLengthY = paramValue.toInt();
else if ( paramName == "gtTickmarkLengthZ" ) params.gtTickmarkLengthZ = paramValue.toInt();
+ else if ( paramName == "rayTracing" )
+ {
+ Graphic3d_RenderingParams& rendParams = this->getViewPort()->getView()->ChangeRenderingParams();
+ rendParams.Method = Graphic3d_RM_RAYTRACING;
+ QStringList rtData = paramValue.split( ';' );
+ foreach( QString rtParam, rtData )
+ {
+ QString rt_paramName = rtParam.section( '~', 0, 0 ).trimmed();
+ QString rt_paramValue = rtParam.section( '~', 1, 1 ).trimmed();
+ if ( rt_paramName == "rtDepth" ) rendParams.RaytracingDepth = rt_paramValue.toInt();
+ else if ( rt_paramName == "rtReflection" ) rendParams.IsReflectionEnabled = rt_paramValue.toInt();
+ else if ( rt_paramName == "rtAntialiasing" ) rendParams.IsAntialiasingEnabled = rt_paramValue.toInt();
+ else if ( rt_paramName == "rtShadow" ) rendParams.IsShadowEnabled = rt_paramValue.toInt();
+ else if ( rt_paramName == "rtTransShadow" ) rendParams.IsTransparentShadowEnabled = rt_paramValue.toInt();
+ }
+ }
+ else if ( paramName == "envTexture" )
+ {
+ Handle(Graphic3d_TextureEnv) aTexture;
+ QStringList etData = paramValue.split( ';' );
+ foreach( QString etParam, etData )
+ {
+ QString et_paramName = etParam.section( '~', 0, 0 ).trimmed();
+ QString et_paramValue = etParam.section( '~', 1, 1 ).trimmed();
+ if ( et_paramName == "etNumber" )
+ aTexture = new Graphic3d_TextureEnv( Graphic3d_NameOfTextureEnv( et_paramValue.toInt() ) );
+ else if ( et_paramName == "etFile" )
+ aTexture = new Graphic3d_TextureEnv( TCollection_AsciiString( et_paramValue.toStdString().c_str() ) );
+ Handle(V3d_View) aView = this->getViewPort()->getView();
+ aView->SetTextureEnv( aTexture );
+ }
+ }
+ else if ( paramName == "lightSource" )
+ {
+ myModel->getViewer3d()->InitDefinedLights();
+ while ( myModel->getViewer3d()->MoreDefinedLights() )
+ {
+ Handle(V3d_Light) aLight = myModel->getViewer3d()->DefinedLight();
+ if( aLight->Type() != V3d_AMBIENT ) {
+ myModel->getViewer3d()->DelLight( aLight );
+ myModel->getViewer3d()->InitDefinedLights();
+ } else {
+ myModel->getViewer3d()->NextDefinedLights();
+ }
+ }
+ double aX, aY, aZ;
+ double cR, cG, cB;
+ V3d_TypeOfLight aType;
+ bool isHeadlight;
+ QStringList lsData = paramValue.split( ';' );
+ foreach( QString lsParam, lsData )
+ {
+ QString ls_paramName = lsParam.section( '~', 0, 0 ).trimmed();
+ QString ls_paramValue = lsParam.section( '~', 1, 1 ).trimmed();
+ if ( ls_paramName == "lightType" ) aType = V3d_TypeOfLight( ls_paramValue.toInt() );
+ else if ( ls_paramName == "lightX" ) aX = ls_paramValue.toDouble();
+ else if ( ls_paramName == "lightY" ) aY = ls_paramValue.toDouble();
+ else if ( ls_paramName == "lightZ" ) aZ = ls_paramValue.toDouble();
+ else if ( ls_paramName == "lightColorR" ) cR = ls_paramValue.toDouble();
+ else if ( ls_paramName == "lightColorG" ) cG = ls_paramValue.toDouble();
+ else if ( ls_paramName == "lightColorB" ) cB = ls_paramValue.toDouble();
+ else if ( ls_paramName == "lightHeadlight" ) isHeadlight = ls_paramValue.toInt();
+ }
+ Quantity_Color aColor = Quantity_Color( cR, cG, cB, Quantity_TOC_RGB );
+ if( aType == V3d_DIRECTIONAL ) {
+ Handle(V3d_DirectionalLight) aLight = new V3d_DirectionalLight( myModel->getViewer3d() );
+ aLight->SetDirection( aX, aY, aZ );
+ aLight->SetColor( aColor );
+ aLight->SetHeadlight( isHeadlight );
+ myModel->getViewer3d()->SetLightOn( aLight );
+ }
+ else if( aType == V3d_POSITIONAL ) {
+ Handle(V3d_PositionalLight) aLight = new V3d_PositionalLight( myModel->getViewer3d(), aX, aY, aZ, aColor.Name() );
+ aLight->SetHeadlight( isHeadlight );
+ myModel->getViewer3d()->SetLightOn( aLight );
+ }
+ }
else if ( paramName == "background" ) {
QString bg = paramValue.replace( "$", "=" );
bgData = Qtx::stringToBackground( bg );
mode = Perspective;
if (aCamera->ProjectionType() == Graphic3d_Camera::Projection_Orthographic)
mode = Orthographic;
- #if OCC_VERSION_LARGE > 0x06090000
if (aCamera->ProjectionType() == Graphic3d_Camera::Projection_Stereo)
mode = Stereo;
- #endif
}
return mode;
}
{
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Graphic3d_RenderingParams* aParams = &aView3d->ChangeRenderingParams();
aParams->StereoMode = (Graphic3d_StereoMode)type;
- #endif
}
}
int type = QuadBuffer;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Graphic3d_RenderingParams* aParams = &aView3d->ChangeRenderingParams();
type = (OCCViewer_ViewWindow::StereoType)aParams->StereoMode;
- #endif
}
return type;
}
{
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Graphic3d_RenderingParams* aParams = &aView3d->ChangeRenderingParams();
if (type == RedCyan)
aParams->AnaglyphFilter = Graphic3d_RenderingParams::Anaglyph_RedCyan_Optimized;
aParams->AnaglyphFilter = Graphic3d_RenderingParams::Anaglyph_YellowBlue_Optimized;
if (type == GreenMagenta)
aParams->AnaglyphFilter = Graphic3d_RenderingParams::Anaglyph_GreenMagenta_Simple;
- #endif
}
}
int type = RedCyan;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Graphic3d_RenderingParams* aParams = &aView3d->ChangeRenderingParams();
if (aParams->AnaglyphFilter == Graphic3d_RenderingParams::Anaglyph_RedCyan_Optimized)
type = RedCyan;
type = YellowBlue;
if (aParams->AnaglyphFilter == Graphic3d_RenderingParams::Anaglyph_GreenMagenta_Simple)
type = GreenMagenta;
- #endif
}
return type;
}
{
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
aCamera->SetZFocus( (Graphic3d_Camera::FocusType) type, value );
- #endif
}
}
int type = Relative;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
type = (OCCViewer_ViewWindow::FocusIODType)aCamera->ZFocusType();
- #endif
}
return type;
}
double value = 1.0;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
value = aCamera->ZFocus();
- #endif
}
return value;
}
{
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
aCamera->SetIOD( (Graphic3d_Camera::IODType) type, value );
- #endif
}
}
int type = Relative;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
type = (OCCViewer_ViewWindow::FocusIODType)aCamera->GetIODType();
- #endif
}
return type;
}
double value = 0.05;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(Graphic3d_Camera) aCamera = aView3d->Camera();
value = aCamera->IOD();
- #endif
}
return value;
}
{
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Graphic3d_RenderingParams* aParams = &aView3d->ChangeRenderingParams();
aParams->ToReverseStereo = reverse;
- #endif
}
}
int reverse = false;
Handle(V3d_View) aView3d = myViewPort->getView();
if ( !aView3d.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Graphic3d_RenderingParams* aParams = &aView3d->ChangeRenderingParams();
reverse = aParams->ToReverseStereo;
- #endif
}
return reverse;
}
{
Handle(AIS_InteractiveContext) anIntCont = myModel->getAISContext();
if ( !anIntCont.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(OpenGl_GraphicDriver) aDriver = Handle(OpenGl_GraphicDriver)::DownCast(anIntCont->CurrentViewer()->Driver());
OpenGl_Caps* aCaps = &aDriver->ChangeOptions();
aCaps->swapInterval = enable;
- #endif
}
}
int enable = true;
Handle(AIS_InteractiveContext) anIntCont = myModel->getAISContext();
if ( !anIntCont.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(OpenGl_GraphicDriver) aDriver = Handle(OpenGl_GraphicDriver)::DownCast(anIntCont->CurrentViewer()->Driver());
OpenGl_Caps* aCaps = &aDriver->ChangeOptions();
enable = aCaps->swapInterval;
- #endif
}
return enable;
}
{
Handle(AIS_InteractiveContext) anIntCont = myModel->getAISContext();
if ( !anIntCont.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(OpenGl_GraphicDriver) aDriver = Handle(OpenGl_GraphicDriver)::DownCast(anIntCont->CurrentViewer()->Driver());
OpenGl_Caps* aCaps = &aDriver->ChangeOptions();
aCaps->contextStereo = enable;
- #endif
}
}
int enable = true;
Handle(AIS_InteractiveContext) anIntCont = myModel->getAISContext();
if ( !anIntCont.IsNull() ) {
- #if OCC_VERSION_LARGE > 0x06090000
Handle(OpenGl_GraphicDriver) aDriver = Handle(OpenGl_GraphicDriver)::DownCast(anIntCont->CurrentViewer()->Driver());
OpenGl_Caps* aCaps = &aDriver->ChangeOptions();
enable = aCaps->contextStereo;
- #endif
}
return enable;
}
aProps.setAxialScale( anAxialScale[0], anAxialScale[1], anAxialScale[2] );
aProps.setViewUp( anUp[0], anUp[1], anUp[2] );
-#if OCC_VERSION_LARGE > 0x06070100
aSourceView->Eye( anEye[0], anEye[1], anEye[2] );
// store camera properties "as is": it is up to synchronized
aProps.setViewAngle( aSourceView->Camera()->FOVy() );
}
aProps.setMappingScale( aSourceView->Camera()->Scale() );
-#else
- Standard_Real aCameraDepth = aSourceView->Depth() + aSourceView->ZSize() * 0.5;
-
- // generate view orientation matrix for transforming OCC projection reference point
- // into a camera (eye) position.
- gp_Dir aLeftDir = gp_Dir( anUp[0], anUp[1], anUp[2] ) ^ gp_Dir( aProj[0], aProj[1], aProj[2] );
-
- gp_GTrsf aTrsf;
- aTrsf.SetValue( 1, 1, aLeftDir.X() );
- aTrsf.SetValue( 2, 1, aLeftDir.Y() );
- aTrsf.SetValue( 3, 1, aLeftDir.Z() );
-
- aTrsf.SetValue( 1, 2, anUp[0] );
- aTrsf.SetValue( 2, 2, anUp[1] );
- aTrsf.SetValue( 3, 2, anUp[2] );
-
- aTrsf.SetValue( 1, 3, aProj[0] );
- aTrsf.SetValue( 2, 3, aProj[1] );
- aTrsf.SetValue( 3, 3, aProj[2] );
-
- aTrsf.SetValue( 1, 4, anAt[0] );
- aTrsf.SetValue( 2, 4, anAt[1] );
- aTrsf.SetValue( 3, 4, anAt[2] );
-
- Graphic3d_Vertex aProjRef = aSourceView->ViewMapping().ProjectionReferencePoint();
-
- // transform to world-space coordinate system
- gp_XYZ aPosition( aProjRef.X(), aProjRef.Y(), aCameraDepth );
- aTrsf.Transforms( aPosition );
-
- // compute focal point
- double aFocalPoint[3];
-
- aFocalPoint[0] = aPosition.X() - aProj[0] * aCameraDepth;
- aFocalPoint[1] = aPosition.Y() - aProj[1] * aCameraDepth;
- aFocalPoint[2] = aPosition.Z() - aProj[2] * aCameraDepth;
-
- aProps.setFocalPoint( aFocalPoint[0], aFocalPoint[1], aFocalPoint[2] );
- aProps.setPosition( aPosition.X(), aPosition.Y(), aPosition.Z() );
-
- Standard_Real aViewScale[2];
- aSourceView->Size( aViewScale[0], aViewScale[1] );
- aProps.setMappingScale( aViewScale[1] );
-#endif
return aProps;
}
aProps.getViewUp( anUpDir[0], anUpDir[1], anUpDir[2] );
aProps.getAxialScale( anAxialScale[0], anAxialScale[1], anAxialScale[2] );
-#if OCC_VERSION_LARGE > 0x06070100
aDestView->SetAt( aFocalPoint[0], aFocalPoint[1], aFocalPoint[2] );
aDestView->SetEye( aPosition[0], aPosition[1], aPosition[2] );
aDestView->SetUp( anUpDir[0], anUpDir[1], anUpDir[2] );
aDestView->Camera()->SetScale( aProps.getMappingScale() );
-#else
- gp_Dir aProjDir( aPosition[0] - aFocalPoint[0],
- aPosition[1] - aFocalPoint[1],
- aPosition[2] - aFocalPoint[2] );
-
- // get custom view translation
- Standard_Real aTranslation[3];
- aDestView->At( aTranslation[0], aTranslation[1], aTranslation[2] );
-
- gp_Dir aLeftDir = gp_Dir( anUpDir[0], anUpDir[1], anUpDir[2] )
- ^ gp_Dir( aProjDir.X(), aProjDir.Y(), aProjDir.Z() );
-
- gp_GTrsf aTrsf;
- aTrsf.SetValue( 1, 1, aLeftDir.X() );
- aTrsf.SetValue( 2, 1, aLeftDir.Y() );
- aTrsf.SetValue( 3, 1, aLeftDir.Z() );
-
- aTrsf.SetValue( 1, 2, anUpDir[0] );
- aTrsf.SetValue( 2, 2, anUpDir[1] );
- aTrsf.SetValue( 3, 2, anUpDir[2] );
-
- aTrsf.SetValue( 1, 3, aProjDir.X() );
- aTrsf.SetValue( 2, 3, aProjDir.Y() );
- aTrsf.SetValue( 3, 3, aProjDir.Z() );
-
- aTrsf.SetValue( 1, 4, aTranslation[0] );
- aTrsf.SetValue( 2, 4, aTranslation[1] );
- aTrsf.SetValue( 3, 4, aTranslation[2] );
- aTrsf.Invert();
-
- // transform to view-space coordinate system
- gp_XYZ aProjRef( aPosition[0], aPosition[1], aPosition[2] );
- aTrsf.Transforms( aProjRef );
-
- // set view camera properties using low-level approach. this is done
- // in order to avoid interference with static variables in v3d view used
- // when rotation is in process in another view.
- Visual3d_ViewMapping aMapping = aDestView->View()->ViewMapping();
- Visual3d_ViewOrientation anOrientation = aDestView->View()->ViewOrientation();
-
- Graphic3d_Vector aMappingProj( aProjDir.X(), aProjDir.Y(), aProjDir.Z() );
- Graphic3d_Vector aMappingUp( anUpDir[0], anUpDir[1], anUpDir[2] );
-
- aMappingProj.Normalize();
- aMappingUp.Normalize();
-
- anOrientation.SetViewReferencePlane( aMappingProj );
- anOrientation.SetViewReferenceUp( aMappingUp );
-
- aDestView->SetViewMapping( aMapping );
- aDestView->SetViewOrientation( anOrientation );
-
- // set panning
- aDestView->SetCenter( aProjRef.X(), aProjRef.Y() );
-
- // set mapping scale
- double aMapScaling = aProps.getMappingScale();
- Standard_Real aWidth, aHeight;
- aDestView->Size( aWidth, aHeight );
- aDestView->SetSize ( aWidth > aHeight ? aMapScaling * (aWidth / aHeight) : aMapScaling );
-#endif
getViewPort()->setAxialScale( anAxialScale[0], anAxialScale[1], anAxialScale[2] );
-
- aDestView->ZFitAll();
aDestView->SetImmediateUpdate( Standard_True );
aDestView->Redraw();
}
}
}
+
+void OCCViewer_ViewWindow::onRayTracing()
+{
+ if( !OCCViewer_Utilities::isDialogOpened( this, OCCViewer_RayTracingDlg::getName() ) ) {
+ QDialog* aDlg = new OCCViewer_RayTracingDlg( this );
+ if ( aDlg != NULL )
+ aDlg->show();
+ }
+}
+
+void OCCViewer_ViewWindow::onEnvTexture()
+{
+ if( !OCCViewer_Utilities::isDialogOpened( this, OCCViewer_EnvTextureDlg::getName() ) ) {
+ QDialog* aDlg = new OCCViewer_EnvTextureDlg( this );
+ if ( aDlg != NULL )
+ aDlg->show();
+ }
+}
+
+void OCCViewer_ViewWindow::onLightSource()
+{
+ if( !OCCViewer_Utilities::isDialogOpened( this, OCCViewer_LightSourceDlg::getName() ) ) {
+ QDialog* aDlg = new OCCViewer_LightSourceDlg( this, myModel );
+ if ( aDlg != NULL )
+ aDlg->show();
+ }
+}