Exemple #1
0
void View::auto_rotate()
{
  RFO_File *file;
  RFO_Object *object;
  get_selected_stl (object, file);

  m_model->OptimizeRotation(file, object);
}
Exemple #2
0
void View::auto_rotate()
{
  Shape *shape;
  TreeObject *object;
  get_selected_stl (object, shape);

  m_model->OptimizeRotation(shape, object);
}
Exemple #3
0
void View::rotate_selection (Vector4f rotate)
{
  RFO_File *file;
  RFO_Object *object;
  get_selected_stl (object, file);

  m_model->RotateObject (file, object, rotate);

  queue_draw();
}
Exemple #4
0
void View::mirror_selection ()
{
  Shape *shape;
  TreeObject *object;
  get_selected_stl (object, shape);

  m_model->Mirror(shape, object);

  queue_draw();
}
Exemple #5
0
void View::invertnormals_selection ()
{
  Shape *shape;
  TreeObject *object;
  get_selected_stl (object, shape);

  m_model->InvertNormals(shape, object);

  queue_draw();
}
Exemple #6
0
void View::rotate_selection (Vector4d rotate)
{
  Shape *shape;
  TreeObject *object;
  get_selected_stl (object, shape);

  m_model->RotateObject (shape, object, rotate);

  queue_draw();
}
Exemple #7
0
void View::scale_object()
{
  RFO_File *file;
  RFO_Object *object;
  get_selected_stl (object, file);

  Gtk::HScale *scale_slider;
  m_builder->get_widget("m_scale_slider", scale_slider);

  m_model->ScaleObject (file, object, scale_slider->get_value());
}
Exemple #8
0
void View::scale_object()
{
  Shape *shape;
  TreeObject *object;
  get_selected_stl (object, shape);

  Gtk::SpinButton *scale_value;
  m_builder->get_widget("m_scale_value", scale_value);

  m_model->ScaleObject (shape, object, scale_value->get_value());
}
Exemple #9
0
void RFO::DeleteSelected(Gtk::TreeModel::iterator &iter)
{
  RFO_Object *object;
  RFO_File *file;
  get_selected_stl (iter, object, file);
  if (file != NULL)
    Objects[object->idx].files.erase (Objects[object->idx].files.begin() + file->idx);
  else if (object != NULL)
    Objects.erase (Objects.begin() + object->idx);
  update_model();
}
Exemple #10
0
void View::duplicate_selected_stl()
{
  TreeObject *object;
  Shape *shape;
  if (!get_selected_stl (object, shape) || !shape)
    return;

  // duplicate
  m_model->AddShape (object, *shape, shape->filename);

  queue_draw();
}
Exemple #11
0
/* Updates the scale slider when a new STL is selected,
 * giving it the new STL's current scale factor */
void View::update_scale_slider() {
  RFO_File *file;
  RFO_Object *object;
  get_selected_stl (object, file);

  if (!file)
    return; 

  Gtk::HScale *scale_slider;
  m_builder->get_widget("m_scale_slider", scale_slider);

  scale_slider->set_value(file->stl.getScaleFactor());
}
Exemple #12
0
/* Updates the scale value when a new STL is selected,
 * giving it the new STL's current scale factor */
