Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "SMESHGUI_GEOMGenUtils.h"
00029 #include "SMESHGUI_Utils.h"
00030
00031
00032 #include <GeometryGUI.h>
00033
00034
00035 #include <SALOMEDS_SObject.hxx>
00036
00037
00038 #include <SALOMEconfig.h>
00039 #include CORBA_CLIENT_HEADER(SMESH_Mesh)
00040
00041 namespace SMESH
00042 {
00043 GEOM::GEOM_Gen_var GetGEOMGen()
00044 {
00045 static GEOM::GEOM_Gen_var aGEOMGen;
00046
00047 if(CORBA::is_nil(aGEOMGen)) {
00048 if ( GeometryGUI::GetGeomGen()->_is_nil() )
00049 GeometryGUI::InitGeomGen();
00050 aGEOMGen = GeometryGUI::GetGeomGen();
00051 }
00052 return aGEOMGen;
00053 }
00054
00055 GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh(_PTR(SObject) theMeshOrSubmesh,
00056 bool* isMesh)
00057 {
00058 SALOMEDS_SObject* aMeshOrSubmesh = _CAST(SObject,theMeshOrSubmesh);
00059 if(aMeshOrSubmesh) {
00060 CORBA::Object_var Obj = aMeshOrSubmesh->GetObject();
00061 if ( !CORBA::is_nil( Obj ) ) {
00062 SMESH::SMESH_Mesh_var aMesh =
00063 SObjectToInterface<SMESH::SMESH_Mesh>( theMeshOrSubmesh );
00064 if ( !aMesh->_is_nil() )
00065 {
00066 if ( isMesh ) *isMesh = true;
00067 return aMesh->GetShapeToMesh();
00068 }
00069 SMESH::SMESH_subMesh_var aSubmesh =
00070 SObjectToInterface<SMESH::SMESH_subMesh>( theMeshOrSubmesh );
00071 if ( !aSubmesh->_is_nil() )
00072 {
00073 if ( isMesh ) *isMesh = false;
00074 return aSubmesh->GetSubShape();
00075 }
00076 }
00077 }
00078 return GEOM::GEOM_Object::_nil();
00079 }
00080
00081 GEOM::GEOM_Object_ptr GetGeom (_PTR(SObject) theSO)
00082 {
00083 if (!theSO)
00084 return GEOM::GEOM_Object::_nil();
00085
00086 _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
00087 if (!aStudy)
00088 return GEOM::GEOM_Object::_nil();
00089
00090 _PTR(ChildIterator) anIter (aStudy->NewChildIterator(theSO));
00091 for ( ; anIter->More(); anIter->Next()) {
00092 _PTR(SObject) aSObject = anIter->Value();
00093 _PTR(SObject) aRefSOClient;
00094 GEOM::GEOM_Object_var aMeshShape;
00095
00096 if (aSObject->ReferencedObject(aRefSOClient)) {
00097 SALOMEDS_SObject* aRefSO = _CAST(SObject,aRefSOClient);
00098 aMeshShape = GEOM::GEOM_Object::_narrow(aRefSO->GetObject());
00099 } else {
00100 SALOMEDS_SObject* aSO = _CAST(SObject,aSObject);
00101 aMeshShape = GEOM::GEOM_Object::_narrow(aSO->GetObject());
00102 }
00103
00104 if (!aMeshShape->_is_nil())
00105 return aMeshShape._retn();
00106 }
00107 return GEOM::GEOM_Object::_nil();
00108 }
00109
00110 GEOM::GEOM_Object_ptr GetSubShape (GEOM::GEOM_Object_ptr theMainShape,
00111 long theID)
00112 {
00113 GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
00114 _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
00115 if (!aStudy || geomGen->_is_nil())
00116 return GEOM::GEOM_Object::_nil();
00117 GEOM::GEOM_IShapesOperations_var aShapesOp = geomGen->GetIShapesOperations(aStudy->StudyId());
00118 if (aShapesOp->_is_nil())
00119 return GEOM::GEOM_Object::_nil();
00120 GEOM::GEOM_Object_var subShape = aShapesOp->GetSubShape (theMainShape,theID);
00121 return subShape._retn();
00122 }
00123 }