Improve rib exporter plugin parameters default behavior

This commit is contained in:
Stéphane Tayeb 2010-03-22 17:57:28 +00:00
parent 2ae402acb2
commit f78b400fe0
1 changed files with 62 additions and 14 deletions

View File

@ -82,6 +82,7 @@ private:
bool save(const Scene_c3t3_item&, const QFileInfo& fileinfo); bool save(const Scene_c3t3_item&, const QFileInfo& fileinfo);
void init_maps(const C3t3& c3t3, const QColor& color); void init_maps(const C3t3& c3t3, const QColor& color);
void init_point_radius(const C3t3& c3t3); void init_point_radius(const C3t3& c3t3);
void init_parameters();
Point_3 camera_coordinates(const Point_3& p); Point_3 camera_coordinates(const Point_3& p);
void fill_points_and_edges_map(const C3t3& c3t3); void fill_points_and_edges_map(const C3t3& c3t3);
@ -141,6 +142,7 @@ private:
// Cache data to avoid writing too much lines in rib file // Cache data to avoid writing too much lines in rib file
QColor prev_color_; QColor prev_color_;
double prev_alpha_; double prev_alpha_;
const Scene_c3t3_item* prev_c3t3_;
Rib_exporter_parameters parameters_; Rib_exporter_parameters parameters_;
}; };
@ -154,6 +156,7 @@ Mesh_3_rib_exporter_plugin()
, diag_(0) , diag_(0)
, prev_color_(0,0,0) , prev_color_(0,0,0)
, prev_alpha_(1) , prev_alpha_(1)
, prev_c3t3_(NULL)
{ {
} }
@ -177,6 +180,8 @@ init(QMainWindow* mainWindow, Scene_interface* scene_interface)
{ {
std::cerr << "Can't get QGLViewer" << std::endl; std::cerr << "Can't get QGLViewer" << std::endl;
} }
init_parameters();
} }
@ -201,8 +206,14 @@ Mesh_3_rib_exporter_plugin::create_rib()
} }
// Init data // Init data
init_maps(c3t3_item->c3t3(), c3t3_item->color()); if ( c3t3_item != prev_c3t3_ )
init_point_radius(c3t3_item->c3t3()); {
init_maps(c3t3_item->c3t3(), c3t3_item->color());
init_point_radius(c3t3_item->c3t3());
init_parameters();
prev_c3t3_ = c3t3_item;
}
// Get parameters from user dialog // Get parameters from user dialog
if ( !get_parameters_from_dialog() ) if ( !get_parameters_from_dialog() )
@ -283,9 +294,18 @@ get_parameters_from_dialog()
// ----------------------------------- // -----------------------------------
// Set data // Set data
// ----------------------------------- // -----------------------------------
// Materials
ui.sphereRadius->setValue(parameters_.sphere_radius); ui.sphereRadius->setValue(parameters_.sphere_radius);
ui.cylinderRadius->setValue(parameters_.cylinder_radius); ui.cylinderRadius->setValue(parameters_.cylinder_radius);
// Lights
ui.isAmbientOn->setChecked(parameters_.ambientOn);
ui.ambientIntensity->setValue(parameters_.ambientIntensity);
ui.isShadowOn->setChecked(parameters_.shadowOn);
ui.shadowIntensity->setValue(parameters_.shadowIntensity);
// Picture
QStringList mode_list; QStringList mode_list;
mode_list << "Export Cut (draws current cut view)" mode_list << "Export Cut (draws current cut view)"
<< "Export Mesh (draws all surface facets)" << "Export Mesh (draws all surface facets)"
@ -293,9 +313,12 @@ get_parameters_from_dialog()
ui.exportMode->insertItems(0,mode_list); ui.exportMode->insertItems(0,mode_list);
// Get width and height (to compute mask) ui.resWidth->setValue(parameters_.width);
parameters_.width = ui.resWidth->value(); ui.resHeight->setValue(parameters_.height);
parameters_.height = ui.resHeight->value(); ui.exportMode->setCurrentIndex(static_cast<int>(parameters_.mode));
ui.isPreview->setChecked(parameters_.is_preview);
// Update mask
update_mask(); update_mask();
// ----------------------------------- // -----------------------------------
@ -321,13 +344,6 @@ get_parameters_from_dialog()
parameters_.mode = static_cast<Rib_exporter_mode>(ui.exportMode->currentIndex()); parameters_.mode = static_cast<Rib_exporter_mode>(ui.exportMode->currentIndex());
parameters_.is_preview = ui.isPreview->isChecked(); parameters_.is_preview = ui.isPreview->isChecked();
if ( parameters_.is_preview )
{
double ratio = double(parameters_.height) / double(parameters_.width);
parameters_.width = 150;
parameters_.height = int(ratio * double(parameters_.width));
}
return true; return true;
} }
@ -447,6 +463,24 @@ init_point_radius(const C3t3& c3t3)
} }
void
Mesh_3_rib_exporter_plugin::
init_parameters()
{
// Lights
parameters_.ambientOn = true;
parameters_.ambientIntensity = 0.20;
parameters_.shadowOn = true;
parameters_.shadowIntensity = 0.85;
// Picture
parameters_.width = 800;
parameters_.height = 800;
parameters_.mode = CUT;
parameters_.is_preview = false;
}
Mesh_3_rib_exporter_plugin::Point_3 Mesh_3_rib_exporter_plugin::Point_3
Mesh_3_rib_exporter_plugin:: Mesh_3_rib_exporter_plugin::
camera_coordinates(const Point_3& p) camera_coordinates(const Point_3& p)
@ -526,8 +560,22 @@ write_header(const std::string& filename, std::ofstream& out)
<< "Attribute \"visibility\" \"transmission\" 1" << std::endl << std::endl; << "Attribute \"visibility\" \"transmission\" 1" << std::endl << std::endl;
} }
out << "Display \""<< filename << ".tif\" \"file\" \"rgb\"" << std::endl out << "Display \""<< filename << ".tif\" \"file\" \"rgb\"" << std::endl;
<< "Format " << parameters_.width << " " << parameters_.height << " 1" << std::endl;
if ( ! parameters_.is_preview )
{
out << "Format " << parameters_.width << " " << parameters_.height << " 1" << std::endl;
}
else
{
double ratio = double(parameters_.height) / double(parameters_.width);
int width = (ratio < 1.) ? 300 : int(300. / ratio);
int height = (ratio < 1.) ? int(ratio * 300.) : 300;
out << "Format " << width << " " << height << " 1" << std::endl;
}
if ( parameters_.width > parameters_.height ) if ( parameters_.width > parameters_.height )
{ {