void View::update_scale_value()
{
  Shape *shape;
  TreeObject *object;
  get_selected_stl (object, shape);

  if (!shape)
    return;

  Gtk::SpinButton *scale_sb;
  m_builder->get_widget("m_scale_value", scale_sb);

  scale_sb->set_value(shape->getScaleFactor());
}
Exemple #13
0
void View::duplicate_selected_stl()
{
  RFO_Object *object;
  RFO_File *file;
  if (!get_selected_stl (object, file) || !file)
    return;

  // duplicate
  RFO_File* obj = m_model->AddStl (object, file->stl, file->location);

  // translate
  Vector3f p = file->transform3D.transform.getTranslation();
  Vector3f size = file->stl.Max - file->stl.Min;
  p.x += size.x + 5.0f;	// 5mm space
  obj->transform3D.transform.setTranslation (p);
  m_model->CalcBoundingBoxAndCenter();
  queue_draw();
}
Exemple #14
0
void RFO::draw (Settings &settings, Gtk::TreeModel::iterator &iter)
{
  RFO_File *sel_file;
  RFO_Object *sel_object;
  get_selected_stl (iter, sel_object, sel_file);

  glPushMatrix();
  glMultMatrixf (&transform3D.transform.array[0]);

  for (uint i = 0; i < Objects.size(); i++) {
    RFO_Object *object = &Objects[i];
    glPushMatrix();
    glMultMatrixf (&object->transform3D.transform.array[0]);
    for (uint j = 0; j < object->files.size(); j++) {
      RFO_File *file = &object->files[j];
      glPushMatrix();
      glMultMatrixf (&file->transform3D.transform.array[0]);
      if (sel_file == file ||
	  (!sel_file && sel_object == object)) {

	// FIXME: hideous changing global state for this [!]
	settings.Display.PolygonRGBA.r += 0.5f;
	settings.Display.WireframeRGBA.r += 0.5f;

	file->stl.draw (*this, settings);

	settings.Display.PolygonRGBA.r -= 0.5f;
	settings.Display.WireframeRGBA.r -= 0.5f;
      } else
	file->stl.draw (*this, settings);
      glPopMatrix();
    }
    glPopMatrix();
  }
  glPopMatrix();
}
Exemple #15
0
void RFO::draw (Settings &settings, Gtk::TreeModel::iterator &iter)
{
  RFO_File *sel_file;
  RFO_Object *sel_object;
  gint index = 1; // pick/select index. matches computation in update_model()
  get_selected_stl (iter, sel_object, sel_file);

  glPushMatrix();
  glMultMatrixf (&transform3D.transform.array[0]);

  for (uint i = 0; i < Objects.size(); i++) {
    RFO_Object *object = &Objects[i];
    index++;

    glPushMatrix();
    glMultMatrixf (&object->transform3D.transform.array[0]);
    for (uint j = 0; j < object->files.size(); j++) {
      RFO_File *file = &object->files[j];
      glLoadName(index); // Load select/pick index
      index++;
      glPushMatrix();
      glMultMatrixf (&file->transform3D.transform.array[0]);

      bool is_selected = (sel_file == file ||
	  (!sel_file && sel_object == object));

      if (is_selected) {
        // Enable stencil buffer when we draw the selected object.
        glEnable(GL_STENCIL_TEST);
        glStencilFunc(GL_ALWAYS, 1, 1);
        glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);

        file->stl.draw (*this, settings);

        if (!settings.Display.DisplayPolygons) {
                // If not drawing polygons, need to draw the geometry
                // manually, but invisible, to set up the stencil buffer
                glEnable(GL_CULL_FACE);
                glEnable(GL_DEPTH_TEST);
                glEnable(GL_BLEND);
                // Set to not draw anything, and not update depth buffer
                glDepthMask(GL_FALSE);
                glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);

                file->stl.draw_geometry();

                glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
                glDepthMask(GL_TRUE);
        }

        // draw highlight around selected object
        glColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
        glLineWidth(4.0);
        glEnable(GL_LINE_SMOOTH);
	glEnable (GL_POLYGON_OFFSET_LINE);

        glDisable (GL_CULL_FACE);
        glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
        glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
        glStencilFunc(GL_NOTEQUAL, 1, 1);
	glEnable(GL_DEPTH_TEST);

	file->stl.draw_geometry();

        glEnable (GL_CULL_FACE);
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        glDisable(GL_STENCIL_TEST);
        glDisable(GL_LINE_SMOOTH);
	glDisable(GL_POLYGON_OFFSET_LINE);
      }
      else {
        file->stl.draw (*this, settings);
      }

      glPopMatrix();
    }
    glPopMatrix();
  }
  glPopMatrix();
}