Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 6 additions & 12 deletions src/Frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@
#include <stdexcept>

ezc3d::DataNS::Frame::Frame() {
_points = std::shared_ptr<ezc3d::DataNS::Points3dNS::Points>(
new ezc3d::DataNS::Points3dNS::Points());
_analogs = std::shared_ptr<ezc3d::DataNS::AnalogsNS::Analogs>(
new ezc3d::DataNS::AnalogsNS::Analogs());
_rotations = std::shared_ptr<ezc3d::DataNS::RotationNS::Rotations>(
new ezc3d::DataNS::RotationNS::Rotations());
_points = std::make_shared<ezc3d::DataNS::Points3dNS::Points>();
_analogs = std::make_shared<ezc3d::DataNS::AnalogsNS::Analogs>();
_rotations = std::make_shared<ezc3d::DataNS::RotationNS::Rotations>();
}

void ezc3d::DataNS::Frame::print() const {
Expand Down Expand Up @@ -71,20 +68,17 @@ void ezc3d::DataNS::Frame::add(const ezc3d::DataNS::Frame &frame) {

void ezc3d::DataNS::Frame::add(
const ezc3d::DataNS::Points3dNS::Points &point3d_frame) {
_points = std::shared_ptr<ezc3d::DataNS::Points3dNS::Points>(
new ezc3d::DataNS::Points3dNS::Points(point3d_frame));
_points = std::make_shared<ezc3d::DataNS::Points3dNS::Points>(point3d_frame);
}

void ezc3d::DataNS::Frame::add(
const ezc3d::DataNS::AnalogsNS::Analogs &analogs_frame) {
_analogs = std::shared_ptr<ezc3d::DataNS::AnalogsNS::Analogs>(
new ezc3d::DataNS::AnalogsNS::Analogs(analogs_frame));
_analogs = std::make_shared<ezc3d::DataNS::AnalogsNS::Analogs>(analogs_frame);
}

void ezc3d::DataNS::Frame::add(
const ezc3d::DataNS::RotationNS::Rotations &rotations) {
_rotations = std::shared_ptr<ezc3d::DataNS::RotationNS::Rotations>(
new ezc3d::DataNS::RotationNS::Rotations(rotations));
_rotations = std::make_shared<ezc3d::DataNS::RotationNS::Rotations>(rotations);
}

void ezc3d::DataNS::Frame::add(
Expand Down
48 changes: 20 additions & 28 deletions src/ezc3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,9 @@ ezc3d::c3d::c3d()
c_int = std::vector<char>(m_nByteToReadMax_int + 1);
c_int_tp = std::vector<char>(m_nByteToReadMax_int + 1);

_header = std::shared_ptr<ezc3d::Header>(new ezc3d::Header());
_parameters = std::shared_ptr<ezc3d::ParametersNS::Parameters>(
new ezc3d::ParametersNS::Parameters());
_data = std::shared_ptr<ezc3d::DataNS::Data>(new ezc3d::DataNS::Data());
_header = std::make_shared<ezc3d::Header>();
_parameters = std::make_shared<ezc3d::ParametersNS::Parameters>();
_data = std::make_shared<ezc3d::DataNS::Data>();
}

ezc3d::c3d::c3d(const std::string &filePath, const Options &options)
Expand All @@ -62,17 +61,15 @@ ezc3d::c3d::c3d(const std::string &filePath, const Options &options)
"The c3d file could not be opened, please verify the path");

// Read all the section
_header = std::shared_ptr<ezc3d::Header>(new ezc3d::Header(*this, stream));
_parameters = std::shared_ptr<ezc3d::ParametersNS::Parameters>(
new ezc3d::ParametersNS::Parameters(*this, stream));
_header = std::make_shared<ezc3d::Header>(*this, stream);
_parameters = std::make_shared<ezc3d::ParametersNS::Parameters>(*this, stream);

// header may be inconsistent with the parameters, so it must be
// update to make sure sizes are consistent
updateHeader();

// Now read the data
_data = std::shared_ptr<ezc3d::DataNS::Data>(
new ezc3d::DataNS::Data(*this, stream));
_data = std::make_shared<ezc3d::DataNS::Data>(*this, stream);

// Parameters and header may be inconsistent with data,
// so reprocess them if needed
Expand Down Expand Up @@ -795,26 +792,21 @@ void ezc3d::c3d::updateHeader() {
data().frame(0).analogs().nbSubframes() != 0) {
if (data().frame(0).analogs().nbSubframes() != header().nbAnalogByFrame())
_header->nbAnalogByFrame(data().frame(0).analogs().nbSubframes());
} else {
if (static_cast<size_t>(pointRate) == 0) {
if (header().nbAnalogByFrame() != 1)
_header->nbAnalogByFrame(1);
} else {
if (static_cast<size_t>(analog.parameter("RATE").valuesAsDouble()[0] /
pointRate) != header().nbAnalogByFrame()) {
if (header().nbAnalogByFrame() == 1 && parameters().isGroup("SHADOW")) {
// The SHADOW company is not following the standard so they did not
// set analog rate ezc3d automatically sets it to zero which results
// in a discrepancy
ezc3d::ParametersNS::GroupNS::Parameter &analogNonConst =
_parameters->group("ANALOG").parameter("RATE");
analogNonConst.set(static_cast<float>(header().nbAnalogByFrame()));
} else {
_header->nbAnalogByFrame(static_cast<size_t>(
analog.parameter("RATE").valuesAsDouble()[0] / pointRate));
}
} else if (
static_cast<size_t>(pointRate) != 0
&& static_cast<size_t>(analog.parameter("RATE").valuesAsDouble()[0] / pointRate) != header().nbAnalogByFrame()
) {
if (header().nbAnalogByFrame() == 1 && parameters().isGroup("SHADOW")) {
// The SHADOW company is not following the standard so they did not
// set analog rate ezc3d automatically sets it to zero which results
// in a discrepancy
ezc3d::ParametersNS::GroupNS::Parameter &analogNonConst =
_parameters->group("ANALOG").parameter("RATE");
analogNonConst.set(static_cast<float>(header().nbAnalogByFrame()));
} else {
_header->nbAnalogByFrame(static_cast<size_t>(
analog.parameter("RATE").valuesAsDouble()[0] / pointRate));
}
}
}

if (static_cast<size_t>(analog.parameter("USED").valuesAsInt()[0]) !=
Expand Down
4 changes: 2 additions & 2 deletions test/test_ezc3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3764,8 +3764,8 @@ TEST(c3dFileIO, readKistlerC3D) {
EXPECT_FLOAT_EQ(Optotrak.header().frameRate(), 0);

// Analog stuff
EXPECT_EQ(Optotrak.header().nbAnalogsMeasurement(), 16);
EXPECT_EQ(Optotrak.header().nbAnalogByFrame(), 1);
EXPECT_EQ(Optotrak.header().nbAnalogsMeasurement(), 160);
EXPECT_EQ(Optotrak.header().nbAnalogByFrame(), 10);
EXPECT_EQ(Optotrak.header().nbAnalogs(), 16);

// Event stuff
Expand Down
Loading