You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/source/VTK-7.1.1/Utilities/MetaIO/vtkmetaio/metaArrow.cxx

240 lines
4.8 KiB
C++

/*============================================================================
MetaIO
Copyright 2000-2010 Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "metaArrow.h"
#ifdef _MSC_VER
#pragma warning(disable:4702)
#endif
#include <stdio.h>
#include <ctype.h>
#include <string>
#if (METAIO_USE_NAMESPACE)
namespace METAIO_NAMESPACE {
#endif
//
// Constructors
//
MetaArrow::
MetaArrow()
:MetaObject()
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow()" << METAIO_STREAM::endl;
Clear();
}
//
MetaArrow::
MetaArrow(const char *_headerName)
:MetaObject()
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow()" << METAIO_STREAM::endl;
Clear();
Read(_headerName);
}
//
MetaArrow::
MetaArrow(const MetaArrow *_Arrow)
:MetaObject()
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow()" << METAIO_STREAM::endl;
Clear();
CopyInfo(_Arrow);
}
MetaArrow::
MetaArrow(unsigned int dim)
:MetaObject(dim)
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow()" << METAIO_STREAM::endl;
Clear();
m_NDims = dim;
}
//
MetaArrow::
~MetaArrow()
{
M_Destroy();
}
//
void MetaArrow::
PrintInfo() const
{
MetaObject::PrintInfo();
METAIO_STREAM::cout << "Length = " << M_Length << METAIO_STREAM::endl;
METAIO_STREAM::cout << "Direction = ";
for (int i = 0; i < m_NDims; i++)
{
METAIO_STREAM::cout << M_Direction[i] << " ";
}
METAIO_STREAM::cout << METAIO_STREAM::endl;
}
void MetaArrow::
CopyInfo(const MetaObject * _object)
{
MetaObject::CopyInfo(_object);
if(_object)
{
const MetaArrow * arrow;
try
{
arrow = (const MetaArrow *)(_object);
}
catch( ... )
{
return;
}
if( arrow )
{
M_Length = arrow->Length();
const double* direction = arrow->Direction();
for (int i = 0; i < m_NDims; i++)
{
M_Direction[i] = direction[i];
}
}
}
}
void MetaArrow::
Length(float length)
{
M_Length = length;
}
float MetaArrow::
Length(void) const
{
return M_Length;
}
void MetaArrow::
Direction(const double *direction)
{
for (int i = 0; i < m_NDims; i++)
{
M_Direction[i] = direction[i];
}
}
const double * MetaArrow::
Direction(void) const
{
return M_Direction;
}
/** Clear Arrow information */
void MetaArrow::
Clear(void)
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow: Clear" << METAIO_STREAM::endl;
MetaObject::Clear();
M_Length = 1;
// zero out direction then set to (1,0,0)
memset(M_Direction, 0, 10*sizeof(double));
M_Direction[0] = 1.0;
}
/** Destroy Arrow information */
void MetaArrow::
M_Destroy(void)
{
MetaObject::M_Destroy();
}
/** Set Read fields */
void MetaArrow::
M_SetupReadFields(void)
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow: M_SetupReadFields" << METAIO_STREAM::endl;
MetaObject::M_SetupReadFields();
MET_FieldRecordType * mF;
mF= new MET_FieldRecordType;
MET_InitReadField(mF, "Length", MET_FLOAT, true);
mF->terminateRead = false;
m_Fields.push_back(mF);
int nDimsRecordNumber = MET_GetFieldRecordNumber("NDims", &m_Fields);
mF= new MET_FieldRecordType;
MET_InitReadField(mF, "Direction", MET_DOUBLE_ARRAY, true, nDimsRecordNumber);
mF->terminateRead = true;
m_Fields.push_back(mF);
}
void MetaArrow::
M_SetupWriteFields(void)
{
strcpy(m_ObjectTypeName,"Arrow");
MetaObject::M_SetupWriteFields();
MET_FieldRecordType * mF;
mF = new MET_FieldRecordType;
MET_InitWriteField(mF, "Length", MET_FLOAT, M_Length);
m_Fields.push_back(mF);
mF = new MET_FieldRecordType;
MET_InitWriteField(mF, "Direction", MET_DOUBLE_ARRAY, m_NDims, M_Direction);
m_Fields.push_back(mF);
}
bool MetaArrow::
M_Read(void)
{
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow: M_Read: Loading Header" << METAIO_STREAM::endl;
if(!MetaObject::M_Read())
{
METAIO_STREAM::cout << "MetaArrow: M_Read: Error parsing file" << METAIO_STREAM::endl;
return false;
}
if(META_DEBUG) METAIO_STREAM::cout << "MetaArrow: M_Read: Parsing Header" << METAIO_STREAM::endl;
MET_FieldRecordType * mF_length;
mF_length = MET_GetFieldRecord("Length", &m_Fields);
if(mF_length->defined)
{
M_Length= (float)mF_length->value[0];
}
MET_FieldRecordType * mF_direction;
mF_direction = MET_GetFieldRecord("Direction", &m_Fields);
if(mF_direction->defined)
{
for (int i = 0; i < m_NDims; i++)
{
M_Direction[i] = (double)mF_direction->value[i];
}
}
return true;
}
#if (METAIO_USE_NAMESPACE)
};
#endif