From aa7491e356dfa04057fb94fc349c60300e60bd7b Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 8 Dec 2014 11:32:50 +0100 Subject: Implement loading geometries into Projector3D --- src/Projector3D.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/Projector3D.cpp') diff --git a/src/Projector3D.cpp b/src/Projector3D.cpp index f8fddf4..ea18480 100644 --- a/src/Projector3D.cpp +++ b/src/Projector3D.cpp @@ -28,6 +28,12 @@ $Id$ #include "astra/Projector3D.h" +#include "astra/VolumeGeometry3D.h" +#include "astra/ParallelProjectionGeometry3D.h" +#include "astra/ParallelVecProjectionGeometry3D.h" +#include "astra/ConeProjectionGeometry3D.h" +#include "astra/ConeVecProjectionGeometry3D.h" + namespace astra { @@ -84,6 +90,37 @@ bool CProjector3D::_check() bool CProjector3D::initialize(const Config& _cfg) { assert(_cfg.self); + ConfigStackCheck CC("Projector3D", this, _cfg); + + XMLNode* node; + + node = _cfg.self->getSingleNode("ProjectionGeometry"); + ASTRA_CONFIG_CHECK(node, "Projector3D", "No ProjectionGeometry tag specified."); + std::string type = node->getAttribute("type"); + CProjectionGeometry3D* pProjGeometry = 0; + if (type == "parallel3d") { + pProjGeometry = new CParallelProjectionGeometry3D(); + } else if (type == "parallel3d_vec") { + pProjGeometry = new CParallelVecProjectionGeometry3D(); + } else if (type == "cone") { + pProjGeometry = new CConeProjectionGeometry3D(); + } else if (type == "cone_vec") { + pProjGeometry = new CConeVecProjectionGeometry3D(); + } else { + // Invalid geometry type + } + pProjGeometry->initialize(Config(node)); // this deletes node + m_pProjectionGeometry = pProjGeometry; + ASTRA_CONFIG_CHECK(m_pProjectionGeometry->isInitialized(), "Projector3D", "ProjectionGeometry not initialized."); + CC.markNodeParsed("ProjectionGeometry"); + + node = _cfg.self->getSingleNode("VolumeGeometry"); + ASTRA_CONFIG_CHECK(node, "Projector3D", "No VolumeGeometry tag specified."); + CVolumeGeometry3D* pVolGeometry = new CVolumeGeometry3D(); + pVolGeometry->initialize(Config(node)); // this deletes node + m_pVolumeGeometry = pVolGeometry; + ASTRA_CONFIG_CHECK(m_pVolumeGeometry->isInitialized(), "Projector2D", "VolumeGeometry not initialized."); + CC.markNodeParsed("VolumeGeometry"); return true; } -- cgit v1.2.3