Added support for reading raw data and transfer function from a volume header
This commit is contained in:
parent
65cb2e625f
commit
55d4756d31
@ -1690,6 +1690,62 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
osg::ref_ptr<osg::Image> image_3d;
|
osg::ref_ptr<osg::Image> image_3d;
|
||||||
|
|
||||||
|
std::string vh_filename;
|
||||||
|
while (arguments.read("--vh", vh_filename))
|
||||||
|
{
|
||||||
|
std::string raw_filename, transfer_filename;
|
||||||
|
int xdim(0), ydim(0), zdim(0);
|
||||||
|
|
||||||
|
std::ifstream header(vh_filename.c_str());
|
||||||
|
if (header)
|
||||||
|
{
|
||||||
|
header >> raw_filename >> transfer_filename >> xdim >> ydim >> zdim >> xSize >> ySize >> zSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xdim*ydim*zdim==0)
|
||||||
|
{
|
||||||
|
std::cout<<"Error in reading volume header "<<vh_filename<<std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!raw_filename.empty())
|
||||||
|
{
|
||||||
|
image_3d = readRaw(xdim, ydim, zdim, 1, 1, "little", raw_filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!transfer_filename.empty())
|
||||||
|
{
|
||||||
|
std::ifstream fin(transfer_filename.c_str());
|
||||||
|
if (fin)
|
||||||
|
{
|
||||||
|
osg::TransferFunction1D::ValueMap valueMap;
|
||||||
|
float value = 0.0;
|
||||||
|
while(fin && value<1.0)
|
||||||
|
{
|
||||||
|
float red, green, blue, alpha;
|
||||||
|
fin >> red >> green >> blue >> alpha;
|
||||||
|
if (fin)
|
||||||
|
{
|
||||||
|
std::cout<<"value = "<<value<<" ("<<red<<", "<<green<<", "<<blue<<", "<<alpha<<")"<<std::endl;
|
||||||
|
valueMap[value] = osg::Vec4(red/255.0+0.5,green/255.0+0.5,blue/255.0+0.5,alpha/255.0+0.5);
|
||||||
|
}
|
||||||
|
value += 1/255.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (valueMap.empty())
|
||||||
|
{
|
||||||
|
std::cout<<"Error: No values read from transfer function file: "<<transfer_filename<<std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
transferFunction = new osg::TransferFunction1D;
|
||||||
|
transferFunction->assign(valueMap, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int sizeX, sizeY, sizeZ, numberBytesPerComponent, numberOfComponents;
|
int sizeX, sizeY, sizeZ, numberBytesPerComponent, numberOfComponents;
|
||||||
std::string endian, raw_filename;
|
std::string endian, raw_filename;
|
||||||
while (arguments.read("--raw", sizeX, sizeY, sizeZ, numberBytesPerComponent, numberOfComponents, endian, raw_filename))
|
while (arguments.read("--raw", sizeX, sizeY, sizeZ, numberBytesPerComponent, numberOfComponents, endian, raw_filename))
|
||||||
|
Loading…
Reference in New Issue
Block a user