Moved osgVolume::ImageUtils to osg::ImageUtils, updated wrappers, and started moving osgvolume example across to create osgVolume subgraphs
This commit is contained in:
@@ -82,6 +82,7 @@ SET(LIB_PUBLIC_HEADERS
|
||||
${HEADER_PATH}/Image
|
||||
${HEADER_PATH}/ImageSequence
|
||||
${HEADER_PATH}/ImageStream
|
||||
${HEADER_PATH}/ImageUtils
|
||||
${HEADER_PATH}/io_utils
|
||||
${HEADER_PATH}/KdTree
|
||||
${HEADER_PATH}/Light
|
||||
@@ -241,6 +242,7 @@ ADD_LIBRARY(${LIB_NAME}
|
||||
Image.cpp
|
||||
ImageSequence.cpp
|
||||
ImageStream.cpp
|
||||
ImageUtils.cpp
|
||||
KdTree.cpp
|
||||
Light.cpp
|
||||
LightModel.cpp
|
||||
|
||||
@@ -13,11 +13,12 @@
|
||||
|
||||
#include <float.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <osg/Math>
|
||||
#include <osg/Notify>
|
||||
#include <osgVolume/ImageUtils>
|
||||
#include <osg/ImageUtils>
|
||||
|
||||
namespace osgVolume
|
||||
namespace osg
|
||||
{
|
||||
|
||||
struct FindRangeOperator
|
||||
@@ -89,7 +90,7 @@ bool computeMinMax(const osg::Image* image, osg::Vec4& minValue, osg::Vec4& maxV
|
||||
{
|
||||
if (!image) return false;
|
||||
|
||||
osgVolume::FindRangeOperator rangeOp;
|
||||
osg::FindRangeOperator rangeOp;
|
||||
readImage(image, rangeOp);
|
||||
minValue.r() = rangeOp._rmin;
|
||||
minValue.g() = rangeOp._gmin;
|
||||
@@ -111,7 +112,7 @@ bool offsetAndScaleImage(osg::Image* image, const osg::Vec4& offset, const osg::
|
||||
{
|
||||
if (!image) return false;
|
||||
|
||||
osgVolume::modifyImage(image,osgVolume::OffsetAndScaleOperator(offset, scale));
|
||||
osg::modifyImage(image,osg::OffsetAndScaleOperator(offset, scale));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -302,12 +303,12 @@ bool copyImage(const osg::Image* srcImage, int src_s, int src_t, int src_r, int
|
||||
writeOp._pos = 0;
|
||||
|
||||
// read the pixels into readOp's _colour array
|
||||
osgVolume::readRow(width, srcImage->getPixelFormat(), srcImage->getDataType(), srcImage->data(src_s,src_t+row,src_r+slice), readOp);
|
||||
osg::readRow(width, srcImage->getPixelFormat(), srcImage->getDataType(), srcImage->data(src_s,src_t+row,src_r+slice), readOp);
|
||||
|
||||
// pass readOp's _colour array contents over to writeOp (note this is just a pointer swap).
|
||||
writeOp._colours.swap(readOp._colours);
|
||||
|
||||
osgVolume::modifyRow(width, destImage->getPixelFormat(), destImage->getDataType(), destImage->data(dest_s, dest_t+row,dest_r+slice), writeOp);
|
||||
osg::modifyRow(width, destImage->getPixelFormat(), destImage->getDataType(), destImage->data(dest_s, dest_t+row,dest_r+slice), writeOp);
|
||||
|
||||
// return readOp's _colour array contents back to its rightful owner.
|
||||
writeOp._colours.swap(readOp._colours);
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <osg/Geode>
|
||||
#include <osg/GL>
|
||||
#include <osg/io_utils>
|
||||
#include <osg/ImageUtils>
|
||||
|
||||
#include <osgDB/FileNameUtils>
|
||||
#include <osgDB/FileUtils>
|
||||
@@ -15,7 +16,6 @@
|
||||
|
||||
#include <osgVolume/Volume>
|
||||
#include <osgVolume/VolumeTile>
|
||||
#include <osgVolume/ImageUtils>
|
||||
|
||||
#ifdef USE_DCMTK
|
||||
#define HAVE_CONFIG_H
|
||||
@@ -121,7 +121,10 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter
|
||||
|
||||
osg::ref_ptr<osgVolume::VolumeTile> tile = new osgVolume::VolumeTile;
|
||||
tile->setVolume(volume.get());
|
||||
tile->setImage(0, result.getImage());
|
||||
|
||||
osg::ref_ptr<osgVolume::Layer> layer= new osgVolume::ImageLayer(result.getImage());
|
||||
|
||||
tile->addLayer(layer.get());
|
||||
|
||||
// get matrix providing size of texels (in mm)
|
||||
osg::RefMatrix* matrix = dynamic_cast<osg::RefMatrix*>(result.getImage()->getUserData());
|
||||
@@ -134,7 +137,7 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter
|
||||
osg::Vec3d scale(osg::Vec3(result.getImage()->s(),result.getImage()->t(), result.getImage()->r()));
|
||||
matrix->postMultScale(scale);
|
||||
|
||||
tile->setLocator(matrix);
|
||||
tile->setLocator(new osgVolume::Locator(*matrix));
|
||||
|
||||
result.getImage()->setUserData(0);
|
||||
|
||||
@@ -637,15 +640,15 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter
|
||||
image->allocateImage(dcmImage->getWidth(), dcmImage->getHeight(), totalNumSlices,
|
||||
pixelFormat, dataType);
|
||||
|
||||
osgVolume::copyImage(previous_image.get(), 0,0,0, previous_image->s(), previous_image->t(), imageNum,
|
||||
image.get(), 0, 0, 0,
|
||||
false);
|
||||
osg::copyImage(previous_image.get(), 0,0,0, previous_image->s(), previous_image->t(), imageNum,
|
||||
image.get(), 0, 0, 0,
|
||||
false);
|
||||
|
||||
}
|
||||
|
||||
osgVolume::copyImage(imageAdapter.get(), 0,0,0, imageAdapter->s(), imageAdapter->t(), imageAdapter->r(),
|
||||
image.get(), 0, 0, imageNum,
|
||||
false);
|
||||
osg::copyImage(imageAdapter.get(), 0,0,0, imageAdapter->s(), imageAdapter->t(), imageAdapter->r(),
|
||||
image.get(), 0, 0, imageNum,
|
||||
false);
|
||||
|
||||
imageNum += dcmImage->getFrameCount();
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ INCLUDE_DIRECTORIES( ${CAIRO_INCLUDE_DIRS} ${POPPLER_INCLUDE_DIRS} )
|
||||
LINK_DIRECTORIES(${CAIRO_LIBRARY_DIRS} ${POPPLER_LIB_DIRS})
|
||||
SET(TARGET_EXTERNAL_LIBRARIES ${CAIRO_LIBRARIES} ${POPPLER_LIBRARIES} )
|
||||
|
||||
SET(TARGET_ADDED_LIBRARIES osgWidget osgVolume)
|
||||
SET(TARGET_ADDED_LIBRARIES osgWidget)
|
||||
|
||||
#### end var setup ###
|
||||
SETUP_PLUGIN(pdf pdf)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <osgDB/FileUtils>
|
||||
|
||||
#include <osgWidget/PdfReader>
|
||||
#include <osgVolume/ImageUtils>
|
||||
#include <osg/ImageUtils>
|
||||
|
||||
#include <cairo.h>
|
||||
#include <poppler.h>
|
||||
@@ -200,7 +200,7 @@ class PopplerPdfImage : public osgWidget::PdfImage
|
||||
|
||||
_cairoImage->create((unsigned int)(w*2.0),(unsigned int)(h*2.0));
|
||||
|
||||
osgVolume::clearImageToColor(this, _backgroundColor);
|
||||
osg::clearImageToColor(this, _backgroundColor);
|
||||
|
||||
cairo_save(_cairoImage->getContext());
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ SET(LIB_NAME osgVolume)
|
||||
SET(HEADER_PATH ${OpenSceneGraph_SOURCE_DIR}/include/${LIB_NAME})
|
||||
SET(LIB_PUBLIC_HEADERS
|
||||
${HEADER_PATH}/Export
|
||||
${HEADER_PATH}/ImageUtils
|
||||
${HEADER_PATH}/Version
|
||||
${HEADER_PATH}/Volume
|
||||
${HEADER_PATH}/Locator
|
||||
@@ -22,7 +21,6 @@ SET(LIB_PUBLIC_HEADERS
|
||||
ADD_LIBRARY(${LIB_NAME}
|
||||
${OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC}
|
||||
${LIB_PUBLIC_HEADERS}
|
||||
ImageUtils.cpp
|
||||
Version.cpp
|
||||
Volume.cpp
|
||||
VolumeTechnique.cpp
|
||||
|
||||
@@ -35,9 +35,9 @@ VolumeTile::VolumeTile(const VolumeTile& volumeTile,const osg::CopyOp& copyop):
|
||||
_volume(0),
|
||||
_dirty(false),
|
||||
_hasBeenTraversal(false),
|
||||
_images(volumeTile._images)
|
||||
_layers(volumeTile._layers)
|
||||
{
|
||||
if (volumeTile.getVolumeTechnique())
|
||||
if (volumeTile.getVolumeTechnique()) ;
|
||||
{
|
||||
setVolumeTechnique(osg::clone(volumeTile.getVolumeTechnique()));
|
||||
}
|
||||
@@ -47,6 +47,13 @@ VolumeTile::~VolumeTile()
|
||||
{
|
||||
if (_volume) setVolume(0);
|
||||
}
|
||||
|
||||
void VolumeTile::setLayer(unsigned int i, Layer* layer)
|
||||
{
|
||||
if (_layers.size() <= i) _layers.resize(i+1);
|
||||
|
||||
_layers[i] = layer;
|
||||
}
|
||||
|
||||
void VolumeTile::setVolume(Volume* volume)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,11 @@ BEGIN_OBJECT_REFLECTOR(osgVolume::Locator)
|
||||
I_Constructor0(____Locator,
|
||||
"",
|
||||
"");
|
||||
I_Constructor1(IN, const osg::Matrixd &, transform,
|
||||
Properties::NON_EXPLICIT,
|
||||
____Locator__C5_osg_Matrixd_R1,
|
||||
"",
|
||||
"");
|
||||
I_ConstructorWithDefaults2(IN, const osgVolume::Locator &, locator, , IN, const osg::CopyOp &, copyop, osg::CopyOp::SHALLOW_COPY,
|
||||
____Locator__C5_Locator_R1__C5_osg_CopyOp_R1,
|
||||
"Copy constructor using CopyOp to manage deep vs shallow copy. ",
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
|
||||
#include <osg/BoundingSphere>
|
||||
#include <osg/CopyOp>
|
||||
#include <osg/Image>
|
||||
#include <osg/Matrix>
|
||||
#include <osg/NodeVisitor>
|
||||
#include <osg/Object>
|
||||
#include <osgVolume/Layer>
|
||||
#include <osgVolume/Locator>
|
||||
#include <osgVolume/Volume>
|
||||
#include <osgVolume/VolumeTechnique>
|
||||
#include <osgVolume/VolumeTile>
|
||||
@@ -123,34 +123,44 @@ BEGIN_OBJECT_REFLECTOR(osgVolume::VolumeTile)
|
||||
__C5_TileID_R1__getTileID,
|
||||
"Get the TileID (layer, x,y,z) of the VolumeTile. ",
|
||||
"");
|
||||
I_Method1(void, setLocator, IN, osg::RefMatrix *, locator,
|
||||
I_Method1(void, setLocator, IN, osgVolume::Locator *, locator,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setLocator__osg_RefMatrix_P1,
|
||||
__void__setLocator__Locator_P1,
|
||||
"",
|
||||
"");
|
||||
I_Method0(osg::RefMatrix *, getLocator,
|
||||
I_Method0(osgVolume::Locator *, getLocator,
|
||||
Properties::NON_VIRTUAL,
|
||||
__osg_RefMatrix_P1__getLocator,
|
||||
__Locator_P1__getLocator,
|
||||
"",
|
||||
"");
|
||||
I_Method0(const osg::RefMatrix *, getLocator,
|
||||
I_Method0(const osgVolume::Locator *, getLocator,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_osg_RefMatrix_P1__getLocator,
|
||||
__C5_Locator_P1__getLocator,
|
||||
"",
|
||||
"");
|
||||
I_Method2(void, setImage, IN, unsigned int, i, IN, osg::Image *, image,
|
||||
I_Method2(void, setLayer, IN, unsigned int, i, IN, osgVolume::Layer *, layer,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setImage__unsigned_int__osg_Image_P1,
|
||||
__void__setLayer__unsigned_int__Layer_P1,
|
||||
"",
|
||||
"");
|
||||
I_Method1(osg::Image *, getImage, IN, unsigned int, i,
|
||||
I_Method1(osgVolume::Layer *, getLayer, IN, unsigned int, i,
|
||||
Properties::NON_VIRTUAL,
|
||||
__osg_Image_P1__getImage__unsigned_int,
|
||||
__Layer_P1__getLayer__unsigned_int,
|
||||
"",
|
||||
"");
|
||||
I_Method1(const osg::Image *, getImage, IN, unsigned int, i,
|
||||
I_Method1(const osgVolume::Layer *, getImage, IN, unsigned int, i,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_osg_Image_P1__getImage__unsigned_int,
|
||||
__C5_Layer_P1__getImage__unsigned_int,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, addLayer, IN, osgVolume::Layer *, layer,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__addLayer__Layer_P1,
|
||||
"",
|
||||
"");
|
||||
I_Method0(unsigned int, getNumLayers,
|
||||
Properties::NON_VIRTUAL,
|
||||
__unsigned_int__getNumLayers,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setVolumeTechnique, IN, osgVolume::VolumeTechnique *, VolumeTechnique,
|
||||
@@ -186,13 +196,16 @@ BEGIN_OBJECT_REFLECTOR(osgVolume::VolumeTile)
|
||||
I_SimpleProperty(bool, Dirty,
|
||||
__bool__getDirty,
|
||||
__void__setDirty__bool);
|
||||
I_IndexedProperty(osg::Image *, Image,
|
||||
__osg_Image_P1__getImage__unsigned_int,
|
||||
__void__setImage__unsigned_int__osg_Image_P1,
|
||||
0);
|
||||
I_SimpleProperty(osg::RefMatrix *, Locator,
|
||||
__osg_RefMatrix_P1__getLocator,
|
||||
__void__setLocator__osg_RefMatrix_P1);
|
||||
I_ArrayProperty(osgVolume::Layer *, Layer,
|
||||
__Layer_P1__getLayer__unsigned_int,
|
||||
__void__setLayer__unsigned_int__Layer_P1,
|
||||
__unsigned_int__getNumLayers,
|
||||
__void__addLayer__Layer_P1,
|
||||
0,
|
||||
0);
|
||||
I_SimpleProperty(osgVolume::Locator *, Locator,
|
||||
__Locator_P1__getLocator,
|
||||
__void__setLocator__Locator_P1);
|
||||
I_SimpleProperty(const osgVolume::TileID &, TileID,
|
||||
__C5_TileID_R1__getTileID,
|
||||
__void__setTileID__C5_TileID_R1);
|
||||
|
||||
Reference in New Issue
Block a user