diff options
| author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2014-12-08 11:32:50 +0100 | 
|---|---|---|
| committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2014-12-08 11:32:50 +0100 | 
| commit | aa7491e356dfa04057fb94fc349c60300e60bd7b (patch) | |
| tree | 12890ef9bb3894f3cc28620aafbafd871b1f3c04 /src | |
| parent | 817f0fd5a5b9484f77012bd773cd01053e1f81a4 (diff) | |
| download | astra-aa7491e356dfa04057fb94fc349c60300e60bd7b.tar.gz astra-aa7491e356dfa04057fb94fc349c60300e60bd7b.tar.bz2 astra-aa7491e356dfa04057fb94fc349c60300e60bd7b.tar.xz astra-aa7491e356dfa04057fb94fc349c60300e60bd7b.zip | |
Implement loading geometries into Projector3D
Diffstat (limited to 'src')
| -rw-r--r-- | src/CudaProjector3D.cpp | 19 | ||||
| -rw-r--r-- | src/Projector3D.cpp | 37 | 
2 files changed, 41 insertions, 15 deletions
| diff --git a/src/CudaProjector3D.cpp b/src/CudaProjector3D.cpp index 4687825..c31b789 100644 --- a/src/CudaProjector3D.cpp +++ b/src/CudaProjector3D.cpp @@ -28,6 +28,9 @@ $Id$  #include "astra/CudaProjector3D.h" +#include "astra/VolumeGeometry3D.h" +#include "astra/ProjectionGeometry3D.h" +  namespace astra  { @@ -102,21 +105,7 @@ bool CCudaProjector3D::initialize(const Config& _cfg)  		return false;  	} -	// TODO: These should go to the parent. - -	// ProjectionGeometry -	XMLNode* node = _cfg.self->getSingleNode("ProjectionGeometry"); -	// TODO: Implement -	ASTRA_DELETE(node); -	CC.markNodeParsed("ProjectionGeometry"); - -	// ReconstructionGeometry -	node = _cfg.self->getSingleNode("VolumeGeometry"); -	// TODO: Implement -	ASTRA_DELETE(node); -	CC.markNodeParsed("VolumeGeometry"); - -	node = _cfg.self->getSingleNode("ProjectionKernel"); +	XMLNode* node = _cfg.self->getSingleNode("ProjectionKernel");  	m_projectionKernel = ker3d_default;  	if (node) {  		std::string sProjKernel = node->getContent(); 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<CProjector3D> 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;  } | 
