mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-25 17:00:34 +05:00
0021198: EDF 1548 GEOM: Writing of coordinates system into exported UNV files
Read/write CS and units. Use vector instead of map as TDataSet
This commit is contained in:
parent
83219fd4b2
commit
5b637a30b4
@ -26,9 +26,11 @@
|
|||||||
|
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#include "UNV164_Structure.hxx"
|
||||||
#include "UNV2411_Structure.hxx"
|
#include "UNV2411_Structure.hxx"
|
||||||
#include "UNV2412_Structure.hxx"
|
#include "UNV2412_Structure.hxx"
|
||||||
#include "UNV2417_Structure.hxx"
|
#include "UNV2417_Structure.hxx"
|
||||||
|
#include "UNV2420_Structure.hxx"
|
||||||
#include "UNV_Utilities.hxx"
|
#include "UNV_Utilities.hxx"
|
||||||
|
|
||||||
#include <Basics_Utils.hxx>
|
#include <Basics_Utils.hxx>
|
||||||
@ -42,6 +44,52 @@ static int MYDEBUG = 1;
|
|||||||
static int MYDEBUG = 0;
|
static int MYDEBUG = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
/*!
|
||||||
|
* \brief Move node coordinates to the global Cartesian CS
|
||||||
|
*/
|
||||||
|
void transformNodes( UNV2411::TDataSet::const_iterator fromNode,
|
||||||
|
UNV2411::TDataSet::const_iterator endNode,
|
||||||
|
const UNV2420::TRecord & csRecord )
|
||||||
|
{
|
||||||
|
const int csLabel = fromNode->exp_coord_sys_num;
|
||||||
|
|
||||||
|
UNV2411::TDataSet::const_iterator nodeIt;
|
||||||
|
|
||||||
|
// apply Transformation Matrix
|
||||||
|
if ( !csRecord.isIdentityMatrix() )
|
||||||
|
{
|
||||||
|
for ( nodeIt = fromNode; nodeIt != endNode; ++nodeIt )
|
||||||
|
{
|
||||||
|
const UNV2411::TRecord& nodeRec = *nodeIt;
|
||||||
|
if ( nodeRec.exp_coord_sys_num == csLabel )
|
||||||
|
csRecord.ApplyMatrix( (double*) nodeRec.coord );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// transform from Cylindrical CS
|
||||||
|
if ( csRecord.coord_sys_type == UNV2420::Cylindrical )
|
||||||
|
{
|
||||||
|
for ( nodeIt = fromNode; nodeIt != endNode; ++nodeIt )
|
||||||
|
{
|
||||||
|
const UNV2411::TRecord& nodeRec = *nodeIt;
|
||||||
|
if ( nodeRec.exp_coord_sys_num == csLabel )
|
||||||
|
csRecord.FromCylindricalCS( (double*) nodeRec.coord );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// transform from Spherical CS
|
||||||
|
else if ( csRecord.coord_sys_type == UNV2420::Spherical )
|
||||||
|
{
|
||||||
|
for ( nodeIt = fromNode; nodeIt != endNode; ++nodeIt )
|
||||||
|
{
|
||||||
|
const UNV2411::TRecord& nodeRec = *nodeIt;
|
||||||
|
if ( nodeRec.exp_coord_sys_num == csLabel )
|
||||||
|
csRecord.FromSphericalCS( (double*) nodeRec.coord );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DriverUNV_R_SMDS_Mesh::~DriverUNV_R_SMDS_Mesh()
|
DriverUNV_R_SMDS_Mesh::~DriverUNV_R_SMDS_Mesh()
|
||||||
{
|
{
|
||||||
@ -55,49 +103,89 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
Kernel_Utils::Localizer loc;
|
Kernel_Utils::Localizer loc;
|
||||||
Status aResult = DRS_OK;
|
Status aResult = DRS_OK;
|
||||||
std::ifstream in_stream(myFile.c_str());
|
std::ifstream in_stream(myFile.c_str());
|
||||||
try{
|
try
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
// Read Units
|
||||||
|
UNV164::TRecord aUnitsRecord;
|
||||||
|
UNV164::Read( in_stream, aUnitsRecord );
|
||||||
|
|
||||||
|
// Read Coordinate systems
|
||||||
|
UNV2420::TDataSet aCoordSysDataSet;
|
||||||
|
UNV2420::Read(in_stream, myMeshName, aCoordSysDataSet);
|
||||||
|
|
||||||
|
// Read nodes
|
||||||
using namespace UNV2411;
|
using namespace UNV2411;
|
||||||
TDataSet aDataSet2411;
|
TDataSet aDataSet2411;
|
||||||
UNV2411::Read(in_stream,aDataSet2411);
|
UNV2411::Read(in_stream,aDataSet2411);
|
||||||
if(MYDEBUG) MESSAGE("Perform - aDataSet2411.size() = "<<aDataSet2411.size());
|
if(MYDEBUG) MESSAGE("Perform - aDataSet2411.size() = "<<aDataSet2411.size());
|
||||||
|
|
||||||
|
// Move nodes in a global CS
|
||||||
|
if ( !aCoordSysDataSet.empty() )
|
||||||
|
{
|
||||||
|
UNV2420::TDataSet::const_iterator csIter = aCoordSysDataSet.begin();
|
||||||
|
for ( ; csIter != aCoordSysDataSet.end(); ++csIter )
|
||||||
|
{
|
||||||
|
// find any node in this CS
|
||||||
|
TDataSet::const_iterator nodeIter = aDataSet2411.begin();
|
||||||
|
for (; nodeIter != aDataSet2411.end(); nodeIter++)
|
||||||
|
if ( nodeIter->exp_coord_sys_num == csIter->coord_sys_label )
|
||||||
|
{
|
||||||
|
transformNodes( nodeIter, aDataSet2411.end(), *csIter );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Move nodes to SI unit system
|
||||||
|
const double lenFactor = aUnitsRecord.factors[ UNV164::LENGTH_FACTOR ];
|
||||||
|
if ( lenFactor != 1. )
|
||||||
|
{
|
||||||
|
TDataSet::iterator nodeIter = aDataSet2411.begin(), nodeEnd;
|
||||||
|
for ( nodeEnd = aDataSet2411.end(); nodeIter != nodeEnd; nodeIter++)
|
||||||
|
{
|
||||||
|
UNV2411::TRecord& nodeRec = *nodeIter;
|
||||||
|
nodeRec.coord[0] *= lenFactor;
|
||||||
|
nodeRec.coord[1] *= lenFactor;
|
||||||
|
nodeRec.coord[2] *= lenFactor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create nodes in the mesh
|
||||||
TDataSet::const_iterator anIter = aDataSet2411.begin();
|
TDataSet::const_iterator anIter = aDataSet2411.begin();
|
||||||
for(; anIter != aDataSet2411.end(); anIter++){
|
for(; anIter != aDataSet2411.end(); anIter++)
|
||||||
const TNodeLab& aLabel = anIter->first;
|
{
|
||||||
const TRecord& aRec = anIter->second;
|
const TRecord& aRec = *anIter;
|
||||||
//MESSAGE("AddNodeWithID " << aLabel << " " << aRec.coord[0] << " " << aRec.coord[1] << " " << aRec.coord[2]);
|
myMesh->AddNodeWithID(aRec.coord[0],aRec.coord[1],aRec.coord[2],aRec.label);
|
||||||
myMesh->AddNodeWithID(aRec.coord[0],aRec.coord[1],aRec.coord[2],aLabel);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
using namespace UNV2412;
|
using namespace UNV2412;
|
||||||
in_stream.seekg(0);
|
|
||||||
TDataSet aDataSet2412;
|
TDataSet aDataSet2412;
|
||||||
UNV2412::Read(in_stream,aDataSet2412);
|
UNV2412::Read(in_stream,aDataSet2412);
|
||||||
TDataSet::const_iterator anIter = aDataSet2412.begin();
|
TDataSet::const_iterator anIter = aDataSet2412.begin();
|
||||||
if(MYDEBUG) MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
if(MYDEBUG) MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
||||||
for(; anIter != aDataSet2412.end(); anIter++){
|
for(; anIter != aDataSet2412.end(); anIter++)
|
||||||
|
{
|
||||||
SMDS_MeshElement* anElement = NULL;
|
SMDS_MeshElement* anElement = NULL;
|
||||||
const TElementLab& aLabel = anIter->first;
|
const TRecord& aRec = *anIter;
|
||||||
const TRecord& aRec = anIter->second;
|
|
||||||
if(IsBeam(aRec.fe_descriptor_id)) {
|
if(IsBeam(aRec.fe_descriptor_id)) {
|
||||||
switch ( aRec.node_labels.size() ) {
|
switch ( aRec.node_labels.size() ) {
|
||||||
case 2: // edge with two nodes
|
case 2: // edge with two nodes
|
||||||
//MESSAGE("add edge " << aLabel << " " << aRec.node_labels[0] << " " << aRec.node_labels[1]);
|
//MESSAGE("add edge " << aLabel << " " << aRec.node_labels[0] << " " << aRec.node_labels[1]);
|
||||||
anElement = myMesh->AddEdgeWithID(aRec.node_labels[0],
|
anElement = myMesh->AddEdgeWithID(aRec.node_labels[0],
|
||||||
aRec.node_labels[1],
|
aRec.node_labels[1],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
case 3: // quadratic edge (with 3 nodes)
|
case 3: // quadratic edge (with 3 nodes)
|
||||||
//MESSAGE("add edge " << aLabel << " " << aRec.node_labels[0] << " " << aRec.node_labels[1] << " " << aRec.node_labels[2]);
|
//MESSAGE("add edge " << aRec.label << " " << aRec.node_labels[0] << " " << aRec.node_labels[1] << " " << aRec.node_labels[2]);
|
||||||
anElement = myMesh->AddEdgeWithID(aRec.node_labels[0],
|
anElement = myMesh->AddEdgeWithID(aRec.node_labels[0],
|
||||||
aRec.node_labels[2],
|
aRec.node_labels[2],
|
||||||
aRec.node_labels[1],
|
aRec.node_labels[1],
|
||||||
aLabel);
|
aRec.label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(IsFace(aRec.fe_descriptor_id)) {
|
else if(IsFace(aRec.fe_descriptor_id)) {
|
||||||
//MESSAGE("add face " << aLabel);
|
//MESSAGE("add face " << aRec.label);
|
||||||
switch(aRec.fe_descriptor_id){
|
switch(aRec.fe_descriptor_id){
|
||||||
case 41: // Plane Stress Linear Triangle
|
case 41: // Plane Stress Linear Triangle
|
||||||
case 51: // Plane Strain Linear Triangle
|
case 51: // Plane Strain Linear Triangle
|
||||||
@ -108,7 +196,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
|
anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
|
||||||
aRec.node_labels[1],
|
aRec.node_labels[1],
|
||||||
aRec.node_labels[2],
|
aRec.node_labels[2],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 42: // Plane Stress Parabolic Triangle
|
case 42: // Plane Stress Parabolic Triangle
|
||||||
@ -117,14 +205,14 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
case 72: // Membrane Parabolic Triangle
|
case 72: // Membrane Parabolic Triangle
|
||||||
case 82: // Axisymetric Solid Parabolic Triangle
|
case 82: // Axisymetric Solid Parabolic Triangle
|
||||||
case 92: // Thin Shell Parabolic Triangle
|
case 92: // Thin Shell Parabolic Triangle
|
||||||
//MESSAGE("add face " << aLabel << " " << aRec.node_labels[0] << " " << aRec.node_labels[1] << " " << aRec.node_labels[2] << " " << aRec.node_labels[3] << " " << aRec.node_labels[4] << " " << aRec.node_labels[5]);
|
//MESSAGE("add face " << aRec.label << " " << aRec.node_labels[0] << " " << aRec.node_labels[1] << " " << aRec.node_labels[2] << " " << aRec.node_labels[3] << " " << aRec.node_labels[4] << " " << aRec.node_labels[5]);
|
||||||
anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
|
anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
|
||||||
aRec.node_labels[2],
|
aRec.node_labels[2],
|
||||||
aRec.node_labels[4],
|
aRec.node_labels[4],
|
||||||
aRec.node_labels[1],
|
aRec.node_labels[1],
|
||||||
aRec.node_labels[3],
|
aRec.node_labels[3],
|
||||||
aRec.node_labels[5],
|
aRec.node_labels[5],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 44: // Plane Stress Linear Quadrilateral
|
case 44: // Plane Stress Linear Quadrilateral
|
||||||
@ -137,7 +225,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[1],
|
aRec.node_labels[1],
|
||||||
aRec.node_labels[2],
|
aRec.node_labels[2],
|
||||||
aRec.node_labels[3],
|
aRec.node_labels[3],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 45: // Plane Stress Parabolic Quadrilateral
|
case 45: // Plane Stress Parabolic Quadrilateral
|
||||||
@ -154,12 +242,12 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[3],
|
aRec.node_labels[3],
|
||||||
aRec.node_labels[5],
|
aRec.node_labels[5],
|
||||||
aRec.node_labels[7],
|
aRec.node_labels[7],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(IsVolume(aRec.fe_descriptor_id)){
|
else if(IsVolume(aRec.fe_descriptor_id)){
|
||||||
//MESSAGE("add volume " << aLabel);
|
//MESSAGE("add volume " << aRec.label);
|
||||||
switch(aRec.fe_descriptor_id){
|
switch(aRec.fe_descriptor_id){
|
||||||
|
|
||||||
case 111: // Solid Linear Tetrahedron - TET4
|
case 111: // Solid Linear Tetrahedron - TET4
|
||||||
@ -167,7 +255,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[2],
|
aRec.node_labels[2],
|
||||||
aRec.node_labels[1],
|
aRec.node_labels[1],
|
||||||
aRec.node_labels[3],
|
aRec.node_labels[3],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 118: // Solid Quadratic Tetrahedron - TET10
|
case 118: // Solid Quadratic Tetrahedron - TET10
|
||||||
@ -184,7 +272,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[6],
|
aRec.node_labels[6],
|
||||||
aRec.node_labels[8],
|
aRec.node_labels[8],
|
||||||
aRec.node_labels[7],
|
aRec.node_labels[7],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 112: // Solid Linear Prism - PRISM6
|
case 112: // Solid Linear Prism - PRISM6
|
||||||
@ -194,7 +282,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[3],
|
aRec.node_labels[3],
|
||||||
aRec.node_labels[5],
|
aRec.node_labels[5],
|
||||||
aRec.node_labels[4],
|
aRec.node_labels[4],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 113: // Solid Quadratic Prism - PRISM15
|
case 113: // Solid Quadratic Prism - PRISM15
|
||||||
@ -217,7 +305,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[6],
|
aRec.node_labels[6],
|
||||||
aRec.node_labels[8],
|
aRec.node_labels[8],
|
||||||
aRec.node_labels[7],
|
aRec.node_labels[7],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 115: // Solid Linear Brick - HEX8
|
case 115: // Solid Linear Brick - HEX8
|
||||||
@ -229,7 +317,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[7],
|
aRec.node_labels[7],
|
||||||
aRec.node_labels[6],
|
aRec.node_labels[6],
|
||||||
aRec.node_labels[5],
|
aRec.node_labels[5],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 116: // Solid Quadratic Brick - HEX20
|
case 116: // Solid Quadratic Brick - HEX20
|
||||||
@ -257,7 +345,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[11],
|
aRec.node_labels[11],
|
||||||
aRec.node_labels[10],
|
aRec.node_labels[10],
|
||||||
aRec.node_labels[9],
|
aRec.node_labels[9],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 114: // pyramid of 13 nodes (quadratic) - PIRA13
|
case 114: // pyramid of 13 nodes (quadratic) - PIRA13
|
||||||
@ -275,18 +363,17 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
|
|||||||
aRec.node_labels[10],
|
aRec.node_labels[10],
|
||||||
aRec.node_labels[9],
|
aRec.node_labels[9],
|
||||||
aRec.node_labels[12],
|
aRec.node_labels[12],
|
||||||
aLabel);
|
aRec.label);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!anElement)
|
if(!anElement)
|
||||||
MESSAGE("DriverUNV_R_SMDS_Mesh::Perform - can not add element with ID = "<<aLabel<<" and type = "<<aRec.fe_descriptor_id);
|
MESSAGE("DriverUNV_R_SMDS_Mesh::Perform - can not add element with ID = "<<aRec.label<<" and type = "<<aRec.fe_descriptor_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
using namespace UNV2417;
|
using namespace UNV2417;
|
||||||
in_stream.seekg(0);
|
|
||||||
TDataSet aDataSet2417;
|
TDataSet aDataSet2417;
|
||||||
UNV2417::Read(in_stream,aDataSet2417);
|
UNV2417::Read(in_stream,aDataSet2417);
|
||||||
if(MYDEBUG) MESSAGE("Perform - aDataSet2417.size() = "<<aDataSet2417.size());
|
if(MYDEBUG) MESSAGE("Perform - aDataSet2417.size() = "<<aDataSet2417.size());
|
||||||
|
@ -32,9 +32,11 @@
|
|||||||
|
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#include "UNV164_Structure.hxx"
|
||||||
#include "UNV2411_Structure.hxx"
|
#include "UNV2411_Structure.hxx"
|
||||||
#include "UNV2412_Structure.hxx"
|
#include "UNV2412_Structure.hxx"
|
||||||
#include "UNV2417_Structure.hxx"
|
#include "UNV2417_Structure.hxx"
|
||||||
|
#include "UNV2420_Structure.hxx"
|
||||||
#include "UNV_Utilities.hxx"
|
#include "UNV_Utilities.hxx"
|
||||||
|
|
||||||
#include <Basics_Utils.hxx>
|
#include <Basics_Utils.hxx>
|
||||||
@ -64,6 +66,10 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
|
|||||||
Status aResult = DRS_OK;
|
Status aResult = DRS_OK;
|
||||||
std::ofstream out_stream(myFile.c_str());
|
std::ofstream out_stream(myFile.c_str());
|
||||||
try{
|
try{
|
||||||
|
|
||||||
|
UNV164::Write( out_stream ); // unit system
|
||||||
|
UNV2420::Write( out_stream, myMeshName ); // Coordinate system
|
||||||
|
|
||||||
{
|
{
|
||||||
using namespace UNV2411;
|
using namespace UNV2411;
|
||||||
TDataSet aDataSet2411;
|
TDataSet aDataSet2411;
|
||||||
@ -71,14 +77,15 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
|
|||||||
//-----------------------------------
|
//-----------------------------------
|
||||||
MESSAGE("Perform - myMesh->NbNodes() = "<<myMesh->NbNodes());
|
MESSAGE("Perform - myMesh->NbNodes() = "<<myMesh->NbNodes());
|
||||||
SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
|
SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
|
||||||
for(; aNodesIter->more();){
|
|
||||||
const SMDS_MeshNode* aNode = aNodesIter->next();
|
|
||||||
TRecord aRec;
|
TRecord aRec;
|
||||||
|
while ( aNodesIter->more() )
|
||||||
|
{
|
||||||
|
const SMDS_MeshNode* aNode = aNodesIter->next();
|
||||||
|
aRec.label = aNode->GetID();
|
||||||
aRec.coord[0] = aNode->X();
|
aRec.coord[0] = aNode->X();
|
||||||
aRec.coord[1] = aNode->Y();
|
aRec.coord[1] = aNode->Y();
|
||||||
aRec.coord[2] = aNode->Z();
|
aRec.coord[2] = aNode->Z();
|
||||||
const TNodeLab& aLabel = aNode->GetID();
|
aDataSet2411.push_back( aRec );
|
||||||
aDataSet2411.insert(TDataSet::value_type(aLabel,aRec));
|
|
||||||
}
|
}
|
||||||
MESSAGE("Perform - aDataSet2411.size() = "<<aDataSet2411.size());
|
MESSAGE("Perform - aDataSet2411.size() = "<<aDataSet2411.size());
|
||||||
UNV2411::Write(out_stream,aDataSet2411);
|
UNV2411::Write(out_stream,aDataSet2411);
|
||||||
@ -92,11 +99,12 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
|
|||||||
MESSAGE("Perform - myMesh->NbEdges() = "<<myMesh->NbEdges());
|
MESSAGE("Perform - myMesh->NbEdges() = "<<myMesh->NbEdges());
|
||||||
if(myMesh->NbEdges()){
|
if(myMesh->NbEdges()){
|
||||||
SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
|
SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
|
||||||
for(; anIter->more();){
|
while( anIter->more() )
|
||||||
|
{
|
||||||
const SMDS_MeshEdge* anElem = anIter->next();
|
const SMDS_MeshEdge* anElem = anIter->next();
|
||||||
TElementLab aLabel = anElem->GetID();
|
|
||||||
int aNbNodes = anElem->NbNodes();
|
int aNbNodes = anElem->NbNodes();
|
||||||
TRecord aRec;
|
TRecord aRec;
|
||||||
|
aRec.label = anElem->GetID();
|
||||||
aRec.node_labels.reserve(aNbNodes);
|
aRec.node_labels.reserve(aNbNodes);
|
||||||
SMDS_ElemIteratorPtr aNodesIter;
|
SMDS_ElemIteratorPtr aNodesIter;
|
||||||
aNodesIter = anElem->nodesIteratorToUNV();
|
aNodesIter = anElem->nodesIteratorToUNV();
|
||||||
@ -105,24 +113,27 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
|
|||||||
} else {
|
} else {
|
||||||
aRec.fe_descriptor_id = 11;
|
aRec.fe_descriptor_id = 11;
|
||||||
}
|
}
|
||||||
for(; aNodesIter->more();){
|
while( aNodesIter->more())
|
||||||
|
{
|
||||||
const SMDS_MeshElement* aNode = aNodesIter->next();
|
const SMDS_MeshElement* aNode = aNodesIter->next();
|
||||||
aRec.node_labels.push_back(aNode->GetID());
|
aRec.node_labels.push_back(aNode->GetID());
|
||||||
}
|
}
|
||||||
aDataSet2412.insert(TDataSet::value_type(aLabel,aRec));
|
aDataSet2412.push_back(aRec);
|
||||||
}
|
}
|
||||||
MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
MESSAGE("Perform - myMesh->NbFaces() = "<<myMesh->NbFaces());
|
MESSAGE("Perform - myMesh->NbFaces() = "<<myMesh->NbFaces());
|
||||||
if(myMesh->NbFaces()){
|
if ( myMesh->NbFaces() )
|
||||||
|
{
|
||||||
SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
|
SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
|
||||||
for(; anIter->more();){
|
while ( anIter->more())
|
||||||
|
{
|
||||||
const SMDS_MeshFace* anElem = anIter->next();
|
const SMDS_MeshFace* anElem = anIter->next();
|
||||||
if ( anElem->IsPoly() ) continue;
|
if ( anElem->IsPoly() ) continue;
|
||||||
TElementLab aLabel = anElem->GetID();
|
|
||||||
int aNbNodes = anElem->NbNodes();
|
int aNbNodes = anElem->NbNodes();
|
||||||
TRecord aRec;
|
TRecord aRec;
|
||||||
|
aRec.label = anElem->GetID();
|
||||||
aRec.node_labels.reserve(aNbNodes);
|
aRec.node_labels.reserve(aNbNodes);
|
||||||
SMDS_ElemIteratorPtr aNodesIter;
|
SMDS_ElemIteratorPtr aNodesIter;
|
||||||
aNodesIter = anElem->nodesIteratorToUNV();
|
aNodesIter = anElem->nodesIteratorToUNV();
|
||||||
@ -150,18 +161,18 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
|
|||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
aDataSet2412.insert(TDataSet::value_type(aLabel,aRec));
|
aDataSet2412.push_back(aRec);
|
||||||
}
|
}
|
||||||
MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
MESSAGE("Perform - myMesh->NbVolumes() = "<<myMesh->NbVolumes());
|
MESSAGE("Perform - myMesh->NbVolumes() = "<<myMesh->NbVolumes());
|
||||||
if(myMesh->NbVolumes()){
|
if ( myMesh->NbVolumes() )
|
||||||
|
{
|
||||||
SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator();
|
SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator();
|
||||||
for(; anIter->more();){
|
while ( anIter->more())
|
||||||
|
{
|
||||||
const SMDS_MeshVolume* anElem = anIter->next();
|
const SMDS_MeshVolume* anElem = anIter->next();
|
||||||
TElementLab aLabel = anElem->GetID();
|
|
||||||
|
|
||||||
int aNbNodes = anElem->NbNodes();
|
int aNbNodes = anElem->NbNodes();
|
||||||
//MESSAGE("aNbNodes="<<aNbNodes);
|
//MESSAGE("aNbNodes="<<aNbNodes);
|
||||||
SMDS_ElemIteratorPtr aNodesIter;
|
SMDS_ElemIteratorPtr aNodesIter;
|
||||||
@ -214,13 +225,15 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
|
|||||||
}
|
}
|
||||||
if(anId>0){
|
if(anId>0){
|
||||||
TRecord aRec;
|
TRecord aRec;
|
||||||
|
aRec.label = anElem->GetID();
|
||||||
aRec.fe_descriptor_id = anId;
|
aRec.fe_descriptor_id = anId;
|
||||||
aRec.node_labels.reserve(aNbNodes);
|
aRec.node_labels.reserve(aNbNodes);
|
||||||
for(; aNodesIter->more() && aRec.node_labels.size() < aNbNodes; ) {
|
while ( aNodesIter->more() && aRec.node_labels.size() < aNbNodes )
|
||||||
|
{
|
||||||
const SMDS_MeshElement* aNode = aNodesIter->next();
|
const SMDS_MeshElement* aNode = aNodesIter->next();
|
||||||
aRec.node_labels.push_back(aNode->GetID());
|
aRec.node_labels.push_back(aNode->GetID());
|
||||||
}
|
}
|
||||||
aDataSet2412.insert(TDataSet::value_type(aLabel,aRec));
|
aDataSet2412.push_back(aRec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
|
||||||
|
@ -33,8 +33,8 @@ using namespace UNV2411;
|
|||||||
static string _label_dataset = "2411";
|
static string _label_dataset = "2411";
|
||||||
|
|
||||||
UNV2411::TRecord::TRecord():
|
UNV2411::TRecord::TRecord():
|
||||||
exp_coord_sys_num(0),
|
exp_coord_sys_num(1),
|
||||||
disp_coord_sys_num(0),
|
disp_coord_sys_num(1),
|
||||||
color(11)//(0) - 0019936: EDF 794 SMESH : Export UNV : Node color and group id
|
color(11)//(0) - 0019936: EDF 794 SMESH : Export UNV : Node color and group id
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -54,16 +54,16 @@ void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet)
|
|||||||
* always 3 coordinates in the UNV file, no matter
|
* always 3 coordinates in the UNV file, no matter
|
||||||
* which dimensionality libMesh is in
|
* which dimensionality libMesh is in
|
||||||
*/
|
*/
|
||||||
TNodeLab aLabel;
|
|
||||||
std::string num_buf;
|
std::string num_buf;
|
||||||
for(; !in_stream.eof();){
|
while ( !in_stream.eof() )
|
||||||
in_stream >> aLabel ;
|
{
|
||||||
if(aLabel == -1){
|
TRecord aRec;
|
||||||
|
in_stream >> aRec.label ;
|
||||||
|
if ( aRec.label == -1 ) {
|
||||||
// end of dataset is reached
|
// end of dataset is reached
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRecord aRec;
|
|
||||||
in_stream>>aRec.exp_coord_sys_num;
|
in_stream>>aRec.exp_coord_sys_num;
|
||||||
in_stream>>aRec.disp_coord_sys_num;
|
in_stream>>aRec.disp_coord_sys_num;
|
||||||
in_stream>>aRec.color;
|
in_stream>>aRec.color;
|
||||||
@ -77,7 +77,7 @@ void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet)
|
|||||||
aRec.coord[d] = D_to_e(num_buf);
|
aRec.coord[d] = D_to_e(num_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
theDataSet.insert(TDataSet::value_type(aLabel,aRec));
|
theDataSet.push_back(aRec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,12 +94,12 @@ void UNV2411::Write(std::ofstream& out_stream, const TDataSet& theDataSet)
|
|||||||
out_stream<<" "<<_label_dataset<<"\n";
|
out_stream<<" "<<_label_dataset<<"\n";
|
||||||
|
|
||||||
TDataSet::const_iterator anIter = theDataSet.begin();
|
TDataSet::const_iterator anIter = theDataSet.begin();
|
||||||
for(; anIter != theDataSet.end(); anIter++){
|
for(; anIter != theDataSet.end(); anIter++)
|
||||||
const TNodeLab& aLabel = anIter->first;
|
{
|
||||||
const TRecord& aRec = anIter->second;
|
const TRecord& aRec = *anIter;
|
||||||
char buf[78];
|
char buf[78];
|
||||||
sprintf(buf, "%10d%10d%10d%10d\n",
|
sprintf(buf, "%10d%10d%10d%10d\n",
|
||||||
aLabel,
|
aRec.label,
|
||||||
aRec.exp_coord_sys_num,
|
aRec.exp_coord_sys_num,
|
||||||
aRec.disp_coord_sys_num,
|
aRec.disp_coord_sys_num,
|
||||||
aRec.color);
|
aRec.color);
|
||||||
|
@ -25,21 +25,23 @@
|
|||||||
|
|
||||||
#include "SMESH_DriverUNV.hxx"
|
#include "SMESH_DriverUNV.hxx"
|
||||||
|
|
||||||
#include <map>
|
#include <vector>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
namespace UNV2411{
|
namespace UNV2411{
|
||||||
|
|
||||||
|
typedef int TNodeLab; // type of node label
|
||||||
|
|
||||||
struct MESHDRIVERUNV_EXPORT TRecord{
|
struct MESHDRIVERUNV_EXPORT TRecord{
|
||||||
TRecord();
|
TRecord();
|
||||||
|
TNodeLab label;
|
||||||
int exp_coord_sys_num; // export coordinate system number
|
int exp_coord_sys_num; // export coordinate system number
|
||||||
int disp_coord_sys_num; // displacement coordinate system number
|
int disp_coord_sys_num; // displacement coordinate system number
|
||||||
int color; // color
|
int color; // color
|
||||||
double coord[3]; // node coordinates in the part coordinate system
|
double coord[3]; // node coordinates in the part coordinate system
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int TNodeLab; // type of node label
|
typedef std::vector<TRecord> TDataSet;
|
||||||
typedef std::map<TNodeLab,TRecord> TDataSet;
|
|
||||||
|
|
||||||
MESHDRIVERUNV_EXPORT void
|
MESHDRIVERUNV_EXPORT void
|
||||||
Read(std::ifstream& in_stream, TDataSet& theDataSet);
|
Read(std::ifstream& in_stream, TDataSet& theDataSet);
|
||||||
|
@ -183,12 +183,14 @@ using namespace UNV2412;
|
|||||||
static string _label_dataset = "2412";
|
static string _label_dataset = "2412";
|
||||||
|
|
||||||
UNV2412::TRecord::TRecord():
|
UNV2412::TRecord::TRecord():
|
||||||
|
label(-1),
|
||||||
|
fe_descriptor_id(-1),
|
||||||
phys_prop_tab_num(2),
|
phys_prop_tab_num(2),
|
||||||
mat_prop_tab_num(1),
|
mat_prop_tab_num(1),
|
||||||
color(7),
|
color(7),
|
||||||
beam_orientation(0),
|
beam_orientation(0),
|
||||||
beam_fore_end(0),
|
beam_fore_end(1), // default values
|
||||||
beam_aft_end(0)
|
beam_aft_end(1) // default values
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void UNV2412::Read(std::ifstream& in_stream, TDataSet& theDataSet)
|
void UNV2412::Read(std::ifstream& in_stream, TDataSet& theDataSet)
|
||||||
@ -203,16 +205,15 @@ void UNV2412::Read(std::ifstream& in_stream, TDataSet& theDataSet)
|
|||||||
if(!beginning_of_dataset(in_stream,_label_dataset))
|
if(!beginning_of_dataset(in_stream,_label_dataset))
|
||||||
EXCEPTION(runtime_error,"ERROR: Could not find "<<_label_dataset<<" dataset!");
|
EXCEPTION(runtime_error,"ERROR: Could not find "<<_label_dataset<<" dataset!");
|
||||||
|
|
||||||
TElementLab aLabel;
|
TRecord aRec;
|
||||||
for(; !in_stream.eof();){
|
while( !in_stream.eof())
|
||||||
in_stream >> aLabel ;
|
{
|
||||||
if(aLabel == -1){
|
in_stream >> aRec.label ;
|
||||||
|
if (aRec.label == -1)
|
||||||
// end of dataset is reached
|
// end of dataset is reached
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
int n_nodes;
|
int n_nodes;
|
||||||
TRecord aRec;
|
|
||||||
in_stream>>aRec.fe_descriptor_id;
|
in_stream>>aRec.fe_descriptor_id;
|
||||||
in_stream>>aRec.phys_prop_tab_num;
|
in_stream>>aRec.phys_prop_tab_num;
|
||||||
in_stream>>aRec.mat_prop_tab_num;
|
in_stream>>aRec.mat_prop_tab_num;
|
||||||
@ -226,12 +227,11 @@ void UNV2412::Read(std::ifstream& in_stream, TDataSet& theDataSet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
aRec.node_labels.resize(n_nodes);
|
aRec.node_labels.resize(n_nodes);
|
||||||
for(int j=0; j < n_nodes; j++){
|
for(int j=0; j < n_nodes; j++)
|
||||||
// read node labels
|
// read node labels
|
||||||
in_stream>>aRec.node_labels[j];
|
in_stream>>aRec.node_labels[j];
|
||||||
}
|
|
||||||
|
|
||||||
theDataSet.insert(TDataSet::value_type(aLabel,aRec));
|
theDataSet.push_back(aRec);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -249,17 +249,18 @@ void UNV2412::Write(std::ofstream& out_stream, const TDataSet& theDataSet)
|
|||||||
out_stream<<" "<<_label_dataset<<"\n";
|
out_stream<<" "<<_label_dataset<<"\n";
|
||||||
|
|
||||||
TDataSet::const_iterator anIter = theDataSet.begin();
|
TDataSet::const_iterator anIter = theDataSet.begin();
|
||||||
for(; anIter != theDataSet.end(); anIter++){
|
for(; anIter != theDataSet.end(); anIter++)
|
||||||
const TElementLab& aLabel = anIter->first;
|
{
|
||||||
const TRecord& aRec = anIter->second;
|
const TRecord& aRec = *anIter;
|
||||||
out_stream<<std::setw(10)<<aLabel; /* element ID */
|
out_stream<<std::setw(10)<<aRec.label; /* element ID */
|
||||||
out_stream<<std::setw(10)<<aRec.fe_descriptor_id; /* type of element */
|
out_stream<<std::setw(10)<<aRec.fe_descriptor_id; /* type of element */
|
||||||
out_stream<<std::setw(10)<<aRec.phys_prop_tab_num;
|
out_stream<<std::setw(10)<<aRec.phys_prop_tab_num;
|
||||||
out_stream<<std::setw(10)<<aRec.mat_prop_tab_num;
|
out_stream<<std::setw(10)<<aRec.mat_prop_tab_num;
|
||||||
out_stream<<std::setw(10)<<aRec.color;
|
out_stream<<std::setw(10)<<aRec.color;
|
||||||
out_stream<<std::setw(10)<<aRec.node_labels.size()<<std::endl; /* No. of nodes per element */
|
out_stream<<std::setw(10)<<aRec.node_labels.size()<<std::endl; /* No. of nodes per element */
|
||||||
|
|
||||||
if(IsBeam(aRec.fe_descriptor_id)){
|
if(IsBeam(aRec.fe_descriptor_id))
|
||||||
|
{
|
||||||
out_stream<<std::setw(10)<<aRec.beam_orientation;
|
out_stream<<std::setw(10)<<aRec.beam_orientation;
|
||||||
out_stream<<std::setw(10)<<aRec.beam_fore_end;
|
out_stream<<std::setw(10)<<aRec.beam_fore_end;
|
||||||
out_stream<<std::setw(10)<<aRec.beam_aft_end<<std::endl;
|
out_stream<<std::setw(10)<<aRec.beam_aft_end<<std::endl;
|
||||||
|
@ -25,18 +25,19 @@
|
|||||||
|
|
||||||
#include "SMESH_DriverUNV.hxx"
|
#include "SMESH_DriverUNV.hxx"
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
namespace UNV2412{
|
namespace UNV2412{
|
||||||
|
|
||||||
typedef std::vector<int> TNodeLabels; // Nodal connectivities
|
typedef std::vector<int> TNodeLabels; // Nodal connectivities
|
||||||
|
typedef int TElementLab; // type of element label
|
||||||
|
|
||||||
struct MESHDRIVERUNV_EXPORT TRecord{
|
struct MESHDRIVERUNV_EXPORT TRecord
|
||||||
|
{
|
||||||
TRecord();
|
TRecord();
|
||||||
|
|
||||||
|
TElementLab label;
|
||||||
int fe_descriptor_id; // FE descriptor id
|
int fe_descriptor_id; // FE descriptor id
|
||||||
int phys_prop_tab_num; // physical property table number
|
int phys_prop_tab_num; // physical property table number
|
||||||
int mat_prop_tab_num; // material property table number
|
int mat_prop_tab_num; // material property table number
|
||||||
@ -49,8 +50,7 @@ namespace UNV2412{
|
|||||||
int beam_aft_end; // beam aft-end cross section number
|
int beam_aft_end; // beam aft-end cross section number
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int TElementLab; // type of element label
|
typedef std::vector<TRecord> TDataSet;
|
||||||
typedef std::map<TElementLab,TRecord> TDataSet;
|
|
||||||
|
|
||||||
MESHDRIVERUNV_EXPORT void
|
MESHDRIVERUNV_EXPORT void
|
||||||
Read(std::ifstream& in_stream, TDataSet& theDataSet);
|
Read(std::ifstream& in_stream, TDataSet& theDataSet);
|
||||||
|
Loading…
Reference in New Issue
Block a user