geom/src/GEOMGUI/GeometryGUI.cxx

7189 lines
248 KiB
C++
Raw Normal View History

2003-07-09 20:33:44 +06:00
// 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
//
//
//
// File : GeometryGUI.cxx
// Author : Lucien PIGNOLONI
// Module : GEOM
2003-05-12 21:24:23 +06:00
// $Header$
2003-07-09 20:33:44 +06:00
using namespace std;
2003-05-12 21:24:23 +06:00
#include "GeometryGUI.h"
// SALOME Includes
# 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_RightFrame.h"
#include "QAD_MessageBox.h"
#include "QAD_Resource.h"
#include "QAD_FileDlg.h"
#include "OCCViewer_ViewPort.h"
#include "OCCViewer_ViewPort3d.h"
#include "OCCViewer_Viewer3d.h"
#include "SALOME_NamingService.hxx"
#include "SALOME_ListIteratorOfListIO.hxx"
#include "SALOME_InteractiveObject.hxx"
#include "SALOMEGUI_ImportOperation.h"
#include "SALOMEGUI_QtCatchCorbaException.hxx"
#include "SALOMEGUI_NameDlg.h"
#include "utilities.h"
// Open CASCADE Includes
#include <AIS_Shape.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
#include <AIS_Drawer.hxx>
#include <AIS_Trihedron.hxx>
#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>
2003-07-09 20:33:44 +06:00
#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"
2003-05-12 21:24:23 +06:00
#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
2003-07-09 20:33:44 +06:00
#include "GeometryGUI_EllipseDlg.h" // Method ELLIPSE
2003-05-12 21:24:23 +06:00
#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;
/* The object itself created in the static method 'GetOrCreateGeometryGUI()' */
static GeometryGUI* GeomGUI = 0;
//=======================================================================
// 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 )
{
p->setFont ( font );
p->drawText( x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string );
}
QSize sizeHint()
{
return QFontMetrics( font ).size( AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string );
}
private:
QString string;
QFont font;
};
//=======================================================================
// function : GeometryGUI()
// purpose : Constructor
//=======================================================================
GeometryGUI::GeometryGUI() :
QObject()
{
}
//=======================================================================
// function : ~GeometryGUI()
// purpose : Destructor
//=======================================================================
GeometryGUI::~GeometryGUI()
{
}
//=======================================================================
// function : GetGeometryGUI() static
// purpose : Returns current 'GeomGUI' a static pointer
//=======================================================================
GeometryGUI* GeometryGUI::GetGeometryGUI( )
{
return GeomGUI;
}
//=====================================================================================
// 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;
}
//=======================================================================
// function : GetOrCreateGeometryGUI()
// purpose : Gets or create an object 'GeometryGUI' with initialisations
// : Returns 'GeomGUI' as a pointer
//=======================================================================
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");
2003-05-12 21:24:23 +06:00
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 )
{
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
//=======================================================================
bool GeometryGUI::GetTopoFromSelection(SALOME_Selection *Sel, TopoDS_Shape& tds)
{
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 ( 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;
}
//=====================================================================================
// 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();
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);
}
}
myDesktop->putInfo (tr("GEOM_PRP_SELECT_SUBSHAPES"));
return true ;
}
//=====================================================================================
// 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));
// 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.
//=======================================================================
int GeometryGUI::GetNameOfSelectedIObjects( SALOME_Selection* Sel,
QString& aName )
{
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;
}
//=======================================================================
// function : ConvertIOinGEOMAISShape()
// purpose :
//=======================================================================
Handle(GEOM_AISShape) GeometryGUI::ConvertIOinGEOMAISShape( const Handle(SALOME_InteractiveObject)& IO,
Standard_Boolean& testResult,
bool onlyInActiveView )
{
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;
}
//=======================================================================
// function : ConvertIORinGEOMAISShape()
// purpose :
//=======================================================================
Handle(GEOM_AISShape) GeometryGUI::ConvertIORinGEOMAISShape( const char * IOR,
Standard_Boolean& testResult,
bool onlyInActiveView )
{
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;
}
//=======================================================================
// function : ConvertIORinGEOMActor()
// purpose :
//=======================================================================
GEOM_Actor* GeometryGUI::ConvertIORinGEOMActor( const char * IOR,
Standard_Boolean& testResult,
bool onlyInActiveView )
{
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();
}
//=======================================================================
// function : ConvertIOinGEOMShape()
// purpose :
//=======================================================================
GEOM::GEOM_Shape_ptr GeometryGUI::ConvertIOinGEOMShape( const Handle(SALOME_InteractiveObject)& IO,
Standard_Boolean& testResult )
{
2003-11-04 15:36:56 +05:00
GEOM::GEOM_Shape_var aShape ;
2003-05-12 21:24:23 +06:00
testResult = false ;
2003-11-04 15:36:56 +05:00
2003-05-12 21:24:23 +06:00
/* 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() ) {
2003-11-04 15:36:56 +05:00
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();
}
2003-05-12 21:24:23 +06:00
}
}
/* 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) ;
2003-11-04 15:36:56 +05:00
if(!CORBA::is_nil(aShape)) testResult = true ;
return aShape._retn();
}
return aShape._retn();
2003-05-12 21:24:23 +06:00
}
//=======================================================================
// function : ConvertListOfIOInListOfIOR()
// purpose :
//=======================================================================
void GeometryGUI::ConvertListOfIOInListOfIOR( const SALOME_ListIO& aList,
GEOM::GEOM_Gen::ListOfIOR& listIOR )
{
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) ;
}
//=================================================================================
// function : GetShapeTypeString()
// purpose : for a single shape
//=================================================================================
bool GeometryGUI::GetShapeTypeString( const TopoDS_Shape& aShape, Standard_CString& aTypeString )
{
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 ;
}
//=================================================================================
// 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)
//=================================================================================
bool GeometryGUI::CreateArrowForLinearEdge( const TopoDS_Shape& tds, TopoDS_Shape& ArrowCone )
{
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 ;
}
//=======================================================================
// 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 )
{
/* 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 ;
}
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) ) ;
/* 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 ;
}
//=======================================================================
// function : MakePointAndDisplay
// purpose :
//=======================================================================
void GeometryGUI::MakePointAndDisplay( const double x, const double y, const double z )
{
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);
}
return ;
}
//=======================================================================
// 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);
}
}
//=======================================================================
// 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"));
}
}
catch (const SALOME::SALOME_Exception& S_ex) {
QtCatchCorbaException(S_ex);
}
}
//=======================================================================
// 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 );
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);
}
}
//=======================================================================
// function : MakeWorkingPlane()
// purpose : Change the point of view3d
//=======================================================================
void GeometryGUI::MakeWorkingPlane( const gp_Pnt P, const gp_Dir D)
{
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"));
}
//=======================================================================
// 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 ;
}
2003-07-09 20:33:44 +06:00
//=====================================================================================
// 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 ;
}
2003-05-12 21:24:23 +06:00
//=====================================================================================
// 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();
2003-07-09 20:33:44 +06:00
if ( ic->NbCurrents() )
2003-05-12 21:24:23 +06:00
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;
2003-07-09 20:33:44 +06:00
CurDrawer = aSh->Attributes();
2003-05-12 21:24:23 +06:00
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 ;
}
2003-07-09 20:33:44 +06:00
case 3014: // ELLIPSE
{
GeomGUI->EmitSignalDeactivateDialog() ;
SALOME_Selection* Sel = SALOME_Selection::Selection( GeomGUI->myActiveStudy->getSelection() );
GeometryGUI_EllipseDlg *aDlg = new GeometryGUI_EllipseDlg( parent, "", Sel ) ;
break ;
}
2003-05-12 21:24:23 +06:00
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
2003-05-19 13:18:06 +06:00
Engines::Component_var comp = GeomGUI->myDesktop->getEngine("FactoryServer","GEOM");
2003-05-12 21:24:23 +06:00
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" ) );
2003-05-12 21:24:23 +06:00
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" ) );
2003-05-12 21:24:23 +06:00
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" ) );
2003-05-12 21:24:23 +06:00
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()
{
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);
}
//=======================================================================
// 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 (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) ;
}
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);
}
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 : 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;
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) ;
}
catch (const SALOME::SALOME_Exception& S_ex) {
QtCatchCorbaException(S_ex);
}
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"));
}
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"));
}
}
}
}
}
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 );
}
void buildPresentation ( const Handle(SALOME_InteractiveObject)& theIO )
{
GeometryGUI::BuildPresentation(theIO);
}
void supportedViewType(int* buffer, int bufferSize)
{
if (!buffer || !bufferSize) return;
buffer[0] = (int)VIEW_OCC;
if (--bufferSize) buffer[1] = (int)VIEW_VTK;
}
}
//=====================================================================================
// 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);
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;
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;
}
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++;
}
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 ;
}
//=====================================================================================
// function : OnChamferGetAll()
// purpose :
//=====================================================================================
bool GeometryGUI::OnChamferGetAll(const TopoDS_Shape& ShapeTopo, const double D1, const double D2, const int SubShapeType, const char* ShapeTopoIOR)
{
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;
}
//=====================================================================================
// 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 ;
}
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();
}
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 ( 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 ;
}
//=====================================================================================
// function : MakeCDGAndDisplay()
// purpose :
//=====================================================================================
void GeometryGUI::MakeCDGAndDisplay(GEOM::GEOM_Shape_ptr Shape)
{
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 ;
}
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;
}