⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qt_widget_get_simple_polygon.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2002-2004  INRIA Sophia-Antipolis (France).// 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.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Qt_widget/include/CGAL/IO/Qt_widget_get_simple_polygon.h $// $Id: Qt_widget_get_simple_polygon.h 32795 2006-07-30 16:38:54Z spion $// //// Author(s)     : Laurent Rineau and 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 && this->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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -