X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverUNV%2FUNV2411_Structure.cxx;h=182e9d7e8d723ccfb1a97344ee10707c29c4f4ab;hp=cb5099f7e420bfdfada18657f39b5ea46fd97d22;hb=a0f09b9f1b8f5eac0e1c9277f76d65eb643cac94;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/DriverUNV/UNV2411_Structure.cxx b/src/DriverUNV/UNV2411_Structure.cxx index cb5099f7e..182e9d7e8 100644 --- a/src/DriverUNV/UNV2411_Structure.cxx +++ b/src/DriverUNV/UNV2411_Structure.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 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 @@ -20,8 +20,8 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include +#include +#include #include "UNV2411_Structure.hxx" #include "UNV_Utilities.hxx" @@ -36,7 +36,9 @@ UNV2411::TRecord::TRecord(): exp_coord_sys_num(1), disp_coord_sys_num(1), color(11)//(0) - 0019936: EDF 794 SMESH : Export UNV : Node color and group id -{} +{ + coord[1] = coord[2] = 0.0; // prepare to e.g. 2D mesh +} void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet) { @@ -54,7 +56,40 @@ void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet) * always 3 coordinates in the UNV file, no matter * which dimensionality libMesh is in */ + int dim = 3; std::string num_buf; + + // Issue 22638. Find out space dimension to read a 2D mesh from a file + // generated by SIMAIL from Simulog + if ( !in_stream.eof() ) + { + int where = in_stream.tellg(); + + TRecord aRec; + in_stream >> aRec.label ; + if ( aRec.label == -1 ) return; // dataset end + + dim = 0; + num_buf = read_line( in_stream ); + for ( size_t i = 0; i < num_buf.size(); ) + { + // skip spaces + while ( i < num_buf.size() && num_buf[i] == ' ' ) + ++i; + + dim += ( i < num_buf.size() ); + + // skip non-spaces + while ( i < num_buf.size() && num_buf[i] != ' ' ) + ++i; + } + if ( dim == 0 ) + return; + + in_stream.seekg( where, in_stream.beg ); + } + + // read the rest records while ( !in_stream.eof() ) { TRecord aRec; @@ -72,7 +107,7 @@ void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet) * take care of the * floating-point data */ - for(int d = 0; d < 3; d++){ + for(int d = 0; d < dim; d++){ in_stream>>num_buf; aRec.coord[d] = D_to_e(num_buf); }