X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverDAT%2FDriverDAT_R_SMDS_Mesh.cxx;h=26742f7e93020fdd140dbcff3d67b970041a36c3;hp=0990acc5d5703a9049da1ecf42fba316488daac8;hb=251f8c052dd12dd29922210dc901b295fe999a0e;hpb=7b70ad87bf8f5c46b2751f94cd196932b9ae7122 diff --git a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx b/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx index 0990acc5d..26742f7e9 100644 --- a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx +++ b/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx @@ -1,235 +1,167 @@ -// SMESH DriverDAT : driver to read and write 'dat' files +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // +// 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, 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : DriverDAT_R_SMDS_Mesh.cxx -// Module : SMESH - -#include "DriverDAT_R_SMDS_Mesh.h" -#include "utilities.h" - -extern "C" -{ - -/** - * Factory function which will be called by SMESHDriver - */ -void * SMESH_createDATMeshReader() -{ - return new DriverDAT_R_SMDS_Mesh(); -} -} - -DriverDAT_R_SMDS_Mesh::DriverDAT_R_SMDS_Mesh() -{ - ; -} -DriverDAT_R_SMDS_Mesh::~DriverDAT_R_SMDS_Mesh() -{ - ; -} +#include -void DriverDAT_R_SMDS_Mesh::SetMesh(SMDS_Mesh * aMesh) -{ - myMesh = aMesh; -} - -void DriverDAT_R_SMDS_Mesh::SetFile(string aFile) -{ - myFile = aFile; -} +#include "DriverDAT_R_SMDS_Mesh.h" +#include "SMDS_Mesh.hxx" -void DriverDAT_R_SMDS_Mesh::SetFileId(FILE * aFileId) -{ - myFileId = aFileId; -} +#include "utilities.h" -void DriverDAT_R_SMDS_Mesh::SetMeshId(int aMeshId) -{ - myMeshId = aMeshId; -} +#include -void DriverDAT_R_SMDS_Mesh::Add() -{ - ; -} +using namespace std; -void DriverDAT_R_SMDS_Mesh::Read() +Driver_Mesh::Status DriverDAT_R_SMDS_Mesh::Perform() { - - int i, j; - int nbNodes, nbCells; - int intNumPoint; - float coordX, coordY, coordZ; - int nbNoeuds; - - int intNumMaille, Degre; - int ValElement; - int ValDegre; - int NoeudsMaille[20]; - int NoeudMaille; - - bool ok; - - MESSAGE("in DriverDAT_R_SMDS_Mesh::Read()"); + Kernel_Utils::Localizer loc; + Status aResult = DRS_OK; + + int i, j; + int nbNodes, nbCells; + int intNumPoint; + float coordX, coordY, coordZ; + int nbNoeuds; + + int intNumMaille, Degre; + int ValElement; + int NoeudsMaille[20]; + int NoeudMaille; + + MESSAGE("in DriverDAT_R_SMDS_Mesh::Read()"); /**************************************************************************** - * OUVERTURE DU FICHIER EN LECTURE * - ****************************************************************************/ - char *file2Read = (char *)myFile.c_str(); - myFileId = fopen(file2Read, "r"); - if (myFileId < 0) - { - fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read); - exit(EXIT_FAILURE); - } - - fscanf(myFileId, "%d %d\n", &nbNodes, &nbCells); - + * OUVERTURE DU FICHIER EN LECTURE * + ****************************************************************************/ + char *file2Read = (char *)myFile.c_str(); + FILE* aFileId = fopen(file2Read, "r"); + if (aFileId < 0) { + fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read); + return DRS_FAIL; + } + + fscanf(aFileId, "%d %d\n", &nbNodes, &nbCells); + /**************************************************************************** - * LECTURE DES NOEUDS * - ****************************************************************************/ - fprintf(stdout, "\n(************************)\n"); - fprintf(stdout, "(* NOEUDS DU MAILLAGE : *)\n"); - fprintf(stdout, "(************************)\n"); - - for (i = 0; i < nbNodes; i++) - { - fscanf(myFileId, "%d %e %e %e\n", &intNumPoint, &coordX, &coordY, - &coordZ); - ok = myMesh->AddNodeWithID(coordX, coordY, coordZ, intNumPoint); - } - - fprintf(stdout, "%d noeuds\n", myMesh->NbNodes()); + * LECTURE DES NOEUDS * + ****************************************************************************/ + fprintf(stdout, "\n(************************)\n"); + fprintf(stdout, "(* NOEUDS DU MAILLAGE : *)\n"); + fprintf(stdout, "(************************)\n"); + + for (i = 0; i < nbNodes; i++){ + fscanf(aFileId, "%d %e %e %e\n", &intNumPoint, &coordX, &coordY, &coordZ); + myMesh->AddNodeWithID(coordX, coordY, coordZ, intNumPoint); + } + + fprintf(stdout, "%d noeuds\n", myMesh->NbNodes()); /**************************************************************************** - * LECTURE DES ELEMENTS * - ****************************************************************************/ - fprintf(stdout, "\n(**************************)\n"); - fprintf(stdout, "(* ELEMENTS DU MAILLAGE : *)\n"); - fprintf(stdout, "(**************************)"); - - fprintf(stdout, "%d elements\n", nbCells); - - for (i = 0; i < nbCells; i++) - { - fscanf(myFileId, "%d %d", &intNumMaille, &ValElement); - Degre = abs(ValElement / 100); - nbNoeuds = ValElement - (Degre * 100); - - // Recuperation des noeuds de la maille - for (j = 0; j < nbNoeuds; j++) - { - fscanf(myFileId, "%d", &NoeudMaille); - NoeudsMaille[j] = NoeudMaille; - } - - // Analyse des cas de cellules - switch (ValElement) - { - case 102:; - case 103:; - { - ValDegre = 3; - nbNoeuds = 2; - ok = myMesh->AddEdgeWithID(NoeudsMaille[0], NoeudsMaille[1], - intNumMaille); - break; - } - case 204:; - case 208:; - { - ValDegre = 9; - nbNoeuds = 4; - ok = myMesh->AddFaceWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], intNumMaille); - break; - } - case 203:; - case 206:; - { - ValDegre = 5; - nbNoeuds = 3; - ok = myMesh->AddFaceWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], intNumMaille); - break; - } - case 308:; - case 320:; - { - ValDegre = 12; - nbNoeuds = 8; - if (ValElement == 320) - { - //A voir, correspondance VTK - NoeudsMaille[4] = NoeudsMaille[8]; - NoeudsMaille[5] = NoeudsMaille[9]; - NoeudsMaille[6] = NoeudsMaille[10]; - NoeudsMaille[7] = NoeudsMaille[11]; - } - ok = myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], NoeudsMaille[4], - NoeudsMaille[5], NoeudsMaille[6], NoeudsMaille[7], - intNumMaille); - break; - } - case 304:; - case 310:; - { - ValDegre = 10; - nbNoeuds = 4; - if (ValElement == 310) - NoeudsMaille[3] = NoeudsMaille[6]; - ok = myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], intNumMaille); - break; - } - case 306:; - case 315:; - { - ValDegre = 12; - nbNoeuds = 8; - if (ValElement == 315) - { - NoeudsMaille[3] = NoeudsMaille[6]; - NoeudsMaille[4] = NoeudsMaille[7]; - NoeudsMaille[5] = NoeudsMaille[8]; - } - NoeudsMaille[7] = NoeudsMaille[5]; - NoeudsMaille[6] = NoeudsMaille[5]; - NoeudsMaille[5] = NoeudsMaille[4]; - NoeudsMaille[4] = NoeudsMaille[3]; - NoeudsMaille[3] = NoeudsMaille[2]; - ok = myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], NoeudsMaille[4], - NoeudsMaille[5], intNumMaille); - break; - } - - } - } - + * LECTURE DES ELEMENTS * + ****************************************************************************/ + fprintf(stdout, "\n(**************************)\n"); + fprintf(stdout, "(* ELEMENTS DU MAILLAGE : *)\n"); + fprintf(stdout, "(**************************)"); + + fprintf(stdout, "%d elements\n", nbCells); + + for (i = 0; i < nbCells; i++) { + fscanf(aFileId, "%d %d", &intNumMaille, &ValElement); + Degre = abs(ValElement / 100); + nbNoeuds = ValElement - (Degre * 100); + + // Recuperation des noeuds de la maille + for (j = 0; j < nbNoeuds; j++) { + fscanf(aFileId, "%d", &NoeudMaille); + NoeudsMaille[j] = NoeudMaille; + } + + // Analyse des cas de cellules + switch (ValElement) { + case 102: + case 103: + nbNoeuds = 2; + myMesh->AddEdgeWithID(NoeudsMaille[0], NoeudsMaille[1], + intNumMaille); + break; + case 204: + case 208: + nbNoeuds = 4; + myMesh->AddFaceWithID(NoeudsMaille[0], NoeudsMaille[1], + NoeudsMaille[2], NoeudsMaille[3], + intNumMaille); + break; + case 203: + case 206: + nbNoeuds = 3; + myMesh->AddFaceWithID(NoeudsMaille[0], NoeudsMaille[1], + NoeudsMaille[2], intNumMaille); + break; + case 308: + case 320: + nbNoeuds = 8; + if (ValElement == 320){ + //A voir, correspondance VTK + NoeudsMaille[4] = NoeudsMaille[8]; + NoeudsMaille[5] = NoeudsMaille[9]; + NoeudsMaille[6] = NoeudsMaille[10]; + NoeudsMaille[7] = NoeudsMaille[11]; + } + myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], + NoeudsMaille[2], NoeudsMaille[3], + NoeudsMaille[4], NoeudsMaille[5], + NoeudsMaille[6], NoeudsMaille[7], + intNumMaille); + break; + case 304: + case 310: + nbNoeuds = 4; + if (ValElement == 310) + NoeudsMaille[3] = NoeudsMaille[6]; + myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], + NoeudsMaille[2], NoeudsMaille[3], + intNumMaille); + break; + case 306: + case 315: + nbNoeuds = 8; + if (ValElement == 315) { + NoeudsMaille[3] = NoeudsMaille[6]; + NoeudsMaille[4] = NoeudsMaille[7]; + NoeudsMaille[5] = NoeudsMaille[8]; + } + NoeudsMaille[7] = NoeudsMaille[5]; + NoeudsMaille[6] = NoeudsMaille[5]; + NoeudsMaille[5] = NoeudsMaille[4]; + NoeudsMaille[4] = NoeudsMaille[3]; + NoeudsMaille[3] = NoeudsMaille[2]; + myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], + NoeudsMaille[2], NoeudsMaille[3], + NoeudsMaille[4], NoeudsMaille[5], + intNumMaille); + break; + } + } /**************************************************************************** - * FERMETURE DU FICHIER * - ****************************************************************************/ - fclose(myFileId); - + * FERMETURE DU FICHIER * + ****************************************************************************/ + fclose(aFileId); + return aResult; }