-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 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 "OCCViewer_ViewModel.h"
-#include "OCCViewer.h"
-#include "OCCViewer_ViewWindow.h"
#include "OCCViewer_ViewFrame.h"
#include "OCCViewer_VService.h"
#include "OCCViewer_ViewPort3d.h"
#include <AIS_Axis.hxx>
#include <Prs3d_Drawer.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <StdSelect_ViewerSelector3d.hxx>
#include <Graphic3d_Texture2Dmanual.hxx>
#include <Graphic3d_MaterialAspect.hxx>
#include <Basics_OCCTVersion.hxx>
+namespace
+{
+ void setCappingColor(const Handle(Graphic3d_ClipPlane)& plane, const QColor& color)
+ {
+ Quantity_Color qcolor( color.redF(), color.greenF(), color.blueF(), Quantity_TOC_RGB );
+#if OCC_VERSION_LARGE < 0x07040000
+ Graphic3d_MaterialAspect aspect;
+ aspect.SetColor( qcolor );
+ plane->SetCappingMaterial( aspect );
+#else
+ plane->SetCappingColor( qcolor );
+#endif
+ }
+}
+
/*!
Get data for supported background modes: gradient types, identifiers and supported image formats
*/
#if OCC_VERSION_LARGE <= 0x07030000
myIsUseLocalSelection(false),
#endif
- myClippingDlg (NULL)
+ myClippingDlg (NULL),
+ myFitter(0)
{
// init CasCade viewers
myV3dViewer = OCCViewer_VService::CreateViewer( TCollection_ExtendedString("Viewer3d").ToExtString() );
myAISContext = new AIS_InteractiveContext( myV3dViewer );
myAISContext->HighlightStyle(Prs3d_TypeOfHighlight_LocalSelected)->SetColor( Quantity_NOC_WHITE );
myAISContext->HighlightStyle(Prs3d_TypeOfHighlight_Selected)->SetColor( Quantity_NOC_WHITE );
-
+
// display isoline on planar faces (box for ex.)
myAISContext->IsoOnPlane( true );
// set projection type to orthographic
myProjectionType = 0;
+ mySelectionStyle = OCCViewer_ViewWindow::RectStyle;
// set stereo parameters
myStereoType = 0;
myAnaglyphFilter = 0;
view->initSketchers();
view->setInteractionStyle( interactionStyle() );
view->setProjectionType( projectionType() );
+ view->setSelectionStyle( selectionStyle() );
view->setStereoType( stereoType() );
view->setAnaglyphFilter( anaglyphFilter() );
view->setStereographicFocus( stereographicFocusType(), stereographicFocusValue() );
myEndPnt.setX(theEvent->x()); myEndPnt.setY(theEvent->y());
bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
- if (!aHasShift) {
- myAISContext->ClearCurrents( false );
- emit deselection();
- }
-
if (myStartPnt == myEndPnt)
{
+ if (!aHasShift) {
+ myAISContext->ClearCurrents( false );
+ emit deselection();
+ }
if ( !isPreselectionEnabled() ) {
Handle(V3d_View) aView3d = aView->getViewPort()->getView();
if ( !aView3d.IsNull() ) {
- myAISContext->MoveTo( myEndPnt.x(), myEndPnt.y(), aView3d, Standard_True );
+ myAISContext->MoveTo( myEndPnt.x(), myEndPnt.y(), aView3d, Standard_True );
}
}
myAISContext->ShiftSelect( Standard_True );
else
myAISContext->Select( Standard_True );
+ emit selectionChanged();
}
- else
- {
- if (aHasShift && myMultiSelectionEnabled)
- myAISContext->ShiftSelect(myStartPnt.x(), myStartPnt.y(),
- myEndPnt.x(), myEndPnt.y(),
- aView->getViewPort()->getView(), Standard_False );
- else
- myAISContext->Select(myStartPnt.x(), myStartPnt.y(),
- myEndPnt.x(), myEndPnt.y(),
- aView->getViewPort()->getView(), Standard_False );
-
- int Nb = myAISContext->NbSelected();
- if( Nb>1 && !myMultiSelectionEnabled )
- {
- myAISContext->InitSelected();
- Handle( SelectMgr_EntityOwner ) anOwner = myAISContext->SelectedOwner();
- if( !anOwner.IsNull() )
- {
- myAISContext->ClearSelected( Standard_False );
- myAISContext->AddOrRemoveSelected( anOwner, Standard_False );
- }
- }
- myAISContext->UpdateCurrentViewer();
- }
- emit selectionChanged();
+ //else
+ //{
+ // if (aHasShift && myMultiSelectionEnabled)
+ // myAISContext->ShiftSelect(myStartPnt.x(), myStartPnt.y(),
+ // myEndPnt.x(), myEndPnt.y(),
+ // aView->getViewPort()->getView(), Standard_False );
+ // else
+ // myAISContext->Select(myStartPnt.x(), myStartPnt.y(),
+ // myEndPnt.x(), myEndPnt.y(),
+ // aView->getViewPort()->getView(), Standard_False );
+
+ // int Nb = myAISContext->NbSelected();
+ // if( Nb>1 && !myMultiSelectionEnabled )
+ // {
+ // myAISContext->InitSelected();
+ // Handle( SelectMgr_EntityOwner ) anOwner = myAISContext->SelectedOwner();
+ // if( !anOwner.IsNull() )
+ // {
+ // myAISContext->ClearSelected( Standard_False );
+ // myAISContext->AddOrRemoveSelected( anOwner, Standard_False );
+ // }
+ // }
+
+ // myAISContext->UpdateCurrentViewer();
+ //}
}
/*!
}
}
+
+OCCViewer_ViewWindow::SelectionStyle OCCViewer_Viewer::selectionStyle() const
+{
+ return mySelectionStyle;
+}
+
+void OCCViewer_Viewer::setSelectionStyle(OCCViewer_ViewWindow::SelectionStyle theMode)
+{
+ if (mySelectionStyle != theMode) {
+ mySelectionStyle = theMode;
+ if (!myViewManager)
+ return;
+
+ QVector<SUIT_ViewWindow*> wins = myViewManager->getViews();
+ for (int i = 0; i < (int)wins.count(); i++)
+ {
+ OCCViewer_ViewWindow* win = ::qobject_cast<OCCViewer_ViewWindow*>(wins.at(i));
+ if (win)
+ win->setSelectionStyle(theMode);
+ }
+ }
+}
+
+
+
/*!
\return stereo type
*/
if( myInternalClipPlanes.IsEmpty() )
return;
- Graphic3d_MaterialAspect aMaterialAspect = Graphic3d_MaterialAspect();
- aMaterialAspect.SetColor( Quantity_Color( theColor.redF(), theColor.greenF(),
- theColor.blueF(), Quantity_TOC_RGB ) );
-#if OCC_VERSION_LARGE <= 0x07030000
- for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
- myInternalClipPlanes.Value(i)->SetCappingMaterial( aMaterialAspect );
-#else
for ( Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt ( myInternalClipPlanes ); aPlaneIt.More(); aPlaneIt.Next() )
- aPlaneIt.Value()->SetCappingMaterial( aMaterialAspect );
-#endif
+ setCappingColor( aPlaneIt.Value(), theColor );
+
update();
}
double aDz = SUIT_Session::session()->resourceMgr()->doubleValue( "OCCViewer", "light_dz", -1.0 );
Handle(V3d_DirectionalLight) aLight =
- new V3d_DirectionalLight( myV3dViewer, V3d_Zneg, OCCViewer::color( aColor ).Name(), Standard_True );
+ new V3d_DirectionalLight( V3d_Zneg, OCCViewer::color( aColor ).Name(), Standard_True );
+ myV3dViewer->AddLight( aLight );
if( !( aDx == 0 && aDy == 0 && aDz == 0 ) )
aLight->SetDirection( aDx, aDy, aDz );
myV3dViewer->SetLightOn( aLight );
- myV3dViewer->SetLightOn( new V3d_AmbientLight( myV3dViewer ) );
+ Handle(V3d_AmbientLight) ambLight = new V3d_AmbientLight();
+ myV3dViewer->AddLight( ambLight );
+ myV3dViewer->SetLightOn( ambLight );
}
/*!
aGraphic3dPlane->SetCapping( Standard_True );
// set capping color
- Graphic3d_MaterialAspect aMaterialAspect = Graphic3d_MaterialAspect();
- aMaterialAspect.SetColor( Quantity_Color( myClippingColor.redF(), myClippingColor.greenF(),
- myClippingColor.blueF(), Quantity_TOC_RGB ) );
- aGraphic3dPlane->SetCappingMaterial( aMaterialAspect );
+ setCappingColor( aGraphic3dPlane, myClippingColor );
// set capping texture
aGraphic3dPlane->SetCappingTexture( initClippingTexture( myDefaultTextureUsed, myClippingTexture,