X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Swig.cxx;fp=src%2FSMESHGUI%2FSMESHGUI_Swig.cxx;h=b571990925dd31f0786a6313fd869d76dc8b1f20;hp=0000000000000000000000000000000000000000;hb=3973ceea250d2a077cdb5a798eb7c6151fa9c568;hpb=26dabc480d24eb0f05427661547c8523e8eadc24 diff --git a/src/SMESHGUI/SMESHGUI_Swig.cxx b/src/SMESHGUI/SMESHGUI_Swig.cxx new file mode 100644 index 000000000..b57199092 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_Swig.cxx @@ -0,0 +1,405 @@ +using namespace std; +// File : SMESH_Swig.cxx +// Created : Mon Jun 17 13:41:43 2002 +// Author : Nicolas REJNERI + +// Project : SALOME +// Module : SMESH +// Copyright : Open CASCADE 2002 +// $Header$ + + +#include "SMESHGUI_Swig.hxx" + +#include "Utils_ORB_INIT.hxx" +#include "Utils_SINGLETON.hxx" + +// SALOME Includes +#include "QAD_Application.h" +#include "QAD_Desktop.h" +#include "QAD_ResourceMgr.h" + +#include "utilities.h" + +// Open CASCADE Includes +#include + +// IDL Headers +#include +#include CORBA_SERVER_HEADER(SMESH_Gen) +#include CORBA_SERVER_HEADER(SMESH_Mesh) +#include CORBA_SERVER_HEADER(SMESH_Hypothesis) +#include CORBA_SERVER_HEADER(GEOM_Shape) + +static CORBA::ORB_var _orb; + +static char* ObjectToString (CORBA::Object_ptr obj) +{ + return _orb->object_to_string(obj); +} + +static CORBA::Object_ptr StringToObject (const char* ior) +{ + return _orb->string_to_object(ior); +} + +SMESH_Swig::SMESH_Swig() +{ + MESSAGE("Constructeur"); + setOrb(); +} + +void SMESH_Swig::Init(int studyID) +{ + MESSAGE("Init"); + Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "SMESH"); + SMESH::SMESH_Gen_var CompMesh = SMESH::SMESH_Gen::_narrow(comp); + + QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager(); + if ( resMgr ) { + QString msg; + if (!resMgr->loadResources( "SMESH", msg )) + MESSAGE ( msg ) + } + + CORBA::Object_var obj = QAD_Application::getDesktop()->getNameService()->Resolve("/myStudyManager"); + SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj); + myStudy = myStudyMgr->GetStudyByID(studyID); + myStudyBuilder = myStudy->NewBuilder(); + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributePixMap_var aPixmap; + + SALOMEDS::SComponent_var father = myStudy->FindComponent("MESH"); + + if (father->_is_nil()) { + father = myStudyBuilder->NewComponent("MESH"); + anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + //NRI aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT")); + aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SMESH" ) ); + anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" ); + } + myStudyBuilder->DefineComponentInstance(father, CompMesh ); + mySComponentMesh = SALOMEDS::SComponent::_narrow( father ); + + // Tags definition + Tag_HypothesisRoot = 1; + Tag_AlgorithmsRoot = 2; + + Tag_RefOnShape = 1; + Tag_RefOnAppliedHypothesis = 2; + Tag_RefOnAppliedAlgorithms = 3; + + Tag_SubMeshOnVertex = 4; + Tag_SubMeshOnEdge = 5; + Tag_SubMeshOnFace = 6; + Tag_SubMeshOnSolid = 7; + Tag_SubMeshOnCompound = 8; +} + +SMESH_Swig::~SMESH_Swig() +{ + MESSAGE("Destructeur"); +} + + +const char* SMESH_Swig::AddNewMesh(const char* IOR) +{ + MESSAGE("AddNewMesh"); + //Find or Create Hypothesis root + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributeIOR_var anIOR; + SALOMEDS::AttributeSelectable_var aSelAttr; + SALOMEDS::AttributePixMap_var aPixmap; + + SALOMEDS::SObject_var HypothesisRoot; + if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) { + HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS")); + anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); + anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + } + + SALOMEDS::SObject_var AlgorithmsRoot; + if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) { + AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS")); + anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" ); + anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + } + + // Add New Mesh + SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh); + anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" ); + anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR"); + anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); + anIOR->SetValue(IOR); + return SALOMEDS::SObject::_narrow( newMesh )->GetID(); +} + +const char* SMESH_Swig::AddNewHypothesis(const char* IOR) +{ + MESSAGE("AddNewHypothesis"); + //Find or Create Hypothesis root + SALOMEDS::SObject_var HypothesisRoot; + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributeIOR_var anIOR; + SALOMEDS::AttributeSelectable_var aSelAttr; + SALOMEDS::AttributePixMap_var aPixmap; + + if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) { + HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS")); + anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); + } + // Add New Hypothesis + SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) ); + QString aType = H->GetName(); + aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType ); +// if ( aType.compare("LocalLength") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" ); +// else if ( aType.compare("NumberOfSegments") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" ); +// else if ( aType.compare("MaxElementArea") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" ); +// else if ( aType.compare("MaxElementVolume") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" ); + anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR"); + anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); + anIOR->SetValue(IOR); + return SALOMEDS::SObject::_narrow(newHypo)->GetID(); +} + +const char* SMESH_Swig::AddNewAlgorithms(const char* IOR) +{ + MESSAGE("AddNewAlgorithms"); + //Find or Create Algorithms root + SALOMEDS::SObject_var AlgorithmsRoot; + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributeIOR_var anIOR; + SALOMEDS::AttributeSelectable_var aSelAttr; + SALOMEDS::AttributePixMap_var aPixmap; + + if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) { + AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS")); + anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" ); + } + // Add New Algorithms + SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) ); + QString aType = H->GetName(); + aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType ); +// if ( aType.compare("Regular_1D") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" ); +// else if ( aType.compare("MEFISTO_2D") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" ); +// else if ( aType.compare("Quadrangle_2D") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" ); +// else if ( aType.compare("Hexa_3D") == 0 ) +// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" ); + anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR"); + anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); + anIOR->SetValue(IOR); + return SALOMEDS::SObject::_narrow(newHypo)->GetID(); +} + +void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry) +{ + SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry ); + SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry ); + + if ( !SO_MorSM->_is_nil() && !SO_GeomShape->_is_nil() ) { + SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape); + myStudyBuilder->Addreference (SO,SO_GeomShape); + } +} + +void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry) +{ + SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry ); + SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry ); + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributeSelectable_var aSelAttr; + SALOMEDS::AttributePixMap_var aPixmap; + + if ( !SO_MorSM->_is_nil() && !SO_Hypothesis->_is_nil() ) { + + //Find or Create Applied Hypothesis root + SALOMEDS::SObject_var AHR; + if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) { + AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis); + anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS")); + anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); + } + SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR); + myStudyBuilder->Addreference (SO,SO_Hypothesis); + } +} +void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry) +{ + SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry ); + SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry ); + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributeSelectable_var aSelAttr; + SALOMEDS::AttributePixMap_var aPixmap; + + if ( !SO_MorSM->_is_nil() && !SO_Algorithms->_is_nil() ) { + //Find or Create Applied Algorithms root + SALOMEDS::SObject_var AHR; + if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) { + AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms); + anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS")); + anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap"); + aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" ); + } + SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR); + myStudyBuilder->Addreference (SO,SO_Algorithms); + } +} + +void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry ) +{ + SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry ); + if ( !SO_Applied_Hypothesis->_is_nil() ) + myStudyBuilder->RemoveObject(SO_Applied_Hypothesis); +} + + +const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST) +{ + SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry ); + if ( !SO_Mesh->_is_nil() ) { + + long Tag_Shape ; + Standard_CString Name; + + if (ST == TopAbs_SOLID) {Tag_Shape = Tag_SubMeshOnSolid; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));} + else if (ST == TopAbs_FACE) {Tag_Shape = Tag_SubMeshOnFace; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));} + else if (ST == TopAbs_EDGE) {Tag_Shape = Tag_SubMeshOnEdge; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));} + else if (ST == TopAbs_VERTEX){Tag_Shape = Tag_SubMeshOnVertex; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));} + else { + Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound")); + } + SALOMEDS::SObject_var SubmeshesRoot; + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + SALOMEDS::AttributeIOR_var anIOR; + SALOMEDS::AttributeSelectable_var aSelAttr; + if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) { + SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape); + anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(Name); + anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable"); + aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); + aSelAttr->SetSelectable(false); + } + SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot); + anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR"); + anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); + anIOR->SetValue(SM_IOR); + return SALOMEDS::SObject::_narrow( SO )->GetID(); + } + return ""; +} + +const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry, + const char* SM_IOR, int ST) +{ + SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry ); + if ( !SO_GeomShape->_is_nil() ) { + const char * SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST); + SALOMEDS::SObject_var SO_SM = myStudy->FindObjectID( SM_Entry ); + if ( !SO_SM->_is_nil() ) { + SetShape (GeomShape_Entry, SM_Entry); + return SALOMEDS::SObject::_narrow( SO_SM )->GetID(); + } + } + return ""; +} + +void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry ) +{ + // SMESH_Actor* Mesh = smeshGUI->ReadScript(aM); +} + +void SMESH_Swig::SetName(const char* Entry, const char* Name) +{ + SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry ); + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeName_var aName; + if ( !SO->_is_nil() ) { + anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName"); + aName = SALOMEDS::AttributeName::_narrow(anAttr); + aName->SetValue(Name); + } +} + + +void SMESH_Swig::setOrb() +{ + try { + ORB_INIT &init = *SINGLETON_::Instance(); + ASSERT(SINGLETON_::IsAlreadyExisting()); + _orb = init( 0 , 0 ); + } catch (...) { + INFOS("internal error : orb not found"); + _orb = 0; + } + ASSERT(! CORBA::is_nil(_orb)); +}