X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHClient%2FSMESH_Client.cxx;h=f556f1a9245d175477f2d6f2900fc7597f3d4f8b;hp=f7195b89e3f6687751baea46c397fe3e41e6f335;hb=88141f757b048eaa5aae0be49faaf274448bbcaf;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/SMESHClient/SMESH_Client.cxx b/src/SMESHClient/SMESH_Client.cxx index f7195b89e..f556f1a92 100644 --- a/src/SMESHClient/SMESH_Client.cxx +++ b/src/SMESHClient/SMESH_Client.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -24,8 +24,10 @@ // Module : SMESH #include "SMESH_Client.hxx" -#include "SMESH_Mesh.hxx" + +#include "SMESHDS_Mesh.hxx" #include "SMESHDS_Script.hxx" +#include "SMESH_Mesh.hxx" #include "SALOME_NamingService.hxx" #include "SALOME_LifeCycleCORBA.hxx" @@ -37,7 +39,7 @@ #include "Basics_Utils.hxx" #include "utilities.h" -#ifdef WNT +#ifdef WIN32 #include #else #include @@ -54,13 +56,14 @@ #endif #ifdef _DEBUG_ -static int MYDEBUG = 1; +static int MYDEBUG = 0; #else static int MYDEBUG = 0; #endif namespace { + using std::runtime_error; //======================================================================= //function : FindNode @@ -90,7 +93,7 @@ namespace const SMESH::double_array& aCoords = theSeq[theId].coords; const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(3*aNbElems != aCoords.length()) + if(3*aNbElems != (CORBA::Long) aCoords.length()) EXCEPTION(runtime_error,"AddNodesWithID - 3*aNbElems != aCoords.length()"); for(CORBA::Long aCoordId = 0; anElemId < aNbElems; anElemId++, aCoordId+=3){ SMDS_MeshElement* anElem = theMesh->AddNodeWithID(aCoords[aCoordId], @@ -112,7 +115,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if (2*aNbElems != anIndexes.length()) + if (2*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddEdgeWithID - 2*aNbElems != aCoords.length()"); CORBA::Long anIndexId = 0; for (; anElemId < aNbElems; anElemId++, anIndexId+=2) @@ -135,9 +138,9 @@ namespace const SMESH::double_array& aDiameter = theSeq[theId].coords; const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if (2*aNbElems != anIndexes.length() ) + if (2*aNbElems != (CORBA::Long) anIndexes.length() ) EXCEPTION(runtime_error,"AddEdgeWithID - 2*aNbElems != anIndexes.length()"); - if (aNbElems != aDiameter.length()) + if (aNbElems != (CORBA::Long) aDiameter.length()) EXCEPTION(runtime_error,"AddEdgeWithID - aNbElems != aDiameter.length()"); CORBA::Long anIndexId = 0; for (; anElemId < aNbElems; anElemId++, anIndexId+=2) @@ -160,7 +163,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(3*aNbElems != anIndexes.length()) + if(3*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddEdgeWithID - 3*aNbElems != aCoords.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=3){ SMDS_MeshElement* anElem = theMesh->AddEdgeWithID(anIndexes[anIndexId+1], @@ -181,7 +184,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(4*aNbElems != anIndexes.length()) + if(4*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddTriasWithID - 4*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=4){ SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1], @@ -203,7 +206,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(5*aNbElems != anIndexes.length()) + if(5*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadsWithID - 4*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){ SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1], @@ -244,6 +247,33 @@ namespace } + //======================================================================= + //function : AddQaudPolygonsWithID + //======================================================================= + inline void AddQuadPolygonsWithID(SMDS_Mesh* theMesh, + SMESH::log_array_var& theSeq, + CORBA::Long theId) + { + const SMESH::long_array& anIndexes = theSeq[theId].indexes; + CORBA::Long anIndexId = 0, aNbElems = theSeq[theId].number; + + for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++) { + int aFaceId = anIndexes[anIndexId++]; + + int aNbNodes = anIndexes[anIndexId++]; + std::vector nodes_ids (aNbNodes); + for (int i = 0; i < aNbNodes; i++) { + nodes_ids[i] = anIndexes[anIndexId++]; + } + + SMDS_MeshElement* anElem = theMesh->AddQuadPolygonalFaceWithID(nodes_ids, aFaceId); + if (!anElem) + EXCEPTION(runtime_error, "SMDS_Mesh::FindElement - cannot AddQaudPolygonalFaceWithID for ID = " + << anElemId); + } + } + + //======================================================================= //function : AddTetrasWithID //======================================================================= @@ -253,7 +283,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(5*aNbElems != anIndexes.length()) + if(5*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddTetrasWithID - 5*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -276,7 +306,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(6*aNbElems != anIndexes.length()) + if(6*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddPiramidsWithID - 6*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=6){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -300,7 +330,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(7*aNbElems != anIndexes.length()) + if(7*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddPrismsWithID - 7*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=7){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -325,7 +355,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(9*aNbElems != anIndexes.length()) + if(9*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddHexasWithID - 9*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=9){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -351,7 +381,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(13*aNbElems != anIndexes.length()) + if(13*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddHexPrismWithID - 13*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=13){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -416,7 +446,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(4*aNbElems != anIndexes.length()) + if(4*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadEdgeWithID - 4*aNbElems != aCoords.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=4){ SMDS_MeshElement* anElem = theMesh->AddEdgeWithID(anIndexes[anIndexId+1], @@ -438,7 +468,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(7*aNbElems != anIndexes.length()) + if(7*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadTriasWithID - 7*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=7){ SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1], @@ -463,7 +493,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(9*aNbElems != anIndexes.length()) + if(9*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadQuadsWithID - 9*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=9){ SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1], @@ -489,7 +519,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(10*aNbElems != anIndexes.length()) + if(10*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddBiQuadQuadsWithID - 10*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=10){ SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1], @@ -507,6 +537,31 @@ namespace } } + //======================================================================= + //function : AddBiQuadTriasWithID + //======================================================================= + inline void AddBiQuadTriasWithID(SMDS_Mesh* theMesh, + SMESH::log_array_var theSeq, + CORBA::Long theId) + { + const SMESH::long_array& anIndexes = theSeq[theId].indexes; + CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; + if(8*aNbElems != (CORBA::Long) anIndexes.length()) + EXCEPTION(runtime_error,"AddBiQuadTriasWithID - 8*aNbElems != anIndexes.length()"); + for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=8){ + SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1], + anIndexes[anIndexId+2], + anIndexes[anIndexId+3], + anIndexes[anIndexId+4], + anIndexes[anIndexId+5], + anIndexes[anIndexId+6], + anIndexes[anIndexId+7], + anIndexes[anIndexId]); + if(!anElem) + EXCEPTION(runtime_error,"AddBiQuadTriasWithID() - cannot AddFaceWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], @@ -546,7 +601,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(14*aNbElems != anIndexes.length()) + if(14*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadPiramidsWithID - 14*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=14){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -578,7 +633,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(16*aNbElems != anIndexes.length()) + if(16*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadPentasWithID - 16*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=16){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -612,7 +667,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(21*aNbElems != anIndexes.length()) + if(21*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddQuadHexasWithID - 21*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=21){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -650,7 +705,7 @@ namespace { const SMESH::long_array& anIndexes = theSeq[theId].indexes; CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(28*aNbElems != anIndexes.length()) + if(28*aNbElems != (CORBA::Long) anIndexes.length()) EXCEPTION(runtime_error,"AddTriQuadHexasWithID - 28*aNbElems != anIndexes.length()"); for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=28){ SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], @@ -729,7 +784,7 @@ SMESH_Client::GetSMESHGen(CORBA::ORB_ptr theORB, static SMESH::SMESH_Gen_var aMeshGen; if(CORBA::is_nil(aMeshGen.in())){ -#ifdef WNT +#ifdef WIN32 long aClientPID = (long)_getpid(); #else long aClientPID = (long)getpid(); @@ -762,22 +817,19 @@ SMESH_Client::SMESH_Client(CORBA::ORB_ptr theORB, mySMESHDSMesh(NULL), mySMDSMesh(NULL) { - MESSAGE("SMESH_Client::SMESH_Client"); + if ( MYDEBUG ) MESSAGE("SMESH_Client::SMESH_Client"); myMeshServer->Register(); CORBA::Boolean anIsEmbeddedMode; GetSMESHGen(theORB,anIsEmbeddedMode); if(anIsEmbeddedMode){ - if ( MYDEBUG ) - MESSAGE("Info: The same process, update mesh by pointer "); + if ( MYDEBUG ) MESSAGE("Info: The same process, update mesh by pointer "); // just set client mesh pointer to server mesh pointer //SMESH_Mesh* aMesh = reinterpret_cast(theMesh->GetMeshPtr()); CORBA::LongLong pointeur = theMesh->GetMeshPtr(); - if( MYDEBUG ) - MESSAGE("SMESH_Client::SMESH_Client pointeur "< (pointeur); - if ( MYDEBUG ) - MESSAGE("SMESH_Client::SMESH_Client aMesh "<GetMeshDS()->IsEmbeddedMode()){ if(anIsEmbeddedMode){ mySMESHDSMesh = aMesh->GetMeshDS(); @@ -833,20 +885,22 @@ bool SMESH_Client::Update(bool theIsClear) { bool anIsModified = true; - if(mySMESHDSMesh){ - MESSAGE("Update mySMESHDSMesh"); + if(mySMESHDSMesh) + { + if ( MYDEBUG ) MESSAGE("Update mySMESHDSMesh"); SMESHDS_Script* aScript = mySMESHDSMesh->GetScript(); anIsModified = aScript->IsModified(); aScript->SetModified(false); - }else{ - MESSAGE("Update CORBA"); + } + else + { + if ( MYDEBUG ) MESSAGE("Update CORBA"); SMESH::log_array_var aSeq = myMeshServer->GetLog( theIsClear ); CORBA::Long aLength = aSeq->length(); anIsModified = aLength > 0; - if( MYDEBUG ) - MESSAGE( "Update: length of the script is "< aNodes( nbNodes ); + std::vector aNodes( nbNodes ); for ( int iNode = 0; iNode < nbNodes; iNode++ ) aNodes[ iNode ] = FindNode( mySMDSMesh, anIndexes[i++] ); // change