Changeset 77036


Ignore:
Timestamp:
Feb 15, 2012, 11:55:38 PM (6 years ago)
Author:
Andrii Sydorchuk
Message:

Adding functionality to remove external edges from visualizer.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/gtl/libs/polygon/voronoi_example/voronoi_visualizer.cpp

    r77035 r77036  
    99
    1010#include <iostream>
     11#include <set>
     12#include <vector>
    1113
    1214#include <QtOpenGL/QGLWidget>
     
    2224  GLWidget(QMainWindow *parent = NULL) :
    2325      QGLWidget(QGLFormat(QGL::SampleBuffers), parent),
    24       primary_edges_only_(false) {
     26      primary_edges_only_(false),
     27      internal_edges_only_(false) {
    2528    startTimer(40);
    2629  }
     
    6770                                (brect_.y_min() + brect_.y_max()) * 0.5);
    6871
     72    exterior_edges_set_.clear();
     73    for (voronoi_edge_const_iterator_type it = vd_.edge_records().begin();
     74        it != vd_.edge_records().end(); ++it) {
     75      if (!it->is_bounded()) {
     76        remove_exterior(&(*it));
     77      }
     78    }
     79
    6980    // Update view.
    7081    update_view_port();
     
    7384  void show_primary_edges_only() {
    7485    primary_edges_only_ ^= true;
     86  }
     87
     88  void show_internal_edges_only() {
     89    internal_edges_only_ ^= true;
    7590  }
    7691
     
    137152      glBegin(GL_LINES);
    138153      for (it = edges.begin(); it != edges.end(); ++it) {
    139         if (!it->is_primary() && primary_edges_only_) {
     154        if (primary_edges_only_ && !it->is_primary()) {
     155          continue;
     156        }
     157        if (internal_edges_only_ && exterior_edges_set_.count(&(*it))) {
    140158          continue;
    141159        }
     
    162180
    163181private:
     182  void remove_exterior(const voronoi_diagram<double>::voronoi_edge_type* edge) {
     183    if (exterior_edges_set_.count(edge)) {
     184      return;
     185    }
     186    exterior_edges_set_.insert(edge);
     187    exterior_edges_set_.insert(edge->twin());
     188    const voronoi_diagram<double>::voronoi_vertex_type* v = edge->vertex1();
     189    if (v == NULL || !edge->is_primary()) {
     190      return;
     191    }
     192    const voronoi_diagram<double>::voronoi_edge_type* e = v->incident_edge();
     193    do {
     194      remove_exterior(e);
     195      e = e->rot_next();
     196    } while (e != v->incident_edge());
     197  }
     198
    164199  void update_view_port() {
    165200    glMatrixMode(GL_PROJECTION);
     
    177212  typedef std::vector<ipoint_type> ipoint_set_type;
    178213  typedef directed_line_segment_set_data<int> isegment_set_type;
     214  typedef voronoi_diagram<coordinate_type>::voronoi_edge_type
     215    voronoi_edge_type;
    179216  typedef voronoi_diagram<coordinate_type>::voronoi_cells_type
    180217    voronoi_cells_type;
     
    192229  point_data<double> shift_;
    193230  voronoi_diagram<coordinate_type> vd_;
     231  std::set<const voronoi_edge_type*> exterior_edges_set_;
    194232  bool primary_edges_only_;
     233  bool internal_edges_only_;
    195234};
    196235
     
    218257  }
    219258
     259  void internal_edges_only() {
     260    glWidget_->show_internal_edges_only();
     261  }
     262
    220263  void browse() {
    221264    QString new_path = QFileDialog::getExistingDirectory(
     
    262305        this, SLOT(primary_edges_only()));
    263306
     307    QCheckBox *internal_checkbox = new QCheckBox("Show internal edges only.");
     308    connect(internal_checkbox, SIGNAL(clicked()),
     309        this, SLOT(internal_edges_only()));
     310
    264311    QPushButton *browse_button =
    265312        new QPushButton(tr("Browse Input Directory"));
     
    274321    file_layout->addWidget(file_list_, 1, 0);
    275322    file_layout->addWidget(primary_checkbox, 2, 0);
    276     file_layout->addWidget(browse_button, 3, 0);
    277     file_layout->addWidget(print_scr_button, 4, 0);
     323    file_layout->addWidget(internal_checkbox, 3, 0);
     324    file_layout->addWidget(browse_button, 4, 0);
     325    file_layout->addWidget(print_scr_button, 5, 0);
    278326
    279327    return file_layout;
Note: See TracChangeset for help on using the changeset viewer.