// GEOM GEOMGUI : GUI for Geometry component
//
// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
//
//
//
// Module : GEOM
// $Header$
-using namespace std;
#include "GeometryGUI.h"
// SALOME Includes
-# include "Utils_ORB_INIT.hxx"
-# include "Utils_SINGLETON.hxx"
+#include "Utils_ORB_INIT.hxx"
+#include "Utils_SINGLETON.hxx"
-#include "QAD.h"
-#include "QAD_Tools.h"
-#include "QAD_Config.h"
-#include "QAD_Settings.h"
+#include "QAD_Desktop.h"
+#include "QAD_Application.h"
#include "QAD_RightFrame.h"
+#include "QAD_Config.h"
+#include "QAD_Tools.h"
#include "QAD_MessageBox.h"
#include "QAD_Resource.h"
-#include "QAD_FileDlg.h"
+#include "SALOMEGUI_Desktop.h"
-#include "OCCViewer_ViewPort.h"
-#include "OCCViewer_ViewPort3d.h"
#include "OCCViewer_Viewer3d.h"
+#include "OCCViewer_ViewFrame.h"
+#include "OCCViewer_ViewPort3d.h"
+#include "OCCViewer_Prs.h"
+
+#include "VTKViewer_ViewFrame.h"
+#include "VTKViewer_RenderWindowInteractor.h"
+#include "VTKViewer_InteractorStyleSALOME.h"
+#include "VTKViewer_Prs.h"
+#include "SALOME_Actor.h"
-#include "SALOME_NamingService.hxx"
+#include "SALOME_Selection.h"
#include "SALOME_ListIteratorOfListIO.hxx"
-#include "SALOME_InteractiveObject.hxx"
+#include "GEOM_AISShape.hxx"
+#include "GEOM_Displayer.h"
-#include "SALOMEGUI_ImportOperation.h"
-#include "SALOMEGUI_QtCatchCorbaException.hxx"
-#include "SALOMEGUI_NameDlg.h"
-#include "utilities.h"
+#include "GEOMImpl_Types.hxx"
-// Open CASCADE Includes
-#include <AIS_Shape.hxx>
-#include <AIS_InteractiveContext.hxx>
-#include <AIS_ListIteratorOfListOfInteractive.hxx>
-#include <AIS_Drawer.hxx>
-#include <AIS_Trihedron.hxx>
+// External includes
+#include <qfileinfo.h>
#include <Prs3d_Drawer.hxx>
#include <Prs3d_IsoAspect.hxx>
-#include <Prs3d_ShadingAspect.hxx>
-
-#include <BRep_Builder.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <BRep_Tool.hxx>
-#include <BRepGProp.hxx>
-#include <BRepExtrema_DistShapeShape.hxx>
-#include <GProp_GProps.hxx>
-#include <GProp_PrincipalProps.hxx>
-
-#include <BRepAlgoAPI_Fuse.hxx>
-#include <BRepAlgoAPI_Cut.hxx>
-#include <BRepAlgoAPI_Section.hxx>
-#include <BRepAlgoAPI_Common.hxx>
-#include <BRepPrimAPI_MakeBox.hxx>
-#include <BRepPrimAPI_MakeCylinder.hxx>
-#include <BRepPrimAPI_MakePrism.hxx>
-#include <BRepPrimAPI_MakeSphere.hxx>
-#include <BRepPrimAPI_MakeRevol.hxx>
-#include <BRepPrimAPI_MakeTorus.hxx>
-#include <BRepPrimAPI_MakeCone.hxx>
-#include <BRepBuilderAPI_MakeVertex.hxx>
-#include <BRepBuilderAPI_MakeEdge.hxx>
-#include <BRepBuilderAPI_MakeWire.hxx>
-#include <BRepBuilderAPI_MakeFace.hxx>
-#include <BRepBuilderAPI_Transform.hxx>
-
-#include <BRepTools.hxx>
-#include <BRepTools_WireExplorer.hxx>
-#include <BRepCheck_Analyzer.hxx>
-
-#include <Geom_Circle.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_Surface.hxx>
-#include <Geom_Axis2Placement.hxx>
-#include <Geom_TrimmedCurve.hxx>
-
-#include <GeomAPI_ProjectPointOnCurve.hxx>
-#include <GC_MakeArcOfCircle.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Circ.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Mat.hxx>
-
-#include <TopTools_MapOfShape.hxx>
-#include <TopTools_MapIteratorOfMapOfShape.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TopoDS_Iterator.hxx>
-
-//VRV: OCC 4.0 migration
-#include <IGESControl_Writer.hxx>
-#include <IGESControl_Controller.hxx>
-#include <STEPControl_Writer.hxx>
-//#include <STEPControlStd_StepModelType.hxx>
-//VRV: OCC 4.0 migration
-
-#include <TopoDS.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Compound.hxx>
-#include <TopAbs.hxx>
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-
-#include <Precision.hxx>
-#include <ProjLib.hxx>
-#include <ElSLib.hxx>
-
-#include <IFSelect_ReturnStatus.hxx>
-#include <Interface_Static.hxx>
-
-// QT Includes
-#define INCLUDE_MENUITEM_DEF
-#include <qapplication.h>
-#include <qmenudata.h>
-#include <qmenubar.h>
-#include <qpopupmenu.h>
-#include <qfont.h>
-#include <qstring.h>
-#include <qcheckbox.h>
-#include <qcolordialog.h>
-#include <qmessagebox.h>
-#include <qspinbox.h>
-#include <qlist.h>
-#include <qwidget.h>
-#include <qevent.h>
-#include <qlineedit.h>
-
-#include "VTKViewer_RenderWindowInteractor.h"
-#include "VTKViewer_ViewFrame.h"
-#include "GEOM_Actor.h"
-#include "GEOM_Client.hxx"
-#include "GEOM_AISShape.hxx"
-#include "GEOM_AssemblyBuilder.h"
-#include "GEOM_InteractiveObject.hxx"
-
+#include <OSD_SharedLibrary.hxx>
-#include "GeometryGUI_aParameterDlg.h"
-
-#include "GeometryGUI_PointDlg.h" // Method POINT
-#include "GeometryGUI_BoxDlg.h" // Method BOX
-#include "GeometryGUI_VectorDlg.h" // Method VECTOR
-#include "GeometryGUI_PlaneDlg.h" // Method PLANE
-#include "GeometryGUI_PrismDlg.h" // Method PRISM
-#include "GeometryGUI_FuseDlg.h" // Method FUSE
-#include "GeometryGUI_CommonDlg.h" // Method COMMON
-#include "GeometryGUI_CutDlg.h" // Method CUT
-#include "GeometryGUI_SectionDlg.h" // Method SECTION
-
-#include "GeometryGUI_LineDlg.h" // Method LINE
-#include "GeometryGUI_ScaleDlg.h" // Method SCALE
-#include "GeometryGUI_MirrorDlg.h" // Method MIRROR
-#include "GeometryGUI_SphereDlg.h" // Method SPHERE
-#include "GeometryGUI_CircleDlg.h" // Method CIRCLE
-#include "GeometryGUI_EllipseDlg.h" // Method ELLIPSE
-#include "GeometryGUI_RevolDlg.h" // Method REVOL
-#include "GeometryGUI_RotationDlg.h" // Method ROTATION
-#include "GeometryGUI_TranslationDlg.h" // Method TRANSLATION
-#include "GeometryGUI_MultiTranslationDlg.h" // Method MULTI TRANSLATION
-#include "GeometryGUI_MultiRotationDlg.h" // Method MULTI ROTATION
-#include "GeometryGUI_ArcDlg.h" // Method ARC
-#include "GeometryGUI_PipeDlg.h" // Method PIPE
-#include "GeometryGUI_CylinderDlg.h" // Method CYLINDER
-#include "GeometryGUI_ConeDlg.h" // Method CONE
-#include "GeometryGUI_TorusDlg.h" // Method TORUS
-#include "GeometryGUI_FillingDlg.h" // Method FILLING
-#include "GeometryGUI_SewingDlg.h" // Method SEWING
-#include "GeometryGUI_CompoundDlg.h" // Method GEOM::COMPOUND
-#include "GeometryGUI_EdgeDlg.h" // Method GEOM::EDGE
-#include "GeometryGUI_OrientationDlg.h" // Method ORIENTATION
-#include "GeometryGUI_PartitionDlg.h" // Method PARTITION
-#include "GeometryGUI_SubShapeDlg.h" // Method EXPLODE
-#include "GeometryGUI_WireDlg.h" // Method GEOM::WIRE
-#include "GeometryGUI_WorkingPlaneDlg.h" // Method WORKING PLANE
-#include "GeometryGUI_PropertiesDlg.h" // Method PROPERTIES
-#include "GeometryGUI_CenterMassDlg.h" // Method CENTER MASS
-#include "GeometryGUI_InertiaDlg.h" // Method INERTIA
-#include "GeometryGUI_FaceDlg.h" // Method GEOM::FACE
-#include "GeometryGUI_FilletDlg.h" // Method FILLET
-#include "GeometryGUI_ChamferDlg.h" // Method CHAMFER
-#include "GeometryGUI_FillingHoleDlg.h" // Method FILLING HOLE
-#include "GeometryGUI_SuppressFacesDlg.h" // Method SUPPRESS FACES
-#include "GeometryGUI_CheckShape.h" // Method CHECKSHAPE
-#include "GeometryGUI_ArchimedeDlg.h" // Method ARCHIMEDE
-#include "GeometryGUI_TransparencyDlg.h" // Method TRANSPARENCY adjustement
-#include "GeometryGUI_NbIsosDlg.h" // Method ISOS adjustement
-#include "GeometryGUI_BndBoxDlg.h" // Method BNDBOX
-#include "GeometryGUI_MaxToleranceDlg.h" // Method MAXTOLERANCE
-#include "GeometryGUI_WhatisDlg.h" // Method WHATIS
-#include "GeometryGUI_DistanceDlg.h" // Method DISTANCE
-#include "GeometryGUI_SuppressHoleDlg.h" // Method SUPPRESS HOLE
-
-
-static Handle(AIS_Shape) theConstructionShape = new AIS_Shape(TopoDS_Shape());
-static Handle(GEOM_AISShape) theSelectedShape = new GEOM_AISShape(TopoDS_Shape(), "");
-
-static AIS_ListOfInteractive ListDisplayedObject;
-
-static bool Settings_AddInStudy = false;
-static bool Settings_Copy = false;
-static Standard_CString Fatherior = "";
-static GEOM_Client ShapeReader;
+#include "utilities.h"
-/* The object itself created in the static method 'GetOrCreateGeometryGUI()' */
-static GeometryGUI* GeomGUI = 0;
+#include <vtkCamera.h>
+#include <vtkRenderer.h>
+using namespace std;
+extern "C" {
+ Standard_EXPORT SALOMEGUI* GetComponentGUI() {
+ return GeometryGUI::GetGeomGUI();
+ }
+}
-//=======================================================================
+//=================================================================================
// class : CustomItem
// purpose : Set Font to a text.
-//=======================================================================
+//=================================================================================
class CustomItem : public QCustomMenuItem
{
public:
- CustomItem( const QString& s, const QFont& f )
- : string( s ), font( f ){};
- ~CustomItem(){}
-
- void paint( QPainter* p, const QColorGroup& /*cg*/, bool /*act*/, bool /*enabled*/, int x, int y, int w, int h )
+ CustomItem(const QString& s, const QFont& f) : myString(s), myFont(f) {}
+ ~CustomItem() {}
+
+ void paint(QPainter* p, const QColorGroup& cg, bool act, bool /*enabled*/, int x, int y, int w, int h)
{
- p->setFont ( font );
- p->drawText( x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string );
+ p->save();
+ p->fillRect( x, y, w, h, act ? cg.highlight() : cg.mid() );
+ p->setPen( act ? cg.highlightedText() : cg.buttonText() );
+ p->setFont( myFont );
+ p->drawText( x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString );
+ p->restore();
}
-
+
QSize sizeHint()
{
- return QFontMetrics( font ).size( AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string );
+ return QFontMetrics( myFont ).size( AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString );
}
-private:
- QString string;
- QFont font;
-};
-
+ bool fullSpan() const
+ {
+ return true;
+ }
+private:
+ QString myString;
+ QFont myFont;
+};
//=======================================================================
-// function : GeometryGUI()
-// purpose : Constructor
+// function : GeometryGUI::GetGeomGUI()
+// purpose : Gets the only object of GeometryGUI [ static ]
//=======================================================================
-GeometryGUI::GeometryGUI() :
- QObject()
+GeometryGUI* GeometryGUI::GetGeomGUI()
{
+ static GeometryGUI myContext;
+ return &myContext;
}
//=======================================================================
-// function : ~GeometryGUI()
-// purpose : Destructor
+// function : GetORB
+// purpose : Returns a reference to ORB [ static ]
//=======================================================================
-GeometryGUI::~GeometryGUI()
+CORBA::ORB_var GeometryGUI::GetORB()
{
+ ORB_INIT& init = *SINGLETON_<ORB_INIT>::Instance();
+ return init.orb();
}
-
//=======================================================================
-// function : GetGeometryGUI() static
-// purpose : Returns current 'GeomGUI' a static pointer
+// function : GeometryGUI::GeometryGUI()
+// purpose : Constructor
//=======================================================================
-GeometryGUI* GeometryGUI::GetGeometryGUI( )
+GeometryGUI::GeometryGUI() :
+ SALOMEGUI()
{
- return GeomGUI;
-}
+ QAD_Desktop* desktop = QAD_Application::getDesktop();
+ Engines::Component_var comp = desktop->getEngine( "FactoryServer", "GEOM" );
+ myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
+ myState = -1;
+ myActiveDialogBox = 0;
+ myFatherior = "";
-//=====================================================================================
-// function : GetIndex()
-// purpose : Get the index of a sub shape in a main shape : index start at 1
-//=====================================================================================
-int GeometryGUI::GetIndex(const TopoDS_Shape& subshape,
- const TopoDS_Shape& shape,
- int /*ShapeType*/)
-{
- if( shape.IsNull() || subshape.IsNull() )
- return -1 ;
-
- int index = 1;
- if (subshape.ShapeType() == TopAbs_COMPOUND)
- {
- TopoDS_Iterator it;
- TopTools_ListOfShape CL;
- CL.Append( shape );
- TopTools_ListIteratorOfListOfShape itC;
- for (itC.Initialize( CL ); itC.More(); itC.Next())
- {
- for (it.Initialize( itC.Value() ); it.More(); it.Next())
- {
- if ( it.Value().ShapeType() == TopAbs_COMPOUND)
- {
- if (it.Value().IsSame(subshape))
- return index;
- else
- index++;
- CL.Append( it.Value() );
- }
- }
- }
- }
- else
- {
- TopExp_Explorer Exp ( shape, subshape.ShapeType() );
- TopTools_MapOfShape M;
- while ( Exp.More() )
- {
- if ( M.Add(Exp.Current()) )
- {
- if ( Exp.Current().IsSame(subshape) )
- return index;
- index++;
- }
- Exp.Next();
- }
- }
- return -1;
-}
+ gp_Pnt origin = gp_Pnt(0., 0., 0.);
+ gp_Dir direction = gp_Dir(0., 0., 1.);
+ myWorkingPlane = gp_Ax3(origin, direction);
+}
//=======================================================================
-// function : GetOrCreateGeometryGUI()
-// purpose : Gets or create an object 'GeometryGUI' with initialisations
-// : Returns 'GeomGUI' as a pointer
+// function : GeometryGUI::~GeometryGUI()
+// purpose : Destructor
//=======================================================================
-GeometryGUI* GeometryGUI::GetOrCreateGeometryGUI( QAD_Desktop* desktop )
-{
- if( GeomGUI == 0 ) {
- GeomGUI = new GeometryGUI;
- GeomGUI->myActiveDialogBox = 0 ;
- GeomGUI->mySimulationShape = new AIS_Shape(TopoDS_Shape());
- GeomGUI->myState = -1 ;
- GeomGUI->myDesktop = desktop ;
- GeomGUI->myActiveStudy = desktop->getActiveStudy();
- GeomGUI->mySimulationActor = vtkActorCollection::New() ;
-
- GeomGUI->myShadingColor = Quantity_Color( Quantity_NOC_GOLDENROD );
-
- Engines::Component_var comp = desktop->getEngine("FactoryServer", "GEOM");
- GeomGUI->myComponentGeom = GEOM::GEOM_Gen::_narrow(comp);
-
- /* GetCurrentStudy */
- int studyId = GeomGUI->myActiveStudy->getStudyId();
- GeomGUI->myComponentGeom->GetCurrentStudy(studyId);
-
- GeomGUI->myNbGeom = GeomGUI->myComponentGeom->NbLabels();
- } else {
- /* study may have changed */
- GeomGUI->myActiveStudy = desktop->getActiveStudy();
- }
- return GeomGUI;
-}
-
-
-//=================================================================================
-// function : VertexToPoint()
-// purpose : If S can be converted in a gp_Pnt returns true and the result is P
-//=================================================================================
-bool GeometryGUI::VertexToPoint( const TopoDS_Shape& S, gp_Pnt& P )
-{
- if( S.IsNull() || S.ShapeType() != TopAbs_VERTEX )
- return false ;
- P = BRep_Tool::Pnt(TopoDS::Vertex( S ));
- return true ;
-}
-
-
-//=================================================================================
-// function : LinearEdgeExtremities()
-// purpose : If S can be converted in a linear edge and if initial an final points
-// : distance is sufficient, returns true else returns false.
-// : Resulting points are respectively P1 and P2
-//=================================================================================
-bool GeometryGUI::LinearEdgeExtremities( const TopoDS_Shape& S, gp_Pnt& P1, gp_Pnt& P2 )
-{
- if( S.IsNull() || S.ShapeType() != TopAbs_EDGE )
- return false ;
- BRepAdaptor_Curve curv(TopoDS::Edge(S));
- if (curv.GetType() != GeomAbs_Line)
- return false ;
-
- curv.D0( curv.FirstParameter(), P1 );
- curv.D0( curv.LastParameter(), P2 );
-
- if( P1.Distance(P2) <= Precision::Confusion() )
- return false ;
-
- return true ;
-}
-
-//=================================================================================
-// function : GetBipointDxDyDz()
-// purpose :
-//=================================================================================
-void GeometryGUI::GetBipointDxDyDz( gp_Pnt P1, gp_Pnt P2, double& dx, double& dy, double& dz )
+GeometryGUI::~GeometryGUI()
{
- dx = P2.X() - P1.X() ;
- dy = P2.Y() - P1.Y() ;
- dz = P2.Z() - P1.Z() ;
- return ;
}
//=======================================================================
-// function : GetTopoFromSelection()
-// purpose : Define tds from a single selection and retuen true
+// function : GeometryGUI::getLibrary()
+// purpose : get or load GUI library by name [ internal ]
//=======================================================================
-bool GeometryGUI::GetTopoFromSelection(SALOME_Selection *Sel, TopoDS_Shape& tds)
+typedef GEOMGUI* (*LibraryGUI)();
+GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
{
- if(Sel->IObjectCount() != 1)
- return false ;
-
- Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
- /* case SObject */
- if ( IO->hasEntry() ) {
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IO->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if (obj->FindAttribute(anAttr, "AttributeIOR")) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- tds = this->GetShapeFromIOR(anIOR->Value());
- if(tds.IsNull() )
- return false ;
- else
- return true ;
- }
+ if ( !myGUIMap.contains( libraryName ) ) {
+ // try to load library if it is not loaded yet
+ QCString libs;
+ if( ( libs = getenv( "LD_LIBRARY_PATH" ) ) ) {
+ QStringList dirList = QStringList::split( ":", libs, false ); // skip empty entries
+ for( int i = dirList.count()-1; i >= 0; i-- ) {
+ QString dir = dirList[ i ];
+ QFileInfo fi( QAD_Tools::addSlash( dirList[ i ] ) + libraryName );
+ if( fi.exists() ) {
+ OSD_SharedLibrary aSharedLibrary( (char*)fi.fileName().latin1() );
+ bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
+ if( !res ) {
+ MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
+ continue; // continue search further
+ }
+ OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
+ if ( osdF != NULL ) {
+ LibraryGUI func = (GEOMGUI* (*) ())osdF;
+ GEOMGUI* libGUI = (*func)();
+ if ( libGUI ) {
+ myGUIMap[ libraryName ] = libGUI;
+ break; // found and loaded!
+ }
+ }
+ }
+ }
}
}
-
- if ( IO->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
- Standard_CString ior = "";
- Handle(GEOM_InteractiveObject) GIObject = Handle(GEOM_InteractiveObject)::DownCast( IO );
- ior = GIObject->getIOR();
- tds = this->GetShapeFromIOR(ior);
- if(tds.IsNull() )
- return false ;
- else
- return true ;
- }
-
- return false;
+ if ( myGUIMap.contains( libraryName ) )
+ // library is successfully loaded
+ return myGUIMap[ libraryName ];
+ return 0;
}
+//=======================================================================
+// function : GeometryGUI::ActiveWorkingPlane()
+// purpose : Activate Working Plane View
+//=======================================================================
+void GeometryGUI::ActiveWorkingPlane()
+{
+ gp_Dir DZ = myWorkingPlane.Direction();
+ gp_Dir DY = myWorkingPlane.YDirection();
+ if( QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
+ OCCViewer_ViewPort* vp = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewPort();
+ Handle(V3d_View) view3d = ((OCCViewer_ViewPort3d*)vp)->getView();
-//=====================================================================================
-// function : PrepareSubShapeSelection()
-// purpose : ( localContextId of the method is opened and defined here)
-//=====================================================================================
-bool GeometryGUI::PrepareSubShapeSelection(const int SubShapeType, Standard_Integer& returnLocalContextId)
-{
- //* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- return false;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- /* local context opening */
- SetDisplayedObjectList() ;
- OnDisplayOnly();
+ view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
+ view3d->SetUp(DY.X(), DY.Y(), DY.Z());
- returnLocalContextId = ic->OpenLocalContext(Standard_False, Standard_True, Standard_False, Standard_False) ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( this->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- Standard_Boolean found;
- Handle(GEOM_AISShape) Shape = ConvertIOinGEOMAISShape(IObject, found);
- if ( found && SubShapeType >= Shape->Shape().ShapeType()) {
- ic->Load(Shape, (8 - SubShapeType), Standard_True);
- ic->HilightWithColor(Shape, Quantity_NOC_RED);
- }
+ ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->onViewFitAll();
}
- myDesktop->putInfo (tr("GEOM_PRP_SELECT_SUBSHAPES"));
- return true ;
-}
-
+ else if( QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
+ vtkRenderer* myRenderer = ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
+ vtkCamera* camera = myRenderer->GetActiveCamera();
+ camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
+ camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
+ camera->SetFocalPoint(0,0,0);
-//=====================================================================================
-// function : PrepareSubShapeSelectionArgumentShape()
-// purpose : ( localContextId of the method is opened and defined here )
-//=====================================================================================
-bool GeometryGUI::PrepareSubShapeSelectionArgumentShape( const TopoDS_Shape& aShape,
- const int SubShapeType,
- Standard_Integer& returnLocalContextId )
-{
- //* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- return false;
-
- if( aShape.IsNull() )
- return false ;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- /* local context opening */
- SetDisplayedObjectList() ;
- OnDisplayOnly();
-
- returnLocalContextId = ic->OpenLocalContext(Standard_False, Standard_True, Standard_False, Standard_False) ;
-
- Handle(GEOM_AISShape) Shape = new GEOM_AISShape(aShape, "") ;
- ic->Display(Shape, 0, (8 - SubShapeType));
+ ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->onViewFitAll();
+ }
- // Not Load(...) but Display(...)
- // ic->Load(Shape, (8 - SubShapeType), Standard_True);
- ic->HilightWithColor(Shape, Quantity_NOC_RED);
-
- myDesktop->putInfo (tr("GEOM_PRP_SELECT_SUBSHAPES"));
- return true ;
}
-
-
//=======================================================================
-// function : GetNameOfSelectedIObjects()
-// purpose : Define the name geom++ or other name of mono or multi sel.
+// function : GeometryGUI::SetActiveDialogBox()
+// purpose : Set active dialog box
//=======================================================================
-int GeometryGUI::GetNameOfSelectedIObjects( SALOME_Selection* Sel,
- QString& aName )
+void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
{
- int nbSel = Sel->IObjectCount() ;
- if ( nbSel == 1 ) {
- Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
- aName = IObject->getName();
- } else {
- aName = tr( "%1_objects" ).arg( nbSel );
- }
- return nbSel;
+ myActiveDialogBox = (QDialog*)aDlg;
}
-
//=======================================================================
-// function : ConvertIOinGEOMAISShape()
-// purpose :
+// function : GeometryGUI::EmitSignalDeactivateDialog()
+// purpose : Emit a signal to deactivate the active dialog Box
//=======================================================================
-Handle(GEOM_AISShape) GeometryGUI::ConvertIOinGEOMAISShape( const Handle(SALOME_InteractiveObject)& IO,
- Standard_Boolean& testResult,
- bool onlyInActiveView )
+void GeometryGUI::EmitSignalDeactivateDialog()
{
- Handle(GEOM_AISShape) res;
- int nbSf = myActiveStudy->getStudyFramesCount();
- for ( int i = 0; i < nbSf; i++ ) {
- QAD_StudyFrame* sf = myActiveStudy->getStudyFrame(i);
- if ( sf->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListOfInteractive List1;
- ic->ObjectsInCollector(List1);
- List.Append(List1);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- if ( aSh->hasIO() ) {
- Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
- if ( GIO->isSame( IO ) ) {
- if ( onlyInActiveView ) {
- if ( sf == myActiveStudy->getActiveStudyFrame() ) {
- testResult = true;
- return aSh;
- }
- } else {
- testResult = true;
- return aSh;
- }
- }
- }
- }
- ite.Next();
- }
- }
- }
- testResult = false;
- return res;
+ emit SignalDeactivateActiveDialog();
}
//=======================================================================
-// function : ConvertIORinGEOMAISShape()
-// purpose :
+// function : GeometryGUI::EmitSignalCloseAllDialogs()
+// purpose : Emit a signal to close all non modal dialogs box
//=======================================================================
-Handle(GEOM_AISShape) GeometryGUI::ConvertIORinGEOMAISShape( const char * IOR,
- Standard_Boolean& testResult,
- bool onlyInActiveView )
+void GeometryGUI::EmitSignalCloseAllDialogs()
{
-Handle(GEOM_AISShape) resultShape;
-testResult = false;
- int nbSf = myActiveStudy->getStudyFramesCount();
- for ( int i = 0; i < nbSf; i++ )
- {
- QAD_StudyFrame* sf = myActiveStudy->getStudyFrame(i);
- if ( sf->getTypeView() == VIEW_OCC )
- {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListOfInteractive List1;
- ic->ObjectsInCollector(List1);
- List.Append(List1);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- while (ite.More())
- {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape)))
- {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- if ( aSh->hasIO() )
- {
- Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
- Standard_CString theIOR = GIO->getIOR();
- if ( strcmp( IOR, theIOR ) == 0 )
- {
- if ( onlyInActiveView )
- {
- if ( sf == myActiveStudy->getActiveStudyFrame() )
- {
- testResult = true;
- resultShape = aSh;
- return resultShape;
- }
- }
- else
- {
- testResult = true;
- resultShape = aSh;
- return resultShape;
- }
- }
- }
- }
- ite.Next();
- }
- }
- }
-return resultShape;
+ emit SignalCloseAllDialogs();
}
+
//=======================================================================
-// function : ConvertIORinGEOMActor()
-// purpose :
+// function : GeometryGUI::EmitSignalDefaultStepValueChanged()
+// purpose : Emit a signal to inform that default real spin box step has
+// been changed
//=======================================================================
-GEOM_Actor* GeometryGUI::ConvertIORinGEOMActor( const char * IOR,
- Standard_Boolean& testResult,
- bool onlyInActiveView )
+void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
{
- int nbSf = GeomGUI->myActiveStudy->getStudyFramesCount();
- for ( int i = 0; i < nbSf; i++ ) {
- QAD_StudyFrame* sf = myActiveStudy->getStudyFrame(i);
- if ( sf->getTypeView() == VIEW_VTK ) {
- vtkRenderer* Renderer = ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theActors = Renderer->GetActors();
- theActors->InitTraversal();
- vtkActor *ac = theActors->GetNextActor();
- while(!(ac==NULL)) {
- if ( ac->IsA("GEOM_Actor") ) {
- GEOM_Actor* anActor = GEOM_Actor::SafeDownCast( ac );
- if ( anActor->hasIO() ) {
- Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(anActor->getIO());
- Standard_CString theIOR = GIO->getIOR();
- if ( strcmp( IOR, theIOR ) == 0 ) {
- if ( onlyInActiveView ) {
- if ( sf == GeomGUI->myActiveStudy->getActiveStudyFrame() ) {
- testResult = true;
- return anActor;
- }
- } else {
- testResult = true;
- return anActor;
- }
- }
- }
- }
- ac = theActors->GetNextActor();
- }
- }
- }
- testResult = false;
- return GEOM_Actor::New();
+ emit SignalDefaultStepValueChanged(newVal);
}
//=======================================================================
-// function : ConvertIOinGEOMShape()
-// purpose :
+// function : GeometryGUI::OnGUIEvent()
+// purpose : manage all events on GUI [static]
//=======================================================================
-GEOM::GEOM_Shape_ptr GeometryGUI::ConvertIOinGEOMShape( const Handle(SALOME_InteractiveObject)& IO,
- Standard_Boolean& testResult )
+bool GeometryGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
{
- GEOM::GEOM_Shape_var aShape ;
- testResult = false ;
-
- /* case SObject */
- if ( IO->hasEntry() ) {
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IO->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if (obj->FindAttribute(anAttr, "AttributeIOR")) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- aShape = myComponentGeom->GetIORFromString(anIOR->Value()) ;
- if(!CORBA::is_nil(aShape)) testResult = true ;
- return aShape._retn();
- }
- }
+ GeometryGUI* geomGUI = GeometryGUI::GetGeomGUI();
+
+ // get main menu
+ QMenuBar* Mb = parent->getMainMenuBar();
+ // check if current viewframe is of OCC type
+ bool ViewOCC = parent->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC;
+ // if current viewframe is not of OCC and not of VTK type - return immediately
+ if( !ViewOCC && parent->getActiveStudy()->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
+ return false;
+
+ // disable non-OCC viewframe menu commands
+ //Mb->setItemEnabled( 404, ViewOCC ); // SKETCHER
+ Mb->setItemEnabled( 603, ViewOCC ); // SuppressFace
+ Mb->setItemEnabled( 604, ViewOCC ); // SuppressHole
+ Mb->setItemEnabled( 606, ViewOCC ); // CloseContour
+ Mb->setItemEnabled( 607, ViewOCC ); // RemoveInternalWires
+ Mb->setItemEnabled( 608, ViewOCC ); // AddPointOnEdge
+ //Mb->setItemEnabled( 609, ViewOCC ); // Free boundaries
+ Mb->setItemEnabled( 413, ViewOCC ); // Isos Settings
+
+ Mb->setItemEnabled( 800, ViewOCC ); // Create Group
+ Mb->setItemEnabled( 801, ViewOCC ); // Edit Group
+
+ Mb->setItemEnabled(9998, ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
+
+ GEOMGUI* library = 0;
+ // try to get-or-load corresponding GUI library
+ if( theCommandID == 111 || // MENU FILE - IMPORT BREP
+ theCommandID == 112 || // MENU FILE - IMPORT IGES
+ theCommandID == 113 || // MENU FILE - IMPORT STEP
+ theCommandID == 121 || // MENU FILE - EXPORT BREP
+ theCommandID == 122 || // MENU FILE - EXPORT IGES
+ theCommandID == 123 || // MENU FILE - EXPORT STEP
+ theCommandID == 31 || // MENU EDIT - COPY
+ theCommandID == 33 || // MENU EDIT - DELETE
+ theCommandID == 411 || // MENU SETTINGS - ADD IN STUDY
+ theCommandID == 412 || // MENU SETTINGS - SHADING COLOR
+ theCommandID == 413 || // MENU SETTINGS - ISOS
+ theCommandID == 414 || // MENU SETTINGS - STEP VALUE FOR SPIN BOXES
+ theCommandID == 5103 || // MENU TOOLS - CHECK GEOMETRY
+ theCommandID == 5104 || // MENU TOOLS - LOAD SCRIPT
+ theCommandID == 8032 || // POPUP VIEWER - COLOR
+ theCommandID == 8033 || // POPUP VIEWER - TRANSPARENCY
+ theCommandID == 8034 || // POPUP VIEWER - ISOS
+ theCommandID == 804 || // POPUP VIEWER - ADD IN STUDY
+ theCommandID == 901 || // OBJECT BROWSER - RENAME
+ theCommandID == 9024 ) { // OBJECT BROWSER - OPEN
+ library = geomGUI->getLibrary( "libGEOMToolsGUI.so" );
+ }
+ else if( theCommandID == 211 || // MENU VIEW - WIREFRAME/SHADING
+ theCommandID == 212 || // MENU VIEW - DISPLAY ALL
+ theCommandID == 213 || // MENU VIEW - DISPLAY ONLY
+ theCommandID == 214 || // MENU VIEW - ERASE ALL
+ theCommandID == 215 || // MENU VIEW - ERASE
+ theCommandID == 216 || // MENU VIEW - DISPLAY
+ theCommandID == 80311 || // POPUP VIEWER - WIREFRAME
+ theCommandID == 80312 ) { // POPUP VIEWER - SHADING
+ library = geomGUI->getLibrary( "libDisplayGUI.so" );
+ }
+ else if( theCommandID == 4011 || // MENU BASIC - POINT
+ theCommandID == 4012 || // MENU BASIC - LINE
+ theCommandID == 4013 || // MENU BASIC - CIRCLE
+ theCommandID == 4014 || // MENU BASIC - ELLIPSE
+ theCommandID == 4015 || // MENU BASIC - ARC
+ theCommandID == 4016 || // MENU BASIC - VECTOR
+ theCommandID == 4017 || // MENU BASIC - PLANE
+ theCommandID == 4018 || // MENU BASIC - WPLANE
+ theCommandID == 4019 || // MENU BASIC - CURVE
+ theCommandID == 4020 ) { // MENU BASIC - REPAIR
+ library = geomGUI->getLibrary( "libBasicGUI.so" );
+ }
+ else if( theCommandID == 4021 || // MENU PRIMITIVE - BOX
+ theCommandID == 4022 || // MENU PRIMITIVE - CYLINDER
+ theCommandID == 4023 || // MENU PRIMITIVE - SPHERE
+ theCommandID == 4024 || // MENU PRIMITIVE - TORUS
+ theCommandID == 4025 ) { // MENU PRIMITIVE - CONE
+ library = geomGUI->getLibrary( "libPrimitiveGUI.so" );
+ }
+ else if( theCommandID == 4031 || // MENU GENERATION - PRISM
+ theCommandID == 4032 || // MENU GENERATION - REVOLUTION
+ theCommandID == 4033 || // MENU GENERATION - FILLING
+ theCommandID == 4034 ) { // MENU GENERATION - PIPE
+ library = geomGUI->getLibrary( "libGenerationGUI.so" );
+ }
+ else if( theCommandID == 404 || // MENU ENTITY - SKETCHER
+ theCommandID == 407 ) { // MENU ENTITY - EXPLODE
+ library = geomGUI->getLibrary( "libEntityGUI.so" );
+ }
+ else if( theCommandID == 4081 || // MENU BUILD - EDGE
+ theCommandID == 4082 || // MENU BUILD - WIRE
+ theCommandID == 4083 || // MENU BUILD - FACE
+ theCommandID == 4084 || // MENU BUILD - SHELL
+ theCommandID == 4085 || // MENU BUILD - SOLID
+ theCommandID == 4086 ) { // MENU BUILD - COMPUND
+ library = geomGUI->getLibrary( "libBuildGUI.so" );
+ }
+ else if( theCommandID == 5011 || // MENU BOOLEAN - FUSE
+ theCommandID == 5012 || // MENU BOOLEAN - COMMON
+ theCommandID == 5013 || // MENU BOOLEAN - CUT
+ theCommandID == 5014 ) { // MENU BOOLEAN - SECTION
+ library = geomGUI->getLibrary( "libBooleanGUI.so" );
+ }
+ else if( theCommandID == 5021 || // MENU TRANSFORMATION - TRANSLATION
+ theCommandID == 5022 || // MENU TRANSFORMATION - ROTATION
+ theCommandID == 5023 || // MENU TRANSFORMATION - LOCATION
+ theCommandID == 5024 || // MENU TRANSFORMATION - MIRROR
+ theCommandID == 5025 || // MENU TRANSFORMATION - SCALE
+ theCommandID == 5026 || // MENU TRANSFORMATION - OFFSET
+ theCommandID == 5027 || // MENU TRANSFORMATION - MULTI-TRANSLATION
+ theCommandID == 5028 ) { // MENU TRANSFORMATION - MULTI-ROTATION
+ library = geomGUI->getLibrary( "libTransformationGUI.so" );
+ }
+ else if( theCommandID == 503 || // MENU OPERATION - PARTITION
+ theCommandID == 504 || // MENU OPERATION - ARCHIMEDE
+ theCommandID == 505 || // MENU OPERATION - FILLET
+ theCommandID == 506 || // MENU OPERATION - CHAMFER
+ theCommandID == 507 ) { // MENU OPERATION - CLIPPING RANGE
+ library = geomGUI->getLibrary( "libOperationGUI.so" );
+ }
+ else if( theCommandID == 601 || // MENU REPAIR - SEWING
+ theCommandID == 603 || // MENU REPAIR - SUPPRESS FACES
+ theCommandID == 604 || // MENU REPAIR - SUPPRESS HOLE
+ theCommandID == 605 || // MENU REPAIR - SHAPE PROCESSING
+ theCommandID == 606 || // MENU REPAIR - CLOSE CONTOUR
+ theCommandID == 607 || // MENU REPAIR - REMOVE INTERNAL WIRES
+ theCommandID == 608 || // MENU REPAIR - ADD POINT ON EDGE
+ theCommandID == 609 || // MENU REPAIR - FREE BOUNDARIES
+ theCommandID == 610 || // MENU REPAIR - FREE FACES
+ theCommandID == 602 ) { // MENU REPAIR - GLUE FACES
+ library = geomGUI->getLibrary( "libRepairGUI.so" );
+ }
+ else if( theCommandID == 701 || // MENU MEASURE - PROPERTIES
+ theCommandID == 702 || // MENU MEASURE - CDG
+ theCommandID == 703 || // MENU MEASURE - INERTIA
+ theCommandID == 7041 || // MENU MEASURE - BOUNDING BOX
+ theCommandID == 7042 || // MENU MEASURE - MIN DISTANCE
+ theCommandID == 705 || // MENU MEASURE - TOLERANCE
+ theCommandID == 706 || // MENU MEASURE - WHATIS
+ theCommandID == 707 || // MENU MEASURE - CHECK
+ theCommandID == 7072 || // MENU MEASURE - CHECK COMPOUND OF BLOCKS
+ theCommandID == 708 ) { // MENU MEASURE - POINT COORDINATES
+ library = geomGUI->getLibrary( "libMeasureGUI.so" );
+ }
+ else if( theCommandID == 800 || // MENU GROUP - CREATE
+ theCommandID == 801 ) { // MENU GROUP - EDIT
+ library = geomGUI->getLibrary( "libGroupGUI.so" );
+ }
+ else if( theCommandID == 9999 || // MENU BLOCKS - HEXAHEDRAL SOLID
+ theCommandID == 9998 || // MENU BLOCKS - MULTI-TRANSFORMATION
+ theCommandID == 9997 || // MENU BLOCKS - QUADRANGLE FACE
+ theCommandID == 99991 || // MENU BLOCKS - PROPAGATE
+ theCommandID == 9995 ) { // MENU BLOCKS - EXPLODE ON BLOCKS
+ library = geomGUI->getLibrary( "libBlocksGUI.so" );
+ }
+
+ // call method of corresponding GUI library
+ if ( library ) {
+ return library->OnGUIEvent( theCommandID, parent );
}
- /* case Graphical Object */
- if ( IO->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
- Handle(GEOM_InteractiveObject) GIObject = Handle(GEOM_InteractiveObject)::DownCast( IO );
- Standard_CString ior = GIObject->getIOR();
- aShape = myComponentGeom->GetIORFromString(ior) ;
- if(!CORBA::is_nil(aShape)) testResult = true ;
- return aShape._retn();
+ else {
+ QAD_MessageBox::error1( parent, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
}
- return aShape._retn();
+ return false;
}
-//=======================================================================
-// function : ConvertListOfIOInListOfIOR()
-// purpose :
-//=======================================================================
-void GeometryGUI::ConvertListOfIOInListOfIOR( const SALOME_ListIO& aList,
- GEOM::GEOM_Gen::ListOfIOR& listIOR )
+//=================================================================================
+// function : GeometryGUI::OnKeyPress()
+// purpose : Called when any key is pressed by user [static]
+//=================================================================================
+bool GeometryGUI::OnKeyPress(QKeyEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
{
- int nbSel = aList.Extent();
- listIOR.length(nbSel) ;
- int j=0;
- SALOME_ListIteratorOfListIO It( aList );
- for ( int i=0; It.More(); It.Next(), i++ )
- {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
-
- if ( IObject->hasEntry() )
- {
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() && obj->FindAttribute(anAttr, "AttributeIOR") )
- {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
- CORBA::ORB_var& _orb = init.orb() ;
- CORBA::String_var theValue = anIOR->Value();
- CORBA::Object_var theObj = _orb->string_to_object(theValue);
- if (theObj->_is_a("IDL:GEOM/GEOM_Shape:1.0"))
- {
- listIOR[j] = strdup(theValue) ;
- j++;
- }
- }
- }
- else if ( IObject->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
- Handle(GEOM_InteractiveObject) GIObject = Handle(GEOM_InteractiveObject)::DownCast( IObject );
- Standard_CString ior = GIObject->getIOR();
- listIOR[j] = strdup(ior) ;
- j++;
- }
- }
- listIOR.length(j) ;
+ GeometryGUI* geomGUI = GeometryGUI::GetGeomGUI();
+ GUIMap::Iterator it;
+ bool bOk = true;
+ for ( it = geomGUI->myGUIMap.begin(); it != geomGUI->myGUIMap.end(); ++it )
+ bOk = bOk && it.data()->OnKeyPress( pe, parent, studyFrame );
+ return bOk;
}
//=================================================================================
-// function : GetShapeTypeString()
-// purpose : for a single shape
+// function : GeometryGUI::OnMouseMove()
+// purpose : Manages mouse move events [static]
//=================================================================================
-bool GeometryGUI::GetShapeTypeString( const TopoDS_Shape& aShape, Standard_CString& aTypeString )
+bool GeometryGUI::OnMouseMove(QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
{
- if( aShape.IsNull() ) {
- aTypeString = "aNullShape" ;
- return false ;
- }
- switch (aShape.ShapeType() )
- {
- case TopAbs_COMPOUND:
- { aTypeString = strdup(tr("GEOM_COMPOUND")) ; return true ; }
- case TopAbs_COMPSOLID:
- { aTypeString = strdup(tr("GEOM_COMPOUNDSOLID")) ; return true ; }
- case TopAbs_SOLID:
- { aTypeString = strdup(tr("GEOM_SOLID")) ; return true ; }
- case TopAbs_SHELL:
- { aTypeString = strdup(tr("GEOM_SHELL")) ; return true ; }
- case TopAbs_FACE:
- {
- BRepAdaptor_Surface surf(TopoDS::Face(aShape));
- if ( surf.GetType() == GeomAbs_Plane ) {
- aTypeString = strdup(tr("GEOM_PLANE")) ;
- return true ;
- } else if ( surf.GetType() == GeomAbs_Cylinder ) {
- aTypeString = strdup(tr("GEOM_SURFCYLINDER")) ;
- return true ;
- } else if ( surf.GetType() == GeomAbs_Sphere ) {
- aTypeString = strdup(tr("GEOM_SURFSPHERE")) ;
- return true ;
- } else if ( surf.GetType() == GeomAbs_Torus ) {
- aTypeString = strdup(tr("GEOM_SURFTORUS")) ;
- return true ;
- } else if ( surf.GetType() == GeomAbs_Cone ) {
- aTypeString = strdup(tr("GEOM_SURFCONE")) ;
- return true ;
- } else {
- aTypeString = strdup(tr("GEOM_FACE")) ;
- return true ;
- }
- }
- case TopAbs_WIRE:
- { aTypeString = strdup(tr("GEOM_WIRE")) ; return true ; }
- case TopAbs_EDGE:
- {
- BRepAdaptor_Curve curv(TopoDS::Edge(aShape));
- if ( curv.GetType() == GeomAbs_Line ) {
- if ( (Abs(curv.FirstParameter()) >= 1E6 ) ||
- (Abs(curv.LastParameter()) >= 1E6 )) {
- aTypeString = strdup(tr("GEOM_LINE")) ;
- } else
- aTypeString = strdup(tr("GEOM_EDGE")) ;
- return true ;
- } else if ( curv.GetType() == GeomAbs_Circle ) {
- if ( curv.IsClosed() )
- aTypeString = strdup(tr("GEOM_CIRCLE")) ;
- else
- aTypeString = strdup(tr("GEOM_ARC")) ;
- return true ;
- } else {
- aTypeString = strdup(tr("GEOM_EDGE")) ;
- return true ;
- }
- }
- case TopAbs_VERTEX:
- { aTypeString = strdup(tr("GEOM_VERTEX")) ; return true ; }
- case TopAbs_SHAPE:
- { aTypeString = strdup(tr("GEOM_SHAPE")) ; return true ; }
- }
- return false ;
+ GeometryGUI* geomGUI = GeometryGUI::GetGeomGUI();
+ GUIMap::Iterator it;
+ bool bOk = true;
+ for ( it = geomGUI->myGUIMap.begin(); it != geomGUI->myGUIMap.end(); ++it )
+ bOk = bOk && it.data()->OnMouseMove( pe, parent, studyFrame );
+ return bOk;
}
//=================================================================================
-// function : CreateArrowForLinearEdge()
-// purpose : Create a cone topology to be used to display an arrow in the middle
-// : of an edge showing its orientation. (For simulation and Viewer OCC only)
+// function : GeometryGUI::0nMousePress()
+// purpose : Manage mouse press events [static]
//=================================================================================
-bool GeometryGUI::CreateArrowForLinearEdge( const TopoDS_Shape& tds, TopoDS_Shape& ArrowCone )
+bool GeometryGUI::OnMousePress(QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
{
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_OCC || tds.ShapeType() != TopAbs_EDGE )
- return false;
-
- OCCViewer_ViewPort* vp = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewPort();
- Handle( V3d_View) view3d = ((OCCViewer_ViewPort3d*)vp)->getView();
- Standard_Real Width, Height ;
- view3d->Size(Width, Height) ;
- const Standard_Real aHeight = (Width + Height) / 50.0 ;
-
- try {
- Standard_Real first, last ;
- Handle(Geom_Curve) curv = BRep_Tool::Curve(TopoDS::Edge(tds), first, last);
- if( !curv->IsCN(1) )
- return false ;
-
- const Standard_Real param = (first+last) / 2.0 ;
- gp_Pnt middleParamPoint ;
- gp_Vec V1 ;
- curv->D1( param, middleParamPoint, V1) ;
- if ( V1.Magnitude() < Precision::Confusion() )
- return false ;
-
- /* Topology orientation not geom orientation */
- if( tds.Orientation() == TopAbs_REVERSED )
- V1 *= -1.0 ;
-
- gp_Ax2 anAxis( middleParamPoint, gp_Dir(V1) ) ;
- const Standard_Real radius1 = aHeight / 5.0 ;
- if( radius1 > 10.0 * Precision::Confusion() && aHeight > 10.0 * Precision::Confusion() ) {
- ArrowCone = BRepPrimAPI_MakeCone( anAxis, radius1, 0.0, aHeight ).Shape() ;
- return true ;
- }
- }
- catch(Standard_Failure) {
- // OCC failures are hard to catch in GUI.
- // This because of the position for #include <Standard_ErrorHandler.hxx> that is very critic to find
- // in SALOME environment : compilation error !
- }
- return false ;
+ GeometryGUI* geomGUI = GeometryGUI::GetGeomGUI();
+ GUIMap::Iterator it;
+ // OnMousePress() should return false if this event should be processed further
+ // (see OCCViewer_Viewer3d::onMousePress() for explanation)
+ bool processed = false;
+ for ( it = geomGUI->myGUIMap.begin(); it != geomGUI->myGUIMap.end(); ++it )
+ processed = processed || it.data()->OnMousePress( pe, parent, studyFrame );
+ return processed;
}
-
-//=======================================================================
-// function : SelectionByNameInDialogs()
-// purpose : Called when user has entered a name of object in a LineEdit.
-// : The selection is changed. Dialog box will receive the
-// : corresponding signal to manage this event.
-//=======================================================================
-bool GeometryGUI::SelectionByNameInDialogs( QWidget* aWidget, const QString& objectUserName, SALOME_Selection* Sel )
+static void UpdateVtkSelection(QAD_Desktop* parent)
{
-
- /* Find SObject with name in component GEOM */
- SALOMEDS::Study_var ST = this->myActiveStudy->getStudyDocument() ;
- SALOMEDS::Study::ListOfSObject_var listSO = new SALOMEDS::Study::ListOfSObject ;
- listSO = ST->FindObjectByName( objectUserName, "GEOM" ) ;
-
- if ( listSO->length() < 1 ) {
- const QString caption = tr("GEOM_WRN_WARNING") ;
- const QString text = tr("GEOM_NAME_INCORRECT") ;
- const QString button0 = tr("GEOM_BUT_OK") ;
- QMessageBox::warning( aWidget, caption, text, button0 ) ;
- return false ;
- }
- /* More than one object with same name */
- if ( listSO->length() > 1 ) {
- const QString caption = tr("GEOM_WRN_WARNING") ;
- const QString text = tr("GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE") ;
- const QString button0 = tr("GEOM_BUT_OK") ;
- QMessageBox::warning( aWidget, caption, text, button0 ) ;
- return false ;
- }
+ if (!parent->getActiveStudy()) return;
- SALOMEDS::SObject_var theObj = listSO[0] ;
- /* Create a SALOME_InteractiveObject with a SALOME::SObject */
- Standard_CString anEntry = theObj->GetID() ;
- Handle(SALOME_InteractiveObject) SI = new SALOME_InteractiveObject( anEntry, "GEOM", strdup(objectUserName) ) ;
+ QList<QAD_StudyFrame> aFrameList = parent->getActiveStudy()->getStudyFrames();
- /* Add as a selected object */
- /* Clear any previous selection : */
- /* Warning the LineEdit is purged because of signal currentSelectionChanged ! */
- Sel->ClearIObjects() ;
- Sel->AddIObject( SI ) ;
- return true ;
+ for (QAD_StudyFrame* aStudyFrame = aFrameList.first(); aStudyFrame; aStudyFrame = aFrameList.next()) {
+ if (aStudyFrame->getTypeView() == VIEW_VTK) {
+ QAD_ViewFrame* aViewFrame = aStudyFrame->getRightFrame()->getViewFrame();
+ VTKViewer_ViewFrame* aVtkViewFrame = dynamic_cast<VTKViewer_ViewFrame*>(aViewFrame);
+ if (!aVtkViewFrame) continue;
+ VTKViewer_RenderWindowInteractor* anInteractor = aVtkViewFrame->getRWInteractor();
+ if (anInteractor) {
+ anInteractor->SetSelectionProp();
+ anInteractor->SetSelectionTolerance();
+ VTKViewer_InteractorStyleSALOME* aStyle = anInteractor->GetInteractorStyleSALOME();
+ if (aStyle) {
+ aStyle->setPreselectionProp();
+ }
+ }
+ }
+ }
}
-
-//=======================================================================
-// function : MakePointAndDisplay
-// purpose :
-//=======================================================================
-void GeometryGUI::MakePointAndDisplay( const double x, const double y, const double z )
+//=================================================================================
+// function : GeometryGUI::SetSettings()
+// purpose : Called when GEOM module is activated [static]
+//=================================================================================
+bool GeometryGUI::SetSettings(QAD_Desktop* parent)
{
- try {
- GEOM::GEOM_Shape_var P = myComponentGeom->MakeVertex( x, y, z );
- P->NameType( tr("GEOM_VERTEX") );
- if ( Display( P, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
+ GeometryGUI* geomGUI = GetGeomGUI();
+ QMenuBar* Mb = parent->getMainMenuBar();
+ QAD_Study* ActiveStudy = parent->getActiveStudy();
+
+
+
+ /* Wireframe or Shading */
+ int DisplayMode = 0;
+ bool ViewOCC = false;
+ if ( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
+ OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+ Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
+ DisplayMode = ic->DisplayMode();
+ ViewOCC = true;
+ }
+ else if (ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
+ VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
+ DisplayMode = myRenderInter->GetDisplayMode();
}
- return ;
-}
+ if( DisplayMode == 1 )
+ Mb->changeItem( 211, tr( "GEOM_MEN_WIREFRAME" ) );
+ else
+ Mb->changeItem( 211, tr( "GEOM_MEN_SHADING" ) );
-//=======================================================================
-// function : MakeVectorAndDisplay()
-// purpose :
-//=======================================================================
-void GeometryGUI::MakeVectorAndDisplay( const gp_Pnt P1, const gp_Pnt P2 )
-{
- try {
- GEOM::PointStruct pstruct1 = myComponentGeom->MakePointStruct( P1.X(), P1.Y(), P1.Z() ) ;
- GEOM::PointStruct pstruct2 = myComponentGeom->MakePointStruct( P2.X(), P2.Y(), P2.Z() ) ;
- GEOM::GEOM_Shape_var Vector = myComponentGeom->MakeVector( pstruct1, pstruct2 );
- Vector->NameType(tr("GEOM_VECTOR"));
- if ( Display( Vector, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
+ /* Add in Study - !!!ALWAYS TRUE!!! */ /////// VSR : TO BE REMOVED
+ QString AddInStudy = QAD_CONFIG->getSetting("Geometry:SettingsAddInStudy");
+ int Settings_AddInStudy;
+ /*if(!AddInStudy.isEmpty())
+ Settings_AddInStudy = AddInStudy.toInt();
+ else
+ */
+ Settings_AddInStudy = 1;
+ Mb->setItemChecked(411, Settings_AddInStudy);
+ /* step value */
+ QString S = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
+ if(S.isEmpty())
+ QAD_CONFIG->addSetting("Geometry:SettingsGeomStep", "100");
-//=======================================================================
-// function : MakeBoxAndDisplay()
-// purpose :
-//=======================================================================
-void GeometryGUI::MakeBoxAndDisplay( const gp_Pnt P1, const gp_Pnt P2 )
-{
- try {
- GEOM::GEOM_Shape_var box = myComponentGeom->MakeBox( P1.X(), P1.Y(), P1.Z(), P2.X(), P2.Y(), P2.Z() );
- box->NameType(tr("GEOM_BOX"));
- if ( Display( box, "") ) {
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
+ /* isos */
+ int count = ActiveStudy->getStudyFramesCount();
+ for(int i = 0; i < count; i++) {
+ if(ActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC) {
+ OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getStudyFrame(i)->getRightFrame()->getViewFrame())->getViewer();
+ Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
+
+ QString IsoU = QAD_CONFIG->getSetting("Geometry:SettingsIsoU");
+ QString IsoV = QAD_CONFIG->getSetting("Geometry:SettingsIsoV");
+ if(!IsoU.isEmpty())
+ ic->DefaultDrawer()->UIsoAspect()->SetNumber(IsoU.toInt());
+ if(!IsoV.isEmpty())
+ ic->DefaultDrawer()->VIsoAspect()->SetNumber(IsoV.toInt());
}
}
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
+ //Mb->setItemEnabled(404, ViewOCC); // SKETCHER
+ Mb->setItemEnabled(603, ViewOCC); // SuppressFace
+ Mb->setItemEnabled(604, ViewOCC); // SuppressHole
+ Mb->setItemEnabled(606, ViewOCC); // CloseContour
+ Mb->setItemEnabled(607, ViewOCC); // RemoveInternalWires
+ Mb->setItemEnabled(608, ViewOCC); // AddPointOnEdge
+// Mb->setItemEnabled(609, ViewOCC); // Free boundaries
+ Mb->setItemEnabled(413, ViewOCC); // Isos Settings
+ Mb->setItemEnabled( 800, ViewOCC ); // Create Group
+ Mb->setItemEnabled( 801, ViewOCC ); // Edit Group
+ Mb->setItemEnabled(9998, ViewOCC); // MENU BLOCKS - MULTI-TRANSFORMATION
-//=======================================================================
-// function : MakePlaneAndDisplay()
-// purpose : Plane point is P1 and dx, dy, dz define a normal vector
-//=======================================================================
-void GeometryGUI::MakePlaneAndDisplay( const gp_Pnt P1, const Standard_Real dx,
- const Standard_Real dy, const Standard_Real dz,
- const Standard_Real TrimSize )
-{
- try {
- gp_Dir aDirection;
- aDirection.SetCoord(dx, dy, dz) ;
- gp_Ax2 Axis( P1, aDirection );
+
+ // PAL5356: update VTK selection
+ ::UpdateVtkSelection(parent);
+ bool bOk = true;
+ GUIMap::Iterator it;
+ for ( it = geomGUI->myGUIMap.begin(); it != geomGUI->myGUIMap.end(); ++it )
+ bOk = bOk && it.data()->SetSettings( parent );
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct(P1.X(), P1.Y(), P1.Z() ) ;
- GEOM::PointStruct d = myComponentGeom->MakePointStruct(aDirection.X(), aDirection.Y(), aDirection.Z()) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
- GEOM::GEOM_Shape_ptr plane = myComponentGeom->MakePlane(pstruct, dstruct, TrimSize) ;
- plane->NameType(tr("GEOM_PLANE"));
- if ( Display( plane, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
+ // MZN: Enable/disable "Clipping range" menu item(from GEOM_CLIPPING variable)
+ if (getenv( "GEOM_CLIPPING" ) == NULL)
+ {
+ QMenuItem* mi = Mb->findItem(50);
+ if (mi && mi->popup())
+ mi->popup()->removeItem(507);
+ }
+
+ return bOk;
}
-
//=======================================================================
-// function : MakeWorkingPlane()
-// purpose : Change the point of view3d
+// function : GeometryGUI::Deactivate()
+// purpose : Called when GEOM module is deactivated [ static ]
//=======================================================================
-void GeometryGUI::MakeWorkingPlane( const gp_Pnt P, const gp_Dir D)
+void GeometryGUI::Deactivate()
{
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_OCC) {
- GeomGUI->myDesktop->putInfo( tr("GEOM_PRP_NOT_FOR_VTK_VIEWER") ) ;
- return ;
- }
- OCCViewer_ViewPort* vp = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewPort();
- Handle( V3d_View) view3d = ((OCCViewer_ViewPort3d*)vp)->getView();
- view3d->SetAt( P.X(), P.Y(), P.Z() );
- view3d->SetProj( D.X(), D.Y(), D.Z() );
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
+ GeometryGUI* geomGUI = GetGeomGUI();
+ GetGeomGUI()->EmitSignalCloseAllDialogs();
+ GUIMap::Iterator it;
+ for ( it = geomGUI->myGUIMap.begin(); it != geomGUI->myGUIMap.end(); ++it )
+ it.data()->Deactivate();
}
-
-//=======================================================================
-// function : MakePrismAndDisplay()
-// purpose : P1 and P2 is to define a vector for prism
-//=======================================================================
-void GeometryGUI::MakePrismAndDisplay( GEOM::GEOM_Shape_ptr BaseShape, const gp_Pnt P1, const gp_Pnt P2 )
-{
- try {
- GEOM::PointStruct PS1 = myComponentGeom->MakePointStruct(P1.X(), P1.Y(), P1.Z() ) ;
- GEOM::PointStruct PS2 = myComponentGeom->MakePointStruct(P2.X(), P2.Y(), P2.Z() ) ;
- if( BaseShape->_is_nil() ) {
- myDesktop->putInfo (tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
-
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakePrism( BaseShape, PS1, PS2 ) ;
- if (result->_is_nil()) {
- myDesktop->putInfo (tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeLineAndDisplay()
-// purpose : Create an infinite oriented line (linear edge in fact)
-//=====================================================================================
-void GeometryGUI::MakeLineAndDisplay( const gp_Pnt InitPoint, const gp_Pnt LastPoint )
-{
- gp_Pnt P1,P2;
- double dx, dy, dz ;
- GetBipointDxDyDz( InitPoint, LastPoint, dx, dy, dz ) ;
- Standard_Real length = InitPoint.Distance(LastPoint) ;
- if( length <= Precision::Confusion() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
-
- Standard_Real coeff = 1E6 / length ;
-
- /* To create a line with length = 1E6 */
- /* Precision::Infinite() is 1E100 in OCC */
- P1.SetX( InitPoint.X() - (coeff * dx) ) ;
- P1.SetY( InitPoint.Y() - (coeff * dy) ) ;
- P1.SetZ( InitPoint.Z() - (coeff * dz) ) ;
-
- P2.SetX( LastPoint.X() + (coeff * dx) ) ;
- P2.SetY( LastPoint.Y() + (coeff * dy) ) ;
- P2.SetZ( LastPoint.Z() + (coeff * dz) ) ;
-
- try {
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct(P1.X(), P1.Y(), P1.Z()) ;
- GEOM::PointStruct d = myComponentGeom->MakePointStruct(P2.X(), P2.Y(), P2.Z()) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakeLine(pstruct, dstruct) ;
- if(result->_is_nil()) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
- result->NameType(tr("GEOM_LINE"));
-
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_READY"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-
-//=======================================================================
-// function : MakeBooleanAndDisplay()
-// purpose :
-//=======================================================================
-void GeometryGUI::MakeBooleanAndDisplay( GEOM::GEOM_Shape_ptr Shape1, GEOM::GEOM_Shape_ptr Shape2, const short operation )
-{
- try {
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakeBoolean( Shape1, Shape2, operation ) ;
- if (result->_is_nil()) {
- myDesktop->putInfo (tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeSphere()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeSphereAndDisplay( const gp_Pnt aCenterPoint, const double aRadius )
-{
- try {
- if( aRadius <= Precision::Confusion() ) {
- QAD_MessageBox::warn1 ( QAD_Application::getDesktop(), tr ("GEOM_WRN_WARNING"),
- tr ("GEOM_WRN_RADIUS_NULL"), tr ("GEOM_BUT_YES") );
- return ;
- }
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakeSphere(aCenterPoint.X(),aCenterPoint.Y(),aCenterPoint.Z(), aRadius);
- result->NameType(tr("GEOM_SPHERE"));
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeConeAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeConeAndDisplay( const gp_Pnt BasePoint,
- const gp_Dir aDir,
- const double Radius1,
- const double Radius2,
- const double aHeight )
-{
- try {
- if( ( Radius1 <= Precision::Confusion() && Radius2 <= Precision::Confusion() ) || aHeight <= Precision::Confusion() )
- return ;
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( BasePoint.X(), BasePoint.Y(), BasePoint.Z() ) ;
- GEOM::PointStruct d = myComponentGeom->MakePointStruct( aDir.X(), aDir.Y(), aDir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeCone( pstruct, dstruct, Radius1, Radius2, aHeight ) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
- result->NameType(tr("GEOM_CONE"));
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeCylinderAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeCylinderAndDisplay( const gp_Pnt BasePoint,
- const gp_Dir aDir,
- const double Radius,
- const double aHeight )
-{
- try {
- if( Radius <= Precision::Confusion() || aHeight <= Precision::Confusion() )
- return ;
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( BasePoint.X(), BasePoint.Y(), BasePoint.Z() ) ;
- GEOM::PointStruct d = myComponentGeom ->MakePointStruct( aDir.X(), aDir.Y(), aDir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeCylinder(pstruct, dstruct, Radius, aHeight) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
- result->NameType(tr("GEOM_CYLINDER"));
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeTorusAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeTorusAndDisplay( const gp_Pnt BasePoint,
- const gp_Dir aDir,
- const double Radius1,
- const double Radius2 )
-{
- try {
- if( Radius1 <= Precision::Confusion() || Radius2 <= Precision::Confusion() )
- return ;
-
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( BasePoint.X(), BasePoint.Y(), BasePoint.Z() ) ;
- GEOM::PointStruct d = myComponentGeom ->MakePointStruct( aDir.X(), aDir.Y(), aDir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeTorus(pstruct, dstruct, Radius1, Radius2) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
- result->NameType(tr("GEOM_TORUS"));
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakePipeAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakePipeAndDisplay( GEOM::GEOM_Shape_ptr aPath, GEOM::GEOM_Shape_ptr aBase )
-{
- try {
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakePipe(aPath, aBase);
- if ( !result->_is_nil() && Display( result, "") ) {
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- myDesktop->putInfo( tr("GEOM_PRP_DONE") );
- }
- else {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- }
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeFillingAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeFillingAndDisplay( GEOM::GEOM_Shape_ptr SectionShape,
- const short mindeg,
- const short maxdeg,
- const double tol3d,
- const double tol2d,
- const short nbiter )
-{
- try {
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakeFilling( SectionShape,
- mindeg, maxdeg,
- tol3d, tol2d, nbiter );
- if (result->_is_nil()) {
- myDesktop->putInfo (tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- return ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
-
-
-
-//=====================================================================================
-// function : MakeMirrorAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeMirrorAndDisplay( GEOM::GEOM_Shape_ptr Shape1, GEOM::GEOM_Shape_ptr Shape2 )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeMirrorByPlane( Shape1, Shape2 );
- if (result->_is_nil()) {
- myDesktop->putInfo (tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- result->NameType( Shape1->NameType() );
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeSewingAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeSewingAndDisplay( GEOM::GEOM_Gen::ListOfIOR& listShapesIOR,
- const Standard_Real precision )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeSewing(listShapesIOR, precision) ;
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if( Display( result, "") )
- myDesktop ->putInfo(tr("GEOM_PRP_DONE")) ;
- return ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
-
-
-//=====================================================================================
-// function : MakeCompoundAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeCompoundAndDisplay( GEOM::GEOM_Gen::ListOfIOR& listShapesIOR )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeCompound(listShapesIOR) ;
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- result->NameType(tr("GEOM_COMPOUND"));
- if( Display( result, "" ))
- myDesktop->putInfo(tr("GEOM_PRP_DONE")) ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeFaceAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeFaceAndDisplay( GEOM::GEOM_Shape_ptr aWire, const Standard_Boolean wantPlanar )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeFace( aWire, wantPlanar) ;
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- if ( wantPlanar )
- result->NameType(tr("GEOM_PLANE"));
- else
- result->NameType(tr("GEOM_FACE"));
- if( Display( result, "") )
- myDesktop ->putInfo(tr("GEOM_PRP_DONE")) ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-
-//=====================================================================================
-// function : MakeLinearEdgeAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeLinearEdgeAndDisplay( const gp_Pnt P1, const gp_Pnt P2 )
-{
- try {
- GEOM::PointStruct ps1 = myComponentGeom->MakePointStruct( P1.X(), P1.Y(), P1.Z() ) ;
- GEOM::PointStruct ps2 = myComponentGeom->MakePointStruct( P2.X(), P2.Y(), P2.Z() ) ;
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeEdge( ps1, ps2 ) ;
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- result->NameType(tr("GEOM_EDGE"));
- if( Display( result, "") )
- myDesktop ->putInfo(tr("GEOM_PRP_DONE")) ;
- }
- catch(const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeOrientationChangeAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeOrientationChangeAndDisplay( GEOM::GEOM_Shape_ptr Shape )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->OrientationChange( Shape ) ;
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- result->NameType( Shape->NameType() );
- if ( Display( result, "" ))
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- return ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
-
-
-//=====================================================================================
-// function : MakeScaleAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeScaleAndDisplay( GEOM::GEOM_Shape_ptr Shape, const gp_Pnt centralPoint, const Standard_Real factor )
-{
- try {
- GEOM::PointStruct P = myComponentGeom->MakePointStruct(centralPoint.X(), centralPoint.Y(), centralPoint.Z() ) ;
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeScaleTransform(Shape, P, factor) ;
- // result->NameType(tr("GEOM_SCALE"));
- result->NameType( Shape->NameType() );
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- else
- myDesktop->putInfo (tr("GEOM_PRP_NULLSHAPE")) ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=======================================================================================
-// function : MakeRevolutionAndDisplay()
-// purpose :
-//=======================================================================================
-void GeometryGUI::MakeRevolutionAndDisplay( GEOM::GEOM_Shape_ptr Shape, const gp_Pnt loc, const gp_Dir dir, const Standard_Real revolAngle )
-{
- try {
- GEOM::AxisStruct axis = myComponentGeom->MakeAxisStruct(loc.X(), loc.Y(), loc.Z(), dir.X(), dir.Y(), dir.Z() ) ;
- GEOM::GEOM_Shape_ptr result = myComponentGeom->MakeRevolution(Shape, axis, revolAngle) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=======================================================================================
-// function : MakeRotationAndDisplay()
-// purpose :
-//=======================================================================================
-void GeometryGUI::MakeRotationAndDisplay( GEOM::GEOM_Shape_ptr Shape,
- const gp_Pnt loc,
- const gp_Dir dir,
- const Standard_Real angle )
-{
- try {
- const GEOM::AxisStruct axis = myComponentGeom->MakeAxisStruct(loc.X(), loc.Y(), loc.Z(), dir.X(), dir.Y(), dir.Z() ) ;
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeRotation(Shape, axis, angle);
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( Shape->NameType() );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=================================================================================
-// function : MakeTranslationAndDisplay()
-// purpose : Translate a shape
-//=================================================================================
-void GeometryGUI::MakeTranslationAndDisplay( GEOM::GEOM_Shape_ptr Shape, gp_Vec V )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeTranslation( Shape, V.X(), V.Y(), V.Z() ) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( Shape->NameType() );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-//=================================================================================
-// function : MakeMultiTranslation1DAndDisplay()
-// purpose : Multi-Translate a shape
-//=================================================================================
-void GeometryGUI::MakeMultiTranslation1DAndDisplay( GEOM::GEOM_Shape_ptr Shape, const gp_Dir Dir, const double Step, const short NbTimes )
-{
- try {
- GEOM::PointStruct d = myComponentGeom->MakePointStruct( Dir.X(), Dir.Y(), Dir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeMultiTranslation1D( Shape, dstruct, Step, NbTimes );
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( tr("GEOM_COMPOUND") );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=================================================================================
-// function : MakeMultiTranslation2DAndDisplay()
-// purpose : Multi-Translate a shape
-//=================================================================================
-void GeometryGUI::MakeMultiTranslation2DAndDisplay( GEOM::GEOM_Shape_ptr Shape, const gp_Dir Dir1, const double Step1, const short NbTimes1, const gp_Dir Dir2, const double Step2, const short NbTimes2 )
-{
- try {
- GEOM::PointStruct d1 = myComponentGeom->MakePointStruct( Dir1.X(), Dir1.Y(), Dir1.Z() ) ;
- GEOM::DirStruct dstruct1 = myComponentGeom->MakeDirection(d1) ;
- GEOM::PointStruct d2 = myComponentGeom->MakePointStruct( Dir2.X(), Dir2.Y(), Dir2.Z() ) ;
- GEOM::DirStruct dstruct2 = myComponentGeom->MakeDirection(d2) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeMultiTranslation2D( Shape, dstruct1, Step1, NbTimes1, dstruct2, Step2, NbTimes2 );
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( tr("GEOM_COMPOUND") );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=================================================================================
-// function : MakeMultiRotation1DAndDisplay()
-// purpose : Multi-Rotate a shape
-//=================================================================================
-void GeometryGUI::MakeMultiRotation1DAndDisplay( GEOM::GEOM_Shape_ptr Shape, const gp_Dir Dir, const gp_Pnt Loc, const short NbTimes )
-{
- try {
- GEOM::PointStruct d = myComponentGeom->MakePointStruct( Dir.X(), Dir.Y(), Dir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( Loc.X(), Loc.Y(), Loc.Z() ) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeMultiRotation1D( Shape, dstruct, pstruct, NbTimes );
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( tr("GEOM_COMPOUND") );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=================================================================================
-// function : MakeMultiRotation2DAndDisplay()
-// purpose : Multi-Rotate a shape
-//=================================================================================
-void GeometryGUI::MakeMultiRotation2DAndDisplay( GEOM::GEOM_Shape_ptr Shape, const gp_Dir Dir, const gp_Pnt Loc, const double Ang, const short NbTimes1, const double Step, const short NbTimes2 )
-{
- try {
- GEOM::PointStruct d = myComponentGeom->MakePointStruct( Dir.X(), Dir.Y(), Dir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( Loc.X(), Loc.Y(), Loc.Z() ) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeMultiRotation2D( Shape, dstruct, pstruct, Ang, NbTimes1, Step, NbTimes2 );
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( tr("GEOM_COMPOUND") );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-
-//=======================================================================================
-// function : MakeArcAndDisplay()
-// purpose : Make an arc of circle from InitPoint to CirclePoint and passing on EndPoint
-//=======================================================================================
-void GeometryGUI::MakeArcAndDisplay( gp_Pnt InitPoint, gp_Pnt CirclePoint, gp_Pnt EndPoint )
-{
- gp_Vec v1( CirclePoint, InitPoint ) ;
- gp_Vec v2( CirclePoint, EndPoint ) ;
- if( v1.IsParallel(v2, Precision::Angular() ) )
- return ;
-
- try {
- GEOM::PointStruct pI = myComponentGeom->MakePointStruct( InitPoint.X(), InitPoint.Y(), InitPoint.Z() );
- GEOM::PointStruct pC = myComponentGeom->MakePointStruct( CirclePoint.X(), CirclePoint.Y(), CirclePoint.Z() );
- GEOM::PointStruct pE = myComponentGeom->MakePointStruct( EndPoint.X(), EndPoint.Y(), EndPoint.Z() );
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeArc(pI, pC, pE) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return ;
- }
- result->NameType(tr("GEOM_ARC"));
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeCircleAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeCircleAndDisplay( const gp_Pnt CenterPoint, const gp_Dir dir, const Standard_Real Radius )
-{
- try {
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( CenterPoint.X(), CenterPoint.Y(), CenterPoint.Z() ) ;
- GEOM::PointStruct d = myComponentGeom->MakePointStruct( dir.X(), dir.Y(), dir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeCircle(pstruct, dstruct, Radius) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType(tr("GEOM_CIRCLE"));
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeEllipseAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeEllipseAndDisplay( const gp_Pnt CenterPoint,
- const gp_Dir dir,
- const Standard_Real Major_Radius,
- const Standard_Real Minor_Radius )
-{
- try {
- GEOM::PointStruct pstruct = myComponentGeom->MakePointStruct( CenterPoint.X(), CenterPoint.Y(), CenterPoint.Z() ) ;
- GEOM::PointStruct d = myComponentGeom->MakePointStruct( dir.X(), dir.Y(), dir.Z() ) ;
- GEOM::DirStruct dstruct = myComponentGeom->MakeDirection(d) ;
-
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeEllipse(pstruct, dstruct, Major_Radius, Minor_Radius) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType(tr("GEOM_ELLIPSE"));
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakeWireAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeWireAndDisplay( GEOM::GEOM_Gen::ListOfIOR& listShapesIOR )
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeWire(listShapesIOR) ;
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- result->NameType(tr("GEOM_WIRE"));
- if( Display( result, "") )
- myDesktop ->putInfo(tr("GEOM_PRP_DONE")) ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
-}
-
-
-//=====================================================================================
-// function : MakePartitionAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakePartitionAndDisplay (const GEOM::GEOM_Gen::ListOfIOR& listShapesIOR,
- const GEOM::GEOM_Gen::ListOfIOR& listToolsIOR,
- const GEOM::GEOM_Gen::ListOfIOR& listKeepInsIOR,
- const GEOM::GEOM_Gen::ListOfIOR& listRemoveInsIOR,
- const GEOM::shape_type limit)
-{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->Partition(listShapesIOR,
- listToolsIOR,
- listKeepInsIOR,
- listRemoveInsIOR,
- (CORBA::Short) limit);
- if( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_NULLSHAPE")) ;
- return ;
- }
- result->NameType(tr("GEOM_PARTITION"));
- if( Display( result, "") )
- myDesktop ->putInfo(tr("GEOM_PRP_DONE")) ;
- return ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
-
-//=======================================================================
-// function : SetState()
-// purpose : Sets myState = aState a private field indicating which methode is active
-//=======================================================================
-void GeometryGUI::SetState(int aState )
-{ this->myState = aState ; return ; }
-
-
-//=======================================================================
-// function : ResetState()
-// purpose : Sets myState = -1 a private field indicating which methode is active
-//=======================================================================
-void GeometryGUI::ResetState()
-{ this->myState = -1 ; return ; }
-
-
-//=======================================================================
-// function : EmitSignalDeactivateDialog()
-// purpose : Emit a signal to deactivate the active dialog Box
-//=======================================================================
-void GeometryGUI::EmitSignalDeactivateDialog()
-{
- emit this->SignalDeactivateActiveDialog() ;
- return ;
-}
-
-//=======================================================================
-// function : EmitSignalCloseAllDialogs()
-// purpose : Emit a signal to deactivate all non modal dialogs box
-//=======================================================================
-void GeometryGUI::EmitSignalCloseAllDialogs()
-{
- emit this->SignalCloseAllDialogs() ;
- return ;
-}
-
-
-//=======================================================================
-// function : GetActiveDialogBox()
-// purpose :
-//=======================================================================
-QDialog* GeometryGUI::GetActiveDialogBox()
-{
- return this->myActiveDialogBox ;
-}
-
-
-//=======================================================================
-// function : SetActiveDialogBox()
-// purpose :
-//=======================================================================
-void GeometryGUI::SetActiveDialogBox(QDialog* aDlg)
-{
- this->myActiveDialogBox = (QDialog*)aDlg ;
- return ;
-}
-
-
-//=======================================================================
-// function : GetActiveStudy()
-// purpose :
-//=======================================================================
-QAD_Study* GeometryGUI::GetActiveStudy()
-{
- return this->myActiveStudy ;
-}
-
-
-//=======================================================================
-// function : GetActiveDesktop()
-// purpose :
-//=======================================================================
-QAD_Desktop* GeometryGUI::GetDesktop()
-{
- return this->myDesktop ;
-}
-
-
-//=====================================================================================
-// function : OnSubShapeGetAll()
-// purpose : Explode a shape in all sub shapes with a SubShapeType
-//=====================================================================================
-bool GeometryGUI::OnSubShapeGetAll(const TopoDS_Shape& ShapeTopo, const char* ShapeTopoIOR, const int SubShapeType)
-{
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR( ShapeTopoIOR );
- if ( theObj->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
- return false ;
- }
-
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(myActiveStudy->getActiveStudyFrame()->entry());
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
- SALOMEDS::AttributePixMap_var aPixmap;
-
- /* We create a sub object for each sub shape as attribute of the main object */
- /* Each sub object contains list (length=1) containing its index in the main shape */
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Gen::ListOfGeomShapes_var listGeomShapes = new GEOM::GEOM_Gen::ListOfGeomShapes;
- GEOM::GEOM_Shape_var aResult ;
-
- try {
- listGeomShapes = myComponentGeom->SubShapeAll( aShape, SubShapeType );
- if( listGeomShapes->length() < 1 ) {
- myDesktop->putInfo (tr("GEOM_PRP_ABORT"));
- return false ;
- }
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-
- /* open transaction */
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
-
- TopoDS_Shape mainTopo = ShapeReader.GetShape(myComponentGeom, aShape);
- TopoDS_Shape mainShape;
- bool main = false;
- while ( !main ) {
- if ( aShape->IsMainShape() ) {
- mainShape = ShapeReader.GetShape(myComponentGeom, aShape);
- main = true;
- } else
- aShape = myComponentGeom->GetIORFromString( aShape->MainName() );
- }
-
- /* Loop on each sub shape created */
- /* int i = 1 ; /* index for the nameType */
- for( int j=0; j<listGeomShapes->length(); j++) {
-
- /* Get each sub shape extracted CORBA and OCC */
- aResult = listGeomShapes[j] ;
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, aResult);
-
- if ( S.IsNull() ) {
- myDesktop->putInfo (tr("GEOM_PRP_ABORT"));
- return false;
- }
-
-// NRI : Following lines are commented according to bugID SAL695 (see history)
-// BRepCheck_Analyzer anAnalyzer(S);
-// if(!anAnalyzer.IsValid()) {
-// myDesktop->putInfo (tr("GEOM_PRP_ABORT"));
-// MESSAGE("#### An exploded shape number "<< j << " is not valid");
-// op->abort();
-// return false;
-// }
-
- /* Set the nameType of sub shape */
- char* nameG = (char *)malloc(20);
- Standard_CString Type;
- if ( GetShapeTypeString(S, Type) ) {
- aResult->NameType( Type );
- sprintf (nameG, "%s_%d", Type, GetIndex( S, mainShape, SubShapeType ) );
- }
- else {
- aResult->NameType( tr("GEOM_SHAPE") );
- sprintf (nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), this->myNbGeom++ );
- }
- SALOMEDS::SObject_var SO = aStudy->FindObjectIOR( aResult->Name() );
-
- bool allreadyexist = false;
-
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- Handle(GEOM_AISShape) result = new GEOM_AISShape( S, nameG );
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(aResult->Name(), Fatherior, "GEOM");
-
- MESSAGE ( "SO->_is_nil() " << SO->_is_nil() )
-
- if ( SO->_is_nil() ) {
- SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject( theObj );
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- aName->SetValue(nameG);
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- anIOR->SetValue(aResult->Name());
-
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- MESSAGE( " Type " << S.ShapeType() )
- if ( S.ShapeType() == TopAbs_COMPOUND ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" );
- } else if ( S.ShapeType() == TopAbs_COMPSOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPSOLID" );
- } else if ( S.ShapeType() == TopAbs_SOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SOLID" );
- } else if ( S.ShapeType() == TopAbs_SHELL ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SHELL" );
- } else if ( S.ShapeType() == TopAbs_FACE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_FACE" );
- } else if ( S.ShapeType() == TopAbs_WIRE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_WIRE" );
- } else if ( S.ShapeType() == TopAbs_EDGE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_EDGE" );
- } else if ( S.ShapeType() == TopAbs_VERTEX ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_VERTEX" );
- }
-
- MESSAGE ( " aPixmap->GetPixMap " << aPixmap->GetPixMap() )
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, newObj);
- IO->setEntry(newObj->GetID());
-
- aResult->StudyShapeId( newObj->GetID() );
- } else {
- allreadyexist = true;
- if ( ! SObjectExist(theObj, aResult->Name()) ) {
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(theObj);
- aStudyBuilder->Addreference(newObj1, SO);
- IO->setEntry(SO->GetID());
- aResult->StudyShapeId( SO->GetID() );
- }
- }
-
- result->setIO( IO );
- result->setName( nameG );
- if ( !allreadyexist )
- ic->Display(result);
-
- } else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- int themode = myRenderInter->GetDisplayMode();
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
-
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(aResult->Name(), Fatherior,"GEOM");
-
- if ( SO->_is_nil() ) {
- SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject( theObj );
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- anIOR->SetValue(aResult->Name());
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- aName->SetValue(nameG);
-
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- if ( S.ShapeType() == TopAbs_COMPOUND ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" );
- } else if ( S.ShapeType() == TopAbs_COMPSOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPSOLID" );
- } else if ( S.ShapeType() == TopAbs_SOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SOLID" );
- } else if ( S.ShapeType() == TopAbs_SHELL ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SHELL" );
- } else if ( S.ShapeType() == TopAbs_FACE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_FACE" );
- } else if ( S.ShapeType() == TopAbs_WIRE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_WIRE" );
- } else if ( S.ShapeType() == TopAbs_EDGE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_EDGE" );
- } else if ( S.ShapeType() == TopAbs_VERTEX ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_VERTEX" );
- }
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, newObj);
- IO->setEntry(newObj->GetID());
- } else {
- allreadyexist = true;
- if ( ! SObjectExist(theObj, aResult->Name()) ) {
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(theObj);
- aStudyBuilder->Addreference(newObj1, SO);
- IO->setEntry(SO->GetID());
- }
- }
-
- if ( !allreadyexist ) {
- vtkActorCollection* theActors =
- GEOM_AssemblyBuilder::BuildActors(S,0,themode,Standard_True);
- theActors->InitTraversal();
- vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
- while(!(anActor==NULL)) {
- GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor );
- GActor->setIO( IO );
- GActor->setName( nameG );
- theRenderer->AddActor(GActor);
- renWin->Render();
- anActor = (vtkActor*)theActors->GetNextActor();
- }
- }
- }
- }
-
- /* commit transaction */
- op->finish();
-
- myActiveStudy->updateObjBrowser();
- myDesktop->putInfo (tr("GEOM_PRP_READY"));
- return true ;
-}
-
-
-
-//=====================================================================================
-// function : GetIndexSubShapeSelected()
-// purpose : Define a ListOfID of sub shapes selected in ShapeTopo with SubShapeType
-// : Method used by Dialogs
-//=====================================================================================
-bool GeometryGUI::GetIndexSubShapeSelected( const TopoDS_Shape& ShapeTopo,
- const int SubShapeType,
- GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID,
- Standard_Integer& aLocalContextId,
- bool& myUseLocalContext )
-{
- //* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)this->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- ic->InitSelected();
- int nbSelected = ic->NbSelected();
- ListOfID.length(nbSelected);
-
-
- //***************** DEFINE INDEX OF EACH SELECTION *********************//
- int i = 0 ;
- ic->InitSelected(); /* to restart */
- while( ic->MoreSelected() ) {
-
- /* Find index of sub shape into main shape */
- TopExp_Explorer Exp ( ShapeTopo, TopAbs_ShapeEnum(SubShapeType) );
- int index = 1;
- bool found = false ;
- while ( Exp.More() ) {
- if ( (Exp.Current()).IsSame( ic->SelectedShape()) ) {
- found = true ;
- break;
- }
- index++;
- Exp.Next();
- }
- if( !found ) {
- /* Manage local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
- return false ;
- }
- ListOfID[i] = index ;
- i++;
- ic->NextSelected();
- }
- //***************** END *********************//
-
- /* Manage local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
-
- return true ;
-}
-
-
-//=====================================================================================
-// function : OnSubShapeGetSelected()
-// purpose :
-//=====================================================================================
-bool GeometryGUI::OnSubShapeGetSelected( const TopoDS_Shape& ShapeTopo,
- const char* ShapeTopoIOR,
- const int SubShapeType,
- Standard_Integer& aLocalContextId,
- bool& myUseLocalContext )
-{
- //* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR( ShapeTopoIOR );
- if ( theObj->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
- return false ;
- }
-
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- if( myUseLocalContext == false ) {
- /* local context is from DialogBox */
- MESSAGE("Error : No local context opened for sub shapes method" << endl ) ;
- return false ;
- }
-
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- TopoDS_Shape mainTopo = ShapeReader.GetShape(myComponentGeom, aShape);
-
- TopoDS_Shape mainShape;
- bool main = false;
- while ( !main ) {
- if ( aShape->IsMainShape() ) {
- mainShape = ShapeReader.GetShape(myComponentGeom, aShape);
- main = true;
- } else
- aShape = myComponentGeom->GetIORFromString( aShape->MainName() );
- }
-
- GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
- ic->InitSelected();
- int nbSelected = ic->NbSelected();
- ListOfID->length(nbSelected);
-
- TopoDS_Compound compound;
- ic->InitSelected(); /* to init again */
- BRep_Builder B;
- B.MakeCompound( compound );
-
- int i = 0;
- /* We create a unique compound containing all the sub shapes selected by user as attribute of the main shape */
- /* the compound is homogenous by selection */
- while(ic->MoreSelected()) {
- int index = GetIndex( ic->SelectedShape(), mainShape, SubShapeType );
- ListOfID[i] = index ;
- B.Add( compound, ic->SelectedShape() );
- i++;
- ic->NextSelected();
- }
-
- /* Test if user has selected sub shapes */
- if( ListOfID->length() < 1 )
- return false ;
-
- GEOM::GEOM_Shape_var aResult ;
- try {
- aResult = myComponentGeom->SubShape( aShape, SubShapeType, ListOfID );
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-
- /* local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
-
- char* nameG = (char *)malloc(20);
- Standard_CString Type;
-
- Handle(GEOM_AISShape) result;
- Handle(GEOM_InteractiveObject) IO ;
-
- // if ( ! SObjectExist(theObj, aResult->Name()) ) {
- if ( nbSelected == 1 ) {
- TopExp_Explorer Exp ( compound, TopAbs_ShapeEnum(SubShapeType) );
- if ( Exp.More() ) {
- if ( GetShapeTypeString(Exp.Current(),Type) ) {
- aResult->NameType( Type );
- sprintf (nameG, "%s_%d", Type, GetIndex( Exp.Current(), mainTopo, SubShapeType ) );
- } else {
- aResult->NameType( tr("GEOM_SHAPE") );
- sprintf (nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), this->myNbGeom++ );
- }
- result = new GEOM_AISShape( Exp.Current(), nameG );
- IO = new GEOM_InteractiveObject(aResult->Name(), Fatherior, "GEOM");
- }
- }
- else {
- if ( GetShapeTypeString(compound,Type) ) {
- aResult->NameType( Type );
- sprintf (nameG, "%s_%d", Type, this->myNbGeom++ );
- } else {
- aResult->NameType( tr("GEOM_SHAPE") );
- sprintf (nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), this->myNbGeom++ );
- }
- result = new GEOM_AISShape( compound, nameG );
- IO = new GEOM_InteractiveObject(aResult->Name(), Fatherior, "GEOM");
- }
-
- SALOMEDS::SObject_var SO = aStudy->FindObjectIOR( aResult->Name() );
-
- /* open transaction */
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
-
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(myActiveStudy->getActiveStudyFrame()->entry());
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
- SALOMEDS::AttributePixMap_var aPixmap;
-
- bool allreadyexist = false;
-
- if ( SO->_is_nil() ) {
- SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject( theObj );
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- anIOR->SetValue(aResult->Name());
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- aName->SetValue(result->getName());
-
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- if ( result->Shape().ShapeType() == TopAbs_COMPOUND ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" );
- } else if ( result->Shape().ShapeType() == TopAbs_COMPSOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPSOLID" );
- } else if ( result->Shape().ShapeType() == TopAbs_SOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SOLID" );
- } else if ( result->Shape().ShapeType() == TopAbs_SHELL ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SHELL" );
- } else if ( result->Shape().ShapeType() == TopAbs_FACE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_FACE" );
- } else if ( result->Shape().ShapeType() == TopAbs_WIRE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_WIRE" );
- } else if ( result->Shape().ShapeType() == TopAbs_EDGE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_EDGE" );
- } else if ( result->Shape().ShapeType() == TopAbs_VERTEX ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_VERTEX" );
- }
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, newObj);
-
- IO->setEntry(newObj->GetID());
- aResult->StudyShapeId(newObj->GetID());
- } else {
- allreadyexist = true;
- if ( ! SObjectExist(theObj, aResult->Name()) ) {
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(theObj);
- aStudyBuilder->Addreference(newObj1, SO);
-
- IO->setEntry(SO->GetID());
- aResult->StudyShapeId(SO->GetID());
- }
- }
-
- /* commit transaction */
- op->finish();
-
- result->setIO( IO );
- result->setName( nameG );
-
- if ( !allreadyexist )
- ic->Display(result);
-
- this->OnDisplayAll(true);
- myActiveStudy->updateObjBrowser();
- myDesktop->putInfo (tr("GEOM_PRP_READY"));
-
- return true ;
-}
-
-
-//=====================================================================================
-// function : OnSuppressFaces()
-// purpose : To suppress faces from a shape
-// : The result is one or more shells/faces as main shapes !
-//=====================================================================================
-bool GeometryGUI::OnSuppressFaces( const TopoDS_Shape& ShapeTopo,
- const char* ShapeTopoIOR,
- const Standard_Integer& aLocalContextId,
- bool& myUseLocalContext )
-{
- /* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR( ShapeTopoIOR );
- if ( theObj->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
- return false ;
- }
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- if( myUseLocalContext == false ) {
- /* local context is from DialogBox */
- MESSAGE("Error : No local context opened for suppress faces method" << endl ) ;
- return false ;
- }
-
- GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
- ic->InitSelected();
- int nbSelected = ic->NbSelected();
- ListOfID->length(nbSelected);
-
- /* Create a list of indices of faces to be suppressed */
- int i = 0;
- const int SubShapeType = 4 ; /* GEOM::FACE type */
- ic->InitSelected(); /* to repositioning at beginning */
- while( ic->MoreSelected() ) {
- int index = GetIndex( ic->SelectedShape(), ShapeTopo, SubShapeType );
- ListOfID[i] = index ;
- i++;
- ic->NextSelected();
- }
-
- /* Close local context opened in DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
-
- /* Here is the main shape */
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Gen::ListOfGeomShapes_var listGeomShapes = new GEOM::GEOM_Gen::ListOfGeomShapes;
-
- /* Call geom method that return a list of shells/faces as result of suppress */
- try {
- listGeomShapes = myComponentGeom->SuppressFaces( aShape, ListOfID );
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-
- /* Test list of shells/faces */
- if( listGeomShapes->length() < 1 ) {
- return false ;
- }
-
- /* Loop on each object created */
- for( int i=0; i<listGeomShapes->length(); i++ ) {
-
- GEOM::GEOM_Shape_var aShellOrFace = listGeomShapes[i] ;
- TopoDS_Shape S = ShapeReader.GetShape( this->myComponentGeom, aShellOrFace );
-
- if( S.IsNull() ) {
- return false ;
- }
-
- char* nameG = (char *)malloc(20);
- Standard_CString Type;
- if ( GetShapeTypeString(S, Type) ) {
- aShellOrFace->NameType( Type );
- sprintf (nameG, "%s_%d", Type, this->myNbGeom++);
- }
- else {
- aShellOrFace->NameType( tr("GEOM_SHAPE") );
- sprintf (nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), this->myNbGeom++ );
- }
-
- /* Display with name */
- if( !Display( aShellOrFace, nameG) ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return false ;
- }
- }
-
- myDesktop->putInfo (tr("GEOM_PRP_READY"));
- return true ;
-}
-
-
-//=====================================================================================
-// function : OnSuppressHole()
-// purpose : To suppress an hole on a shape 'ShapeTopo'.
-// : 'ListOfIdEndFace' may be an empty list.
-// : This means that hole do not traverse ShapeTopo.
-// : Warning : the hole to be suppressed must be defined by one or two single closed wires !
-//=====================================================================================
-bool GeometryGUI::OnSuppressHole( const char* ShapeTopoIOR,
- const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfIdFace,
- const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfIdWire,
- const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfIdEndFace )
-{
- /* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- try {
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Shape_var aResult = myComponentGeom->SuppressHole( aShape, ListOfIdFace, ListOfIdWire, ListOfIdEndFace ) ;
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, aResult);
- Standard_CString type;
- GetShapeTypeString(S,type);
- aResult->NameType( type );
-
- if ( Display( aResult, "" ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return true ;
-}
-
-
-//=====================================================================================
-// function : OnSuppressHolesInFaceOrShell()
-// purpose : To suppress one or more holes on a face
-// : 'ListOfIdWires' contains indices or wires/holes.
-//=====================================================================================
-bool GeometryGUI::OnSuppressHolesInFaceOrShell( const char* ShapeTopoIOR,
- const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfIdWires )
-{
- /* Test the type of viewer */
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- try {
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Shape_var aResult = myComponentGeom->SuppressHolesInFaceOrShell( aShape, ListOfIdWires ) ;
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, aResult);
- Standard_CString type;
- GetShapeTypeString(S,type);
- aResult->NameType( type );
-
- if ( Display( aResult, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return true ;
-}
-
-
-
-//=======================================================================
-// function : activeStudyChanged()
-// purpose : static
-//=======================================================================
-void GeometryGUI::activeStudyChanged( QAD_Desktop* parent )
-{
- MESSAGE ("GeometryGUI::activeStudyChanged init.")
- /* Create or retrieve an object GeomGUI */
- GeometryGUI::GetOrCreateGeometryGUI(parent);
- if(GeomGUI != 0) {
-
- if (GeomGUI->myState == CURRENT_SKETCH) {
- GeomGUI->mySketcher.Clear();
- GeomGUI->ResetState();
- }
-
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
- bool ViewOCC = false;
- if ( GeomGUI->myDesktop->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC )
- ViewOCC = true;
-
- Mb->setItemEnabled( 312, ViewOCC); //Sketch
- Mb->setItemEnabled( 309, ViewOCC); //SuppressFace
- Mb->setItemEnabled( 314, ViewOCC); //SuppressHole
-
- Mb->setItemEnabled( 703, ViewOCC);// ShadingColor Settings
- Mb->setItemEnabled( 704, ViewOCC);// Isos Settings
-
- GeomGUI->EraseSimulationShape() ;
- GeomGUI->EmitSignalCloseAllDialogs() ;
- GeomGUI = 0 ;
- }
-
- // GeomGUI->SetSettings( parent );
- // MESSAGE ("GeometryGUI::activeStudyChanged done.")
- return ;
-}
-
-
-//=======================================================================
-// function : DefineDlgPosition()
-// purpose : Define x and y the default position for a dialog box
-//=======================================================================
-bool GeometryGUI::DefineDlgPosition(QWidget* aDlg, int& x, int& y)
-{
- /* Here the position is on the bottom right corner - 10 */
- QAD_Desktop* PP = QAD_Application::getDesktop() ;
- x = abs ( PP->x() + PP->size().width() - aDlg->size().width() - 10 ) ;
- y = abs ( PP->y() + PP->size().height() - aDlg->size().height() - 10 ) ;
- return true ;
-}
-
-//=======================================================================
-// function : OnGUIEvent() [static]
-// purpose : manage all events on GUI
-//=======================================================================
-bool GeometryGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
-{
- /* Create or retrieve an object GeomGUI */
- GeometryGUI::GetOrCreateGeometryGUI(parent);
-
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-
- OCCViewer_Viewer3d* v3d;
- Handle(AIS_InteractiveContext) ic;
- vtkRenderer* Renderer;
-
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
-
- bool ViewOCC = false;
-
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- v3d = ((OCCViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- ic = v3d->getAISContext();
- ViewOCC = true;
- Mb->setItemEnabled( 312, ViewOCC);//Sketch
- Mb->setItemEnabled( 309, ViewOCC);//SuppressFace
- Mb->setItemEnabled( 314, ViewOCC);//SuppressHole
-
- Mb->setItemEnabled( 703, ViewOCC);// ShadingColor Settings
- Mb->setItemEnabled( 704, ViewOCC);// Isos Settings
-
- } else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- Renderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
-
- // OnSuppressFaces, OnSuppressHole, SETTINGS - SHADING COLOR, SETTINGS - ISOS, SETTINGS : STEP VALUE FOR SPIN BOXES, SKETCHER, ISOS - POPUP VIEWER,
- Mb->setItemEnabled( 312, ViewOCC);//Sketch
- Mb->setItemEnabled( 309, ViewOCC);//SuppressFace
- Mb->setItemEnabled( 314, ViewOCC);//SuppressHole
-
- Mb->setItemEnabled( 703, ViewOCC);// ShadingColor Settings
- Mb->setItemEnabled( 704, ViewOCC);// Isos Settings
- } else {
- return 0;
- }
-
- if (GeomGUI->myState == CURRENT_SKETCH && theCommandID != 10000 && theCommandID != 10001 && theCommandID != 10002 && theCommandID != 10003 && theCommandID != 10004 && theCommandID != 10006 && theCommandID != 10007 && theCommandID != 10008 && theCommandID != 10010 && theCommandID != 10011 && theCommandID != 10012 && theCommandID != 10013 && theCommandID != 10014 && theCommandID != 3133 && theCommandID != 3134)
- return false;
-
- switch (theCommandID)
- {
- case 31: // COPY
- GeomGUI->OnEditCopy();
- break;
-
- case 33: // DELETE
- GeomGUI->OnEditDelete();
- break;
-
- case 111:
- {
- GeomGUI->SetState(111);
- GeomGUI->Import();
- GeomGUI->ResetState();
- break;
- }
- case 112:
- {
- GeomGUI->SetState(112);
- GeomGUI->Import();
- GeomGUI->ResetState();
- break;
- }
- case 113: // IMPORT STEP
- {
- GeomGUI->SetState(113);
- GeomGUI->Import();
- GeomGUI->ResetState();
- break;
- }
-
- case 121: // EXPORT BREP
- {
- GeomGUI->SetState(121);
- GeomGUI->Export();
- GeomGUI->ResetState();
- break;
- }
-
- case 122: // EXPORT IGES
- {
- GeomGUI->SetState(122);
- GeomGUI->Export();
- GeomGUI->ResetState();
- break;
- }
-
- case 123: // EXPORT STEP
- {
- GeomGUI->SetState(123);
- GeomGUI->Export();
- GeomGUI->ResetState();
- break;
- }
-
- case 303: // EXPLODE : use ic
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_SubShapeDlg *aDlg = new GeometryGUI_SubShapeDlg( parent, "", Sel, ic ) ;
- break ;
- }
-
- case 304: // GEOM::EDGE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_EdgeDlg *aDlg = new GeometryGUI_EdgeDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 305: // GEOM::WIRE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_WireDlg *aDlg = new GeometryGUI_WireDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 306: // GEOM::FACE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_FaceDlg *aDlg = new GeometryGUI_FaceDlg ( parent, "", Sel ) ;
- break ;
- }
-
- case 308: // GEOM::COMPOUND
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CompoundDlg *aDlg = new GeometryGUI_CompoundDlg ( parent, "", Sel ) ;
- break ;
- }
-
- case 309: // SUPPRESS FACES : use ic
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_SuppressFacesDlg *aDlg = new GeometryGUI_SuppressFacesDlg( parent, "", Sel, ic ) ;
- break ;
- }
-
- case 314: // SUPPRESS HOLES : use ic
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_SuppressHoleDlg *aDlg = new GeometryGUI_SuppressHoleDlg( parent, "", Sel, ic ) ;
- }
- else {
- GeomGUI->myDesktop->putInfo( tr("GEOM_PRP_NOT_FOR_VTK_VIEWER") ) ;
- }
- break ;
- }
- case 501: // SEWING
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_SewingDlg *aDlg = new GeometryGUI_SewingDlg ( parent, "", Sel ) ;
- break ;
- }
-
- case 502: // ORIENTATION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_OrientationDlg *aDlg = new GeometryGUI_OrientationDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 601: // PROPERTIES (Length, surface, volume)
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_PropertiesDlg *aDlg = new GeometryGUI_PropertiesDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 604: // CDG : Center of mass
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CenterMassDlg *aDlg = new GeometryGUI_CenterMassDlg ( parent, "", Sel ) ;
- break ;
- }
-
- case 605: // INERTIA
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_InertiaDlg *aDlg = new GeometryGUI_InertiaDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 607: // MAXTOLERANCE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_MaxToleranceDlg *aDlg = new GeometryGUI_MaxToleranceDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 608: // WHATIS
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_WhatisDlg *aDlg = new GeometryGUI_WhatisDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 609: // CHECKSHAPE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CheckShape *aDlg = new GeometryGUI_CheckShape( parent, "", Sel ) ;
- break ;
- }
-
- case 701: // SETTINGS - COPY
- {
- QMenuData* pp;
- QMenuItem* item = parent->menuBar()->findItem(701,&pp);
- bool check = !pp->isItemChecked(701);
- pp->setItemChecked(701,check);
- Settings_Copy = check;
- QAD_CONFIG->addSetting( "Geometry:SettingsCopy", Settings_Copy );
- break;
- }
-
- case 702: // SETTINGS - ADD IN STUDY
- {
- QMenuData* pp;
- QMenuItem* item = parent->menuBar()->findItem(702,&pp);
- bool check = !pp->isItemChecked(702);
- pp->setItemChecked(702,check);
- Settings_AddInStudy = check;
-
- QAD_CONFIG->addSetting( "Geometry:SettingsAddInStudy", Settings_AddInStudy );
- break;
- }
-
- case 703: // SETTINGS - SHADING COLOR
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
-
- QString SCr = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorRed");
- QString SCg = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorGreen");
- QString SCb = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorBlue");
- QColor color;
- if( !SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty() ) {
- color = QColor (SCr.toInt(),
- SCg.toInt(),
- SCb.toInt());
- } else {
- Quantity_Color Default = Quantity_Color();
- color = QColor ( (int)Default.Red() * 255.0,
- (int)Default.Green()* 255.0,
- (int)Default.Blue() * 255.0 );
- }
-
- QColor c = QColorDialog::getColor( color, QAD_Application::getDesktop() );
- if ( c.isValid() ) {
- GeomGUI->myShadingColor = Quantity_Color(c.red() / 255.0,
- c.green()/ 255.0,
- c.blue() / 255.0,
- Quantity_TOC_RGB);
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListOfInteractive List1;
- ic->ObjectsInCollector(List1);
- List.Append(List1);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- aSh->SetShadingColor( GeomGUI->myShadingColor );
- ic->Redisplay( aSh, Standard_True, Standard_True);
- }
- ite.Next();
- }
-
- ic->UpdateCurrentViewer();
-
- QAD_CONFIG->addSetting("Geometry:SettingsShadingColorRed", c.red() );
- QAD_CONFIG->addSetting("Geometry:SettingsShadingColorGreen", c.green() );
- QAD_CONFIG->addSetting("Geometry:SettingsShadingColorBlue", c.blue() );
- }
- break;
- }
-
-
- case 704: // SETTINGS - ISOS
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
-
- QString IsoU = QAD_CONFIG->getSetting("Geometry:SettingsIsoU");
- QString IsoV = QAD_CONFIG->getSetting("Geometry:SettingsIsoV");
- if ( !IsoU.isEmpty() )
- ic->DefaultDrawer()->UIsoAspect()->SetNumber(IsoU.toInt());
- else
- IsoU = "1";
- if ( !IsoV.isEmpty() )
- ic->DefaultDrawer()->VIsoAspect()->SetNumber(IsoV.toInt());
- else
- IsoV = "1";
-
- GeometryGUI_NbIsosDlg * NbIsosDlg = new GeometryGUI_NbIsosDlg( QAD_Application::getDesktop(),
- tr("GEOM_MEN_ISOS"), TRUE );
- int UIso = IsoU.toInt();
- int VIso = IsoV.toInt();
-
- NbIsosDlg->SpinBoxU->setValue(UIso) ;
- NbIsosDlg->SpinBoxV->setValue(VIso) ;
-
- if ( NbIsosDlg->exec() ) {
- UIso = NbIsosDlg->SpinBoxU->text().toInt() ;
- VIso = NbIsosDlg->SpinBoxV->text().toInt() ;
-
- ic->DefaultDrawer()->UIsoAspect()->SetNumber(UIso);
- ic->DefaultDrawer()->VIsoAspect()->SetNumber(VIso);
- QAD_CONFIG->addSetting( "Geometry:SettingsIsoU", NbIsosDlg->SpinBoxU->text() ); /* text format */
- QAD_CONFIG->addSetting( "Geometry:SettingsIsoV", NbIsosDlg->SpinBoxV->text() ); /* text format */
- }
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListOfInteractive List1;
- ic->ObjectsInCollector(List1);
- List.Append(List1);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- ic->InitCurrent();
- if ( ic->NbCurrents() )
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
-
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- Handle (AIS_Drawer) CurDrawer;
- CurDrawer = aSh->Attributes();
- CurDrawer->UIsoAspect()->SetNumber( UIso );
- CurDrawer->VIsoAspect()->SetNumber( VIso );
- ic->SetLocalAttributes(aSh, CurDrawer);
- ic->Redisplay(aSh);
- }
- ite.Next();
- }
- ic->UpdateCurrentViewer();
- break;
- }
-
- case 705: // SETTINGS : STEP VALUE FOR SPIN BOXES
- {
- //NRI if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- //NRI break;
-
- QString step = QAD_CONFIG->getSetting( "Geometry:SettingsGeomStep" );
- if( step.isEmpty() )
- step = "100.0" ;
-
- Standard_Boolean res = false ;
- double dd = Parameter( res, QString("%1").arg(step), tr("GEOM_MEN_STEP_LABEL"), tr("GEOM_STEP_TITLE"), 0.001, 10000.0, 3 ) ;
- if( res ) {
- QAD_CONFIG->addSetting( "Geometry:SettingsGeomStep", QString("%1").arg(dd) ) ;
-
- /* Emit signal to GeometryGUI_SpinBoxes */
- GeomGUI->SignalDefaultStepValueChanged( dd ) ;
- }
- else
- parent->putInfo(tr("GEOM_PRP_ABORT"));
-
- break ;
- }
-
- case 801: // ADD IN STUDY - POPUP VIEWER
- {
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- const SALOME_ListIO& ListSelected = Sel->StoredIObjects();
- SALOME_ListIteratorOfListIO It( ListSelected );
- for ( ; It.More(); It.Next() ) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- GeomGUI->AddInStudy(true, IObject);
- }
- /* Is set on the dialog box */
- QApplication::restoreOverrideCursor();
- break;
- }
-
- case 901: // RENAME
- {
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- for ( ; It.More(); It.Next() ) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
-
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- if ( !obj->_is_nil() ) {
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
-
- QString nm = QString( aName->Value() );
- nm = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), nm );
- if ( !nm.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- GeomGUI->myActiveStudy->renameIObject( IObject, nm );
- QApplication::restoreOverrideCursor();
- }
- }
- }
- }
- break;
- }
-
- case 903: // DISPLAY OBJECT BROWSER
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- // VTK
- QApplication::setOverrideCursor( Qt::waitCursor );
-
- SALOMEDS::SObject_var fatherSF =
- aStudy->FindObjectID(GeomGUI->myActiveStudy->getActiveStudyFrame()->entry());
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
-
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
-
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
-
- if(myRenderInter->isInViewer(IObject)) {
- myRenderInter->Display(IObject);
- }
- else {
- // Create new actor
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
-
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
-
- vtkRenderer* theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theAllActors = theRenderer->GetActors();
- theAllActors->InitTraversal();
- vtkActor* actor = (vtkActor*)theAllActors->GetNextActor();
- Handle(SALOME_InteractiveObject) anIObj;
- // don't create new study object if it already exists
- bool isDisplayed = false;
- while(!(actor==NULL)) {
- SALOME_Actor* Gactor = SALOME_Actor::SafeDownCast(actor);
- if (Gactor!=NULL) {
- if (Gactor->hasIO()) {
- if (strcmp(Gactor->getIO()->getEntry(),obj->GetID())==0) {
- isDisplayed = true;
- anIObj = Gactor->getIO();
- if (!anIObj.IsNull()) myRenderInter->Display(anIObj);
- }
- }
- }
- actor=(vtkActor*)(theAllActors->GetNextActor());
- }
- if (!isDisplayed) {
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( GeomGUI->myActiveStudy );
- op->start();
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, obj);
- // commit transaction
- op->finish();
-
- vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
- int themode = myRenderInter->GetDisplayMode();
-
- vtkActorCollection* theActors =
- GEOM_AssemblyBuilder::BuildActors(Shape,0,themode,Standard_True);
- theActors->InitTraversal();
- vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
- while(!(anActor==NULL)) {
- GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor );
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(), Fatherior,"GEOM");
- IO->setEntry(obj->GetID());
- GActor->setIO( IO );
- GActor->setName( IObject->getName() );
-
- theRenderer->AddActor(GActor);
- renWin->Render();
- anActor = (vtkActor*)theActors->GetNextActor();
- }
- }
- }
- // next item iteration
- if (useSubItems) {
- anIter->Next();
- anAttr = SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- }
- GeomGUI->myActiveStudy->updateObjBrowser( true );
- QApplication::restoreOverrideCursor();
-
- } else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
-
- SALOMEDS::SObject_var fatherSF =
- aStudy->FindObjectID( GeomGUI->myActiveStudy->getActiveStudyFrame()->entry());
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
-
- if ( v3d->isInViewer( IObject, true ) ) {
- Standard_Boolean found;
- Handle(GEOM_AISShape) aSh = GeomGUI->ConvertIOinGEOMAISShape( IObject, found, true );
- if ( found ) {
- ic->Display(aSh);
- ic->AddOrRemoveCurrentObject(aSh, true);
- }
-
- } else {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- }
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // searchin for already displayed objects with the same shape
- AIS_ListOfInteractive aDisplayed;
- ic->DisplayedObjects(aDisplayed);
- AIS_ListIteratorOfListOfInteractive anIObjects(aDisplayed);
- Handle(AIS_Shape) anAISShape;
- for(;anIObjects.More();anIObjects.Next()) {
- anAISShape = Handle(AIS_Shape)::DownCast(anIObjects.Value());
- if (!anAISShape.IsNull()) {
- if (anAISShape->Shape().IsSame(Shape)) break;
- anAISShape.Nullify();
- }
- }
- if (!anAISShape.IsNull()) {
- if (!ic->IsDisplayed(anAISShape)) ic->Display(anAISShape);
- } else {
- if (!useSubItems) {
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( GeomGUI->myActiveStudy );
- op->start();
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, obj);
- // commit transaction
- op->finish();
- }
-
- Handle(GEOM_AISShape) aSh = new GEOM_AISShape(Shape, aName->Value());
- aSh->SetShadingColor( GeomGUI->myShadingColor );
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(),
- Fatherior,
- "GEOM");
- IO->setEntry(obj->GetID());
- aSh->setIO( IO );
- aSh->setName( aName->Value() );
- ic->Display (aSh);
- if (!useSubItems) ic->AddOrRemoveCurrentObject(aSh, true);
- }
- }
- // next item iteration
- if (useSubItems) {
- anIter->Next();
- anAttr=SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- }
- GeomGUI->myActiveStudy->updateObjBrowser( true );
- QApplication::restoreOverrideCursor();
- }
- break;
- }
-
- case 3011: // POINT
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_PointDlg *aDlg = new GeometryGUI_PointDlg( parent, "", Sel, ic ) ;
- break;
- }
-
- case 3012: // LINE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_LineDlg *aDlg = new GeometryGUI_LineDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 3013: // CIRCLE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CircleDlg *aDlg = new GeometryGUI_CircleDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 3014: // ELLIPSE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_EllipseDlg *aDlg = new GeometryGUI_EllipseDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 3015: // ARC
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_ArcDlg *aDlg = new GeometryGUI_ArcDlg( parent, "", Sel ) ;
- break ;
- }
-
- case 3016: // VECTOR
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_VectorDlg *aDlg = new GeometryGUI_VectorDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3017: // PLANE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_PlaneDlg *aDlg = new GeometryGUI_PlaneDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3018: // WORKING PLANE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_WorkingPlaneDlg *aDlg = new GeometryGUI_WorkingPlaneDlg( parent, "", Sel ) ;
- break;
- }
-
- case 312: // SKETCHER
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
- break;
-
- GeomGUI->EmitSignalDeactivateDialog() ;
-
- ((OCCViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->onViewTop(); // DCQ : 28/02/2002
-
- GeomGUI->mySketcher = Sketch( v3d->getViewer3d() );
- GeomGUI->SetState(CURRENT_SKETCH);
-
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
- QMenuData* pp;
-
- QMenuItem* item = Mb->findItem(10010,&pp);
- GeomGUI->mySketcher.SetParameterVisibility(LENGTH_PARAMETER,pp->isItemChecked(10010));
- item = Mb->findItem(10011,&pp);
- GeomGUI->mySketcher.SetParameterVisibility(ANGLE_PARAMETER,pp->isItemChecked(10011));
- item = Mb->findItem(10012,&pp);
- GeomGUI->mySketcher.SetParameterVisibility(RADIUS_PARAMETER,pp->isItemChecked(10012));
- item = Mb->findItem(10013,&pp);
- GeomGUI->mySketcher.SetParameterVisibility(XVALUE_PARAMETER,pp->isItemChecked(10013));
- item = Mb->findItem(10014,&pp);
- GeomGUI->mySketcher.SetParameterVisibility(YVALUE_PARAMETER,pp->isItemChecked(10014));
-
- GeomGUI->mySketcher.SetTransitionStatus(NOCONSTRAINT);
- item = Mb->findItem(3133,&pp);
- pp->setItemChecked(3133,false);
- item = Mb->findItem(3134,&pp);
- pp->setItemChecked(3134,false);
- break;
- }
-
- case 3021: // BOX
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_BoxDlg *aDlg = new GeometryGUI_BoxDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3022: // CYLINDER
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CylinderDlg *aDlg = new GeometryGUI_CylinderDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3023: // SPHERE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_SphereDlg *aDlg = new GeometryGUI_SphereDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3024: // TORUS
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_TorusDlg *aDlg = new GeometryGUI_TorusDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3025: // CONE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_ConeDlg *aDlg = new GeometryGUI_ConeDlg( parent, "", Sel ) ;
- break;
- }
-
- case 3131:
- {
- break;
- }
-
- case 3133: // sketcher
- {
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(3133,&pp);
- pp->setItemChecked(3133,!pp->isItemChecked(3133));
- if (pp->isItemChecked(3133) == true)
- GeomGUI->mySketcher.SetTransitionStatus(TANGENT);
- else
- GeomGUI->mySketcher.SetTransitionStatus(NOCONSTRAINT);
-
- pp->setItemChecked(3134,false);
- break;
- }
-
- case 3134: // sketcher
- {
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(3134,&pp);
- pp->setItemChecked(3134,!pp->isItemChecked(3134));
- if (pp->isItemChecked(3134) == true)
- GeomGUI->mySketcher.SetTransitionStatus(PERPENDICULAR);
- else
- GeomGUI->mySketcher.SetTransitionStatus(NOCONSTRAINT);
-
- pp->setItemChecked(3133,false);
- break;
- }
-
- case 4011: // FUSE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_FuseDlg *aDlg = new GeometryGUI_FuseDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4012: // COMMON
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CommonDlg *aDlg = new GeometryGUI_CommonDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4013: // CUT
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_CutDlg *aDlg = new GeometryGUI_CutDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4014: // SECTION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_SectionDlg *aDlg = new GeometryGUI_SectionDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4021: // TRANSLATION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_TranslationDlg *aDlg = new GeometryGUI_TranslationDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4022: // ROTATION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_RotationDlg *aDlg = new GeometryGUI_RotationDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4030: // MULTI TRANSLATION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_MultiTranslationDlg *aDlg = new GeometryGUI_MultiTranslationDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4040: // MULTI ROTATION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_MultiRotationDlg *aDlg = new GeometryGUI_MultiRotationDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4023: // MIRROR
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_MirrorDlg *aDlg = new GeometryGUI_MirrorDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4024: // SCALE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_ScaleDlg *aDlg = new GeometryGUI_ScaleDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4025: // PARTITION
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_PartitionDlg *aDlg = new GeometryGUI_PartitionDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4026: // ARCHIMEDE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_ArchimedeDlg *aDlg = new GeometryGUI_ArchimedeDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4027: // FILLET
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_FilletDlg *aDlg = new GeometryGUI_FilletDlg( parent, "", Sel, ic ) ;
- break;
- }
-
- case 4028: // CHAMFER
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_ChamferDlg *aDlg = new GeometryGUI_ChamferDlg( parent, "", Sel, ic ) ;
- break;
- }
-
- case 4031: // PRISM
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_PrismDlg *aDlg = new GeometryGUI_PrismDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4032: // REVOL
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_RevolDlg *aDlg = new GeometryGUI_RevolDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4033: // FILLING
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_FillingDlg *aDlg = new GeometryGUI_FillingDlg( parent, "", Sel ) ;
- break;
- }
-
- case 4034: // PIPE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_PipeDlg *aDlg = new GeometryGUI_PipeDlg(parent, "", Sel ) ;
- break;
- }
-
- case 5001: // CHECK GEOMETRY
- {
- QAD_PyEditor* PyEditor = GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getPyEditor();
- PyEditor->setText("from GEOM_usinggeom import *\n");
- PyEditor->setText(">>> ");
- PyEditor->handleReturn();
- break;
- }
-
- case 6021: // SHADING - WIREFRAME
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
- VTKViewer_RenderWindowInteractor* myRenderInter=
- ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- QApplication::setOverrideCursor(waitCursor);
-
- int themode = myRenderInter->GetDisplayMode();
- if( themode==0 ) {
- myRenderInter->SetDisplayMode(1);
- GeomGUI->GetDesktop()->menuBar()->changeItem(6021, tr("GEOM_MEN_WIREFRAME") );
- } else {
- myRenderInter->SetDisplayMode(0);
- GeomGUI->GetDesktop()->menuBar()->changeItem(6021, tr("GEOM_MEN_SHADING") );
- }
-
- QApplication::restoreOverrideCursor();
-
- } else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
- AIS_DisplayMode mode = ( AIS_DisplayMode )ic->DisplayMode();
- QApplication::setOverrideCursor( Qt::waitCursor );
- AIS_DisplayMode newmode = (mode == AIS_WireFrame ? AIS_Shaded : AIS_WireFrame);
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListOfInteractive List1;
- ic->ObjectsInCollector(List1);
- List.Append(List1);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- ic->SetDisplayMode(aSh,Standard_Integer(newmode),true);
- }
- ite.Next();
- }
-
- ic->SetDisplayMode( newmode, Standard_False);
- if ( newmode == 1 )
- GeomGUI->GetDesktop()->menuBar()->changeItem(6021, tr("GEOM_MEN_WIREFRAME") );
- else
- GeomGUI->GetDesktop()->menuBar()->changeItem(6021, tr("GEOM_MEN_SHADING") );
-
- QApplication::restoreOverrideCursor();
- }
- break;
- }
-
- case 6022: // DISPLAY ALL
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK )
- //VTK
- ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor()->DisplayAll();
- else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC )
- GeomGUI->OnDisplayAll();
- break;
- }
-
- case 6023: // DISPLAY ONLY
- case 8023: // DISPLAY ONLY - POPUP VIEWER
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
- // VTK
- GeomGUI->OnVTKDisplayOnly();
- }
- else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC)
- GeomGUI->OnDisplayOnly();
- break;
- }
-
- case 6024: // ERASE ALL
- {
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
- //VTK
- ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor()->EraseAll();
- }
- else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
- ic->EraseAll(Standard_True, Standard_False);
- ic->Display(v3d->getTrihedron());
- }
-
- //NRI SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
- //NRI Sel->ClearInteractiveObjects();
- break;
- }
-
- case 6025 : // ERASE ONLY
- case 8022 : // ERASE - POPUP VIEWER
- {
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
- // VTK
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
- for(;It.More();It.Next()) {
- anIObject = It.Value();
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- if(myRenderInter->isInViewer(anIObject)) {
- myRenderInter->Erase(anIObject);
- } else {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( anIObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- // searchin for already displayed objects with the same shape
- vtkRenderer* theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theAllActors = theRenderer->GetActors();
- theAllActors->InitTraversal();
- vtkActor* actor = (vtkActor*)theAllActors->GetNextActor();
- Handle(SALOME_InteractiveObject) anIObj;
- // don't create new study object if it already exists
- bool isDisplayed = false;
- while(!(actor==NULL)) {
- SALOME_Actor* Gactor = SALOME_Actor::SafeDownCast(actor);
- if (Gactor!=NULL) {
- if (Gactor->hasIO()) {
- if (strcmp(Gactor->getIO()->getEntry(),obj->GetID())==0) {
- isDisplayed = true;
- anIObj = Gactor->getIO();
- if (!anIObj.IsNull()) myRenderInter->Erase(anIObj);
- }
- }
- }
- actor=(vtkActor*)(theAllActors->GetNextActor());
- }
- }
- if (useSubItems) {
- anIter->Next();
- anAttr=SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- }
-// SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-// for(;It.More();It.Next()) {
-// Handle(SALOME_InteractiveObject) IOS = It.Value();
- // GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getVTKView()->getRWInteractor()->Erase(IOS);;
- }
- else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
- // OCC
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
- for(;It.More();It.Next()) {
- anIObject = It.Value();
- if ( v3d->isInViewer( anIObject, true ) ) {
- Standard_Boolean found;
- Handle(GEOM_AISShape) aSh = GeomGUI->ConvertIOinGEOMAISShape( anIObject, found, true );
- if ( found ) {
- ic->Erase(aSh);
- ic->AddOrRemoveCurrentObject(aSh, true);
- }
- } else {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( anIObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- // searchin for already displayed objects with the same shape
- AIS_ListOfInteractive aDisplayed;
- ic->DisplayedObjects(aDisplayed);
- AIS_ListIteratorOfListOfInteractive anIObjects(aDisplayed);
- Handle(AIS_Shape) anAISShape;
- for(;anIObjects.More();anIObjects.Next()) {
- anAISShape = Handle(AIS_Shape)::DownCast(anIObjects.Value());
- if (!anAISShape.IsNull()) {
- if (anAISShape->Shape().IsSame(Shape)) break;
- anAISShape.Nullify();
- }
- }
- if (!anAISShape.IsNull()) {
- if (ic->IsDisplayed(anAISShape)) ic->Erase(anAISShape);
- }
- }
- if (useSubItems) {
- anIter->Next();
- anAttr=SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- }
- }
- Sel->ClearIObjects();
- break;
- }
-
-
- case 6060: // BOUNDING BOX
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_BndBoxDlg *aDlg = new GeometryGUI_BndBoxDlg(parent, "", Sel ) ;
- break ;
- }
-
- case 6061: // MIN DISTANCE
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_DistanceDlg *aDlg = new GeometryGUI_DistanceDlg(parent, "", Sel ) ;
- break ;
- }
-
- case 8021: // WIREFRAME-SHADING
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- // VTK
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-
- QApplication::setOverrideCursor( Qt::waitCursor );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IOS = It.Value();
- myRenderInter->SwitchRepresentation(IOS, false);
- }
- myRenderInter->Render();
- QApplication::restoreOverrideCursor();
- }
- else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- Standard_Boolean found;
- Handle(GEOM_AISShape) Shape = GeomGUI->ConvertIOinGEOMAISShape( IObject, found, true );
- if (!Shape.IsNull()) {
- AIS_DisplayMode mode = ( AIS_DisplayMode )Shape->DisplayMode();
- if ( mode == -1 )
- mode = ( AIS_DisplayMode )ic->DisplayMode();
-
- QApplication::setOverrideCursor( Qt::waitCursor );
- ic->SetDisplayMode(Shape, mode == AIS_WireFrame ? AIS_Shaded : AIS_WireFrame, false);
- }
- QApplication::restoreOverrideCursor();
- }
- ic->UpdateCurrentViewer();
- }
- QApplication::restoreOverrideCursor();
- break;
- }
-
- case 8031: // COLOR - POPUP VIEWER
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- // VTK
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-
- Handle(SALOME_InteractiveObject) FirstIOS = Sel->firstIObject();
- if(!FirstIOS.IsNull()) {
-
- QColor initcolor = myRenderInter->GetColor(FirstIOS);
-
- QColor c = QColorDialog::getColor( initcolor,
- QAD_Application::getDesktop() );
-
- if ( c.isValid() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IOS = It.Value();
- myRenderInter->SetColor(IOS,c);
- }
- }
- QApplication::restoreOverrideCursor();
- }
- }
- else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
- Standard_Boolean found;
- Handle(GEOM_AISShape) Shape = GeomGUI->ConvertIOinGEOMAISShape(IO, found, true);
- if ( found ) {
- Quantity_Color CSFColor;
- Shape->Color( CSFColor );
-
- QColor c = QColorDialog::getColor( QColor(CSFColor.Red() * 255.0,
- CSFColor.Green()* 255.0,
- CSFColor.Blue() * 255.0 ),
- QAD_Application::getDesktop() );
-
- if ( c.isValid() ) {
- CSFColor = Quantity_Color ( c.red()/255., c.green()/255., c.blue()/255., Quantity_TOC_RGB );
- QApplication::setOverrideCursor( Qt::waitCursor );
-
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- Standard_Boolean found;
- Handle(GEOM_AISShape) Shape = GeomGUI->ConvertIOinGEOMAISShape(IObject, found, true);
- if ( found ) {
- Shape->SetColor ( CSFColor );
- Shape->SetShadingColor ( CSFColor );
- }
- }
- }
- }
- }
- QApplication::restoreOverrideCursor();
- break;
- }
-
- case 8032: // TRANSPARENCY - POPUP VIEWER
- {
- GeomGUI->EmitSignalDeactivateDialog() ;
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- GeometryGUI_TransparencyDlg *aDlg = new GeometryGUI_TransparencyDlg( parent, "", Sel, ic ) ;
- break ;
- }
-
- case 8033: // ISOS - POPUP VIEWER
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- else {
- ic->InitCurrent();
- if ( ic->MoreCurrent() ) {
- Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
- QString IsoU = QAD_CONFIG->getSetting("Geometry:SettingsIsoU");
- QString IsoV = QAD_CONFIG->getSetting("Geometry:SettingsIsoV");
-
- if ( !IsoU.isEmpty() )
- ic->DefaultDrawer()->UIsoAspect()->SetNumber(IsoU.toInt());
- else
- IsoU = "1";
- if ( !IsoV.isEmpty() )
- ic->DefaultDrawer()->VIsoAspect()->SetNumber(IsoV.toInt());
- else
- IsoV = "1";
-
- GeometryGUI_NbIsosDlg * NbIsosDlg =
- new GeometryGUI_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE );
-
- NbIsosDlg->SpinBoxU->setValue(IsoU.toInt());
- NbIsosDlg->SpinBoxV->setValue(IsoV.toInt());
-
- if ( NbIsosDlg->exec() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- for ( ; ic->MoreCurrent (); ic->NextCurrent () ) {
- Handle (AIS_Drawer) CurDrawer;
-
- CurDrawer = ic->Current()->Attributes();
- CurDrawer->UIsoAspect()->SetNumber( NbIsosDlg->SpinBoxU->text().toInt() );
- CurDrawer->VIsoAspect()->SetNumber( NbIsosDlg->SpinBoxV->text().toInt() );
-
- ic->SetLocalAttributes(CurObject, CurDrawer);
- ic->Redisplay(CurObject);
- }
- }
- }
- }
- QApplication::restoreOverrideCursor();
- break;
- }
-
- case 9022 : // ERASE - OBJBROSER POPUP
- {
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- // VTK
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
- for(;It.More();It.Next()) {
- anIObject = It.Value();
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
-// Handle(SALOME_InteractiveObject) IObject;
- if(myRenderInter->isInViewer(anIObject)) {
- myRenderInter->Erase(anIObject);
- } else {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( anIObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- // searchin for already displayed objects with the same shape
- vtkRenderer* theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theAllActors = theRenderer->GetActors();
- theAllActors->InitTraversal();
- vtkActor* actor = (vtkActor*)theAllActors->GetNextActor();
- Handle(SALOME_InteractiveObject) anIObj;
- // don't create new study object if it already exists
- bool isDisplayed = false;
- while(!(actor==NULL)) {
- SALOME_Actor* Gactor = SALOME_Actor::SafeDownCast(actor);
- if (Gactor!=NULL) {
- if (Gactor->hasIO()) {
- if (strcmp(Gactor->getIO()->getEntry(),obj->GetID())==0) {
- isDisplayed = true;
- anIObj = Gactor->getIO();
- if (!anIObj.IsNull()) myRenderInter->Erase(anIObj);
- }
- }
- }
- actor=(vtkActor*)(theAllActors->GetNextActor());
- }
- }
- if (useSubItems) {
- anIter->Next();
- anAttr=SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
-// SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-// for(;It.More();It.Next()) {
-// Handle(SALOME_InteractiveObject) IOS = It.Value();
-// GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getVTKView()->getRWInteractor()->Erase(IOS);;
- }
-// SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-// for(;It.More();It.Next()) {
-// Handle(SALOME_InteractiveObject) IOS = It.Value();
-// GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getVTKView()->getRWInteractor()->Erase(IOS);;
-// }
- }
- else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- // OCC
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
- for(;It.More();It.Next()) {
- anIObject = It.Value();
- if ( v3d->isInViewer( anIObject, true ) ) {
- Standard_Boolean found;
- Handle(GEOM_AISShape) aSh = GeomGUI->ConvertIOinGEOMAISShape( anIObject, found, true );
- if ( found ) {
- ic->Erase(aSh);
- ic->AddOrRemoveCurrentObject(aSh, true);
- }
- } else {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( anIObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- // searchin for already displayed objects with the same shape
- AIS_ListOfInteractive aDisplayed;
- ic->DisplayedObjects(aDisplayed);
- AIS_ListIteratorOfListOfInteractive anIObjects(aDisplayed);
- Handle(AIS_Shape) anAISShape;
- for(;anIObjects.More();anIObjects.Next()) {
- anAISShape = Handle(AIS_Shape)::DownCast(anIObjects.Value());
- if (!anAISShape.IsNull()) {
- if (anAISShape->Shape().IsSame(Shape)) break;
- anAISShape.Nullify();
- }
- }
- if (!anAISShape.IsNull()) {
- if (ic->IsDisplayed(anAISShape)) ic->Erase(anAISShape);
- }
- }
- if (useSubItems) {
- anIter->Next();
- anAttr=SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- }
-// QAD_Viewer3d* v3d = GeomGUI->myActiveStudy->getActiveStudyFrame()->getViewerOCC();
-// Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
-// myContext->EraseSelected();
- }
-
- Sel->ClearIObjects();
- break;
- }
-
- case 9023 : // DISPLAY ONLY - OBJBROSER POPUP
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK )
- GeomGUI->OnVTKDisplayOnly();
- else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC )
- GeomGUI->OnDisplayOnly();
- break;
- }
-
- case 9024 : // OPEN - OBJBROSER POPUP
- {
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
- for(;It.More();It.Next()) {
- anIObject = It.Value();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( anIObject->getEntry() );
- SALOMEDS::AttributePersistentRef_var aPersist;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- // this SObject may be GEOM module root SObject
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- SALOMEDS::GenericAttribute_var anAttr;
- bool useSubItems = false;
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- if (subobj->FindAttribute(anAttr, "AttributePersistentRef")) {
- useSubItems = true;
- obj = subobj;
- }
- else anIter->Next();
- }
- obj->FindAttribute(anAttr, "AttributePersistentRef");
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- if (!obj->FindAttribute(anAttr, "AttributeIOR") &&
- obj->FindAttribute(anAttr, "AttributePersistentRef")) {
- // load
- Engines::Component_var comp = GeomGUI->myDesktop->getEngine("FactoryServer","GEOM");
- if (!CORBA::is_nil(comp)) {
- SALOMEDS::Driver_var driver = SALOMEDS::Driver::_narrow(comp);
-
-
- SALOMEDS::StudyBuilder_var aStudyBuilder = GeomGUI->myActiveStudy->getStudyDocument()->NewBuilder();
- aStudyBuilder->LoadWith(GeomGUI->myActiveStudy->getStudyDocument()->FindComponent("GEOM"),driver);
-
- } else {
- MESSAGE("Component is null");
- }
- }
- if (useSubItems) {
- anIter->Next();
- obj = anIter->Value();
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- break;
- }
-
- case 10000 : // SKETCH Segment
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchSegment();
- break;
- }
- case 10001 : // SKETCH Arc
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchArc();
- break;
- }
- case 10002 : // SKETCH Set Angle
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchSetAngle();
- break;
- }
- case 10003 : // SKETCH Set X
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchSetx();
- break;
- }
- case 10004 : // SKETCH Set Y
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchSety();
- break;
- }
- case 10006 : // SKETCH Delete
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchDelete();
- break;
- }
- case 10007 : // SKETCH End
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchEnd();
- break;
- }
- case 10008 : // SKETCH Close
- {
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- break;
- GeomGUI->OnSketchClose();
- break;
- }
- case 10010 : // SKETCH OptionsOnofflengthdimension
- {
- GeomGUI->OnSketchOptionsOnofflengthdimension();
- break;
- }
- case 10011 : // SKETCH OptionsOnoffangledimension
- {
- GeomGUI->OnSketchOptionsOnoffangledimension();
- break;
- }
- case 10012 : // SKETCH OptionsOnoffradiusdimension
- {
- GeomGUI->OnSketchOptionsOnoffradiusdimension();
- break;
- }
- case 10013 : // SKETCH OptionsOnoffxdimension
- {
- GeomGUI->OnSketchOptionsOnoffxdimension();
- break;
- }
- case 10014 : // SKETCH OptionsOnoffydimension
- {
- GeomGUI->OnSketchOptionsOnoffydimension();
- break;
- }
-
- default:
- {
- parent->putInfo( tr("GEOM_PRP_COMMAND").arg(theCommandID ) );
- break;
- }
- }
-
- return true ;
-}
-
-//=======================================================================
-// function : ConvertClickToPoint()
-// purpose : Returns the point clicked in 3D view
-//=======================================================================
-gp_Pnt GeometryGUI::ConvertClickToPoint( Standard_Real x,
- Standard_Real y,
- Handle(V3d_View) aView )
-{
- V3d_Coordinate XEye, YEye, ZEye, XAt, YAt, ZAt;
- aView->Eye(XEye, YEye, ZEye);
-
- aView->At(XAt, YAt, ZAt);
- gp_Pnt EyePoint(XEye, YEye, ZEye);
- gp_Pnt AtPoint(XAt, YAt, ZAt);
-
- gp_Vec EyeVector(EyePoint, AtPoint);
- gp_Dir EyeDir(EyeVector);
-
- gp_Pln PlaneOfTheView = gp_Pln(AtPoint,EyeDir);
- Standard_Real X, Y, Z;
- aView->Convert(x, y, X, Y, Z);
- gp_Pnt ConvertedPoint(X, Y, Z);
-
- gp_Pnt2d ConvertedPointOnPlane = ProjLib::Project(PlaneOfTheView, ConvertedPoint);
- gp_Pnt ResultPoint = ElSLib::Value(ConvertedPointOnPlane.X(),
- ConvertedPointOnPlane.Y(),
- PlaneOfTheView);
- return ResultPoint;
-}
-
-
-
-
-//==================================================================================
-// function : 0nMousePress()
-// purpose : [static] manage mouse events
-//==================================================================================
-bool GeometryGUI::OnMousePress(QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-{
- MESSAGE ( "GeometryGUI::OnMousePress")
- GeometryGUI::GetOrCreateGeometryGUI(parent);
-
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- return false;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
- OCCViewer_ViewPort* vp = ((OCCViewer_ViewFrame*)studyFrame->getRightFrame()->getViewFrame())->getViewPort();
-
- /* Get the clicked or selected point */
- gp_Pnt thePoint;
-
- if ( GeomGUI->myState == CURRENT_SKETCH) {
- GeomGUI->mySketcher.ValidateEdge();
- if (GeomGUI->mySketcher.GetmyEdgesNumber() == 1 ) {
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(313,&pp);
- pp->setItemEnabled( 313, true); // SKETCH CONTRAINTS
- }
- } else if( GeomGUI->myState == POINT_METHOD ) {
-
- GeomGUI->EraseSimulationShape() ;
- GeometryGUI_PointDlg *DialogPt = (GeometryGUI_PointDlg*)(GeomGUI->myActiveDialogBox) ;
-
- if ( DialogPt->UseLocalContext() ) {
- ic->InitSelected();
- if ( pe->state() == Qt::ShiftButton )
- v3d->getAISSelector()->shiftSelect(); /* Append selection */
- else
- v3d->getAISSelector()->select(); /* New selection */
-
- if ( ic->MoreSelected() ) {
- thePoint = BRep_Tool::Pnt( TopoDS::Vertex(ic->SelectedShape()) );
- }
- else
- thePoint = ConvertClickToPoint(pe->x(), pe->y(), ( (OCCViewer_ViewPort3d*)vp)->getView() );
- }
- else
- thePoint = ConvertClickToPoint(pe->x(), pe->y(), ( (OCCViewer_ViewPort3d*)vp)->getView() );
-
- if( DialogPt != 0 ) {
- DialogPt->PointIntoCoordinates(thePoint, true) ; /* display point */
- }
- else {
- // MESSAGE ("On Mouse Press : myActiveDialogBox is null" << endl) ;
- GeomGUI->myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- }
- }
-
- return false ;
-}
-
-
-//=======================================================================
-// function : OnMouseMove()
-// purpose : [static] manage mouse events
-//=======================================================================
-bool GeometryGUI::OnMouseMove (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-{
- GeometryGUI::GetOrCreateGeometryGUI(parent);
-
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
- return false;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
- OCCViewer_ViewPort* vp = ((OCCViewer_ViewFrame*)studyFrame->getRightFrame()->getViewFrame())->getViewPort();
-
- if ( GeomGUI->myState == CURRENT_SKETCH)
- GeomGUI->mySketcher.MakeCurrentEdge( pe->x(), pe->y(), ((OCCViewer_ViewPort3d*)vp)->getView() );
-
- return true;
-}
-
-
-//================================================================================
-// function : SetDisplayedObjectList()
-// purpose :
-//================================================================================
-void GeometryGUI::SetDisplayedObjectList()
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
- return;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- ListDisplayedObject.Clear();
-
- Handle (AIS_InteractiveContext) aContext = v3d->getAISContext();
- aContext->DisplayedObjects( ListDisplayedObject );
-}
-
-
-
-//=====================================================================================
-// function : OnDisplayAll()
-// purpose :
-//=====================================================================================
-void GeometryGUI::OnDisplayAll(bool onlyPreviousDisplayedObject)
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
- return;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
-
- myContext->Display(v3d->getTrihedron());
-
- if ( !onlyPreviousDisplayedObject ) {
- AIS_ListOfInteractive List1;
- myContext->ObjectsInCollector(List1);
- AIS_ListIteratorOfListOfInteractive ite1(List1);
- while (ite1.More()) {
- if (ite1.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite1.Value());
- if ( aSh->hasIO() ) {
- Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
- if ( v3d->isInViewer(GIO, true) ) {
- myContext->Display(aSh);
- }
- }
- }
- ite1.Next();
- }
- } else {
- AIS_ListIteratorOfListOfInteractive ite(ListDisplayedObject);
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- if ( aSh->hasIO() ) {
- Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
- if ( v3d->isInViewer(GIO,true) ) {
- myContext->Display(aSh);
- }
- }
- }
- ite.Next();
- }
- }
-}
-
-
-
-
-//=====================================================================================
-// function : OnVTKDisplayOnly()
-// purpose :
-//=====================================================================================
-void GeometryGUI::OnVTKDisplayOnly()
-{
-
- // Erase all not selected actors
-
- QApplication::setOverrideCursor( Qt::waitCursor );
-
- vtkRenderer* aren = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theActors = aren->GetActors();
- theActors->InitTraversal();
- vtkActor *ac = theActors->GetNextActor();
- while(!(ac==NULL)) {
- if ( ac->IsA("SALOME_Actor") ) {
- SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac );
- if(!anActor->isHighlighted()) anActor->VisibilityOff();
- }
- ac = theActors->GetNextActor();
- }
-
- // Display selection
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(GeomGUI->myActiveStudy->getActiveStudyFrame()->entry());
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
-
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
-
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- if(myRenderInter->isInViewer(IObject)) {
- myRenderInter->Display(IObject);
- }
- else {
- // Create new actor
- if ( !obj->_is_nil() ) {
- if ( !obj->FindAttribute(anAttr, "AttributeIOR"))
- break;
- // If selected object contains displayable subobjects, then do nothing
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- SALOMEDS::GenericAttribute_var aTmpAttr;
-
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- if (CORBA::is_nil(aShape)) continue;
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
-
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( GeomGUI->myActiveStudy );
- op->start();
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, obj);
- // commit transaction
- op->finish();
-
- vtkRenderer* theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- int themode = myRenderInter->GetDisplayMode();
- vtkActorCollection* theActors =
- GEOM_AssemblyBuilder::BuildActors(Shape,0,themode,Standard_True);
- theActors->InitTraversal();
- vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
- while(!(anActor==NULL)) {
- GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor );
- GActor->setIO( IObject );
- GActor->setName( IObject->getName() );
-
- theRenderer->AddActor(GActor);
- vtkRenderWindow *renWin
- = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer()->GetRenderWindow();
- renWin->Render();
- anActor = (vtkActor*)theActors->GetNextActor();
- }
- }
- }
- }
- }
- GeomGUI->myActiveStudy->updateObjBrowser( true );
- QApplication::restoreOverrideCursor();
-}
-
-
-
-//=====================================================================================
-// function : OnDisplayOnly()
-// purpose :
-//=====================================================================================
-void GeometryGUI::OnDisplayOnly()
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
- return;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListIteratorOfListOfInteractive ite(List);
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- if (!ic->IsSelected( aSh )) {
- ic->Erase( aSh, Standard_True, Standard_True );
- }
- }
- ite.Next();
- }
-
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
-
- SALOME_ListIteratorOfListIO It1( Sel->StoredIObjects() );
- for(;It1.More();It1.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It1.Value();
-
-
- SALOMEDS::SObject_var fatherSF =
- aStudy->FindObjectID(myActiveStudy->getActiveStudyFrame()->entry());
- if ( v3d->isInViewer( IObject, true ) ) {
- AIS_ListOfInteractive List1;
- ic->ObjectsInCollector(List1);
- AIS_ListIteratorOfListOfInteractive ite1(List1);
- while (ite1.More()) {
- if (ite1.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite1.Value());
- if ( aSh->hasIO() ) {
- Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
- if ( IObject->isSame( GIO ) ) {
- ic->Display(aSh);
- ic->AddOrRemoveCurrentObject(aSh, true);
- break;
- }
- }
- }
- ite1.Next();
- }
- } else {
- if ( IObject->hasEntry() ) {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if (obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
-
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( anIOR->Value() );
- if (CORBA::is_nil(aShape)) continue;
- TopoDS_Shape Shape = ShapeReader.GetShape(myComponentGeom, aShape);
-
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, obj);
- // commit transaction
- op->finish();
- }
-
- Handle(GEOM_AISShape) aSh = new GEOM_AISShape(Shape, aName->Value());
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(), Fatherior,"GEOM");
-
- IO->setEntry(obj->GetID());
- aSh->setIO( IO );
- aSh->setName( aName->Value() );
- ic->Display (aSh);
- ic->AddOrRemoveCurrentObject(aSh, true);
- }
- }
- }
- }
- }
-}
-
-
-//===============================================================================
-// function : OnEditDelete()
-// purpose :
-//===============================================================================
-void GeometryGUI::OnEditDelete()
-{
- if ( QAD_MessageBox::warn2
- ( QAD_Application::getDesktop(),
- tr ("GEOM_WRN_WARNING"),
- tr ("GEOM_REALLY_DELETE"),
- tr ("GEOM_BUT_YES"), tr ("GEOM_BUT_NO"), 1, 0, 0) != 1 )
- return;
-
- int nbSf = myActiveStudy->getStudyFramesCount();
-
- Standard_Boolean found;
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- for(;It.More();It.Next()) {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- if ( IObject->hasEntry() ) {
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var SO = aStudy->FindObjectID( IObject->getEntry() );
-
- /* Erase child graphical objects */
- SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator(SO);
- for (; it->More();it->Next()) {
- SALOMEDS::SObject_var CSO= it->Value();
- if (CSO->FindAttribute(anAttr, "AttributeIOR") ) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- /* Delete child(s) shape in Client : */
- const TCollection_AsciiString ASCior(anIOR->Value()) ;
- ShapeReader.RemoveShapeFromBuffer( ASCior ) ;
-
- for ( int i = 0; i < nbSf; i++ ) {
- QAD_StudyFrame* sf = myActiveStudy->getStudyFrame(i);
- if ( sf->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
- Handle(GEOM_AISShape) Result = GeomGUI->ConvertIORinGEOMAISShape( anIOR->Value(), found );
- if ( found )
- myContext->Erase( Result, true, false );
- } else if ( sf->getTypeView() == VIEW_VTK ) {
- //vtkRenderer* Renderer = ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRenderer();
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRWInteractor();
- GEOM_Actor* ac = GeomGUI->ConvertIORinGEOMActor( anIOR->Value(), found );
- if ( found ) {
- //Renderer->RemoveActor(ac);
- if ( ac->hasIO() )
- myRenderInter->Remove( ac->getIO() );
- }
- }
- }
- }
- }
-
- /* Erase main graphical object */
- for ( int i = 0; i < nbSf; i++ ) {
- QAD_StudyFrame* sf = myActiveStudy->getStudyFrame(i);
- if ( sf->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
- Handle(GEOM_AISShape) Result = GeomGUI->ConvertIOinGEOMAISShape( IObject, found );
- if ( found )
- myContext->Erase( Result, true, false );
- } else if ( sf->getTypeView() == VIEW_VTK ) {
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRWInteractor();
- myRenderInter->Remove( IObject );
- }
- }
-
- /* Delete main shape in Client : */
- if (SO->FindAttribute(anAttr, "AttributeIOR") ) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- const TCollection_AsciiString ASCIor(anIOR->Value()) ;
- ShapeReader.RemoveShapeFromBuffer( ASCIor ) ;
- }
-
- /* Erase objects in Study */
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
- if ( !obj->_is_nil() ) {
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
- aStudyBuilder->RemoveObject(obj);
- op->finish();
- }
-
- } /* IObject->hasEntry() */
- } /* more/next */
-
- /* Clear any previous selection */
- Sel->ClearIObjects() ;
- myActiveStudy->updateObjBrowser();
-}
-
-
-//==============================================================================
-// function : OnEditCopy()
-// purpose :
-//==============================================================================
-void GeometryGUI::OnEditCopy()
-{
- SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
- GEOM::GEOM_Gen::ListOfIOR_var listIOR = new GEOM::GEOM_Gen::ListOfIOR;
-
- const SALOME_ListIO& List = Sel->StoredIObjects();
-
- GeomGUI->ConvertListOfIOInListOfIOR( List, listIOR);
-
- Sel->ClearIObjects();
-
- for (unsigned int ind = 0; ind < listIOR->length();ind++) {
- GEOM::GEOM_Shape_var aShapeInit = myComponentGeom->GetIORFromString(listIOR[ind]);
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeCopy(aShapeInit) ;
- result->NameType( aShapeInit->NameType() );
- this->Display(result);
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- }
-
- myDesktop->putInfo(tr("GEOM_PRP_READY"));
-}
-
-
-
-//=====================================================================================
-// function : OnKeyPress()
-// purpose : [static]
-//=====================================================================================
-bool GeometryGUI::OnKeyPress (QKeyEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-{
- GeometryGUI::GetOrCreateGeometryGUI(parent);
-
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
- return false;
-
- return true ;
-}
-
-
-
-//=====================================================================================
-// function : DisplaySimulationShape()
-// purpose : Displays 'this->mySimulationShape' a pure graphical shape from a TopoDS_Shape
-//=====================================================================================
-void GeometryGUI::DisplaySimulationShape(const TopoDS_Shape& S)
-{
- if( S.IsNull() )
- return ;
-
- //NRI DEBUG : 14/02/2002
- if ( myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC )
- return ;
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- try {
- /* erase any previous */
- ic->Erase( this->mySimulationShape, Standard_True, Standard_False );
- ic->ClearPrs( this->mySimulationShape );
- this->mySimulationShape = new AIS_Shape( TopoDS_Shape() ) ;
- this->mySimulationShape->Set( S ) ;
- this->mySimulationShape->SetColor(Quantity_NOC_VIOLET) ;
- ic->Deactivate( this->mySimulationShape );
- ic->Display( this->mySimulationShape, Standard_False );
- ic->UpdateCurrentViewer();
- }
- catch(Standard_Failure) {
- MESSAGE( "Exception catched in GeometryGUI::DisplaySimulationShape " ) ;
- }
- this->mySimulationShape->UnsetColor() ;
- return ;
-}
-
-
-
-//==================================================================================
-// function : EraseSimulationShape()
-// purpose : Clears the display of 'mySimulationShape' a pure graphical shape
-//==================================================================================
-void GeometryGUI::EraseSimulationShape()
-{
- int count = myActiveStudy->getStudyFramesCount();
- for ( int i = 0; i < count; i++ ) {
- if (myActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getStudyFrame(i)->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
- ic->Erase( this->mySimulationShape, Standard_True, Standard_False );
- ic->ClearPrs( this->mySimulationShape );
- ic->UpdateCurrentViewer();
-
- } else if (myActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_VTK ) { // VTK
- }
- }
- // MESSAGE ( " GeometryGUI::EraseSimulationShape done. " )
-}
-
-
-
-//=====================================================================================
-// function : Import
-// purpose : BRep, Iges, Step
-//=====================================================================================
-bool GeometryGUI::Import( )
-{
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-
- GEOM::GEOM_Shape_var aShape;
- QString file;
- QStringList filtersList ;
-
- switch ( GeomGUI->myState )
- {
- case 111 : // Import BREP
- {
- filtersList.append( tr("GEOM_MEN_IMPORT_BREP") );
- filtersList.append( tr("GEOM_MEN_ALL_FILES") ) ;
-
- file = QAD_FileDlg::getFileName(myDesktop,
- "",
- filtersList,
- tr("GEOM_MEN_IMPORT"),
- true);
- if ( !file.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- try {
- aShape = myComponentGeom->ImportBREP( file.latin1() );
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- }
- break;
- }
- case 112 : // Import IGES
- {
- filtersList.append( tr("GEOM_MEN_IMPORT_IGES") ) ;
- filtersList.append( tr("GEOM_MEN_ALL_FILES") ) ;
-
- file = QAD_FileDlg::getFileName(myDesktop,
- "",
- filtersList,
- tr("GEOM_MEN_IMPORT"),
- true);
- if ( !file.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- try {
- aShape = myComponentGeom->ImportIGES( file.latin1() );
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- }
- break;
- }
- case 113 : // Import STEP
- {
- filtersList.append( tr("GEOM_MEN_IMPORT_STEP") ) ;
- filtersList.append( tr("GEOM_MEN_ALL_FILES") ) ;
-
- file = QAD_FileDlg::getFileName(myDesktop,
- "",
- filtersList,
- tr("GEOM_MEN_IMPORT"),
- true);
- if ( !file.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- try {
- aShape = myComponentGeom->ImportSTEP( file.latin1() );
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- }
- break;
- }
- }
-
- if ( !file.isEmpty() ) {
- myDesktop->putInfo( tr("GEOM_PRP_LOADING").arg(QAD_Tools::getFileNameFromPath( file )) );
-
- SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
- SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID( myActiveStudy->getActiveStudyFrame()->entry());
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributePixMap_var aPixmap;
- int aLocked = false;
- if (father->_is_nil()) {
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
- aLocked = aStudy->GetProperties()->IsLocked();
- if (aLocked) aStudy->GetProperties()->SetLocked(false);
- father = aStudyBuilder->NewComponent("GEOM");
- anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // aName->SetValue( tr("GEOM_MEN_COMPONENT") );
- aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "GEOM" ) );
- anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- aPixmap->SetPixMap( "ICON_OBJBROWSER_Geometry" );
- if (aLocked) aStudy->GetProperties()->SetLocked(true);
- op->finish();
- }
-// if (aLocked) return false;
- aStudyBuilder->DefineComponentInstance( father, myComponentGeom );
- father->ComponentIOR( Fatherior );
-
- QString nameShape = QAD_Tools::getFileNameFromPath(file,false) + QString("_%1").arg(this->myNbGeom++);
-
- if ( Display ( aShape, strdup(nameShape.latin1())) ) {
- myActiveStudy->setMessage( tr("GEOM_INF_LOADED").arg(QAD_Tools::getFileNameFromPath( file )) );
- myDesktop->putInfo( tr("GEOM_PRP_READY"));
- }
- }
- QApplication::restoreOverrideCursor();
- return true ;
-}
-
-
-//=====================================================================================
-// function : Export
-// purpose : BRep, Iges, Step
-//=====================================================================================
-bool GeometryGUI::Export( )
-{
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-
- GEOM::GEOM_Shape_var aShape;
-
- static QString filters[] = { tr("GEOM_MEN_IMPORT_BREP"),
- tr("GEOM_MEN_IMPORT_IGES"),
- tr("GEOM_MEN_IMPORT_STEP") };
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( this->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
-
- switch ( GeomGUI->myState )
- {
- case 121 :
- {
- for(;It.More();It.Next()) {
- QApplication::restoreOverrideCursor();
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- Standard_Boolean found;
- GEOM::GEOM_Shape_var aShape = GeomGUI->ConvertIOinGEOMShape(IObject, found);
- // Handle(GEOM_AISShape) Shape = ConvertIOinGEOMAISShape(IObject, found, true);
- if ( found ) {
- QString file = QAD_FileDlg::getFileName(myDesktop,
- QString( IObject->getName() ) + ".brep",
- tr("GEOM_MEN_IMPORT_BREP"),
- tr("GEOM_MEN_EXPORT"),
- false);
- if ( !file.isEmpty() && !aShape->_is_nil() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- // Standard_Boolean result = BRepTools::Write(Shape->Shape(), strdup(file.latin1()) );
- try {
- GeomGUI->myComponentGeom->ExportBREP(strdup( file.latin1()), aShape);
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- }
- }
- }
- break;
- }
- case 122 :
- {
- for(;It.More();It.Next()) {
- QApplication::restoreOverrideCursor();
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- Standard_Boolean found;
- GEOM::GEOM_Shape_var aShape = GeomGUI->ConvertIOinGEOMShape(IObject, found);
- // Handle(GEOM_AISShape) Shape = ConvertIOinGEOMAISShape(IObject, found, true);
- if ( found ) {
- QString file = QAD_FileDlg::getFileName(myDesktop,
- QString( IObject->getName() ) + ".igs",
- tr("GEOM_MEN_IMPORT_IGES"),
- tr("GEOM_MEN_EXPORT"),
- false);
- if ( !file.isEmpty() && !aShape->_is_nil() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- try {
- GeomGUI->myComponentGeom->ExportIGES(strdup( file.latin1()), aShape);
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-// //VRV: OCC 4.0 migration
-// IGESControl_Controller::Init();
-// IGESControl_Writer ICW (Interface_Static::CVal("XSTEP.iges.unit"),
-// Interface_Static::IVal("XSTEP.iges.writebrep.mode"));
-// //VRV: OCC 4.0 migration
-
-// ICW.AddShape (Shape->Shape());
-// ICW.ComputeModel();
-// Standard_Boolean result = ICW.Write( strdup(file.latin1()) );
- }
- }
- }
- break;
- }
-
- case 123 :
- {
-// bool test = false ;
-// IFSelect_ReturnStatus status ;
-// //VRV: OCC 4.0 migration
-// STEPControl_Writer aWriter;
-// //VRV: OCC 4.0 migration
- QString file;
-
- for( ; It.More(); It.Next() ) {
-// GEOM::GEOM_Shape_var aShape = GeomGUI->ConvertIOinGEOMShape(IObject, found);
- QApplication::restoreOverrideCursor();
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- Standard_Boolean found;
- GEOM::GEOM_Shape_var aShape = GeomGUI->ConvertIOinGEOMShape(IObject, found);
- // Handle(GEOM_AISShape) Shape = ConvertIOinGEOMAISShape(IObject, found, true);
- if ( found ) {
- file = QAD_FileDlg::getFileName(myDesktop,
- QString( IObject->getName() ) + ".stp",
- tr("GEOM_MEN_IMPORT_STEP"),
- tr("GEOM_MEN_EXPORT"),
- false);
- if ( !file.isEmpty() && !aShape->_is_nil() ) {
-
- QApplication::setOverrideCursor( Qt::waitCursor ) ;
- try {
- GeomGUI->myComponentGeom->ExportSTEP(strdup( file.latin1()), aShape);
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-// //VRV: OCC 4.0 migration
-// status = aWriter.Transfer( Shape->Shape(), STEPControl_ManifoldSolidBrep ) ;
-// //VRV: OCC 4.0 migration
-// test = true ;
-// if ( status != IFSelect_RetDone ) {
-// QApplication::restoreOverrideCursor() ;
-// return false ;
-// }
- }
- }
- }
-// if(test) {
-// status = aWriter.Write( strdup(file.latin1()) ) ;
-// QApplication::restoreOverrideCursor() ;
-// return status ;
-// }
- break;
- }
-
- }
- QApplication::restoreOverrideCursor() ;
-}
-
-
-//=====================================================================================
-// function : Display()
-// purpose : Displays a CORBA shape
-//=====================================================================================
-bool GeometryGUI::Display( GEOM::GEOM_Shape_ptr aShape,
- Standard_CString name)
-{
- // MESSAGE ( "GeometryGUI::Display init ")
- Handle(GEOM_InteractiveObject) IO;
- SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
- Sel->ClearIObjects();
-
- if( aShape->_is_nil() ) {
- QAD_MessageBox::warn1 ( QAD_Application::getDesktop(),
- tr ("GEOM_WRN_WARNING"),
- tr ("GEOM_PRP_ABORT"),
- tr ("GEOM_BUT_OK") );
- return false ;
- }
-
- TopoDS_Shape shape = ShapeReader.GetShape(myComponentGeom, aShape);
-
- if ( shape.IsNull() )
- return false;
-
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributePixMap_var aPixmap;
-
- SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
- int aLocked = false;
- if (father->_is_nil()) {
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
- aLocked = aStudy->GetProperties()->IsLocked();
- if (aLocked) aStudy->GetProperties()->SetLocked(false);
- father = aStudyBuilder->NewComponent("GEOM");
- anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // aName->SetValue( tr("GEOM_MEN_COMPONENT") );
- aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "GEOM" ) );
- anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- aPixmap->SetPixMap( "ICON_OBJBROWSER_Geometry" );
- myActiveStudy->updateObjBrowser();
- if (aLocked) aStudy->GetProperties()->SetLocked(true);
- op->finish();
- }
-// if (aLocked) return false;
-
- aStudyBuilder->DefineComponentInstance( father, myComponentGeom );
- father->ComponentIOR( Fatherior );
-
- TCollection_AsciiString nameG("");
- Standard_CString Type;
- if ( TCollection_AsciiString(name).IsEqual(Standard_CString("")) ) {
- if ( TCollection_AsciiString(aShape->NameType()).IsEqual(Standard_CString("")) ) {
- Standard_CString type;
- GetShapeTypeString(shape,type);
- aShape->NameType( type );
- nameG += TCollection_AsciiString( type ) + TCollection_AsciiString("_") +
- TCollection_AsciiString( GeomGUI->myNbGeom++ ) + TCollection_AsciiString("\0");
- } else
- nameG += TCollection_AsciiString( aShape->NameType()) + TCollection_AsciiString("_") +
- TCollection_AsciiString( GeomGUI->myNbGeom++ ) + TCollection_AsciiString("\0");
- } else
- nameG = TCollection_AsciiString(name);
-
- // VTK
- if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- int themode = myRenderInter->GetDisplayMode();
-
- vtkActorCollection* theActors =
- GEOM_AssemblyBuilder::BuildActors(shape,0,themode,Standard_True);
- theActors->InitTraversal();
- vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
-
- IO = new GEOM_InteractiveObject(aShape->Name(),
- Fatherior,
- "GEOM");
- while(!(anActor==NULL)) {
- GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor );
- GActor->setIO( IO );
- GActor->setName( nameG.ToCString() );
-
- theRenderer->AddActor(GActor);
- anActor = (vtkActor*)theActors->GetNextActor();
- }
- }
- // OCC
- else if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
- Handle(GEOM_AISShape) theResult = new GEOM_AISShape( shape, nameG.ToCString() );
- theResult->SetShadingColor( myShadingColor );
- IO = new GEOM_InteractiveObject(aShape->Name(),
- Fatherior,
- "GEOM");
- theResult->setIO( IO );
- theResult->setName( nameG.ToCString() );
-
- /* Precaution : close any local context to permit the display */
- if ( ic->HasOpenedContext() ) {
- ic->CloseAllContexts();
- }
-
-// if(isInfinite)
-// theResult->SetInfiniteState() ;
-
- ic->Display(theResult);
- }
-
- Sel->AddIObject( IO, false );
- myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->Repaint();
- if ( Settings_AddInStudy )
- GeomGUI->AddInStudy( false, IO );
-
- return true;
-}
-
-
-//=====================================================================================
-// function : AddInStudy()
-// purpose : anIOShape or a selected shape
-//=====================================================================================
-bool GeometryGUI::AddInStudy( bool selection,
- const Handle(SALOME_InteractiveObject)& anIO)
-{
- SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
- if ( !( !Settings_AddInStudy || selection ) ) {
- Sel->ClearIObjects();
- }
-
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributePixMap_var aPixmap;
- SALOMEDS::AttributeIOR_var anIOR;
- SALOMEDS::AttributeSelectable_var aSelAttr;
-
- SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
- int aLocked = false;
- if (father->_is_nil()) {
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
- aLocked = aStudy->GetProperties()->IsLocked();
- if (aLocked) aStudy->GetProperties()->SetLocked(false);
- father = aStudyBuilder->NewComponent("GEOM");
- anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // aName->SetValue( tr("GEOM_MEN_COMPONENT") );
- aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "GEOM" ) );
- anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- aPixmap->SetPixMap( "ICON_OBJBROWSER_Geometry" );
- if (aLocked) aStudy->GetProperties()->SetLocked(true);
- op->finish();
- }
-// if (aLocked) return false;
-
- aStudyBuilder->DefineComponentInstance( father, myComponentGeom );
- father->ComponentIOR( Fatherior );
-
- SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(myActiveStudy->getActiveStudyFrame()->entry());
-
- Handle(GEOM_AISShape) GAISShape;
- GEOM_Actor* GActor;
- Handle(GEOM_InteractiveObject) GIO;
- bool found = false;
-
- // VTK
- if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- vtkRenderer *Renderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
-
- vtkActorCollection* theActors = Renderer->GetActors();
- theActors->InitTraversal();
- vtkActor *ac = theActors->GetNextActor();
- while(!(ac==NULL)) {
- if ( ac->IsA("GEOM_Actor") ) {
- GEOM_Actor* anActor = GEOM_Actor::SafeDownCast( ac );
- if ( anActor->hasIO() ) {
- Handle(SALOME_InteractiveObject) IO = anActor->getIO();
- if ( IO->IsKind(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
- GIO = Handle(GEOM_InteractiveObject)::DownCast( IO );
- if ( anIO->isSame( GIO ) ) {
- found = true;
- GActor = anActor;
- break;
- }
- }
- }
- }
- ac = theActors->GetNextActor();
- }
-
- if ( !found )
- return false;
- }
- // OCC
- else if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- AIS_ListOfInteractive List;
- ic->DisplayedObjects(List);
- AIS_ListIteratorOfListOfInteractive ite(List);
- while (ite.More()) {
- if (ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
- if ( aSh->hasIO() ) {
- Handle(SALOME_InteractiveObject) IO = aSh->getIO();
- if ( IO->IsKind(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
- GIO = Handle(GEOM_InteractiveObject)::DownCast( IO );
- if ( anIO->isSame( GIO ) ) {
- found = true;
- GAISShape = aSh;
- break;
- }
- }
- }
- }
- ite.Next();
- }
-
- if ( !found )
- return false;
- }
-
- if ( !Settings_AddInStudy || selection ) {
- QString Name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), anIO->getName() );
- if ( !Name.isEmpty() ) {
- // VTK
- if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- GActor->setName( strdup(Name.latin1()) );
- }
- // OCC
- else if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- GAISShape->setName( strdup(Name.latin1()) );
- }
- } else {
- return false;
- }
- }
-
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( myActiveStudy );
- op->start();
-
- SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(father);
-
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( GIO->getIOR() );
-
- /* For the shape inserted into the study we set its field 'studyshapeid' */
- /* so the shape will contain its corresponding entry in the study Ocaf doc. */
- aShape->StudyShapeId(newObj->GetID()) ;
-
- GIO->setEntry(newObj->GetID());
-
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- anIOR->SetValue(aShape->Name());
-
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
-
- anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- if ( aShape->ShapeType() == GEOM::COMPOUND ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" );
- } else if ( aShape->ShapeType() == GEOM::COMPSOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPSOLID" );
- } else if ( aShape->ShapeType() == GEOM::SOLID ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SOLID" );
- } else if ( aShape->ShapeType() == GEOM::SHELL ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_SHELL" );
- } else if ( aShape->ShapeType() == GEOM::FACE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_FACE" );
- } else if ( aShape->ShapeType() == GEOM::WIRE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_WIRE" );
- } else if ( aShape->ShapeType() == GEOM::EDGE ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_EDGE" );
- } else if ( aShape->ShapeType() == GEOM::VERTEX ) {
- aPixmap->SetPixMap( "ICON_OBJBROWSER_VERTEX" );
- }
-
- // VTK
- if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- GActor->setIO( GIO );
- aName->SetValue(GActor->getName());
- }
- // OCC
- else if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- GAISShape->setIO( GIO );
- aName->SetValue(GAISShape->getName());
- }
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1,newObj);
-
- GEOM::GEOM_Gen::ListOfIOR_var listIOR = new GEOM::GEOM_Gen::ListOfIOR;
- listIOR = myComponentGeom->GetReferencedObjects(aShape);
-
- if (listIOR->length()>0) {
- SALOMEDS::SObject_var Arguments = aStudyBuilder->NewObject(newObj);
- anAttr = aStudyBuilder->FindOrCreateAttribute(Arguments, "AttributeName");
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- aName->SetValue(tr("GEOM_ARGUMENTS"));
- anAttr = aStudyBuilder->FindOrCreateAttribute(Arguments, "AttributeSelectable");
- aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
- aSelAttr->SetSelectable(false);
-
- bool ObjectReferenced = false;
- for (unsigned int ind = 0; ind < listIOR->length();ind++) {
- SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR(listIOR[ind]);
-
- if ( !theObj->_is_nil() ) {
- SALOMEDS::SObject_var RefObject = aStudyBuilder->NewObject(Arguments);
- aStudyBuilder->Addreference(RefObject, theObj);
- ObjectReferenced = true;
- }
- }
-
- if ( !ObjectReferenced )
- aStudyBuilder->RemoveObject(Arguments);
- }
-
- op->finish();
-
-
- if ( !Settings_AddInStudy || selection ) {
- myActiveStudy->updateObjBrowser();
- } else {
- myActiveStudy->updateObjBrowser(false);
- Sel->AddIObject( GIO );
- }
-
- // MESSAGE ( " highlihght done" )
- return true;
-
-}
-
-
-//=====================================================================================
-// function : GetShapeFromIOR()
-// purpose : exist also as static method !
-//=====================================================================================
-TopoDS_Shape GeometryGUI::GetShapeFromIOR( QString IOR )
-{
- TopoDS_Shape result;
- if( IOR.stripWhiteSpace().isEmpty() )
- return result;
- ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
- CORBA::ORB_var& _orb = init.orb() ;
- CORBA::Object_var obj = _orb->string_to_object( (char*)(IOR.latin1()) );
- if ( CORBA::is_nil( obj ) )
- return result;
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( IOR );
- if (!aShape->_is_nil()) {
- result = ShapeReader.GetShape( myComponentGeom, aShape );
- }
- return result;
-}
-
-
-//=====================================================================================
-// function : SetSettings()
-// purpose : [static]
-//=====================================================================================
-bool GeometryGUI::SetSettings( QAD_Desktop* parent )
-{
- /* Create or retrieve an object GeomGUI */
- GeometryGUI::GetOrCreateGeometryGUI(parent);
-
- //DCQ parent->menuBar()->setItemEnabled( 504, false); // CORRECTING
- //DCQ parent->menuBar()->setItemEnabled( 6062, false); // RADIUS
- //VSR parent->menuBar()->setItemEnabled( 701, false); // AUTOMATIC COPY
- parent->menuBar()->setItemEnabled( 313, false); // SKETCH CONTRAINTS
- parent->menuBar()->setItemEnabled( 3131, false); // SKETCH SET PLAN
-
- /* Shading Color */
- QString SCr = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorRed");
- QString SCg = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorGreen");
- QString SCb = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorBlue");
- if( !SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty() )
- GeomGUI->myShadingColor = Quantity_Color ( SCr.toInt()/255., SCg.toInt()/255., SCb.toInt()/255.,
- Quantity_TOC_RGB );
-
- /* Wireframe or Shading */
- int DisplayMode = 0;
- if ( parent->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)parent->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
- DisplayMode = ic->DisplayMode();
- } else if ( parent->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)parent->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
- DisplayMode = myRenderInter->GetDisplayMode();
- }
-
- if ( DisplayMode == 1 )
- parent->menuBar()->changeItem(6021, tr("GEOM_MEN_WIREFRAME") );
- else
- parent->menuBar()->changeItem(6021, tr("GEOM_MEN_SHADING") );
-
- /* Copy */
-// QString Copy = QAD_CONFIG->getSetting("Geometry:SettingsCopy");
-// if ( !Copy.isEmpty() ) {
-// Settings_Copy = Copy.toInt();
-// QMenuData* pp;
-// parent->menuBar()->findItem(701,&pp);
-// pp->setItemChecked(701, Settings_Copy);
-// }
- QMenuData* pp;
- if ( parent->menuBar()->findItem(701,&pp) )
- pp->removeItem(701);
-
- /* Add in Study */
- QString AddInStudy = QAD_CONFIG->getSetting("Geometry:SettingsAddInStudy");
- if ( !AddInStudy.isEmpty() )
- Settings_AddInStudy = AddInStudy.toInt();
- else
- Settings_AddInStudy = 1;
- parent->menuBar()->findItem(702,&pp);
- pp->setItemChecked(702, Settings_AddInStudy);
-
- /* step value */
- QString S = QAD_CONFIG->getSetting( "Geometry:SettingsGeomStep" );
- if( S.isEmpty() )
- QAD_CONFIG->addSetting( "Geometry:SettingsGeomStep", "100" );
-
- /* isos */
- QAD_Study* ActiveStudy = parent->getActiveStudy();
- int count = ActiveStudy->getStudyFramesCount();
-
- bool ViewOCC = false;
- for ( int i = 0; i < count; i++ ) {
- if ( ActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC ) {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getStudyFrame(i)->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- QString IsoU = QAD_CONFIG->getSetting("Geometry:SettingsIsoU");
- QString IsoV = QAD_CONFIG->getSetting("Geometry:SettingsIsoV");
- if ( !IsoU.isEmpty() )
- ic->DefaultDrawer()->UIsoAspect()->SetNumber(IsoU.toInt());
- if ( !IsoV.isEmpty() )
- ic->DefaultDrawer()->VIsoAspect()->SetNumber(IsoV.toInt());
-
- ViewOCC = true;
- }
- }
-
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
-
- Mb->setItemEnabled( 312, ViewOCC); //Sketch
- Mb->setItemEnabled( 309, ViewOCC); //SuppressFace
- Mb->setItemEnabled( 314, ViewOCC); //SuppressHole
-
- Mb->setItemEnabled( 703, ViewOCC);// ShadingColor Settings
- Mb->setItemEnabled( 704, ViewOCC);// Isos Settings
-
- return true;
-}
-
-
-//=====================================================================================
-// function : DefinePopup()
-// purpose : [static]
-//=====================================================================================
-void GeometryGUI::DefinePopup( QString & theContext, QString & theParent, QString & theObject )
-{
- /* Create or retrieve an object GeomGUI */
- GeometryGUI::GetOrCreateGeometryGUI(QAD_Application::getDesktop());
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
-
- theObject = "";
- if ( Sel->IObjectCount() == 1 )
- {
- Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
- if (IO->hasEntry())
- {
- SALOMEDS::SObject_var sobj = GeomGUI->myActiveStudy->getStudyDocument()->FindObjectID(IO->getEntry());
- if (!sobj->_is_nil())
- {
- SALOMEDS::SComponent_var scomp = sobj->GetFatherComponent();
- if (strcmp(scomp->GetID(), IO->getEntry()) == 0)
- {
- // component is selected
- theObject = "Component";
- }
- }
- }
- }
-
- if ( ( theParent.compare("Viewer")==0 ) )
- {
- if ( GeomGUI->myState == CURRENT_SKETCH )
- theContext = "Sketch";
- else
- {
- if ( Sel->IObjectCount() > 0 )
- theContext = "";
- else
- theContext = "NothingSelected";
- }
- }
- else
- theContext = "";
-
-}
-
-//=====================================================================================
-// function : CustomPopup()
-// purpose : [static]
-//=====================================================================================
-bool GeometryGUI::CustomPopup( QAD_Desktop* parent,
- QPopupMenu* popup,
- const QString& theContext,
- const QString& theParent,
- const QString& theObject )
-{
- /* Create or retrieve an object GeomGUI */
- GeometryGUI::GetOrCreateGeometryGUI(parent);
-
- /* Deactivate any non modal dialog box to get the neutral point */
- GeomGUI->EmitSignalDeactivateDialog() ;
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
- int nbSel = Sel->IObjectCount();
-
- if ( (nbSel == 0) && ( theContext.compare("Sketch")!=0 ) )
- return false;
-
-
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC)
- {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->
- getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
- if ( theParent.compare("Viewer")==0 )
- {
- if ( theContext.compare("Sketch")==0 )
- {
- SketchStatus myCS = GeomGUI->mySketcher.GetCurrentStatus();
- popup->setCheckable(TRUE);
- if (myCS==SEGMENT)
- {
- popup->setItemChecked(10000,true);
- popup->setItemChecked(10001,false);
- }
- else if (myCS==ARC_CHORD)
- {
- popup->setItemChecked(10000,false);
- popup->setItemChecked(10001,true);
- }
-
- return true;
- }
- else
- if (theObject.compare("Component") == 0)
- {
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- return true;
- }
- else
- {
- QFont f = QApplication::font();
- f.setBold( TRUE );
- if (nbSel==1)
- {
- Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
- popup->removeItem(QAD_TopLabel_Popup_ID);
- popup->insertItem( new CustomItem ( QString(IObject->getName()), f ), QAD_TopLabel_Popup_ID, 0 );
- if ( IObject->hasEntry() )
- popup->setItemEnabled( 801, false );
- else
- popup->setItemEnabled( 801, true );
-
- if (IObject->IsKind(STANDARD_TYPE(GEOM_InteractiveObject)))
- {
- Standard_Boolean found;
- Handle(GEOM_AISShape) Result = GeomGUI->ConvertIOinGEOMAISShape(IObject, found, true);
-
- if ( found )
- {
- if ( Result->DisplayMode() == 1 )
- popup->changeItem(8021, tr("GEOM_MEN_WIREFRAME") );
- else
- popup->changeItem(8021, tr("GEOM_MEN_SHADING") );
- }
- }
-
- if ( !(v3d->isInViewer( IObject ) && v3d->isVisible( IObject )) )
- popup->removeItem(QAD_Erase_Popup_ID);
- else
- popup->removeItem(QAD_Display_Popup_ID);
-
- }
- else
- {
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItem(QAD_TopLabel_Popup_ID);
- popup->insertItem( new CustomItem ( tr("GEOM_MEN_POPUP_NAME").arg(nbSel), f ),
- QAD_TopLabel_Popup_ID, 0 );
- popup->setItemEnabled( 801, false );
- }
- }
- return true;
- }
- else
- if ( theParent.compare("ObjectBrowser")==0 )
- {
- popup->removeItem(QAD_TopLabel_Popup_ID);
- int id = popup->idAt(0); // separator
- if (id < 0) popup->removeItem(id);
-
- // checking for GEOM label in the selected list
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
-
- bool useSubItems = false;
- bool needOpen = false;
- bool needDisplay = false;
- bool needErase = false;
- SALOMEDS::GenericAttribute_var aTmpAttr;
- for(;It.More();It.Next())
- {
- anIObject = It.Value();
- if (!anIObject->hasEntry())
- continue;
-
- if (v3d->isInViewer(anIObject) && v3d->isVisible(anIObject))
- needErase = true;
- else
- needDisplay = true;
- SALOMEDS::SObject_var obj =
- GeomGUI->myActiveStudy->getStudyDocument()->FindObjectID( anIObject->getEntry() );
- if (!obj->_is_nil())
- {
- GEOM::GEOM_Shape_var aShape;
- if (obj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- char *str = SALOMEDS::AttributeIOR::_narrow(aTmpAttr)->Value();
- if (str && strlen(str))
- aShape = GeomGUI->myComponentGeom-> GetIORFromString(str);
- }
- else
- if (obj->FindAttribute(aTmpAttr, "AttributePersistentRef"))
- needOpen = true;
- if (aShape->_is_nil())
- {
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->
- getStudyDocument()->NewChildIterator(obj);
- while (anIter->More())
- {
- SALOMEDS::SObject_var subobj = anIter->Value();
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR"))
- {
- useSubItems = true;
- needErase = true;
- needDisplay = true;
- }
- else
- if (subobj->FindAttribute(aTmpAttr, "AttributePersistentRef"))
- {
- needOpen = true;
- useSubItems = true;
- }
- anIter->Next();
- }
- }
- }
- }
- // remove useless popup items
- if (nbSel != 1) popup->removeItem(901); // rename
- if (useSubItems) popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
- if (!needOpen)
- {
- int index = popup->indexOf(9024);
- popup->removeItem(9024); // open
- popup->removeItemAt(index); // separator under Open
-
- if (!needDisplay) popup->removeItem(QAD_Display_Popup_ID);
- if (!needErase) popup->removeItem(QAD_Erase_Popup_ID);
- if (!needDisplay && !needErase)
- {
- int id = popup->idAt(popup->count()-1); // last item
- popup->removeItem(id); // separator
- }
- }
- else
- {
- popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_Erase_Popup_ID);
- if (nbSel!=1)
- {
- int id = popup->idAt(popup->count()-1); // last item
- popup->removeItem(id); // separator
- }
- }
- return true;
- }
- // MESSAGE ( " CUSTOM POPUP VIEWER OCC done. ")
- }
- else
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK)
- {
- // MESSAGE ( " CUSTOM POPUP VIEWER VTK ")
- if ( ( theParent.compare("Viewer")==0 ) )
- {
-
- popup->setItemEnabled( 8033, false );
- if (theObject.compare("Component") == 0)
- {
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- return true;
- }
-
- //int id = popup->idAt(0);
- QFont f = QApplication::font();
- f.setBold( TRUE );
-
- if (nbSel==1)
- {
- Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
- popup->removeItem(QAD_TopLabel_Popup_ID);
- popup->insertItem( new CustomItem ( QString(IObject->getName()), f ), QAD_TopLabel_Popup_ID, 0 );
- if ( IObject->hasEntry() )
- {
- popup->setItemEnabled( 801, false );
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var SO = aStudy->FindObjectID( IObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !SO->_is_nil() )
- {
- if (SO->FindAttribute(anAttr, "AttributeIOR") )
- {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- Standard_Boolean found;
- GEOM_Actor* Result = GeomGUI->ConvertIORinGEOMActor(anIOR->Value(), found, true);
- if ( found )
- {
- if ( Result->getDisplayMode() == 1 )
- popup->changeItem(8021, "Wireframe" );
- else
- popup->changeItem(8021, "Shading" );
-
- if ( !Result->GetVisibility() )
- popup->removeItem(QAD_Erase_Popup_ID);
- else
- popup->removeItem(QAD_Display_Popup_ID);
- }
- else
- popup->removeItem(QAD_Erase_Popup_ID);
- }
- }
- }
- else
- popup->setItemEnabled( 801, true );
- }
- else
- {
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItem(QAD_TopLabel_Popup_ID);
- popup->insertItem( new CustomItem ( tr("GEOM_MEN_POPUP_NAME").arg(nbSel), f ), QAD_TopLabel_Popup_ID, 0 );
- popup->setItemEnabled( 801, false );
- }
- return true;
- }
- else
- if ( theParent.compare("ObjectBrowser")==0 )
- {
- popup->removeItem(QAD_TopLabel_Popup_ID);
- int id = popup->idAt(0); // separator
- if (id < 0) popup->removeItem(id);
-
- // checking for GEOM label in the selected list
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
- Handle(SALOME_InteractiveObject) anIObject;
-
- bool useSubItems = false;
- bool needOpen = false;
- bool needDisplay = false;
- bool needErase = false;
- SALOMEDS::GenericAttribute_var aTmpAttr;
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->
- getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
- for(;It.More();It.Next())
- {
- anIObject = It.Value();
- if ( !anIObject->hasEntry() )
- continue;
-
- if (myRenderInter->isInViewer(anIObject) && myRenderInter->isVisible(anIObject))
- needErase = true;
- else
- needDisplay = true;
-
- SALOMEDS::SObject_var obj = GeomGUI->myActiveStudy->getStudyDocument()
- ->FindObjectID( anIObject->getEntry() );
- if (!obj->_is_nil()) {
- GEOM::GEOM_Shape_var aShape;
- if (obj->FindAttribute(aTmpAttr, "AttributeIOR")){
- char *str = SALOMEDS::AttributeIOR::_narrow(aTmpAttr)->Value();
- if (str && strlen(str))
- aShape = GeomGUI->myComponentGeom->GetIORFromString(str);
- }
- else
- if (obj->FindAttribute(aTmpAttr, "AttributePersistentRef"))
- needOpen = true;
- if (aShape->_is_nil())
- {
- SALOMEDS::ChildIterator_var anIter =
- GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- while (anIter->More())
- {
- SALOMEDS::SObject_var subobj = anIter->Value();
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR"))
- {
- useSubItems = true;
- needDisplay = true;
- needErase = true;
- }
- else
- if (subobj->FindAttribute(aTmpAttr, "AttributePersistentRef"))
- {
- needOpen = true;
- useSubItems = true;
- }
- anIter->Next();
- }
- }
- }
- }
- // remove useless popup items
- if (nbSel != 1) popup->removeItem(901); // rename
- if (useSubItems) popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
- if (!needOpen)
- {
- int index = popup->indexOf(9024);
- popup->removeItem(9024); // open
- popup->removeItemAt(index); // separator under Open
-
- if (!needDisplay) popup->removeItem(QAD_Display_Popup_ID);
- if (!needErase) popup->removeItem(QAD_Erase_Popup_ID);
- if (!needDisplay && !needErase)
- {
- int id = popup->idAt(popup->count()-1); // last item
- popup->removeItem(id); // separator
- }
- }
- else
- {
- popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_Erase_Popup_ID);
- if (nbSel!=1)
- {
- int id = popup->idAt(popup->count()-1); // last item
- popup->removeItem(id); // separator
- }
- }
- return true;
- // MESSAGE ( " CUSTOM POPUP VIEWER VTK done.")
- }
- } else
- { // other viewer types not supported.
- while (1)
- {
- int id = popup->idAt(0);
- if (id <= QAD_TopLabel_Popup_ID && id != -1)
- popup->removeItemAt(0);
- else
- break;
- }
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_Erase_Popup_ID);
- int id = popup->idAt(popup->count()-1); // last item
- if (id < 0 && id != -1) popup->removeItem(id); // separator
- return false;
- }
- return false;
-}
-
-void GeometryGUI::BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
-{
- /* Create or retrieve an object GeomGUI */
- GeometryGUI::GetOrCreateGeometryGUI(QAD_Application::getDesktop());
-
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-
- OCCViewer_Viewer3d* v3d;
- Handle(AIS_InteractiveContext) ic;
- vtkRenderer* Renderer;
-
- if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- v3d = ((OCCViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- ic = v3d->getAISContext();
- } else if ( GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- Renderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- } else
- return;
-
- if (theIO.IsNull())
- MESSAGE("BuildPresentation(): null SALOME_InteractiveObject passed")
-
- if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
- // VTK
-
- SALOMEDS::SObject_var fatherSF =
- aStudy->FindObjectID(GeomGUI->myActiveStudy->getActiveStudyFrame()->entry());
-
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( theIO->getEntry() );
-
- VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
-
- if(myRenderInter->isInViewer(theIO)) {
- myRenderInter->Display(theIO, false);
- }
- else {
- // Create new actor
- if ( !obj->_is_nil() ) {
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- // this SObject may be GEOM module root SObject
-
- bool useSubItems = false;
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- if (GeomGUI->myComponentGeom->GetIORFromString(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value())->_is_nil()) {
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- if (!GeomGUI->myComponentGeom->GetIORFromString(SALOMEDS::AttributeIOR::_narrow(aTmpAttr)->Value())->_is_nil()) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- } else anIter->Next();
- }
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
-
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
-
- vtkRenderer* theRenderer = ((VTKViewer_ViewFrame*)GeomGUI->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theAllActors = theRenderer->GetActors();
- theAllActors->InitTraversal();
- vtkActor* actor = (vtkActor*)theAllActors->GetNextActor();
- Handle(SALOME_InteractiveObject) anIObj;
- // don't create new study object if it already exists
- bool isDisplayed = false;
- while(!(actor==NULL)) {
- SALOME_Actor* Gactor = SALOME_Actor::SafeDownCast(actor);
- if (Gactor!=NULL) {
- if (Gactor->hasIO()) {
- if (strcmp(Gactor->getIO()->getEntry(),obj->GetID())==0) {
- isDisplayed = true;
- anIObj = Gactor->getIO();
- if (!anIObj.IsNull()) myRenderInter->Display(anIObj, false);
- }
- }
- }
- actor=(vtkActor*)(theAllActors->GetNextActor());
- }
- if (!isDisplayed) {
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( GeomGUI->myActiveStudy );
- op->start();
-
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, obj);
- // commit transaction
- op->finish();
-
- vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
- int themode = myRenderInter->GetDisplayMode();
-
- vtkActorCollection* theActors =
- GEOM_AssemblyBuilder::BuildActors(Shape,0,themode,Standard_True);
- theActors->InitTraversal();
- vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
- while(!(anActor==NULL)) {
- GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor );
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(), Fatherior,"GEOM");
- IO->setEntry(obj->GetID());
- GActor->setIO( IO );
- GActor->setName( theIO->getName() );
-
- theRenderer->AddActor(GActor);
- // renWin->Render();
- anActor = (vtkActor*)theActors->GetNextActor();
- }
- }
- }
- // next item iteration
- if (useSubItems) {
- anIter->Next();
- anAttr = SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- // No viewer update should be done here!
- //myRenderInter->Render();
- //GeomGUI->myActiveStudy->updateObjBrowser( true );
- } else if (GeomGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
- SALOMEDS::SObject_var fatherSF =
- aStudy->FindObjectID( GeomGUI->myActiveStudy->getActiveStudyFrame()->entry());
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeIOR_var anIOR;
-
- if ( v3d->isInViewer( theIO, true ) ) {
- Standard_Boolean found;
- Handle(GEOM_AISShape) aSh = GeomGUI->ConvertIOinGEOMAISShape( theIO, found, true );
- if ( found ) {
- ic->Display(aSh, false);
- ic->AddOrRemoveCurrentObject(aSh, false);
- }
-
- } else {
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( theIO->getEntry() );
- if ( !obj->_is_nil() ) {
- MESSAGE("BuildPresentation(): SObject not null")
- if ( obj->FindAttribute(anAttr, "AttributeIOR")) {
- MESSAGE("BuildPresentation(): SObject has IOR")
- // this SObject may be GEOM module root SObject
-
- bool useSubItems = false;
- SALOMEDS::ChildIterator_var anIter = GeomGUI->myActiveStudy->getStudyDocument()->NewChildIterator(obj);
- if (GeomGUI->myComponentGeom->GetIORFromString(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value())->_is_nil()) {
- while (anIter->More() && !useSubItems) {
- SALOMEDS::SObject_var subobj = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttr;
- if (subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
- if (!GeomGUI->myComponentGeom->GetIORFromString(SALOMEDS::AttributeIOR::_narrow(aTmpAttr)->Value())->_is_nil()) {
- anAttr = aTmpAttr;
- obj = subobj;
- useSubItems = true;
- } else anIter->Next();
- } else anIter->Next();
- }
- }
-
- while(useSubItems?anIter->More():!anAttr->_is_nil()) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var aShape = GeomGUI->myComponentGeom->GetIORFromString(anIOR->Value());
- TopoDS_Shape Shape = ShapeReader.GetShape(GeomGUI->myComponentGeom,aShape);
- if (Shape.IsNull())
- MESSAGE("BuildPresentation(): TopoDS_Shape is null!")
- if (obj->FindAttribute(anAttr, "AttributeName")) {
- MESSAGE("BuildPresentation(): SObject has Name")
- aName = SALOMEDS::AttributeName::_narrow(anAttr);
- // searchin for already displayed objects with the same shape
- AIS_ListOfInteractive aDisplayed;
- ic->DisplayedObjects(aDisplayed);
- AIS_ListIteratorOfListOfInteractive anIObjects(aDisplayed);
- Handle(AIS_Shape) anAISShape;
- for(;anIObjects.More();anIObjects.Next()) {
- anAISShape = Handle(AIS_Shape)::DownCast(anIObjects.Value());
- if (!anAISShape.IsNull()) {
- if (anAISShape->Shape().IsSame(Shape)) break;
- anAISShape.Nullify();
- }
- }
- if (!anAISShape.IsNull()) {
- if (!ic->IsDisplayed(anAISShape)) ic->Display(anAISShape, false);
- } else {
- if (!useSubItems) {
- // open transaction
- QAD_Operation* op = new SALOMEGUI_ImportOperation( GeomGUI->myActiveStudy );
- op->start();
- if (fatherSF->_is_nil())
- MESSAGE("BuildPresentation(): fatherSF is nil!")
- SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
- aStudyBuilder->Addreference(newObj1, obj);
- // commit transaction
- op->finish();
- }
- Handle(GEOM_AISShape) aSh = new GEOM_AISShape(Shape, aName->Value());
- aSh->SetShadingColor( GeomGUI->myShadingColor );
- Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(),
- Fatherior,
- "GEOM");
- IO->setEntry(obj->GetID());
- aSh->setIO( IO );
- aSh->setName( aName->Value() );
- ic->Display (aSh, false);
- if (!useSubItems) ic->AddOrRemoveCurrentObject(aSh, false);
- }
- }
- // next item iteration
- if (useSubItems) {
- anIter->Next();
- anAttr=SALOMEDS::GenericAttribute::_nil();
- while (anIter->More() && anAttr->_is_nil()) {
- SALOMEDS::SObject_var subobject = anIter->Value();
- SALOMEDS::GenericAttribute_var aTmpAttribute;
- if (subobject->FindAttribute(aTmpAttribute, "AttributeIOR")) {
- anAttr = aTmpAttribute;
- obj = subobject;
- } else anIter->Next();
- }
- } else
- anAttr = SALOMEDS::GenericAttribute::_nil();
- }
- }
- }
- }
- // No viewer update should be done here!
- //GeomGUI->myActiveStudy->updateObjBrowser( true );
- //ic->UpdateCurrentViewer();
- }
-}
-
-//=======================================================================
-// function : Parameter()
-// purpose : return a parameter (float) from a dialog box
-//
-// avalue1 : is a float or integer used as a default value displayed
-// aTitle1 : is the title for aValue1
-// aTitle : is the main title
-// bottom : maximum value to be entered
-// top : minimum value to be entered
-// decimals : number of decimals
-//=======================================================================
-double GeometryGUI::Parameter( Standard_Boolean& res,
- const char* aValue1,
- const char* aTitle1,
- const char* aTitle,
- const double bottom,
- const double top,
- const int decimals )
-{
- GeometryGUI_aParameterDlg * Dialog =
- new GeometryGUI_aParameterDlg(aValue1,
- aTitle1,
- QAD_Application::getDesktop(),
- aTitle,
- TRUE,
- 0,
- bottom,
- top,
- decimals) ;
- int r = Dialog->exec() ;
- float X = 0.0 ;
- if ( r == QDialog::Accepted ) {
- res = Standard_True;
- X = Dialog->getValue();
- } else
- res = Standard_False;
- delete Dialog;
- return X;
-}
-
-
-//=======================================================================
-// function : OnSketchSegment()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchSegment()
-{
- this->mySketcher.ChangeMode(SEGMENT);
-}
-
-
-//=======================================================================
-// function : OnSketchArc()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchArc()
-{
- this->mySketcher.ChangeMode(ARC_CHORD);
-}
-
-//=======================================================================
-// function : OnSketchSetAngle()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchSetAngle()
-{
- Standard_Real anAngle = this->mySketcher.GetSegmentAngle()/PI180;
- Sketch::fitInResol(anAngle);
- Standard_Boolean res = false ;
- QString Value = QString("%1").arg( anAngle );
- anAngle = Parameter(res, Value, tr("GEOM_MEN_ANGLE"), tr("GEOM_MEN_ENTER_ANGLE"), -180.0, +180.0, 6 )*PI180 ;
-
- if( res ) {
- this->mySketcher.SetSegmentAngle(anAngle);
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(3133,&pp);
- pp->setItemChecked(3133,false);
- item = Mb->findItem(3134,&pp);
- pp->setItemChecked(3134,false);
- }
-
-}
-
-
-//=======================================================================
-// function : OnSketchSetx()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchSetx()
-{
- Standard_Boolean res = false;
- double X = Parameter( res,
- "0.",
- tr("GEOM_MEN_X"),
- tr("GEOM_MEN_SKETCHER_X"),
- 2.0 * Precision::Confusion(),
- 1E6,
- 6 ) ;
- if (res)
- this->mySketcher.SetXDimension(X);
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(3133,&pp);
- pp->setItemChecked(3133,false);
- item = Mb->findItem(3134,&pp);
- pp->setItemChecked(3134,false);
-}
-
-//=======================================================================
-// function : OnSketchSety()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchSety()
+//=================================================================================
+// function : GeometryGUI::DefinePopup()
+// purpose : Called from desktop to define popup menu [static]
+//=================================================================================
+void GeometryGUI::DefinePopup(QString& theContext, QString& theParent, QString& theObject)
{
- Standard_Boolean res = false;
- double Y = Parameter( res,
- "0.",
- tr("GEOM_MEN_Y"),
- tr("GEOM_MEN_SKETCHER_Y"),
- 2.0 * Precision::Confusion(),
- 1E6,
- 6 ) ;
- if (res)
- this->mySketcher.SetYDimension(Y);
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(3133,&pp);
- pp->setItemChecked(3133,false);
- item = Mb->findItem(3134,&pp);
- pp->setItemChecked(3134,false);
-}
+ GeometryGUI* geomGUI = GetGeomGUI();
+ QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
+ SALOME_Selection* Sel = SALOME_Selection::Selection(ActiveStudy->getSelection());
+ theObject = "";
+ theContext = "";
-//=======================================================================
-// function : OnSketchDelete()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchDelete()
-{
- if (GeomGUI->mySketcher.GetmyEdgesNumber() == 1 ) {
- QMenuBar* Mb = GeomGUI->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(313,&pp);
- pp->setItemEnabled( 313, false); // SKETCH CONTRAINTS
- GeomGUI->mySketcher.SetTransitionStatus(NOCONSTRAINT);
+ if ( theParent == "Viewer" ) {
+ if ( Sel->IObjectCount() == 0 )
+ theContext = "NothingSelected";
}
- if (this->mySketcher.Delete())
- GeomGUI->ResetState();
-}
-
-
-//=======================================================================
-// function : OnSketchClose()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchClose()
-{
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)this->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
-
- TopoDS_Wire W = this->mySketcher.Close();
- if ( !W.IsNull() ) {
- //
- GEOM::GEOM_Gen::ListOfIOR_var listShapes = new GEOM::GEOM_Gen::ListOfIOR;
- listShapes->length(0);
- unsigned int i = 0;
-
- BRepTools_WireExplorer Ex(W);
- while ( Ex.More() ) {
- TopoDS_Edge E = Ex.Current();
- gp_Pnt pt1 , pt2 ;
-
- pt1 = BRep_Tool::Pnt(TopExp::FirstVertex(E));
- pt2 = BRep_Tool::Pnt(TopExp::LastVertex(E));
-
- gp_Pnt CenterPoint;
- Handle(Geom_Curve) Curve;
- Handle(Geom_Circle) Circle;
- gp_Circ Circ;
- Standard_Real First,Last;
-
- Curve = BRep_Tool::Curve(E,First,Last);
- if(Curve->IsKind(STANDARD_TYPE(Geom_Circle))) {
- Circle = Handle(Geom_Circle)::DownCast(Curve); // pointer on geom_circ
- Circ = Circle->Circ(); // gp_Circ
-
- Curve->D0( (First + Last) / 2. , CenterPoint );
-
- GEOM::PointStruct pI = myComponentGeom->MakePointStruct( pt1.X(), pt1.Y(), pt1.Z() );
- GEOM::PointStruct pC = myComponentGeom->MakePointStruct( CenterPoint.X(), CenterPoint.Y(), CenterPoint.Z() );
- GEOM::PointStruct pE = myComponentGeom->MakePointStruct( pt2.X(), pt2.Y(), pt2.Z() );
-
- GEOM::GEOM_Shape_var arc;
-
- try {
- arc = myComponentGeom->MakeArc(pI, pC, pE) ;
+ if ( Sel->IObjectCount() == 1 ) {
+ Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
+ if( IO->hasEntry() ) {
+ SALOMEDS::SObject_var sobj = ActiveStudy->getStudyDocument()->FindObjectID( IO->getEntry() );
+ if ( !sobj->_is_nil() ) {
+ SALOMEDS::SComponent_var scomp = sobj->GetFatherComponent();
+ if ( !strcmp(scomp->GetID(), IO->getEntry() ) ) {
+ // component is selected
+ theObject = "Component";
}
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-
- listShapes->length(i+1);
- listShapes[i] = strdup(arc->Name());
- i++;
- } else {
- GEOM::PointStruct pI = myComponentGeom->MakePointStruct( pt1.X(), pt1.Y(), pt1.Z() );
- GEOM::PointStruct pE = myComponentGeom->MakePointStruct( pt2.X(), pt2.Y(), pt2.Z() );
- GEOM::GEOM_Shape_var segment;
-
- try {
- segment = myComponentGeom->MakeEdge(pI,pE) ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
+ else {
+ GEOM::GEOM_Object_var aGObj = GEOM::GEOM_Object::_narrow( sobj->GetObject() );
+ if ( !CORBA::is_nil( aGObj ) ) {
+ switch( aGObj->GetType() ) {
+ case GEOM_GROUP:
+ theObject = "Group";
+ break;
+ default:
+ theObject = "Shape";
+ break;
+ }
+ }
}
-
- listShapes->length(i+1);
- listShapes[i] = strdup(segment->Name());
- i++;
}
- Ex.Next();
}
- GEOM::GEOM_Shape_var Wire = myComponentGeom->MakeWire(listShapes) ;
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, Wire);
- Standard_CString type;
- GetShapeTypeString(S,type);
- Wire->NameType( type );
-
- if ( Display(Wire, "" )) {
- QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
- }
}
- GeomGUI->ResetState();
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(313,&pp);
- pp->setItemEnabled( 313, false); // SKETCH CONTRAINTS
- GeomGUI->mySketcher.SetTransitionStatus(NOCONSTRAINT);
}
+//=================================================================================
+// function : GeometryGUI::CustomPopup()
+// purpose : Called from desktop to create popup menu [static]
+//=================================================================================
+bool GeometryGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext,
+ const QString& theParent, const QString& theObject)
+{
+ GeometryGUI* geomGUI = GetGeomGUI();
+
+ // Deactivate any non modal dialog box to get the neutral point
+ geomGUI->EmitSignalDeactivateDialog();
+ QAD_Study* anActiveStudy = parent->getActiveStudy();
+ QAD_StudyFrame* aStudyFrame = anActiveStudy->getActiveStudyFrame();
+ QAD_ViewFrame* aViewFrame = aStudyFrame->getRightFrame()->getViewFrame();
+ SALOME_Selection* Sel = SALOME_Selection::Selection(anActiveStudy->getSelection());
+ QString parentComponent = ((SALOMEGUI_Desktop*)parent)->getComponentFromSelection();
+ bool isOCCViewer = aViewFrame->getTypeView() == VIEW_OCC;
+ bool isVTKViewer = aViewFrame->getTypeView() == VIEW_VTK;
+ int aDisplayMode = 0;
+ QString objectName;
+
+ if ( aViewFrame->getTypeView() == VIEW_OCC )
+ aDisplayMode = ((OCCViewer_ViewFrame*)aViewFrame)->getViewer()->getAISContext()->DisplayMode();
+ else if ( aViewFrame->getTypeView() == VIEW_VTK )
+ aDisplayMode = ((VTKViewer_ViewFrame*)aViewFrame)->getRWInteractor()->GetDisplayMode();
+ int nbSel = Sel->IObjectCount();
-//=======================================================================
-// function : OnSketchEnd()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchEnd()
-{
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)this->myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
-
- TopoDS_Wire W = this->mySketcher.End();
- if (!W.IsNull()) {
- //
- GEOM::GEOM_Gen::ListOfIOR_var listShapes = new GEOM::GEOM_Gen::ListOfIOR;
- listShapes->length(0);
- unsigned int i = 0;
-
- BRepTools_WireExplorer Ex(W);
- while ( Ex.More() ) {
- TopoDS_Edge E = TopoDS::Edge( Ex.Current() );
-
- gp_Pnt pt1 , pt2 ;
- pt1 = BRep_Tool::Pnt(TopExp::FirstVertex(E));
- pt2 = BRep_Tool::Pnt(TopExp::LastVertex(E));
-
- gp_Pnt CenterPoint;
- Handle(Geom_Curve) Curve;
- Handle(Geom_Circle) Circle;
- gp_Circ Circ;
- Standard_Real First,Last;
-
- Curve = BRep_Tool::Curve(E,First,Last);
- if(Curve->IsKind(STANDARD_TYPE(Geom_Circle))) {
- Circle = Handle(Geom_Circle)::DownCast(Curve); // pointer on geom_circ
- Circ = Circle->Circ(); // gp_Circ
-
- Curve->D0( (First + Last) / 2. , CenterPoint );
-
- GEOM::PointStruct pI = myComponentGeom->MakePointStruct( pt1.X(), pt1.Y(), pt1.Z() );
- GEOM::PointStruct pC = myComponentGeom->MakePointStruct( CenterPoint.X(), CenterPoint.Y(), CenterPoint.Z() );
- GEOM::PointStruct pE = myComponentGeom->MakePointStruct( pt2.X(), pt2.Y(), pt2.Z() );
-
- GEOM::GEOM_Shape_var arc;
+ if( nbSel == 0 ) {
+ ////// NOTHING SELECTED
+ popup->clear();
+ }
+ else if ( nbSel == 1 ) {
+ ////// SINGLE OBJECT SELECTION
+ if ( parentComponent != parent->getActiveComponent() ) {
+ ////// selected object does not belong to GEOM module:
+ // remove all commands except Display/Erase...
+ while ( 1 ) {
+ int id = popup->idAt( 0 );
+ if ( id <= QAD_TopLabel_Popup_ID )
+ popup->removeItemAt( 0 );
+ else
+ break;
+ }
+ }
+ else {
+ ////// selected object belong to the GEOM module
+ // get interactive object
+ Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
+ objectName = IObject->getName();
+ // if object has entry get SObject
+ SALOMEDS::SObject_var SO;
+ if ( IObject->hasEntry() )
+ SO = anActiveStudy->getStudyDocument()->FindObjectID( IObject->getEntry() );
+
+ if ( theObject == "Component" ) {
+ ////// menu for component
+ if ( !isOCCViewer && !isVTKViewer ) {
+ popup->removeItem( QAD_DisplayOnly_Popup_ID );
+ popup->removeItem( QAD_Display_Popup_ID );
+ popup->removeItem( QAD_Erase_Popup_ID );
+ }
+ }
+ else {
+ ////// not component (should be shape)
+ if ( IObject->hasEntry() ) /////// VSR : TO BE REMOVED
+ popup->removeItem( 804 ); // "Add in Study"
+
+ // Here could be analysis of the geom shape's type
+ // ... //
- try {
- arc = myComponentGeom->MakeArc(pI, pC, pE) ;
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-
- listShapes->length(i+1);
- listShapes[i] = strdup(arc->Name());
- i++;
- } else {
- GEOM::PointStruct pI = myComponentGeom->MakePointStruct( pt1.X(), pt1.Y(), pt1.Z() );
- GEOM::PointStruct pE = myComponentGeom->MakePointStruct( pt2.X(), pt2.Y(), pt2.Z() );
- GEOM::GEOM_Shape_var segment;
-
- try {
- segment = myComponentGeom->MakeEdge(pI,pE) ;
+ SALOMEDS::GenericAttribute_var aTmpAttr;
+ if( SO->_is_nil() || SO->GetFatherComponent()->FindAttribute( aTmpAttr, "AttributeIOR") )
+ popup->removeItem( 9024 ); // "Open" /////// VSR : TO BE REMOVED
+
+ if ( !isOCCViewer && theParent == "ObjectBrowser" ) {
+ if ( theObject == "Shape" )
+ popup->removeItem( 800 ); // Create Group
+ else if ( theObject == "Group" )
+ popup->removeItem( 801 ); // Edit Group
+ }
+
+ if ( isOCCViewer || isVTKViewer ) {
+ ////// current viewer is OCC or VTK
+ SALOME_Prs* prs = aViewFrame->CreatePrs( IObject->getEntry() );
+ if ( aViewFrame->isVisible( IObject ) ) {
+ ////// object is already displayed in the viewer
+ popup->removeItem( QAD_Display_Popup_ID );
+ if ( isOCCViewer ) {
+ ////// OCC viewer only
+ OCCViewer_Prs* occPrs = dynamic_cast<OCCViewer_Prs*>( prs );
+ if ( occPrs && !occPrs->IsNull() ) {
+ AIS_ListOfInteractive ioList;
+ occPrs->GetObjects( ioList );
+ QMenuItem* mi = popup->findItem( 803 );
+ if ( mi && mi->popup() ) {
+ if ( ioList.First()->DisplayMode() == 0 )
+ mi->popup()->setItemChecked( 80311, true ); // "Wireframe"
+ else if ( ioList.First()->DisplayMode() == 1 )
+ mi->popup()->setItemChecked( 80312, true ); // "Shading"
+ else if ( ioList.First()->DisplayMode() < 0 )
+ mi->popup()->setItemChecked( aDisplayMode == 0 ? 80311 : 80312 , true ); // "Wireframe" or "Shading"
+ }
+ }
+ }
+ else {
+ ////// VTK viewer only
+ popup->removeItem( 8034 ); // "Isos"
+ VTKViewer_Prs* vtkPrs = dynamic_cast<VTKViewer_Prs*>( prs );
+ if ( vtkPrs && !vtkPrs->IsNull() ) {
+ vtkActorCollection* actorList = vtkPrs->GetObjects();
+ actorList->InitTraversal();
+ SALOME_Actor* ac = SALOME_Actor::SafeDownCast( actorList->GetNextActor() );
+ QMenuItem* mi = popup->findItem( 803 );
+ if ( ac && mi && mi->popup() ) {
+ if ( ac->getDisplayMode() == 0 )
+ mi->popup()->setItemChecked( 80311, true ); // "Wireframe"
+ else if ( ac->getDisplayMode() == 1 )
+ mi->popup()->setItemChecked( 80312, true ); // "Shading"
+ else
+ mi->popup()->setItemChecked( aDisplayMode == 0 ? 80311 : 80312 , true ); // "Wireframe" or "Shading"
+ }
+ }
+ }
+ }
+ else {
+ ////// object is not yet displayed in the viewer
+ popup->removeItem( 803 ); // "Display Mode"
+ popup->removeItem( 8032 ); // "Color"
+ popup->removeItem( 8033 ); // "Transparency"
+ popup->removeItem( 8034 ); // "Isos"
+ popup->removeItem( QAD_Erase_Popup_ID );
+ }
+ delete prs;
}
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
+ else {
+ ////// other viewer type (neither OCC nor VTK)
+ popup->removeItem( 803 ); // "Display Mode"
+ popup->removeItem( 8032 ); // "Color"
+ popup->removeItem( 8033 ); // "Transparency"
+ popup->removeItem( 8034 ); // "Isos"
+ popup->removeItem( QAD_Display_Popup_ID );
+ popup->removeItem( QAD_DisplayOnly_Popup_ID );
+ popup->removeItem( QAD_Erase_Popup_ID );
}
-
- listShapes->length(i+1);
- listShapes[i] = strdup(segment->Name());
- i++;
}
- Ex.Next();
- }
-
- GEOM::GEOM_Shape_var Wire = myComponentGeom->MakeWire(listShapes) ;
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, Wire);
- Standard_CString type;
- GetShapeTypeString(S,type);
- Wire->NameType( type );
-
- if ( Display(Wire, "") ) {
- QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
}
}
- GeomGUI->ResetState();
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(313,&pp);
- pp->setItemEnabled( 313, false); // SKETCH CONTRAINTS
- GeomGUI->mySketcher.SetTransitionStatus(NOCONSTRAINT);
-}
-
-//=======================================================================
-// function : OnSettingsNoconstraint()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSettingsNoconstraint()
-{
- this->mySketcher.SetTransitionStatus(NOCONSTRAINT);
-}
-
-//=======================================================================
-// function : OnSettingsPerpendicular()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSettingsPerpendicular()
-{
- this->mySketcher.SetTransitionStatus(PERPENDICULAR);
-}
-
-//=======================================================================
-// function : OnSettingsTangent()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSettingsTangent()
-{
- this->mySketcher.SetTransitionStatus(TANGENT);
-}
-
-//=======================================================================
-// function : OnSketchOptionsOnoffangledimension()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchOptionsOnoffangledimension()
-{
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(10011,&pp);
- pp->setItemChecked(10011,!pp->isItemChecked(10011));
- this->mySketcher.SetParameterVisibility(ANGLE_PARAMETER,pp->isItemChecked(10011));
-}
-
-//=======================================================================
-// function : OnSketchOptionsOnofflengthdimension()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchOptionsOnofflengthdimension()
-{
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(10010,&pp);
- pp->setItemChecked(10010,!pp->isItemChecked(10010));
- this->mySketcher.SetParameterVisibility(LENGTH_PARAMETER,pp->isItemChecked(10010));
-}
-
-//=======================================================================
-// function : OnSketchOptionsOnoffradiusdimension()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchOptionsOnoffradiusdimension()
-{
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(10012,&pp);
- pp->setItemChecked(10012,!pp->isItemChecked(10012));
- this->mySketcher.SetParameterVisibility(RADIUS_PARAMETER,pp->isItemChecked(10012));
-}
-
-
-//=======================================================================
-// function : OnSketchOptionsOnoffxdimension()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchOptionsOnoffxdimension()
-{
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(10013,&pp);
- pp->setItemChecked(10013,!pp->isItemChecked(10013));
- this->mySketcher.SetParameterVisibility(XVALUE_PARAMETER,pp->isItemChecked(10013));
-}
-
-//=======================================================================
-// function : OnSketchOptionsOnoffydimension()
-// purpose :
-//=======================================================================
-void GeometryGUI::OnSketchOptionsOnoffydimension()
-{
- QMenuBar* Mb = this->myDesktop->getMainMenuBar();
- QMenuData* pp;
- QMenuItem* item = Mb->findItem(10014,&pp);
- pp->setItemChecked(10014,!pp->isItemChecked(10014));
- this->mySketcher.SetParameterVisibility(YVALUE_PARAMETER,pp->isItemChecked(10014));
-}
-
-
-//=======================================================================
-// function : Archimede()
-// purpose :
-//=======================================================================
-void GeometryGUI::Archimede( const Handle(SALOME_InteractiveObject)& IO,
- const double aWeight,
- const double aWaterDensity,
- const double aMeshingDeflection )
-{
- try {
- if ( IO->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject)) ) {
- Handle(GEOM_InteractiveObject) GIO =
- Handle(GEOM_InteractiveObject)::DownCast( IO );
- GEOM::GEOM_Shape_var Shape = GeomGUI->myComponentGeom->GetIORFromString( GIO->getIOR() );
-
- GEOM::GEOM_Shape_var Result = GeomGUI->myComponentGeom->Archimede( Shape, aWeight, aWaterDensity, aMeshingDeflection);
- Result->NameType(tr("GEOM_PLANE"));
- if ( Display(Result, "") ) {
- QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
+ else {
+ ////// MULTIPLE SELECTION
+ if ( parentComponent != parent->getActiveComponent() ) {
+ ////// not GEOM module objects or objects belong to different modules
+ // remove all commands except Display/Erase...
+ while ( 1 ) {
+ int id = popup->idAt( 0 );
+ if ( id <= QAD_TopLabel_Popup_ID )
+ popup->removeItemAt( 0 );
+ else
+ break;
}
- return;
- }
- if ( IO->hasEntry() ) {
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var obj = aStudy->FindObjectID( IO->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !obj->_is_nil() ) {
- if (obj->FindAttribute(anAttr, "AttributeIOR")) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- GEOM::GEOM_Shape_var Shape = GeomGUI->myComponentGeom->GetIORFromString( anIOR->Value() );
- GEOM::GEOM_Shape_var Result = GeomGUI->myComponentGeom->Archimede( Shape, aWeight, aWaterDensity, aMeshingDeflection);
- Result->NameType(tr("GEOM_PLANE"));
- if ( Display(Result, "") ) {
- QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
- }
- }
+ if ( parentComponent.isNull() ) {
+ ////// objects belong to different modules
+ popup->removeItem(QAD_Display_Popup_ID);
+ popup->removeItem(QAD_DisplayOnly_Popup_ID);
+ popup->removeItem(QAD_Erase_Popup_ID);
+ }
+ else {
+ objectName = tr( "GEOM_MEN_POPUP_NAME" ).arg( nbSel );
}
}
+ else {
+ ////// all selected objects belong to GEOM module
+ popup->removeItem( 901 ); // "Rename"
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-}
-
-
-//=====================================================================================
-// EXPORTED METHODS
-//=====================================================================================
-extern "C"
-{
- bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
- {
- return GeometryGUI::OnGUIEvent(theCommandID, parent);
- }
-
- bool OnKeyPress (QKeyEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
- {
- return GeometryGUI::OnKeyPress (pe, parent, studyFrame);
- }
-
- bool OnMousePress (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
- {
- return GeometryGUI::OnMousePress (pe, parent, studyFrame);
- }
-
- bool OnMouseMove (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
- {
- return GeometryGUI::OnMouseMove (pe, parent, studyFrame);
- }
-
- bool SetSettings ( QAD_Desktop* parent )
- {
- return GeometryGUI::SetSettings( parent );
- }
-
- bool customPopup ( QAD_Desktop* parent, QPopupMenu* popup, const QString & theContext,
- const QString & theParent, const QString & theObject )
- {
- return GeometryGUI::CustomPopup( parent, popup, theContext, theParent, theObject );
- }
-
- void definePopup ( QString & theContext, QString & theParent, QString & theObject )
- {
- GeometryGUI::DefinePopup( theContext, theParent, theObject );
- }
-
- bool activeStudyChanged ( QAD_Desktop* parent )
- {
- GeometryGUI::activeStudyChanged( parent );
- }
+ SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
+ bool isComponent = false;
+ bool needOpen = false;
+ bool needDisplay = false;
+ bool needErase = false;
+ int needToPublish = 0;
- void buildPresentation ( const Handle(SALOME_InteractiveObject)& theIO )
- {
- GeometryGUI::BuildPresentation(theIO);
- }
+ for( ;It.More();It.Next() ) {
+ Handle(SALOME_InteractiveObject) anIObject = It.Value();
- void supportedViewType(int* buffer, int bufferSize)
- {
- if (!buffer || !bufferSize) return;
- buffer[0] = (int)VIEW_OCC;
- if (--bufferSize) buffer[1] = (int)VIEW_VTK;
- }
-}
+ if ( aViewFrame->isVisible( anIObject ) )
+ needErase = true;
+ else
+ needDisplay = true;
-//=====================================================================================
-// function : OnFilletGetAll()
-// purpose :
-//=====================================================================================
-bool GeometryGUI::OnFilletGetAll(const TopoDS_Shape& ShapeTopo, const double Radius, const int SubShapeType, const char* ShapeTopoIOR)
-{
- GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
- ListOfID->length(0);
+ if( anIObject->hasEntry() ) {
+ needToPublish = -1; /////// VSR : TO BE REMOVED
+ SALOMEDS::SObject_var obj = anActiveStudy->getStudyDocument()->FindObjectID( anIObject->getEntry() );
+ SALOMEDS::GenericAttribute_var aTmpAttr;
+ if ( !obj->_is_nil() && !obj->GetFatherComponent()->FindAttribute( aTmpAttr, "AttributeIOR" ) )
+ needOpen = true; /////// VSR : TO BE REMOVED
+ if ( !obj->_is_nil() && QString( obj->GetID() ) == QString( obj->GetFatherComponent()->GetID() ) )
+ isComponent = true;
+ }
+ else {
+ if ( needToPublish != -1 ) needToPublish = 1;
+ }
+ }
+ if( needOpen || ( !isOCCViewer && !isVTKViewer ) ) {
+ ////// Data is not loaded yet or current viewer is neither OCC nor VTK
+ popup->removeItem( 803 ); // "Display Mode"
+ popup->removeItem( 8032 ); // "Color"
+ popup->removeItem( 8033 ); // "Transparency"
+ popup->removeItem( 8034 ); // "Isos"
+ popup->removeItem( 804 ); // "Add in Study"
+ popup->removeItem( QAD_DisplayOnly_Popup_ID );
+ popup->removeItem( QAD_Display_Popup_ID );
+ popup->removeItem( QAD_Erase_Popup_ID );
+ }
+ else {
+ popup->removeItem( 9024 ); // "Open"
+ if ( needToPublish <= 0 )
+ popup->removeItem( 804 ); // "Add in Study"
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR( ShapeTopoIOR );
- if ( theObj->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
- return false ;
- }
-
- try {
- if( Radius <= Precision::Confusion() )
- return false;
+ if( isComponent ) {
+ popup->removeItem( 803 ); // "Display Mode"
+ popup->removeItem( 8032 ); // "Color"
+ popup->removeItem( 8033 ); // "Transparency"
+ popup->removeItem( 8034 ); // "Isos"
+ popup->removeItem( QAD_DisplayOnly_Popup_ID );
+ }
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeFillet(aShape, Radius, SubShapeType, ListOfID) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return false;
+ if ( !needDisplay )
+ popup->removeItem( QAD_Display_Popup_ID );
+ if ( !needErase )
+ popup->removeItem( QAD_Erase_Popup_ID );
+ if ( !isOCCViewer )
+ popup->removeItem( 8034 ); // "Isos"
+ }
}
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if ( Display( result, "" ))
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return true;
-}
-
-//=====================================================================================
-// function : OnFilletGetSelected()
-// purpose :
-//=====================================================================================
-bool GeometryGUI::OnFilletGetSelected(const TopoDS_Shape& ShapeTopo,
- const char* ShapeTopoIOR,
- const double Radius,
- const int SubShapeType,
- Standard_Integer& aLocalContextId,
- bool& myUseLocalContext )
-{
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- if( myUseLocalContext == false ) {
- /* No local context opened for fillet method */
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return false ;
}
-
- GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
- ic->InitSelected();
- int nbSelected = ic->NbSelected();
- int i = 0;
- ic->InitSelected();
- while(ic->MoreSelected()) {
- TopoDS_Shape s = ic->SelectedShape();
- if ( s.ShapeType() == TopAbs_FACE ) {
- TopExp_Explorer Exp( s, TopAbs_EDGE );
- TopTools_MapOfShape M ;
- while ( Exp.More() ) {
- if( M.Add(Exp.Current() )) { /* if a new edge : do not add doublons indices */
- ListOfID->length( i + 1 );
- ListOfID[i] = GetIndex( Exp.Current(), ShapeTopo, (int)TopAbs_EDGE ) ;
- i++ ;
- }
- Exp.Next();
- }
- }
- else {
- ListOfID->length( i + 1 );
- ListOfID[i] = GetIndex( ic->SelectedShape(), ShapeTopo, SubShapeType );
- i++;
+ // check popup for unnecessary separators
+ QAD_Tools::checkPopup( popup );
+ // find popup menu's TopLabel item (with title)
+ int topItem = popup->indexOf( QAD_TopLabel_Popup_ID );
+ if ( topItem >= 0 ) {
+ // remove popup menu's title item
+ popup->removeItem( QAD_TopLabel_Popup_ID );
+ if ( theParent == "Viewer" && !objectName.isEmpty() && popup->count() > 0 ) {
+ // set bold font for popup menu's title
+ QFont f = popup->font(); f.setBold( TRUE );
+ popup->removeItem( QAD_TopLabel_Popup_ID );
+ popup->insertItem( new CustomItem( objectName, f ), QAD_TopLabel_Popup_ID, topItem );
}
- ic->NextSelected();
- }
-
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Shape_var aResult ;
- try {
- aResult = myComponentGeom->MakeFillet( aShape, Radius, 6, ListOfID );
-
- /* local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, aResult);
- Standard_CString type;
- GetShapeTypeString(S,type);
- aResult->NameType( type );
-
- if ( Display( aResult, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
-
- if ( myUseLocalContext ) {
- /* local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
}
- this->OnDisplayAll(true);
- myActiveStudy->updateObjBrowser();
- myDesktop->putInfo (tr("GEOM_PRP_READY"));
-
- return true ;
+ return false;
}
-//=====================================================================================
-// function : OnChamferGetAll()
-// purpose :
-//=====================================================================================
-bool GeometryGUI::OnChamferGetAll(const TopoDS_Shape& ShapeTopo, const double D1, const double D2, const int SubShapeType, const char* ShapeTopoIOR)
+//=================================================================================
+// function : GeometryGUI::ActiveStudyChanged()
+// purpose : static
+//=================================================================================
+bool GeometryGUI::ActiveStudyChanged(QAD_Desktop* parent)
{
- GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
- ListOfID->length(0);
-
- SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
- SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR( ShapeTopoIOR );
- if ( theObj->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
- return false ;
- }
-
- try {
- if( D1 <= Precision::Confusion() )
- return false;
- if( D2 <= Precision::Confusion() )
- return false;
-
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeChamfer(aShape, D1, D2, SubShapeType, ListOfID) ;
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return false;
- }
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, result);
- Standard_CString type;
- GetShapeTypeString(S,type);
- result->NameType( type );
-
- if ( Display( result, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return true;
-}
+ GeometryGUI* geomGUI = GetGeomGUI();
+ QAD_Study* ActiveStudy = parent->getActiveStudy();
+ QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
+ int DisplayMode = 0;
+ bool ViewOCC = false;
-//=====================================================================================
-// function : OnChamferGetSelected()
-// purpose :
-//=====================================================================================
-bool GeometryGUI::OnChamferGetSelected(const TopoDS_Shape& ShapeTopo,
- const char* ShapeTopoIOR,
- const double D1, const double D2, const int SubShapeType,
- Standard_Integer& aLocalContextId,
- bool& myUseLocalContext)
-{
- if ( this->myActiveStudy->getActiveStudyFrame()->getTypeView() > VIEW_OCC ) {
- return false;
- }
-
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-
- if( myUseLocalContext == false ) {
- /* No local context opened for chamfer method */
- myDesktop->putInfo(tr("GEOM_PRP_ABORT"));
- return false ;
+ if( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) {
+ OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+ Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
+ DisplayMode = ic->DisplayMode();
+ ViewOCC = true;
}
-
- GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
- ic->InitSelected();
- int nbSelected = ic->NbSelected();
- int i = 0;
- ic->InitSelected();
-
- while(ic->MoreSelected()) {
- TopoDS_Shape s = ic->SelectedShape();
- if ( s.ShapeType() == TopAbs_FACE ) {
- TopExp_Explorer Exp( s, TopAbs_EDGE );
- TopTools_MapOfShape M ;
- while ( Exp.More() ) {
- if( M.Add(Exp.Current() )) { /* if a new edge : do not add doublons indices */
- ListOfID->length( i + 1 );
- ListOfID[i] = GetIndex( Exp.Current(), ShapeTopo, (int)TopAbs_EDGE ) ;
- i++ ;
- }
- Exp.Next();
- }
- }
- else {
- ListOfID->length( i + 1 );
- ListOfID[i] = GetIndex( ic->SelectedShape(), ShapeTopo, SubShapeType ) ;
- i++;
- }
- ic->NextSelected();
+ else if( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
+ VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
+ DisplayMode = myRenderInter->GetDisplayMode();
}
-
- GEOM::GEOM_Shape_var aShape = myComponentGeom->GetIORFromString( ShapeTopoIOR );
- GEOM::GEOM_Shape_var aResult ;
- try {
- aResult = myComponentGeom->MakeChamfer( aShape, D1, D2, 6, ListOfID );
- /* local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
-
- TopoDS_Shape S = ShapeReader.GetShape(myComponentGeom, aResult);
- Standard_CString type;
- GetShapeTypeString(S,type);
- aResult->NameType( type );
+ if( DisplayMode == 1 )
+ Mb->changeItem( 211, tr( "GEOM_MEN_WIREFRAME" ) );
+ else
+ Mb->changeItem( 211, tr( "GEOM_MEN_SHADING" ) );
- if ( Display( aResult, "") )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
+ //Mb->setItemEnabled( 404, ViewOCC ); // SKETCHER
+ Mb->setItemEnabled( 603, ViewOCC ); // SuppressFace
+ Mb->setItemEnabled( 604, ViewOCC ); // SuppressHole
+ Mb->setItemEnabled( 606, ViewOCC ); // CloseContour
+ Mb->setItemEnabled( 413, ViewOCC ); // Isos Settings
+ Mb->setItemEnabled( 800, ViewOCC ); // Create Group
+ Mb->setItemEnabled( 801, ViewOCC ); // Edit Group
+ Mb->setItemEnabled(9998, ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
- if ( myUseLocalContext ) {
- /* local context from DialogBox */
- ic->CloseLocalContext(aLocalContextId) ;
- myUseLocalContext = false ;
- }
+ geomGUI->EmitSignalCloseAllDialogs();
- this->OnDisplayAll(true);
- myActiveStudy->updateObjBrowser();
- myDesktop->putInfo (tr("GEOM_PRP_READY"));
+ // PAL5356: update VTK selection
+ ::UpdateVtkSelection( parent );
- return true ;
+ bool bOk = true;
+ GUIMap::Iterator it;
+ for ( it = geomGUI->myGUIMap.begin(); it != geomGUI->myGUIMap.end(); ++it )
+ bOk = bOk && it.data()->ActiveStudyChanged( parent );
+ return bOk;
}
-//=====================================================================================
-// function : MakeCDGAndDisplay()
-// purpose :
-//=====================================================================================
-void GeometryGUI::MakeCDGAndDisplay(GEOM::GEOM_Shape_ptr Shape)
+//=======================================================================
+// function : GeometryGUI::BuildPresentation()
+// purpose : static
+//=======================================================================
+void GeometryGUI::BuildPresentation( const Handle(SALOME_InteractiveObject)& theIO,
+ QAD_ViewFrame* theViewFrame )
{
- try {
- GEOM::GEOM_Shape_var result = myComponentGeom->MakeCDG( Shape );
- if ( result->_is_nil() ) {
- myDesktop->putInfo(tr("GEOM_PRP_ABORT") );
- return ;
- }
- result->NameType( tr("GEOM_POINT") );
- if ( Display( result ) )
- myDesktop->putInfo(tr("GEOM_PRP_DONE"));
- }
- catch (const SALOME::SALOME_Exception& S_ex) {
- QtCatchCorbaException(S_ex);
- }
- return ;
+ GEOM_Displayer().Display( theIO, false, theViewFrame );
}
-bool GeometryGUI::SObjectExist(SALOMEDS::SObject_ptr theFatherObject, const char* IOR) {
- SALOMEDS::Study_var aStudy = GeomGUI->myActiveStudy->getStudyDocument();
- SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator(theFatherObject);
- SALOMEDS::SObject_var RefSO;
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- for (; it->More();it->Next()) {
- SALOMEDS::SObject_var SO= it->Value();
- if (SO->FindAttribute(anAttr, "AttributeIOR") ) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- if ( strcmp( anIOR->Value(), IOR ) == 0 )
- return true;
- }
- if ( SO->ReferencedObject( RefSO ) ) {
- if (RefSO->FindAttribute(anAttr, "AttributeIOR") ) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- if ( strcmp( anIOR->Value(), IOR ) == 0 )
- return true;
- }
- }
- }
- return false;
+void GeometryGUI::SupportedViewType(int* buffer, int bufferSize)
+{
+ if(!buffer || !bufferSize) return;
+ buffer[0] = (int)VIEW_OCC;
+ if (--bufferSize) buffer[1] = (int)VIEW_VTK;
}