Example #1
0
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);
  }
  
}
Example #2
0
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);
        }
    }
}