2 // File : GeometryGUI_Swig.cxx
3 // Created : Tue Mar 26 15:08:38 2002
4 // Author : Nicolas REJNERI, Paul RASCLE
7 // Copyright : Open CASCADE, EDF 2002
10 #include "GeometryGUI_Swig.hxx"
11 #include "utilities.h"
13 #include "QAD_Application.h"
14 #include "QAD_Desktop.h"
15 #include "QAD_Study.h"
16 #include "QAD_StudyFrame.h"
17 #include "QAD_RightFrame.h"
18 #include "SALOMEGUI_ImportOperation.h"
20 #include "OCCViewer_Viewer3d.h"
21 #include "VTKViewer_RenderWindowInteractor.h"
22 #include "VTKViewer_ViewFrame.h"
24 #include "GEOM_Actor.h"
25 #include "GEOM_Client.hxx"
26 #include "GEOM_AISShape.hxx"
27 #include "GEOM_AssemblyBuilder.h"
28 #include "GEOM_InteractiveObject.hxx"
30 #include <TopExp_Explorer.hxx>
31 #include <TopTools_MapOfShape.hxx>
32 #include <BRepAdaptor_Surface.hxx>
33 #include <BRepAdaptor_Curve.hxx>
34 #include <GeomAbs_CurveType.hxx>
35 #include <GeomAbs_SurfaceType.hxx>
37 #include <TopoDS_Edge.hxx>
38 #include <TopoDS_Face.hxx>
40 static GEOM_Client ShapeReader;
42 GeometryGUI_Swig::GeometryGUI_Swig()
44 // MESSAGE("Constructeur");
47 GeometryGUI_Swig::~GeometryGUI_Swig()
49 // MESSAGE("Destructeur");
52 void GeometryGUI_Swig::createAndDisplayGO(const char* Entry)
54 // MESSAGE("createAndDisplayGO");
55 QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
56 SALOMEDS::Study_var aStudy = ActiveStudy->getStudyDocument();
57 SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
59 Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "Geometry");
60 GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp);
62 Standard_CString Fatherior = "";
63 SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
64 aStudyBuilder->DefineComponentInstance( father, Geom );
65 father->ComponentIOR( Fatherior );
67 SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(ActiveStudy->getActiveStudyFrame()->entry());
69 SALOMEDS::SObject_var obj = aStudy->FindObjectID(Entry);
70 SALOMEDS::GenericAttribute_var anAttr;
71 SALOMEDS::AttributeName_var aName;
72 SALOMEDS::AttributeIOR_var anIOR;
74 if ( !obj->FindAttribute(anAttr, "AttributeIOR"))
76 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
77 GEOM::GEOM_Shape_var aShape = Geom->GetIORFromString(anIOR->Value());
78 TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape);
80 if ( !obj->_is_nil() ) {
81 if (obj->FindAttribute(anAttr, "AttributeName")) {
82 aName = SALOMEDS::AttributeName::_narrow(anAttr);
84 QAD_Operation* op = new SALOMEGUI_ImportOperation( ActiveStudy );
87 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
88 aStudyBuilder->Addreference(newObj1, obj);
92 if ( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK
93 //vtkQGLRenderWindowInteractor* myRenderInter = ActiveStudy->getActiveStudyFrame()->getRightFrame()->getVTKView()->getRWInteractor();
94 VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
95 int themode = myRenderInter->GetDisplayMode();
97 vtkActorCollection* theActors =
98 GEOM_AssemblyBuilder::BuildActors(Shape,0,themode,Standard_True);
99 theActors->InitTraversal();
100 vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
101 while(!(anActor==NULL)) {
102 GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor );
103 Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(),
106 IO->setEntry(obj->GetID());
108 GActor->setName( aName->Value() );
110 myRenderInter->Display(GActor);
111 anActor = (vtkActor*)theActors->GetNextActor();
113 myRenderInter->Update();
115 else if ( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC
117 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
118 // QAD_Viewer3d* v3d = ActiveStudy->getActiveStudyFrame()->getViewerOCC();
119 Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
120 Handle(GEOM_AISShape) aSh = new GEOM_AISShape(Shape, aName->Value());
121 Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(),
125 IO->setEntry(obj->GetID());
127 aSh->setName( aName->Value() );
129 ic->AddOrRemoveCurrentObject(aSh, true);
133 ActiveStudy->updateObjBrowser( true );
136 int GeometryGUI_Swig::getIndexTopology(const char* SubIOR, const char* IOR)
138 Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "Geometry");
139 GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp);
141 GEOM::GEOM_Shape_var aMainShape = Geom->GetIORFromString(IOR);
142 TopoDS_Shape shape = ShapeReader.GetShape(Geom, aMainShape);
144 GEOM::GEOM_Shape_var aSubShape = Geom->GetIORFromString(SubIOR);
145 TopoDS_Shape subshape = ShapeReader.GetShape(Geom, aSubShape);
147 TopExp_Explorer Exp ( shape, subshape.ShapeType() );
149 TopTools_MapOfShape M;
150 while ( Exp.More() ) {
151 if ( M.Add(Exp.Current()) ) {
152 if ( Exp.Current().IsSame(subshape) )
161 const char* GeometryGUI_Swig::getShapeTypeString(const char* IOR)
163 Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "Geometry");
164 GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp);
166 GEOM::GEOM_Shape_var aShape = Geom->GetIORFromString(IOR);
167 TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape);
169 if( shape.IsNull() ) {
170 return "Null Shape" ;
173 switch (shape.ShapeType() )
175 case TopAbs_COMPOUND:
176 { return "Compound" ;}
177 case TopAbs_COMPSOLID:
178 { return "Compound Solid" ;}
185 BRepAdaptor_Surface surf(TopoDS::Face(shape));
186 if ( surf.GetType() == GeomAbs_Plane ) {
188 } else if ( surf.GetType() == GeomAbs_Cylinder ) {
189 return "Cylindrical Face" ;
190 } else if ( surf.GetType() == GeomAbs_Sphere ) {
191 return "Spherical Face" ;
192 } else if ( surf.GetType() == GeomAbs_Torus ) {
193 return "Toroidal Face" ;
194 } else if ( surf.GetType() == GeomAbs_Cone ) {
195 return "Conical Face" ;
197 return "GEOM::FACE" ;
204 BRepAdaptor_Curve curv(TopoDS::Edge(shape));
205 if ( curv.GetType() == GeomAbs_Line ) {
206 if ( (Abs(curv.FirstParameter()) >= 1E6 ) ||
207 (Abs(curv.LastParameter()) >= 1E6 )) {
211 } else if ( curv.GetType() == GeomAbs_Circle ) {
212 if ( curv.IsClosed() )
228 const char* GeometryGUI_Swig::getShapeTypeIcon(const char* IOR)
230 Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "Geometry");
231 GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp);
233 GEOM::GEOM_Shape_var aShape = Geom->GetIORFromString(IOR);
235 if( aShape->_is_nil() ) {
239 switch (aShape->ShapeType() )
241 case TopAbs_COMPOUND:
242 { return "ICON_OBJBROWSER_COMPOUND" ;}
243 case TopAbs_COMPSOLID:
244 { return "ICON_OBJBROWSER_COMPSOLID" ;}
246 { return "ICON_OBJBROWSER_SOLID" ;}
248 { return "ICON_OBJBROWSER_SHELL" ;}
250 { return "ICON_OBJBROWSER_FACE" ;}
252 { return "ICON_OBJBROWSER_WIRE" ;}
254 { return "ICON_OBJBROWSER_EDGE" ;}
256 { return "ICON_OBJBROWSER_VERTEX" ;}
261 void GeometryGUI_Swig::setDisplayMode(const char* Entry, int mode)
263 QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy();
264 Handle(SALOME_InteractiveObject) IO =
265 myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry );
267 if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK
268 VTKViewer_RenderWindowInteractor* myRenderInter =
269 ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
271 myRenderInter->SwitchRepresentation(IO, mode);
272 myRenderInter->Update();
274 else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC
276 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
277 v3d->SwitchRepresentation(IO, mode);
281 void GeometryGUI_Swig::setColor(const char* Entry, int red, int green, int blue)
283 QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy();
284 QColor c = QColor (red, green, blue);
285 Handle(SALOME_InteractiveObject) IO =
286 myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry );
288 if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK
289 VTKViewer_RenderWindowInteractor* myRenderInter =
290 ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
291 myRenderInter->SetColor(IO,c);
292 myRenderInter->Update();
294 else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC
296 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
301 void GeometryGUI_Swig::setTransparency(const char* Entry, float transp)
303 QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy();
304 Handle(SALOME_InteractiveObject) IO =
305 myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry );
307 if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK
308 VTKViewer_RenderWindowInteractor* myRenderInter =
309 ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
310 myRenderInter->SetTransparency(IO,transp);
311 myRenderInter->Update();
313 else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC
315 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
316 v3d->SetTransparency(IO,transp);