Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CAMP
campvis-public
Commits
e4760f45
Commit
e4760f45
authored
Feb 24, 2015
by
Hossain Mahmud
Browse files
rebased and replaced raycasterfactory
parent
fb61a770
Changes
4
Hide whitespace changes
Inline
Side-by-side
modules/CMakeLists.txt
View file @
e4760f45
...
...
@@ -9,11 +9,11 @@ LIST(APPEND CampvisModulesHeaders
modulesapi.h
gen_pipelineregistration.h
pipelinefactory.h
raycaste
rfactory.h
processo
rfactory.h
)
LIST
(
APPEND CampvisModulesSources
pipelinefactory.cpp
raycaste
rfactory.cpp
processo
rfactory.cpp
)
...
...
modules/raycasterfactory.cpp
deleted
100644 → 0
View file @
fb61a770
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitaet Muenchen
// Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
//
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
//
// ================================================================================================
#include
"raycasterfactory.h"
#include
<sstream>
namespace
campvis
{
// declare one single symbol for the RaycasterFactory singleton
tbb
::
atomic
<
RaycasterFactory
*>
RaycasterFactory
::
_singleton
;
RaycasterFactory
&
RaycasterFactory
::
getRef
()
{
if
(
_singleton
==
0
)
{
std
::
cout
<<
"creating RaycasterFactory...
\n
"
;
RaycasterFactory
*
tmp
=
new
RaycasterFactory
();
if
(
_singleton
.
compare_and_swap
(
tmp
,
0
)
!=
0
)
{
delete
tmp
;
}
}
return
*
_singleton
;
}
void
RaycasterFactory
::
deinit
()
{
delete
_singleton
;
_singleton
=
nullptr
;
}
std
::
vector
<
std
::
string
>
RaycasterFactory
::
getRegisteredRaycasters
()
const
{
tbb
::
spin_mutex
::
scoped_lock
lock
(
_mutex
);
std
::
vector
<
std
::
string
>
toReturn
;
toReturn
.
reserve
(
_raycasterMap
.
size
());
for
(
auto
it
=
_raycasterMap
.
begin
();
it
!=
_raycasterMap
.
end
();
++
it
)
toReturn
.
push_back
(
it
->
first
);
return
toReturn
;
}
RaycastingProcessor
*
RaycasterFactory
::
createRaycaster
(
const
std
::
string
&
id
,
IVec2Property
*
viewportSizeProp
)
const
{
tbb
::
spin_mutex
::
scoped_lock
lock
(
_mutex
);
auto
it
=
_raycasterMap
.
find
(
id
);
if
(
it
==
_raycasterMap
.
end
())
return
nullptr
;
else
return
(
it
->
second
)(
viewportSizeProp
);
}
}
modules/raycasterfactory.h
deleted
100644 → 0
View file @
fb61a770
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitaet Muenchen
// Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
//
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
//
// ================================================================================================
#ifndef RAYCASTERFACTORY_H__
#define RAYCASTERFACTORY_H__
#include
"cgt/logmanager.h"
#include
"cgt/singleton.h"
#include
<tbb/atomic.h>
#include
<tbb/spin_mutex.h>
#include
"core/properties/numericproperty.h"
#include
"modules/modulesapi.h"
#include
<map>
#include
<string>
#include
<vector>
#include
<functional>
namespace
campvis
{
class
RaycastingProcessor
;
/**
* Factory for creating raycasters by their name.
* Using some template-magic, RaycasterFactory is able to register raycasters during static
* initialization in cooperation with the RaycasterRegistrar.
*
* \note RaycasterFactory is a thread-safe lazy-instantiated singleton.
*/
class
CAMPVIS_MODULES_API
RaycasterFactory
{
public:
/**
* Returns a reference to the RaycasterFactory singleton.
* Creates the singleton if necessary
* \return *_singleton
*/
static
RaycasterFactory
&
getRef
();
static
void
deinit
();
std
::
vector
<
std
::
string
>
getRegisteredRaycasters
()
const
;
RaycastingProcessor
*
createRaycaster
(
const
std
::
string
&
id
,
IVec2Property
*
viewportSizeProp
)
const
;
/**
* Statically registers the raycaster of type T using \a callee as factory method.
* \note The template instantiation of RaycasterRegistrar takes care of calling this method.
* \param callee Factory method to call to create an instance of type T
* \return The registration index.
*/
template
<
typename
T
>
size_t
registerRaycaster
(
std
::
function
<
RaycastingProcessor
*
(
IVec2Property
*
)
>
callee
)
{
tbb
::
spin_mutex
::
scoped_lock
lock
(
_mutex
);
auto
it
=
_raycasterMap
.
lower_bound
(
T
::
getId
());
if
(
it
==
_raycasterMap
.
end
()
||
it
->
first
!=
T
::
getId
())
{
_raycasterMap
.
insert
(
it
,
std
::
make_pair
(
T
::
getId
(),
callee
));
}
else
{
cgtAssert
(
false
,
"Registered two raycasters with the same ID."
);
}
return
_raycasterMap
.
size
();
}
private:
mutable
tbb
::
spin_mutex
_mutex
;
static
tbb
::
atomic
<
RaycasterFactory
*>
_singleton
;
///< the singleton object
std
::
map
<
std
::
string
,
std
::
function
<
RaycastingProcessor
*
(
IVec2Property
*
)
>
>
_raycasterMap
;
};
// ================================================================================================
template
<
typename
T
>
class
RaycasterRegistrar
{
public:
/**
* Static factory method for creating the raycaster of type T.
* \param viewportSizeProp IVec2Property for the created raycaster to work on.
* \return A newly created raycaster of type T. Caller has to take ownership of the pointer.
*/
static
RaycastingProcessor
*
create
(
IVec2Property
*
viewportSizeProp
)
{
return
new
T
(
viewportSizeProp
);
}
private:
/// static helper field to ensure registration at static initialization time.
static
const
size_t
_factoryId
;
};
template
<
typename
T
>
const
size_t
RaycasterRegistrar
<
T
>::
_factoryId
=
RaycasterFactory
::
getRef
().
registerRaycaster
<
T
>
(
&
RaycasterRegistrar
<
T
>::
create
);
}
#endif // RAYCASTERFACTORY_H__
modules/vis/processors/volumerenderer.cpp
View file @
e4760f45
...
...
@@ -33,7 +33,6 @@
#include
"core/classification/simpletransferfunction.h"
#include
"../../raycasterfactory.h"
#include
"cgt/opengljobprocessor.h"
namespace
campvis
{
...
...
@@ -77,7 +76,7 @@ namespace campvis {
_eepGenerator
.
p_exitImageID
.
setVisible
(
false
);
addProperty
(
p_eepProps
,
AbstractProcessor
::
VALID
);
const
std
::
vector
<
std
::
string
>&
raycasters
=
Raycaste
rFactory
::
getRef
().
getRegistered
Raycaste
rs
();
const
std
::
vector
<
std
::
string
>&
raycasters
=
Processo
rFactory
::
getRef
().
getRegistered
Processo
rs
();
for
(
int
i
=
0
;
i
<
raycasters
.
size
();
i
++
)
{
p_raycastingProcSelector
.
addOption
(
GenericOption
<
std
::
string
>
(
raycasters
[
i
],
raycasters
[
i
]));
}
...
...
@@ -224,7 +223,9 @@ namespace campvis {
p_raycasterProps
.
clearProperties
();
currentRaycaster
->
s_invalidated
.
disconnect
(
this
);
_raycaster
=
RaycasterFactory
::
getRef
().
createRaycaster
(
p_raycastingProcSelector
.
getOptionId
(),
_viewportSizeProperty
);
_raycaster
=
dynamic_cast
<
RaycastingProcessor
*>
(
ProcessorFactory
::
getRef
().
createProcessor
(
p_raycastingProcSelector
.
getOptionId
(),
_viewportSizeProperty
));
cgtAssert
(
_raycaster
!=
0
,
"Raycaster must not be 0."
);
p_raycasterProps
.
addPropertyCollection
(
*
_raycaster
);
//_raycaster->p_lqMode.setVisible(false);
//_raycaster->p_camera.setVisible(false);
...
...
@@ -246,7 +247,7 @@ namespace campvis {
_raycaster
->
p_exitImageID
.
setValue
(
currentRaycaster
->
p_exitImageID
.
getValue
());
_raycaster
->
p_targetImageID
.
setValue
(
currentRaycaster
->
p_targetImageID
.
getValue
());
_raycaster
->
p_camera
.
setValue
(
currentRaycaster
->
p_camera
.
getValue
());
//
_raycaster->p_transferFunction.replaceTF(currentRaycaster->p_transferFunction.getTF());
_raycaster
->
p_transferFunction
.
replaceTF
(
currentRaycaster
->
p_transferFunction
.
getTF
()
->
clone
()
);
_raycaster
->
p_jitterStepSizeMultiplier
.
setValue
(
currentRaycaster
->
p_jitterStepSizeMultiplier
.
getValue
());
_raycaster
->
p_samplingRate
.
setValue
(
currentRaycaster
->
p_samplingRate
.
getValue
());
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment