Version: 6.3.1
Public Types | Public Member Functions | Protected Attributes

DriverDAT_R_SMDS_Mesh Class Reference

#include <DriverDAT_R_SMDS_Mesh.h>

Inheritance diagram for DriverDAT_R_SMDS_Mesh:
Inheritance graph
[legend]

Public Types

enum  Status {
  DRS_OK, DRS_EMPTY, DRS_WARN_RENUMBER, DRS_WARN_SKIP_ELEM,
  DRS_FAIL
}

Public Member Functions

virtual Status Perform ()
void SetMesh (SMDS_Mesh *theMesh)
void SetMeshId (int theMeshId)
void SetFile (const std::string &theFileName)

Protected Attributes

SMDS_MeshmyMesh
std::string myFile
int myMeshId

Detailed Description

Definition at line 30 of file DriverDAT_R_SMDS_Mesh.h.


Member Enumeration Documentation

enum Driver_Mesh::Status [inherited]
Enumerator:
DRS_OK 
DRS_EMPTY 
DRS_WARN_RENUMBER 
DRS_WARN_SKIP_ELEM 
DRS_FAIL 

Definition at line 48 of file Driver_Mesh.h.

              {
    DRS_OK,
    DRS_EMPTY,          // a file contains no mesh with the given name
    DRS_WARN_RENUMBER,  // a file has overlapped ranges of element numbers,
                        // so the numbers from the file are ignored
    DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
    DRS_FAIL            // general failure (exception etc.)
  };

Member Function Documentation

Driver_Mesh::Status DriverDAT_R_SMDS_Mesh::Perform ( ) [virtual]

Implements Driver_Mesh.

Definition at line 34 of file DriverDAT_R_SMDS_Mesh.cxx.

References SMESH.DRS_FAIL, SMESH.DRS_OK, and MESSAGE.

{
  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();
  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(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(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(aFileId);
  return aResult;
}
void Driver_Mesh::SetFile ( const std::string &  theFileName) [inherited]
void Driver_SMDS_Mesh::SetMesh ( SMDS_Mesh theMesh) [inherited]
void Driver_Mesh::SetMeshId ( int  theMeshId) [inherited]

Field Documentation

std::string Driver_Mesh.myFile [protected, inherited]
SMDS_Mesh* Driver_SMDS_Mesh.myMesh [protected, inherited]
int Driver_Mesh.myMeshId [protected, inherited]

Definition at line 63 of file Driver_Mesh.h.

Referenced by DriverMED_W_SMESHDS_Mesh.Perform(), and Driver_Mesh.SetMeshId().

Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS