Skip to content
Snippets Groups Projects
Select Git revision
  • 1d55d03d7511c744d196b89be02cc69a15c0dd80
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

mainOcc.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    GModelIO_GEOM.cpp 2.22 KiB
    // Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to the public mailing list <gmsh@onelab.info>.
    
    #include "GModel.h"
    #include "OS.h"
    #include "MTriangle.h"
    
    static bool getVertices(int num, int *indices, std::vector<MVertex*> &vec,
                            std::vector<MVertex*> &vertices)
    {
      for(int i = 0; i < num; i++){
        if(indices[i] < 0 || indices[i] > (int)(vec.size() - 1)){
          Msg::Error("Wrong vertex index %d", indices[i]);
          return false;
        }
        else
          vertices.push_back(vec[indices[i]]);
      }
      return true;
    }
    
    int GModel::readGEOM(const std::string &name)
    {
      // this is a format (from geomview?) that Bruno Levy's Graphite code
      // can write
      FILE *fp = Fopen(name.c_str(), "r");
      if(!fp){
        Msg::Error("Unable to open file '%s'", name.c_str());
        return 0;
      }
    
      int numNodes, numElements, dummy;
      if(fscanf(fp, "%d %d %d", &numNodes, &numElements, &dummy) != 3){
        fclose(fp);
        return 0;
      }
    
      if(!numNodes || !numElements){
        Msg::Warning("No vertices or elements found");
        fclose(fp);
        return 0;
      }
    
      Msg::Info("%d vertices, %d elements", numNodes, numElements);
    
      std::vector<MVertex*> vertexVector;
      std::map<int, std::vector<MElement*> > elements[1];
    
      vertexVector.resize(numNodes);
      for(int i = 0; i < numNodes; i++) {
        double x, y, z;
        if(fscanf(fp, "%lf %lf %lf", &x, &y, &z) != 3) break;
        vertexVector[i] = new MVertex(x, y, z);
      }
    
      for(int i = 0; i < numElements; i++) {
        int N, n[3];
        if(fscanf(fp, "%d", &N) != 1) break;
        switch(N){
        case 3:
          {
            if(fscanf(fp, "%d %d %d", &n[0], &n[1], &n[2]) != 3) break;
            for(int i = 0; i < 3; i++) n[i]--;
            std::vector<MVertex*> vertices;
            if(!getVertices(3, n, vertexVector, vertices)) break;
            elements[0][1].push_back(new MTriangle(vertices));
          }
          break;
        default:
          Msg::Error("Unknown element type in .geom reader");
          break;
        }
      }
    
      for(int i = 0; i < (int)(sizeof(elements) / sizeof(elements[0])); i++)
        _storeElementsInEntities(elements[i]);
      _associateEntityWithMeshVertices();
      _storeVerticesInEntities(vertexVector);
    
      fclose(fp);
      return 1;
    }