X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Object.cxx;h=5d3e5622eaa6f6c7a84a617b7cfa16e83bbb639f;hp=4b43e56acade03d620d0d7120d01417f19b9733f;hb=81a42f6507af7d522109aeec1d2d107988d01ff6;hpb=0190a6708de52fbb9d201fddc3c4260858f32d19 diff --git a/src/OBJECT/SMESH_Object.cxx b/src/OBJECT/SMESH_Object.cxx index 4b43e56ac..5d3e5622e 100644 --- a/src/OBJECT/SMESH_Object.cxx +++ b/src/OBJECT/SMESH_Object.cxx @@ -160,6 +160,30 @@ namespace{ } + inline void AddPolygonsWithID(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->AddPolygonalFaceWithID(nodes_ids, aFaceId); + if (!anElem) + EXCEPTION(runtime_error, "SMDS_Mesh::FindElement - cannot AddPolygonalFaceWithID for ID = " + << anElemId); + } + } + + inline void AddTetrasWithID(SMDS_Mesh* theMesh, SMESH::log_array_var& theSeq, CORBA::Long theId) @@ -175,7 +199,7 @@ namespace{ anIndexes[anIndexId+4], anIndexes[anIndexId]); if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<0){ for( vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++ ) SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]); - + } break; } default: @@ -581,7 +673,7 @@ void SMESH_VisualObjDef::buildElemPrs() } aConnectivity->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( getCellType( aType, aNbNodes ) ); + aCellTypesArray->InsertNextValue( getCellType( aType, anElem->IsPoly(),aNbNodes ) ); iElem++; } @@ -694,25 +786,27 @@ void SMESH_MeshObj::Update( int theIsClear ) if( !aLength ) return; - + for ( CORBA::Long anId = 0; anId < aLength; anId++) { const SMESH::double_array& aCoords = aSeq[anId].coords; const SMESH::long_array& anIndexes = aSeq[anId].indexes; CORBA::Long anElemId = 0, aNbElems = aSeq[anId].number; CORBA::Long aCommand = aSeq[anId].commandType; - + switch(aCommand) { - case SMESH::ADD_NODE : AddNodesWithID ( myMesh, aSeq, anId ); break; - case SMESH::ADD_EDGE : AddEdgesWithID ( myMesh, aSeq, anId ); break; - case SMESH::ADD_TRIANGLE : AddTriasWithID ( myMesh, aSeq, anId ); break; - case SMESH::ADD_QUADRANGLE : AddQuadsWithID ( myMesh, aSeq, anId ); break; - case SMESH::ADD_TETRAHEDRON: AddTetrasWithID ( myMesh, aSeq, anId ); break; - case SMESH::ADD_PYRAMID : AddPiramidsWithID( myMesh, aSeq, anId ); break; - case SMESH::ADD_PRISM : AddPrismsWithID ( myMesh, aSeq, anId ); break; - case SMESH::ADD_HEXAHEDRON : AddHexasWithID ( myMesh, aSeq, anId ); break; - + case SMESH::ADD_NODE : AddNodesWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_EDGE : AddEdgesWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_TRIANGLE : AddTriasWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_QUADRANGLE : AddQuadsWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_POLYGON : AddPolygonsWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_TETRAHEDRON: AddTetrasWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_PYRAMID : AddPiramidsWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_PRISM : AddPrismsWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_HEXAHEDRON : AddHexasWithID ( myMesh, aSeq, anId ); break; + case SMESH::ADD_POLYHEDRON : AddPolyhedronsWithID( myMesh, aSeq, anId ); break; + case SMESH::REMOVE_NODE: for( ; anElemId < aNbElems; anElemId++ ) myMesh->RemoveNode( FindNode( myMesh, anIndexes[anElemId] ) ); @@ -749,6 +843,9 @@ void SMESH_MeshObj::Update( int theIsClear ) } break; + case SMESH::CHANGE_POLYHEDRON_NODES: + ChangePolyhedronNodes(myMesh, aSeq, anId); + break; case SMESH::RENUMBER: for(CORBA::Long i=0; anElemId < aNbElems; anElemId++, i+=3) {