qt_widget_get_simple_polygon.h

来自「CGAL is a collaborative effort of severa」· C头文件 代码 · 共 97 行

H
97
字号
// Copyright (c) 1997-2000  Utrecht University (The Netherlands),// ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany),// INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg// (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria),// and Tel-Aviv University (Israel).  All rights reserved.//// This file is part of CGAL (www.cgal.org); you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public License as// published by the Free Software Foundation; version 2.1 of the License.// See the file LICENSE.LGPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $Source: /CVSROOT/CGAL/Packages/Qt_widget/include/CGAL/IO/Qt_widget_get_simple_polygon.h,v $// $Revision: 1.22 $ $Date: 2004/09/04 19:11:43 $// $Name:  $//// Author(s)     : Laurent Rineau && Radu Ursu#ifndef CGAL_QT_WIDGET_GET_SIMPLE_POLYGON_H#define CGAL_QT_WIDGET_GET_SIMPLE_POLYGON_H#include <CGAL/IO/Qt_widget_get_polygon.h>#include <CGAL/Segment_2_Segment_2_intersection.h>  #include <list>#include <qcursor.h>namespace CGAL {template <class Polygon>class Qt_widget_get_simple_polygon : public Qt_widget_get_polygon<Polygon>{public:  typedef Qt_widget_get_polygon<Polygon>  Get_polygon;  typedef typename Polygon::Point_2       Point_2;  typedef typename Polygon::Segment_2     Segment_2;  typedef typename Polygon::Edge_const_iterator  ECI;  Qt_widget_get_simple_polygon(const QCursor                               c=QCursor(Qt::crossCursor),QObject*                               parent = 0, const char* name = 0)    : Qt_widget_get_polygon<Polygon>(c, parent, name){}  protected:  void mousePressEvent(QMouseEvent *e)  {    if(e->button() == Qt::RightButton && is_pure(e->state()))    {      if (this->active) {        if(!this->poly.is_simple()) return;        if(this->poly.is_clockwise_oriented())          this->poly.reverse_orientation ();        assert( ! this->poly.is_clockwise_oriented());      }    }    Get_polygon::mousePressEvent(e);  }; private:  bool is_simple()  {    Segment_2 rubber_segment(this->rubber, this->last_of_poly);    if(this->poly.size() > 1)    {      ECI before_last_it = this->poly.edges_end();      --before_last_it;      --before_last_it;      ECI it;      for(it = this->poly.edges_begin(); it != before_last_it; it++)      {        if(do_intersect(*it, rubber_segment))        return false;      }      //if I'm out of this means that all the edges,       //didn't intersect the last one      ++it;      Object o = intersection(*it, rubber_segment);      Point_2 p;      if(assign(p, o))        return true;      else        return false;    }    else      return true;  }};} // namespace CGAL#endif // CGAL_QT_WIDGET_GET_SIMPLE_POLYGON_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?