From: jfa Date: Wed, 14 Dec 2022 11:17:22 +0000 (+0300) Subject: bos #32216 [CEA] GUI ergonomic: navigation cube. X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=eb20be80499611afe08b072046581b77f251f663;p=modules%2Fgui.git bos #32216 [CEA] GUI ergonomic: navigation cube. --- diff --git a/doc/salome/gui/images/occviewer_toolbar.png b/doc/salome/gui/images/occviewer_toolbar.png index d4b293757..54eca424d 100644 Binary files a/doc/salome/gui/images/occviewer_toolbar.png and b/doc/salome/gui/images/occviewer_toolbar.png differ diff --git a/doc/salome/gui/images/pref_salome_occviewer.png b/doc/salome/gui/images/pref_salome_occviewer.png index ef121f6c7..7bc2de5e8 100644 Binary files a/doc/salome/gui/images/pref_salome_occviewer.png and b/doc/salome/gui/images/pref_salome_occviewer.png differ diff --git a/doc/salome/gui/input/occ_3d_viewer.rst b/doc/salome/gui/input/occ_3d_viewer.rst index 4f21231cc..bd63288fc 100644 --- a/doc/salome/gui/input/occ_3d_viewer.rst +++ b/doc/salome/gui/input/occ_3d_viewer.rst @@ -53,6 +53,13 @@ ____ ____ +.. image:: ../../../../src/OCCViewer/resources/occ_view_viewcube.png + :align: center + +**Show/Hide view cube** - shows or hides navigation cube. + +____ + .. image:: ../../../../src/OCCViewer/resources/occ_view_preselection.png :align: center diff --git a/doc/salome/gui/input/setting_preferences.rst b/doc/salome/gui/input/setting_preferences.rst index 306b7a172..80f3e6318 100644 --- a/doc/salome/gui/input/setting_preferences.rst +++ b/doc/salome/gui/input/setting_preferences.rst @@ -175,6 +175,16 @@ OCC 3D Viewer Preferences - **Color** - allows to change the color of light source. - **Dx, Dy, Dz** - sets direction coordinates. +- **Navigation Cube** - allows to manage parameters of navigation cube. + + - **Show navigation cube on start** - if checked, navigation cube will appear in a new occ viewer. + - **Animation duration (sec)** - duration of animation of camera rotation. + - **Customize navigation cube appearance** - if checked, below defined parameters will be used instead of default ones. + - **Cube color** - color of the navigation cube. + - **Text color** - color of text on the navigation cube faces. + - **Cube size** - size of the navigation cube. + - **Show navigation cube axes** - show navigation cube own axes. + .. _vtk_preferences: VTK 3D Viewer Preferences diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 718efbd13..197af17cb 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -2855,6 +2855,41 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "step", 0.1, light_dz ); // ... "Light source" group <> + // ... "View cube" group <> + int occViewCubeGroup = pref->addPreference( tr( "PREF_GROUP_VIEWCUBE" ), occGroup ); + pref->setItemProperty( "columns", 2, occViewCubeGroup ); + // .... -> show view cube on viewer start + pref->addPreference( tr( "PREF_VIEWCUBE_SHOW" ), occViewCubeGroup, + LightApp_Preferences::Bool, "OCCViewer", "viewcube_show" ); + // .... -> view cube duration of animation (sec) + int viewcube_dur = pref->addPreference( tr( "PREF_VIEWCUBE_DURATION" ), occViewCubeGroup, + LightApp_Preferences::DblSpin, "OCCViewer", "viewcube_duration" ); + pref->setItemProperty( "min", 0.1, viewcube_dur ); + pref->setItemProperty( "max", 10.0, viewcube_dur ); + pref->setItemProperty( "step", 0.1, viewcube_dur ); + // ... "View cube" group <> + + // ... "View cube default (OCCT) attributes" group <> + int occViewCubeAttrsGroup = pref->addPreference( tr( "PREF_VIEWCUBE_CUSTOM" ), occGroup, + LightApp_Preferences::Auto, "OCCViewer", "viewcube_custom" ); + pref->setItemProperty( "columns", 2, occViewCubeAttrsGroup ); + // .... -> box color + pref->addPreference( tr( "PREF_VIEWCUBE_COLOR" ), occViewCubeAttrsGroup, + LightApp_Preferences::Color, "OCCViewer", "viewcube_color" ); + // .... -> view cube size + int viewcube_size = pref->addPreference( tr( "PREF_VIEWCUBE_SIZE" ), occViewCubeAttrsGroup, + LightApp_Preferences::DblSpin, "OCCViewer", "viewcube_size" ); + pref->setItemProperty( "min", 30.0, viewcube_size ); + pref->setItemProperty( "max", 100.0, viewcube_size ); + pref->setItemProperty( "step", 10.0, viewcube_size ); + // .... -> text color + pref->addPreference( tr( "PREF_VIEWCUBE_TEXTCOLOR" ), occViewCubeAttrsGroup, + LightApp_Preferences::Color, "OCCViewer", "viewcube_text_color" ); + // .... -> show view cube axes + pref->addPreference( tr( "PREF_VIEWCUBE_AXES" ), occViewCubeAttrsGroup, + LightApp_Preferences::Bool, "OCCViewer", "viewcube_axes" ); + // ... "View cube" group <> + // ... -> empty frame (for layout) <> int occGen = pref->addPreference( "", occGroup, LightApp_Preferences::Frame ); pref->setItemProperty( "margin", 0, occGen ); @@ -3640,6 +3675,25 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } #endif +#ifndef DISABLE_OCCVIEWER + //if ( sec == QString( "OCCViewer" ) && param == QString( "viewcube_color" ) ) + if ( sec == QString( "OCCViewer" ) && param.contains( "viewcube" ) ) + { + QList lst; + viewManagers( OCCViewer_Viewer::Type(), lst ); + QListIterator it( lst ); + while ( it.hasNext() ) + { + SUIT_ViewModel* vm = it.next()->getViewModel(); + if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) ) + continue; + + OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm; + occVM->setViewCubeParamsFromPreferences(); + } + } +#endif + if ( sec == QString( "3DViewer" ) && param == QString( "zooming_mode" ) ) { int mode = resMgr->integerValue( "3DViewer", "zooming_mode", 0 ); diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index 4643e5859..73c3f7140 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -154,6 +154,13 @@ + + + + + + +
diff --git a/src/LightApp/resources/LightApp_msg_en.ts b/src/LightApp/resources/LightApp_msg_en.ts index 1a159cacf..15d27efdf 100644 --- a/src/LightApp/resources/LightApp_msg_en.ts +++ b/src/LightApp/resources/LightApp_msg_en.ts @@ -952,6 +952,40 @@ The changes will be applied on the next application session. PREF_LIGHT_COLOR Color + + + PREF_GROUP_VIEWCUBE + Navigation Cube + + + PREF_VIEWCUBE_SHOW + Show navigation cube on start + + + PREF_VIEWCUBE_AXES + Show navigation cube axes + + + PREF_VIEWCUBE_CUSTOM + Customize navigation cube appearance + + + PREF_VIEWCUBE_COLOR + Cube color + + + PREF_VIEWCUBE_SIZE + Cube size + + + PREF_VIEWCUBE_TEXTCOLOR + Text color + + + PREF_VIEWCUBE_DURATION + Animation duration (sec) + + TOT_CLOSE Close diff --git a/src/OCCViewer/CMakeLists.txt b/src/OCCViewer/CMakeLists.txt index 16ac35dc4..35d4eaa2d 100644 --- a/src/OCCViewer/CMakeLists.txt +++ b/src/OCCViewer/CMakeLists.txt @@ -144,6 +144,7 @@ SET(_other_RESOURCES resources/occ_view_style_switch.png resources/occ_view_top.png resources/occ_view_triedre.png + resources/occ_view_viewcube.png resources/occ_view_zoom.png resources/occ_view_zooming_style_switch.png resources/occ_view_ray_tracing.png diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx index 23d09ff06..0cd0e507d 100644 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ b/src/OCCViewer/OCCViewer_ViewModel.cxx @@ -167,6 +167,10 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron) } } + /* create view cube */ + myViewCube = new AIS_ViewCube(); + setViewCubeParamsFromPreferences(); + // set interaction style to standard myInteractionStyle = 0; @@ -479,9 +483,15 @@ void OCCViewer_Viewer::onViewClosed(OCCViewer_ViewPort3d*) void OCCViewer_Viewer::onViewMapped(OCCViewer_ViewPort3d* viewPort) { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + setTrihedronShown( true ); + + bool showViewCube = true; + if ( resMgr ) showViewCube = resMgr->booleanValue( "OCCViewer", "viewcube_show", true ); + setViewCubeShown( showViewCube ); + bool showStaticTrihedron = true; - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if ( resMgr ) showStaticTrihedron = resMgr->booleanValue( "3DViewer", "show_static_trihedron", true ); viewPort->showStaticTrihedron( showStaticTrihedron ); } @@ -1284,19 +1294,19 @@ void OCCViewer_Viewer::setColorScaleShown( const bool on ) } /*! - Changes visibility of trihedron to opposite + \return true if trihedron is visible */ -void OCCViewer_Viewer::toggleTrihedron() +bool OCCViewer_Viewer::isTrihedronVisible() const { - setTrihedronShown( !isTrihedronVisible() ); + return !myTrihedron.IsNull() && !myAISContext.IsNull() && myAISContext->IsDisplayed( myTrihedron ); } /*! - \return true if trihedron is visible + \return true if view cube is visible */ -bool OCCViewer_Viewer::isTrihedronVisible() const +bool OCCViewer_Viewer::isViewCubeVisible() const { - return !myTrihedron.IsNull() && !myAISContext.IsNull() && myAISContext->IsDisplayed( myTrihedron ); + return !myViewCube.IsNull() && !myAISContext.IsNull() && myAISContext->IsDisplayed( myViewCube ); } /*! @@ -1322,6 +1332,71 @@ void OCCViewer_Viewer::setTrihedronShown( const bool on ) } } +/*! + Sets visibility state of trihedron + \param on - new state +*/ + +void OCCViewer_Viewer::setViewCubeShown( const bool on ) +{ + if ( myViewCube.IsNull() ) + return; + + if ( on ) { + myAISContext->Display( myViewCube, + 0 /*wireframe*/, + //-1 /* selection mode */, + 0 /* selection mode */, + Standard_True /* update viewer*/, + AIS_DS_Displayed /* display status */); + } + else { + myAISContext->Erase( myViewCube, Standard_True ); + } +} + +/*! + Set View Cube parameters from preferences +*/ +void OCCViewer_Viewer::setViewCubeParamsFromPreferences() +{ + // Resource manager + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if (!resMgr || myViewCube.IsNull()) + return; + + bool isVisibleVC = isVisible(myViewCube); + + if (resMgr->booleanValue("OCCViewer", "viewcube_custom", false)) { + // Use custom settings from preferences + QColor aColor; + + // Box color + aColor = resMgr->colorValue("OCCViewer", "viewcube_color", QColor(255, 255, 255)); + myViewCube->SetBoxColor(OCCViewer::color(aColor)); + + // Size + myViewCube->SetSize(resMgr->doubleValue("OCCViewer", "viewcube_size", 70.0)); + + // Text color + aColor = resMgr->colorValue("OCCViewer", "viewcube_text_color", QColor(0, 0, 0)); + myViewCube->SetTextColor(OCCViewer::color(aColor)); + + // Axes + myViewCube->SetDrawAxes(resMgr->booleanValue("OCCViewer", "viewcube_axes", true)); + } + else { + myViewCube->ResetStyles(); + } + + // Animation duration (sec) + myViewCube->SetDuration(resMgr->doubleValue("OCCViewer", "viewcube_duration", 0.5)); + + // Update the viewer + if (isVisibleVC) + myAISContext->Redisplay( myViewCube, Standard_True); +} + /*! \return trihedron size */ diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h index 16241e706..1527b03ac 100644 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ b/src/OCCViewer/OCCViewer_ViewModel.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -134,7 +135,6 @@ public: //! returns true if 3d Trihedron in viewer was created bool trihedronActivated() const { return !myTrihedron.IsNull(); } - void toggleTrihedron(); bool isTrihedronVisible() const; virtual void setTrihedronShown( const bool ); @@ -149,6 +149,11 @@ public: void updateTrihedron(); + // View Cube methods + bool viewCubeActivated() const { return !myViewCube.IsNull(); } + bool isViewCubeVisible() const; + virtual void setViewCubeShown( const bool ); + void setViewCubeParamsFromPreferences(); virtual OCCViewer_ViewWindow* createSubWindow(); @@ -169,6 +174,7 @@ public: Handle(AIS_InteractiveContext) getAISContext() const { return myAISContext; } Handle(AIS_ColorScale) getColorScale() const { return myColorScale; } Handle(AIS_Trihedron) getTrihedron() const { return myTrihedron; } + Handle(AIS_ViewCube) getViewCube() const { return myViewCube; } int getTopLayerId(); @@ -275,6 +281,7 @@ protected: Handle(V3d_Viewer) myV3dViewer; Handle(AIS_ColorScale) myColorScale; Handle(AIS_Trihedron) myTrihedron; + Handle(AIS_ViewCube) myViewCube; Handle(AIS_InteractiveContext) myAISContext; int myInteractionStyle; diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index 3deb777cd..94a9f8a08 100644 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -1404,6 +1404,16 @@ void OCCViewer_ViewWindow::createActions() toolMgr()->registerAction( aAction, TrihedronShowId ); } + if (myModel->viewCubeActivated()) { + aAction = new QtxAction(tr("MNU_SHOW_VIEWCUBE"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_VIEWCUBE" ) ), + tr( "MNU_SHOW_VIEWCUBE" ), 0, this); + aAction->setCheckable( true ); + aAction->setChecked( aResMgr->booleanValue( "OCCViewer", "viewcube_show", true ) ); + aAction->setStatusTip(tr("DSC_SHOW_VIEWCUBE")); + connect(aAction, SIGNAL(toggled(bool)), this, SLOT(onViewCubeShow(bool))); + toolMgr()->registerAction( aAction, ViewCubeShowId ); + } + // Scale aAction = new QtxAction(tr("MNU_SCALING"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_SCALING" ) ), tr( "MNU_SCALING" ), 0, this); @@ -1564,6 +1574,9 @@ void OCCViewer_ViewWindow::createToolBar() if( myModel->trihedronActivated() ) toolMgr()->append( TrihedronShowId, tid ); + if( myModel->viewCubeActivated() ) + toolMgr()->append( ViewCubeShowId, tid ); + QtxMultiAction* aScaleAction = new QtxMultiAction( this ); aScaleAction->insertAction( toolMgr()->action( FitAllId ) ); aScaleAction->insertAction( toolMgr()->action( FitRectId ) ); @@ -2100,6 +2113,8 @@ void OCCViewer_ViewWindow::performRestoring( const viewAspect& anItem, bool base myModel->setTrihedronShown( anItem.isVisible ); myModel->setTrihedronSize( anItem.size ); + myModel->setViewCubeShown( anItem.vcIsVisible ); + // graduated trihedron bool anIsVisible = anItem.gtIsVisible; OCCViewer_AxisWidget::AxisData anAxisData[3]; @@ -2167,6 +2182,14 @@ void OCCViewer_ViewWindow::onTrihedronShow(bool show) myModel->setTrihedronShown(show); } +/*! + \brief Called when action "show/hide view cube" is activated. +*/ +void OCCViewer_ViewWindow::onViewCubeShow(bool show) +{ + myModel->setViewCubeShown(show); +} + /*! \brief Toggles preselection (highlighting) on/off */ @@ -2523,6 +2546,8 @@ viewAspect OCCViewer_ViewWindow::getViewParams() const bool isShown = myModel->isTrihedronVisible(); double size = myModel->trihedronSize(); + bool isVCShown = myModel->isViewCubeVisible(); + QString aName = QTime::currentTime().toString() + QString::fromLatin1( " h:m:s" ); viewAspect params; @@ -2541,9 +2566,14 @@ viewAspect OCCViewer_ViewWindow::getViewParams() const params.scaleY = aScaleY; params.scaleZ = aScaleZ; params.name = aName; + + // trihedron params.isVisible= isShown; params.size = size; + // view cube + params.vcIsVisible= isVCShown; + // graduated trihedron bool anIsVisible = false; OCCViewer_AxisWidget::AxisData anAxisData[3]; diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h index 451aa008a..b77bbfc23 100644 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ b/src/OCCViewer/OCCViewer_ViewWindow.h @@ -60,8 +60,11 @@ public: double scaleY; double scaleZ; QString name; + // trihedron bool isVisible; double size; + // view cube + bool vcIsVisible; // graduated trihedron bool gtIsVisible; bool gtDrawNameX; @@ -116,6 +119,7 @@ public: name(), isVisible( false ), size( 0.0 ), + vcIsVisible( false ), gtIsVisible( false ), gtDrawNameX( false ), gtDrawNameY( false ), gtDrawNameZ( false ), gtNameX(), gtNameY(), gtNameZ(), @@ -144,16 +148,17 @@ class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow public: enum ActionId { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId, - ChangeRotationPointId, RotationId, - FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, - ResetId, CloneId, ClippingId, MemId, RestoreId, - TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId, - SwitchInteractionStyleId, SwitchZoomingStyleId, - SwitchPreselectionId, SwitchSelectionId, - MaximizedId, SynchronizeId, ReturnTo3dViewId, - OrthographicId, PerspectiveId, StereoId, RayTracingId, EnvTextureId, LightSourceId, - RectangleSelectionStyleId, PolygonSelectionStyleId, CircleSelectionStyleId, - UserId }; + ChangeRotationPointId, RotationId, + FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, + ResetId, CloneId, ClippingId, MemId, RestoreId, + TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId, + SwitchInteractionStyleId, SwitchZoomingStyleId, + SwitchPreselectionId, SwitchSelectionId, + MaximizedId, SynchronizeId, ReturnTo3dViewId, + OrthographicId, PerspectiveId, StereoId, RayTracingId, EnvTextureId, LightSourceId, + RectangleSelectionStyleId, PolygonSelectionStyleId, CircleSelectionStyleId, + ViewCubeShowId, + UserId }; enum OperationType{ NOVIEWOP, PANVIEW, ZOOMVIEW, ROTATE, PANGLOBAL, WINDOWFIT, FITALLVIEW, FITSELECTION, RESETVIEW, @@ -314,6 +319,7 @@ public slots: virtual void onMemorizeView(); virtual void onRestoreView(); virtual void onTrihedronShow(bool); + virtual void onViewCubeShow(bool); virtual void setRestoreFlag(); virtual void onSwitchInteractionStyle( bool on ); virtual void onSwitchZoomingStyle( bool on ); diff --git a/src/OCCViewer/resources/OCCViewer_images.ts b/src/OCCViewer/resources/OCCViewer_images.ts index 465a7b7a7..2c8c639e2 100644 --- a/src/OCCViewer/resources/OCCViewer_images.ts +++ b/src/OCCViewer/resources/OCCViewer_images.ts @@ -99,6 +99,10 @@ ICON_OCCVIEWER_VIEW_TRIHEDRON occ_view_triedre.png + + ICON_OCCVIEWER_VIEW_VIEWCUBE + occ_view_viewcube.png + ICON_OCCVIEWER_SCALING occ_view_scaling.png diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.ts b/src/OCCViewer/resources/OCCViewer_msg_en.ts index 2b87be75f..ee90a41c3 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_en.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_en.ts @@ -68,6 +68,14 @@ DSC_SHOW_TRIHEDRE Show/Hide trihedron in the current view + + MNU_SHOW_VIEWCUBE + Show/Hide navigation cube + + + DSC_SHOW_VIEWCUBE + Show/Hide navigation cube in the current view + MNU_ROTATE_VIEW Rotation diff --git a/src/OCCViewer/resources/occ_view_viewcube.png b/src/OCCViewer/resources/occ_view_viewcube.png new file mode 100755 index 000000000..9018a4386 Binary files /dev/null and b/src/OCCViewer/resources/occ_view_viewcube.png differ diff --git a/src/SOCC/SOCC_ViewModel.cxx b/src/SOCC/SOCC_ViewModel.cxx index 0824b4558..5c2c59802 100644 --- a/src/SOCC/SOCC_ViewModel.cxx +++ b/src/SOCC/SOCC_ViewModel.cxx @@ -412,14 +412,17 @@ void SOCC_Viewer::EraseAll( SALOME_Displayer* d, const bool forced ) Handle(AIS_InteractiveContext) ic = getAISContext(); // check if trihedron is displayed - Standard_Boolean isTrihedronDisplayed = ic->IsDisplayed( getTrihedron() ); + Standard_Boolean isTrihedronDisplayed = isTrihedronVisible(); + Standard_Boolean isViewCubeDisplayed = isViewCubeVisible(); // get objects to be erased (all currently displayed objects) AIS_ListOfInteractive aList; ic->DisplayedObjects( aList ); AIS_ListIteratorOfListOfInteractive anIter( aList ); for ( ; anIter.More(); anIter.Next() ) { - if ( (isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) ) ) + if ( isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) ) + continue; + if ( isViewCubeDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_ViewCube ) ) continue; // erase an object @@ -515,6 +518,10 @@ void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const std::listActivate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)*it ) ); } + else if ( anAIS->DynamicType() == STANDARD_TYPE(AIS_ViewCube) ) + { + ic->Activate( anAIS, 0 ); + } else if ( anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron) ) { ic->Load( anAIS, -1 );