void SimpleVolumeGenerator::generate( const FileLoader &loader, const FieldSelector &selector, CoordinateAdjuster &adjuster, const ColorMap &colormap ) { if( selector.getFieldNum() < 4 ) { throw std::runtime_error("SimpleVolumeGenerator::4 indeces is needed at least."); } volume_->clear(); // setting coordinates range const FileLoader::DataType &max_range = loader.getMaxRange(); const FileLoader::DataType &min_range = loader.getMinRange(); const double min_x = selector.getField( min_range, 0); const double min_y = selector.getField( min_range, 1); const double min_z = selector.getField( min_range, 2); const double dist_x = selector.getField( max_range, 0) - min_x; const double dist_y = selector.getField( max_range, 1) - min_y; const double dist_z = selector.getField( max_range, 2) - min_z; const double dist = std::max( dist_x, std::max( dist_y, dist_z ) ); const double max_x = min_x + dist; const double max_y = min_y + dist; const double max_z = min_z + dist; adjuster.setRangeX( max_x, min_x ); adjuster.setRangeY( max_y, min_y ); adjuster.setRangeZ( max_z, min_z ); // setting volume data for( FileLoader::DataContainerType::const_iterator it = loader.begin(); it != loader.end(); ++it ) { const FileLoader::DataType &data = *it; const double raw_x = selector.getField( data, 0 ); const double raw_y = selector.getField( data, 1 ); const double raw_z = selector.getField( data, 2 ); const double x = adjuster.x(raw_x) * ( getVolume()->sizex() ); const double y = adjuster.y(raw_y) * ( getVolume()->sizey() ); const double z = adjuster.z(raw_z) * ( getVolume()->sizez() ); double r, g, b, a; colormap.getColor( adjuster.x(raw_x), &r, &g, &b, &a ); setVolumeElement ( x, y, z, r * 255, g * 255, b * 255, a * 255); } }
void BMPFile::addBelief(vector<vector<double> > &values, double minVal, double maxVal, ColorMap &cMap, bool add) { pair<int, int> beliefDims; beliefDims.first = values.size(); beliefDims.second = values.at(0).size(); int scale = (int)ceil((float)xDim/beliefDims.first); assert(scale == ceil((float)yDim/beliefDims.second)); for (int i=0; i < values.size(); i++) { for (int j=0; j < values.at(i).size(); j++) { double val = values.at(i).at(j); double pixelW; if (val < minVal) { pixelW = 0.0; //continue; } else if (val > maxVal) pixelW = 1.0; else pixelW = (val-minVal)/(maxVal-minVal); RGBTRIPLE color; Color color2 = cMap.getColor(pixelW); int R1 = (int)floor(255*color2.getR()) & 0xFF; int G1 = (int)floor(255*color2.getG()) & 0xFF; int B1 = (int)floor(255*color2.getB()) & 0xFF; color.R = (char)R1; color.G = (char)G1; color.B = (char)B1; setPixel(i, j, color, scale); } } }