diff --git a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/doc-setting.sty b/Arrangement_on_surface_2/polyline_upgrade_submission+summary/doc-setting.sty deleted file mode 100644 index e106fa10382..00000000000 --- a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/doc-setting.sty +++ /dev/null @@ -1,67 +0,0 @@ -% Style and command for the document -% -% Dror Atariah, 18.04.2013 -% -\NeedsTeXFormat{LaTeX2e}[1994/06/01] -\ProvidesPackage{doc-setting} - -% -% Packages in use -%%%%%%%%%%%%%%%%%%% -\RequirePackage{mathptmx} -\RequirePackage[T1]{fontenc} -\RequirePackage[utf8x]{inputenc} -\RequirePackage[english]{babel} -\RequirePackage{microtype} -\RequirePackage{hyperref} -\RequirePackage{amsthm,amsmath} -\RequirePackage{graphicx} -\RequirePackage{xcolor} -\RequirePackage{xspace} -\RequirePackage{todonotes} -\RequirePackage{verbments} -\RequirePackage{lscape} -\RequirePackage{standalone} - -\RequirePackage{enumitem} -\setlist{noitemsep,topsep=0pt,parsep=0pt,partopsep=0pt} - -\RequirePackage{tikz} -\usetikzlibrary{decorations.markings,arrows,calc} - -\newcommand*{\cgal}{\textbf{\textsc{Cgal}}\xspace} - -\newcommand*{\file}[1]{\textit{\texttt{#1}}} -\newcommand*{\concept}[1]{\textsc{#1}} -\newcommand*{\model}[1]{\textit{#1}} -\newcommand*{\type}[1]{\texttt{#1}} -\newcommand*{\code}[1]{\texttt{#1}} -\newcommand*{\functor}[1]{\textsf{#1}} - -\newcommand*{\seg}{{\color{blue}\type{Segment}}\xspace} -\newcommand*{\segtr}{{\color{red}\model{Segment\_traits}}\xspace} - -\newcommand*{\polytr}{{\color{red}\model{Polyline\_traits}}\xspace} -\newcommand*{\poly}{{\color{blue}\type{Polyline}}\xspace} -\newcommand*{\xpoly}{{\color{blue}\type{X-Polyline}}\xspace} - -\usepackage[framemethod=tikz]{mdframed} -\theoremstyle{definition} -\newtheorem{que}{Question} -% \newenvironment{queframe}% -% {\begin{mdframed}[backgroundcolor=lightgray]\begin{que}}% -% {\end{que}\end{mdframed}} -\newmdtheoremenv[% -backgroundcolor=red!10,% -outerlinecolor=black,% -innertopmargin = \topskip,% -splittopskip = \topskip,% -ntheorem = true,% -skipabove = \baselineskip,% -skipbelow = \baselineskip,% -roundcorner=4] -{queframe}{Question} - -\RequirePackage[capitalise]{cleveref} - -\endinput \ No newline at end of file diff --git a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/figures/intersect.pdf b/Arrangement_on_surface_2/polyline_upgrade_submission+summary/figures/intersect.pdf deleted file mode 100644 index 96a610b9a1f..00000000000 Binary files a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/figures/intersect.pdf and /dev/null differ diff --git a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/figures/intersect.tex b/Arrangement_on_surface_2/polyline_upgrade_submission+summary/figures/intersect.tex deleted file mode 100644 index 458f0996430..00000000000 --- a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/figures/intersect.tex +++ /dev/null @@ -1,100 +0,0 @@ -\documentclass{standalone} - -\usepackage{tikz} -\usetikzlibrary{calc} - -\begin{document} - \begin{tikzpicture} - \def\sep{0.15} - - \def\scalefact{8} - \def\scalerad{\scalefact*1pt} - - \tikzset{ - ncbar/.style={ - to path=% - ($(\tikztostart)!#1!90:(\tikztotarget)$) - -- ($(\tikztotarget)!($(\tikztostart)!#1!90:(\tikztotarget)$)!90:(\tikztostart)$) - (\tikztotarget) \tikztonodes - }, - ncbar/.default=0.5cm, - } - - \tikzset{% - polyline/.style={% - ultra thick, -latex, shorten <= \scalerad, shorten >= \scalerad}} - - % \draw[help lines,step=\scalefact] (0,0) grid ($(4*\scalefact ,2*\scalefact)$); - \foreach \i in {0,1,2,3,4} - \foreach \j in {0,1,2}{ - \coordinate (p\i\j) at ($(\scalefact*\i,\scalefact*\j)$); - \fill (p\i\j) circle (\scalerad); - } - - \draw[polyline] ($(p00)+(\sep,0)$) --node[near end,below]{0} ($(p11)+(0,-\sep)$); - \draw[polyline] ($(p02)+(0,-\sep)$) -- node[near end, below]{1} ($(p11)+(-\sep,0)$); - \draw[polyline] ($(p11)+(\sep,0)$) -- node[near start, below]{2} ($(p22)+(0,-\sep)$); - \draw[polyline] ($(p11)+(0,-\sep)$) -- node[near start, below]{3} ($(p20)+(-\sep,0)$); - - \draw[polyline] ($(p11)+(-\sep,0)$) --node[near start,above]{4} ($(p00)+(0,\sep)$); - \draw[polyline] ($(p11)+(0,\sep)$) -- node[near start, above]{5} ($(p02)+(\sep,0)$); - \draw[polyline] ($(p22)+(-\sep,0)$) -- node[near end, above]{6} ($(p11)+(0,\sep)$); - \draw[polyline] ($(p20)+(0,\sep)$) -- node[near end, above]{7} ($(p11)+(\sep,0)$); - - \draw[polyline] ($(p10)+(\sep,0)$) -- node[near start, right]{8} ($(p11)+(\sep,-2*\sep)$); - \draw[polyline] ($(p11)+(\sep,2*\sep)$) -- node[near end, right]{9} ($(p12)+(\sep,0)$); - - \draw[polyline] ($(p11)+(-\sep,-2*\sep)$) -- node[near end, left]{10} ($(p10)+(-\sep,0)$); - \draw[polyline] ($(p12)+(-\sep,0)$) -- node[near start, left]{11} ($(p11)+(-\sep,2*\sep)$); - - \draw[polyline,magenta] ($(p00)+(4*\sep,0)$) -- ($(p11)+(2*\sep,-2*\sep)$) -- ($(p22)+(0,-4*\sep)$) node[above right]{12}; - \fill[magenta] ($(p11)+(2*\sep,-2*\sep)$) circle (\sep); - \draw[polyline,magenta] ($(p02)+(0,-4*\sep)$) -- ($(p11)+(-2*\sep,-2*\sep)$) -- node[near end, below]{13} ($(p20)+(-4*\sep,0)$); - \fill[magenta] ($(p11)+(-2*\sep,-2*\sep)$) circle (\sep); - - \draw[polyline,blue] ($(p00)+(6*\sep,0)$) -- ($(p11)+(0,-6*\sep)$) -- node[at end, below]{14} ($(p20)+(-6*\sep,0)$); - \draw[polyline,blue] ($(p02)+(6*\sep,0)$) -- ($(p11)+(0,6*\sep)$) -- node[at end, above]{15} ($(p22)+(-6*\sep,0)$); - \draw[polyline,magenta] ($(p22)+(-4*\sep,0)$) -- ($(p11)+(-2*\sep,2*\sep)$) -- node[near end, above]{16} ($(p00)+(0,4*\sep)$); - \fill[magenta] ($(p11)+(-2*\sep,2*\sep)$) circle (\sep); - \draw[polyline,magenta] ($(p20)+(0,4*\sep)$) -- ($(p11)+(2*\sep,2*\sep)$) -- ($(p02)+(4*\sep,0)$) node[above]{17}; - \fill[magenta] ($(p11)+(2*\sep,2*\sep)$) circle (\sep); - \draw[polyline,blue] ($(p20)+(-8*\sep,0)$) -- ($(p11)+(0,-8*\sep)$) -- node[at end, below] {18} ($(p00)+(8*\sep,0)$); - \draw[polyline,blue] ($(p22)+(-8*\sep,0)$) -- ($(p11)+(0,8*\sep)$) -- node[at end, above] {19} ($(p02)+(8*\sep,0)$); - - \draw[polyline,green] ($(p00)+(10*\sep,0)$) -- ($(p22)+(0,-10*\sep)$) -- ($(p40)+(-10*\sep,0)$) node[below] {20}; - \draw[polyline,green] ($(p40)+(0,10*\sep)$) -- ($(p22)+(0,10*\sep)$) -- ($(p00)+(0,10*\sep)$) node[below] {21}; - \draw[polyline,green,dashed] ($(p02)+(10*\sep,0)$) -- ($(p20)+(0,10*\sep)$) -- ($(p42)+(-10*\sep,0)$) node[above] {22}; - \draw[polyline,green,dashed] ($(p42)+(0,-10*\sep)$) -- ($(p20)+(0,-10*\sep)$) -- ($(p02)+(0,-10*\sep)$) node[above] {23}; - - \draw[polyline,yellow!50!black] ($(p00)+(12*\sep,0)$) -- ($(p11)+(0,-12*\sep)$) -- ($(p20)+(0,-12*\sep)$) -- ($(p31)+(0,-12*\sep)$) -- ($(p40)+(-12*\sep,0)$) node[below left]{24}; - \draw[polyline,yellow!50!black] ($(p40)+(0,12*\sep)$) -- ($(p31)+(0,12*\sep)$) -- ($(p20)+(0,12*\sep)$) -- ($(p11)+(0,12*\sep)$) -- ($(p00)+(0,12*\sep)$) node[above]{25}; - \draw[polyline,yellow!50!black,dashed] ($(p02)+(14*\sep,0)$) -- ($(p11)+(0,14*\sep)$) -- ($(p22)+(0,14*\sep)$) -- ($(p31)+(0,14*\sep)$) -- ($(p42)+(-14*\sep,0)$) node[above]{28}; - \draw[polyline,yellow!50!black,dashed] ($(p42)+(0,-14*\sep)$) -- ($(p31)+(0,-14*\sep)$) -- ($(p22)+(0,-14*\sep)$) -- ($(p11)+(0,-14*\sep)$) -- ($(p02)+(0,-14*\sep)$) node[below]{29}; - - \draw[polyline,gray] ($(p31)$) -- node[near end,above]{26} ($(p40)$); - \draw[polyline,gray] ($(p11)+(6*\sep,0)$) -- ($(p20)+(0,6*\sep)$) -- node[near end, below]{27} ($(p31)+(-6*\sep,0)$); - \draw[polyline,gray] ($(p31)$) -- node[near end,above]{30} ($(p42)$); - \draw[polyline,gray] ($(p11)+(6*\sep,0)$) -- ($(p22)+(0,-6*\sep)$) -- node[near end, above] {31} ($(p31)+(-6*\sep,0)$); - - \draw[polyline,orange] ($(p00)+(-2*\sep,0)$) -- node[near end,right]{32} ($(p02)+(-2*\sep,0)$); - \draw[polyline,orange] ($(p02)+(-4*\sep,0)$) -- node[near end,left]{33} ($(p00)+(-4*\sep,0)$); - - \draw[polyline,orange] ($(p10)+(5*\sep,0)$) -- node[near end,right]{34} ($(p12)+(5*\sep,0)$); - \draw[polyline,orange] ($(p12)+(-5*\sep,0)$) -- node[near end,left]{35} ($(p10)+(-5*\sep,0)$); - - \draw[polyline,orange] ($(p20)+(4*\sep,0)$) -- node[near end,right]{36} ($(p22)+(4*\sep,0)$); - \draw[polyline,orange] ($(p22)+(-4*\sep,0)$) -- node[near end,left]{37} ($(p20)+(-4*\sep,0)$); - - \draw[polyline,orange] ($(p30)+(2*\sep,0)$) -- node[near end,right]{38} ($(p32)+(2*\sep,0)$); - \draw[polyline,orange] ($(p32)+(-2*\sep,0)$) -- node[near end,left]{39} ($(p30)+(-2*\sep,0)$); - - \draw[polyline,orange] ($(p40)+(2*\sep,0)$) -- node[near end,left]{40} ($(p42)+(2*\sep,0)$); - \draw[polyline,orange] ($(p42)+(4*\sep,0)$) -- node[near end,right]{41} ($(p40)+(4*\sep,0)$); - - \end{tikzpicture} -\end{document} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "../main" -%%% End: diff --git a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/main.tex b/Arrangement_on_surface_2/polyline_upgrade_submission+summary/main.tex deleted file mode 100644 index 1c79efd3e82..00000000000 --- a/Arrangement_on_surface_2/polyline_upgrade_submission+summary/main.tex +++ /dev/null @@ -1,457 +0,0 @@ -\documentclass[a4paper,10pt]{article} -\usepackage[scale=0.7,vmarginratio={1:2},heightrounded]{geometry} - -\catcode`_=\active -\newcommand{_}{\ifmmode\expandafter\sbrm\else\string_\fi} -\newcommand{\sbrm}[1]{\sb{\mathrm{#1}}} - -\usepackage{doc-setting} - - -\title{Arrangement of Polylines Traits Class - Upgrade} -\author{Dror Atariah} - -\begin{document} -\maketitle - -\begin{abstract} - Outline the projects goals and progress. -\end{abstract} - -\section{Introduction} -\label{sec:introduction} - -The implementation of the computation of arrangement of polylines shipped with version 4.2 of \cgal proved to poses limitations. -For example, the only way it provides to construct a polyline is by giving a range of points as its input. -Another example would be that inspecting an existing polyline, in terms of iterating over its elements, is only possible by iterating over its \emph{vertices}. -These two main limitations, among others, turn it difficult to generalize the implementation --- for example when attempting to compute the arrangement of \emph{unbounded} polylines. -In addition, as the core of the code is several years old, it no longer meets the standards of \cgal. - -Therefore, the goal of this project is, as a first step, to upgrade and update the code that deals with polylines in the Arrangement on Surface (AoS) package. -This upgrade lay the foundation for future generalization of the class. -In addition, by adopting better programming style we also manage to introduce an improvement of 4--6\% in the performance of the package. - -\subsection{Notations Conventions} -\label{sec:notat-conv} - -We use the following typesetting convention. -\begin{itemize} -\item \file{foo.bar} is a file name. -\item A concept is \concept{ConceptName} and its model is \model{Concept_name_model}. -\item \type{Some_type} will indicate a type and \functor{My_functor} will indicate a function class (a.k.a. functor). -\end{itemize} - - -\subsection{Definitions} -\label{sec:definitions} -% -Furthermore, we will use the following, more specific, conventions: -\begin{itemize} -% -\item \href{http://doc.cgal.org/4.2/CGAL.CGAL.2D-Arrangements/html/classCGAL_1_1Arr__polyline__traits__2.html}{\polytr} is the polyline traits class which currently models the following concepts: - \begin{itemize} - \item \concept{ArrangementTraits\_2} - \item \concept{ArrangementLandmarkTraits\_2} - \end{itemize} - Its implementation can be found in \file{Arr\_polyline\_traits\_2.h}. - This traits class has two nested types \poly and \xpoly which are the \type{Curve\_2} and \type{X\_monotone\_curve\_2} nested types of the traits class. - These curves are the representations of piecewise linear (PL) curves and x-monotone PL curves respectively. - \polytr, together with its nested curve types, is the component of the arrangement on surfaces package of \cgal which handles the construction and computations of arrangements of sets of polylines. - The actual implementations of \poly and \xpoly can be found in \file{Polyline\_2.h}. -% -\item The \concept{SegmentTraits} is the template parameter of the \polytr and it should be a model of \concept{ArrangementTraits\_2}. - Currently there are two implementations of models of \concept{SegmentTraits}: - \begin{itemize} - \item \model{Arr\_segment\_traits\_2} - \item \model{Arr\_non\_caching\_segment\_traits\_2} - \end{itemize} - When there is no place of confusion we shall refer to them as \segtr. - In addition, \segtr models the concepts: - \begin{itemize} - \item \concept{ArrangementTraits\_2} - \item \concept{ArrangementLandmarkTraits\_2} - \item \concept{ArrangementDirectionalXMonotoneTraits\_2} - \end{itemize} - For example, \model{Arr_segment_traits_2} is implemented in \file{Arr\_segment\_traits\_2.h}. - Let \seg be the \type{Curve\_2} and \type{X\_monotone\_curve\_2} nested types that are nested in \segtr. -\end{itemize} - -\section{Implementation of \poly and \xpoly} -\label{sec:implementation-poly} - -The implementations of \poly and \xpoly are the building blocks of the polyline traits class and the way we could compute arrangement of polylines. -The existing implementation of the types is rather old and no longer meets the standards of \cgal. -Furthermore, as we discuss later, the implementation is restrictive and cannot serve in an attempt to generalize the package to support \emph{unbounded polylines}. -Therefore, this implementation had to be revised and we discuss this revision in this section. - -\paragraph{Degenerated polylines.} -\label{sec:degen-polyl-construction} - -The \segtr does not allow the construction of degenerated polylines. -In turn, we impose a similar constrain on the construction of \poly and \xpoly, namely we exclude the construction of degenerated polylines. -That is we do not treat polylines which contains degenerated segments (i.e. segments of length zero) and isolated points. - -\paragraph{Well oriented polylines.} -\label{sec:well-orient-polyl} - -From a strictly mathematical point of view, polylines do not induce any notion of orientation. -Here orientation is in the sense of source or start of a polyline and its target or end. -The only restriction is that the constituting segments will concatenate properly and form a PL curve. -Similarly, the segments, again from a mathematical point of view, may not be directed. -However, the both implementations of models of \concept{SegmentTraits} model the concept \concept{ArrangementDirectionalXMonotoneTraits_2}. -In other words they provide the notion of both \emph{source} and \emph{target}. -The source and target of a segment can be determined using the functors -\begin{itemize} -\item \functor{Compare\_endpoints\_xy\_2} -\item \functor{Construct\_opposite\_2} -\end{itemize} -which are provided by \concept{ArrangementDirectionalXMonotoneTraits_2} together with the functors -\begin{itemize} -\item \functor{Construct\_min\_vertex\_2} -\item \functor{Construct\_max\_vertex\_2} -\end{itemize} -which are defined in the concept \concept{ArrangementTraits_2}. -Furthermore, two access function \code{source()} and \code{target()} are provided by \segtr. -Note that these functions are \emph{not} required by the concepts which \segtr models. -Nevertheless, current implementation of \poly and \xpoly used these function extensively. -Obviously this is bad programming style. - -In order to keep the efficiency benefits of the usage of \code{source()} and \code{target()} on one hand and consistency with the documentation on the other, we add a requirement that \segtr should be model of the \concept{ArrangementDirectionalXMonotoneTraits\_2}. -Note that this assumption implies only a conceptual restriction, since in practice the available implementations that can be used model this concept anyway. -Once \segtr models this concept we can remove all occurrences of \code{source()} and \code{target()}. -In this we assert that \polytr itself will be a model of this concept as well. -As a result, we can also provide the following invariant: \textbf{\poly and \xpoly will be \emph{well oriented}.} -That is, the \emph{source} of the \(n\)-th \seg should be the \emph{target} of the \((n-1)\)-th \seg. -In particular the polyline: -\begin{center} - \begin{tikzpicture} - \begin{scope}[thick] - \draw (-2,0) coordinate (a1) -- (-1,1) coordinate (a2); - \draw (0,0) coordinate (a3) -- (a2); - \draw (1,1) coordinate (a4) -- (a3); - \draw (a4) -- (-0.25,0.75) coordinate (a5); - \foreach \i in {1,2,3,4,5} - \fill (a\i) circle (2pt); - \end{scope} - \end{tikzpicture} -\end{center} -can now be represented as one and only one of the following: -\begin{center} - \begin{tikzpicture} - \begin{scope}[thick,decoration={% - markings, - mark=at position 0.5 with {\arrow{>}}% - }] - \coordinate (a1) at (-2,0); - \coordinate (a2) at (-1,1); - \coordinate (a3) at (0,0); - \coordinate (a4) at (1,1); - \coordinate (a5) at (-0.25,0.75); - \draw[postaction={decorate}] (a1) -- (a2); - \draw[postaction={decorate}] (a2) -- (a3); - \draw[postaction={decorate}] (a3) -- (a4); - \draw[postaction={decorate}] (a4) -- (a5); - \foreach \i in {1,2,3,4,5} - \fill (a\i) circle (2pt); - \end{scope} - % - \begin{scope}[xshift=4cm,thick,decoration={% - markings, - mark=at position 0.5 with {\arrow{>}}% - }] - \coordinate (a1) at (-2,0); - \coordinate (a2) at (-1,1); - \coordinate (a3) at (0,0); - \coordinate (a4) at (1,1); - \coordinate (a5) at (-0.25,0.75); - \draw[postaction={decorate}] (a2) -- (a1); - \draw[postaction={decorate}] (a3) -- (a2); - \draw[postaction={decorate}] (a4) -- (a3); - \draw[postaction={decorate}] (a5) -- (a4); - \foreach \i in {1,2,3,4,5} - \fill (a\i) circle (2pt); - \end{scope} - \end{tikzpicture} -\end{center} - -\paragraph{Direction invariant of \(x\)-monotone polylines.} -\label{sec:direct-invar-x-mono-poly} - -An \xpoly is x-monotone regardless of its representation. -X-monotonicity is a geometrical property of the polyline, and it is not by its internal representation. -Currently, an \xpoly maintains a \emph{direction invariant} that it is oriented \emph{left-to-right}. -That is, its vertices should be given in an increasing lexicographic order. -However, in general an \xpoly should merely be x-monotone, and its vertices (or segments) may be oriented from left-to-right \emph{or} from right-to-left. -In this project we lifted this restriction and the new implementation allows the construction of \xpoly's which are oriented either left-to-right \emph{or} right-to-left. - -\paragraph{Accessing the traits class from nested types.} -\label{sec:access-traits-class-from-nested-types} - -\cgal's style discourages the usage of functors from traits classes inside nested types. -The current implementation violated this style. -Therefore all cases where functors of either \polytr or \segtr were used inside \poly and \xpoly were removed. -This includes removing code which was in \code{CGAL_precondition}. - -\paragraph{Name spaces.} -\label{sec:name-spaces-poly+xpoly} - -The implementation of \poly and \xpoly was moved into its own namespace, namely \code{POLYLINE}. - - -\paragraph{Construction and Iteration.} -\label{sec:constr+iter-poly} - -The current implementation of \poly and \xpoly emph{relays on their vertices} and it is only possible to construct the from a given range of \emph{points}. -Furthermore, given either a \poly or \xpoly, it is only possible to iterate over its vertices. -There is no way to iterate over the segments that constitute the polyline. -This design limits the possibilities of extending the traits class, for example to enable the handling of unbounded polylines. - -\subparagraph{Construction.} -In order to enable construction of unbounded polylines, we have to add the possibility of construction from ranges of \seg's. -Ultimately, there will be \emph{only} one constructor of either \poly's or \xpoly's. -This construction will construct the polyline \emph{only} from ranges of \seg's. -For the sake of backwards compatibility, the current constructor, namely the one from a range of points, will be kept as deprecated\footnote{In the next version it will be removed completely.}. - -The user should be encouraged to use the construction functors from \polytr (see \cref{sec:constr-funct-polytr}) and not the direct constructor of the class. -The functors provide the construction from two points, one segment, range of points and range of segments. - -\subparagraph{Iteration.} -As we pointed out, iteration over the vertices of the polyline is restrictive. -We thus replace the iterators over the vertices which are currently defined for \poly and \xpoly with iterators over the segments of \poly and \xpoly respectively. -The iterators over the segments are obtained directly from the container of the \seg's. -Note that due to this change all the occurrences of iterators over the points of either a \poly or an \xpoly in \polytr have to be replaced with the iterators over their respective segments. - -\paragraph{Augmenting a polyline} -\label{sec:augmenting-poly} - -Currently, a polyline can be augmented using a \emph{push-back} function. -This function works as follows: -\begin{enumerate} -\item Gets a vertex as its input. -\item Obtains the last vertex of the polyline using \code{target()} function. -\item Generates a new \seg and pushes it to the range of segments representing the \poly. -\end{enumerate} -As we already mentioned, using a function like \code{target()} has to be avoided. -Furthermore, in order to maintain the well-orientedness of the polylines \segtr has to be used; again this is not desired -Augmenting an existing polyline will be treated, from now on, using the functor \functor{Push_back_2} (See \cref{sec:augmenting-poly-in-polytr}). - -\section{Changes and updates of \polytr} -\label{sec:impl-polytr} - -Ultimately, the \polytr should be in charge of all the operations which deal with \poly's and \xpoly's. -To that end, the traits class should provide functors which construct, augment, split etc. polylines. - -\subsection{Construction Functors} -\label{sec:constr-funct-polytr} - -As we leave only one constructor (which handles a range of \seg's) in the class of \poly and \xpoly we have to provide other needed construction methods in the traits class, namely in \polytr. -To that end we provide two functors \functor{Construct_curve_2} and \functor{Construct_x_monotone_curve_2} which returns either a \poly or \xpoly object respectively. -The \code{operator()} of these functors is overloaded so it can treat various types of inputs. -In particular we provide the following overloads in the \functor{Construct_curve_2} -\begin{pyglist}[language=c++] - Curve_2 operator()(const Point_2& p, const Point_2& q) const - Curve_2 operator()(const Segment_2& seg) const - Curve_2 operator()(ForwardIterator begin, ForwardIterator end) const -\end{pyglist} -\noindent -The last functor dispatches the given range to the corresponding implementation depending on the \emph{type} of the elements of the given range. -Similar functors are provided for the construction of \xpoly. -All validity tests of the input should be done in \code{CGAL\_precondition} blocks. - -\subsection{Augmenting a \poly or \xpoly} -\label{sec:augmenting-poly-in-polytr} - -We added the functor \functor{Push_back_2} which augment either an existing \poly or \xpoly. -Note that ideally, the user would not have to use augment an \xpoly manually. -The functor is able to append either vertices or segments to an \emph{existing} (\(x\)-monotone) polyline. -Note that once the polyline will be unbounded augmentation will not be always possible. - -\subsection{Output of \functor{Intersect\_2}} -\label{sec:outp-funct-intersect-2} - -In the concept \concept{ArrTraits::Intersect\_2} it is defined that the output iterator should contain the elements in an ascending \(xy\)-lexicographic order. -Thus, obviously, the implementation of \functor{Intersect\_2} had to be updated one the left-to-right invariant was lifted. - -\subsection{Location Functions} -\label{sec:location-functions-polytr} - -Due to the lifting of the left-to-right invariant of the x-monotone polylines, the functions \code{locate()} and \code{locate\_side()} had to be corrected. -During the correction a mistake in the original implementation was found. -Consider the following simple example. -Set \(p_0 = (-1,0), p_1 = (0,0)\) and \(p_2 = (1,0)\) and let \(c\) be the \(x\)-monotone polyline which connects them. -Next, let \(q = (0,1)\) be the query point. -\begin{center} - \begin{tikzpicture} - \coordinate (p0) at (-1,0); - \coordinate (p1) at (0,0); - \coordinate(p2) at (1,0); - \coordinate(q) at (0,1); - \draw (p0) --node[above]{$e_0$} (p1) --node[above]{$e_1$} (p2); - \foreach \i in {0,1,2} - \fill (p\i)node[below]{$p_{\i}$} circle (2pt); - \fill (q)node[right]{$q$} circle (2pt); - \draw[dashed] (p1) -- (q); - \end{tikzpicture} -\end{center} -In the original implementation \code{_locate(seg_tr,c,q)} would return the index \(i=0\). -But in this case neither of the tests -\begin{pyglist} - if (equal(segment_traits_2()->construct_min_vertex_2_object()(cv[i]), q)) - if (equal(segment_traits_2()->construct_max_vertex_2_object()(cv[i]), q)) -\end{pyglist} -\noindent would yield \emph{TRUE} and thus \code{_locate_side(seg_tr,c,q,ture)} would return \(i=0\), while it \emph{should} yield \(i=1\). - -\subsection{Changes Derived from \poly} -\label{sec:changes-derived-from-polytr} - -As a result of the changes in \poly and \xpoly (cf. \cref{sec:implementation-poly}), updates and modifications are needed also in \polytr. -In particular the lifting of the left-to-right direction invariant of the \(x\)-monotone polylines forced changes in almost \emph{all} functors of \polytr. -Most significant functors which were influenced by this change were: -\begin{itemize} -\item \functor{Make_x_monotone_2} -\item \functor{Intersect_2} -\item \functor{Merge_2} -\item \functor{Split_2} -\end{itemize} - -\section{Testing the Code} -\label{sec:testing-code} - -The original tests which were carried out were limited and naturally did not consider the cases of \(x\)-monotone polylines which are oriented right-to-left. -Thus, in order to verify that the upgraded implementation is correct, we extended the tests so they cover the cases of inverse \(x\)-monotone polylines. - -\paragraph{\functor{Intersect_2}:} -\label{sec:testing-intersect_2} - -\cref{fig:test-cases-of-intersect_2} illustrates all the \xpoly's that we considered in out testings. -Note that we considered all the possible pairs of \xpoly's that arise from the family of \(x\)-monotone polylines that we consider in the image. - -\begin{figure} - \centering - \includegraphics[width=\linewidth]{./figures/intersect} - \caption{The \xpoly's used in testing \functor{Intersect_2}} - \label{fig:test-cases-of-intersect_2} -\end{figure} - -\section{Benchmark} -\label{sec:benchmark} - -Once we finished testing the code we benchmarked the code in order to verify that the changes did not impair the performances. -Indeed, the usage of advanced coding resulted in an improvement of \(4.8\%\) in average. -For the benchmark we used the code which can be found in \file{bench_random_arr_polylines.cpp} in \file{Arrangement_on_surface_2/benchmark/Arrangement_on_surface_2}. -Note that this code uses the \emph{deprecated} construction of polylines -- we did it in order to run the same benchmark both on the original implementation and on our improvement. -\cref{tab:benchmark-results} in \cref{sec:summ-benchm-tests} summarizes the results of the benchmarks. - - -\section{Future Work} -\label{sec:future-work} - -While working on this project we discovered several issues which have to be addressed. -These issues vary from purely technicalities that have to be addressed to issues which involve design decisions that have to be taken. - -\begin{itemize} -\item Re-implement \code{locate()} so it will return a \emph{pointer} rather then an index to the containing segment. -\item Fix \functor{Make_x_monotone_2} so it will not depend on the input's order. -Consider the following example. -Let \(T\) be the triangle defined by the vertices \(p_1 = (0,2), p_2 = (-1,-1)\) and \(p_3 = (1,-1)\). -From a strictly mathematical point of view the \(T\) can be treated as a polyline, and in turn the induced arrangement would consist of \emph{one} vertex, one edge (the triangle \(T\) itself) and \emph{two faces}. -Since the implementation of the arrangement package depends on the notion of \(x\)-monotone curves, we cannot avoid having \emph{two} vertices and \emph{two} edges in the resulting arrangement. -However, depending on the order in which the points are given the current implementation can yield different results. -The triangle defined by \(\overline{p_2 p_1 p_3 p_2}\) yields \((2,2,2)\) as its \(f\)-vector, whereas \(\overline{p_1 p_2 p_3 p_1}\) yields the \(f\)-vector \((3,3,2)\). -Note that the number of face is correct, but the other elements of the vector are not stable. -\item Accessing the segments of a polyline. - Currently accessing a segment of either a \poly or \xpoly is done using the \code{operator[]}. - Replace this accessing method with iterators/handles. -\item The concept definition of the functor \functor{AreMergeable_2} states when two \(x\)-monotone polylines are mergable: -\begin{quote} - \emph{``\emph{xc1} and \emph{xc2} are mergeable if their underlying curves are identical, they share a common endpoint, and they do not bend to form a non- x-monotone curve.''} -\end{quote} -This definition is rather restrictive and rule out curves that intuitively speaking should be mergeable. -For example, the case of overlapping curves is \emph{not} considered mergeable. -In turn, the current implementation of \functor{Merge_2} deals merely with concatenation of \xpoly's. -We recommend to revolve the definitions of the concepts \functor{AreMergeable_2} and \functor{Merge_2}. -A priori, allowing the merging of overlapping curves can save possibly redundant computations. -\item Intersection at a common vertex. - If two \xpoly's have a proper intersection at a common vertex then the existing implementation returns a multiplicity \(0\). - Consider, for example, the following - \begin{center} - \begin{tikzpicture}[scale=0.5] - \draw[blue] (0,2) node [shape=circle,fill,inner sep = 1pt]{} -- (1,1) -- (2,2) node [shape=circle,fill,inner sep = 1pt]{}; - \draw[red] (0,0) node [shape=circle,fill,inner sep = 1pt]{} -- (1,1) node [shape=circle,fill=black,inner sep = 1pt]{} -- (2,0) node [shape=circle,fill,inner sep = 1pt]{}; - \pgftransformxshift{4cm} - \draw[blue] (0,2) node [shape=circle,fill,inner sep = 1pt]{} -- (1,1) -- (2,0) node [shape=circle,fill,inner sep = 1pt]{}; - \draw[red] (0,0) node [shape=circle,fill,inner sep = 1pt]{} -- (1,1) node [shape=circle,fill=black,inner sep = 1pt]{} -- (2,2) node [shape=circle,fill,inner sep = 1pt]{}; - \end{tikzpicture} - \end{center} - The current implementation will yield the right intersection point and will assign multiplicity \(0\) for both cases, although it is natural to expect that the multiplicity will be \(1\). -See for reference, the pairs \(\{12,34\}\), \(\{15,35\}\) and others in the test cases of \functor{Intersect_2} \cref{fig:test-cases-of-intersect_2}. -\end{itemize} - -\appendix - -\section{Summary of benchmark tests} -\label{sec:summ-benchm-tests} - -\begin{landscape} - \begin{table} - \centering - \begin{tabular}{rrrrrrrrr} - \hline - Seed & N & V & E & F & Timer (B) & Timer (M) & \% & Mean \% \\ - \hline - \hline - 1368346973 & 10 & 10 & 12 & 4 & 0.000768 & 0.000712 & -7.8651685 & \\ - \hline - 1368346990 & 10 & 7 & 9 & 4 & 0.000673 & 0.000608 & -10.690789 & \\ - \hline - 1368347002 & 10 & 10 & 13 & 5 & 0.000716 & 0.000674 & -6.2314540 & -8.2624705 \\ - \hline - 1368347036 & 50 & 326 & 615 & 291 & 0.017041 & 0.017389 & 2.0012652 & \\ - \hline - 1368347050 & 50 & 259 & 485 & 228 & 0.013991 & 0.01423 & 1.6795502 & \\ - \hline - 1368347062 & 50 & 254 & 471 & 219 & 0.013594 & 0.014035 & 3.1421446 & 2.27432 \\ - \hline - 1368347141 & 500 & 29357 & 58378 & 29023 & 1.50945 & 1.65587 & 8.8424816 & \\ - \hline - 1368347165 & 500 & 26395 & 52464 & 26071 & 1.36537 & 1.44331 & 5.4000873 & \\ - \hline - 1368347184 & 500 & 27592 & 54847 & 27257 & 1.4248 & 1.50637 & 5.4150043 & 6.5525244 \\ - \hline - 1368347214 & 1000 & 117252 & 233848 & 116598 & 6.13624 & 6.39283 & 4.0137154 & \\ - \hline - 1368347267 & 1000 & 115255 & 229844 & 114591 & 6.05129 & 6.32789 & 4.3711253 & \\ - \hline - 1368347320 & 1000 & 122911 & 245155 & 122246 & 6.41939 & 6.78416 & 5.3767895 & 4.5872101 \\ - \hline - 1371453603 & 2000 & 453785 & 906218 & 452435 & 24.2019 & 25.3598 & 4.5658877 & \\ - \hline - 1371453661 & 2000 & 472734 & 944122 & 471390 & 25.1665 & 26.2028 & 3.9549208 & \\ - \hline - 1371453708 & 2000 & 450377 & 899397 & 449022 & 23.8502 & 24.9693 & 4.4819038 & 4.3342374 \\ - \hline - 1371453752 & 2500 & 710089 & 1418556 & 708469 & 37.8684 & 39.9537 & 5.2192913 & \\ - \hline - 1371453814 & 2500 & 739811 & 1477940 & 738131 & 39.4883 & 41.7421 & 5.3993450 & \\ - \hline - 1371453926 & 2500 & 730482 & 1459272 & 728792 & 40.0593 & 40.8858 & 2.0214842 & 4.2133735 \\ - \hline - 1371453996 & 3000 & 1041705 & 2081422 & 1039719 & 56.5583 & 60.2639 & 6.1489548 & \\ - \hline - 1371454074 & 3000 & 1024104 & 2046202 & 1022100 & 55.2771 & 61.2115 & 9.6949103 & \\ - \hline - 1371454144 & 3000 & 1011434 & 2020912 & 1009480 & 54.5034 & 57.0535 & 4.4696644 & 6.7711765 \\ - \hline - \end{tabular} - \caption{Benchmark results} - \label{tab:benchmark-results} - \end{table} -\end{landscape} - - -\end{document} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: diff --git a/BGL/include/CGAL/boost/graph/named_function_params.h b/BGL/include/CGAL/boost/graph/named_function_params.h index c8df45cdcb3..543e1b0a103 100644 --- a/BGL/include/CGAL/boost/graph/named_function_params.h +++ b/BGL/include/CGAL/boost/graph/named_function_params.h @@ -68,6 +68,8 @@ namespace CGAL { enum get_cost_policy_params_t { get_cost_policy_params } ; enum get_placement_policy_t { get_placement_policy } ; enum get_placement_policy_params_t { get_placement_policy_params } ; + enum edge_is_constrained_t { edge_is_constrained } ; + enum edge_is_constrained_params_t { edge_is_constrained_params } ; #if BOOST_VERSION >= 105100 template @@ -166,6 +168,22 @@ namespace CGAL { typedef cgal_bgl_named_params Params; return Params(p, *this); } + + template + cgal_bgl_named_params + edge_is_constrained_map(const EdgeIsConstrained& em) const + { + typedef cgal_bgl_named_params Params; + return Params(em, *this); + } + + template + cgal_bgl_named_params + edge_is_constrained_map_params(const EdgeIsConstrainedParams& em) const + { + typedef cgal_bgl_named_params Params; + return Params(em, *this); + } }; #else template @@ -270,6 +288,22 @@ namespace CGAL { typedef cgal_bgl_named_params Params; return Params(p, *this); } + + template + cgal_bgl_named_params + edge_is_constrained_map(const EdgeIsConstrained& em) const + { + typedef cgal_bgl_named_params Params; + return Params(em, *this); + } + + template + cgal_bgl_named_params + edge_is_constrained_map_params(const EdgeIsConstrainedParams& em) const + { + typedef cgal_bgl_named_params Params; + return Params(em, *this); + } }; template @@ -373,6 +407,22 @@ namespace CGAL { typedef cgal_bgl_named_params Params; return Params(p); } + + template + cgal_bgl_named_params + edge_is_constrained_map(const EdgeIsConstrained& em) + { + typedef cgal_bgl_named_params Params; + return Params(em); + } + + template + cgal_bgl_named_params + edge_is_constrained_map_params(const EdgeIsConstrainedParams& em) + { + typedef cgal_bgl_named_params Params; + return Params(em); + } } //namespace CGAL #if BOOST_VERSION >= 105100 diff --git a/Documentation/CMakeLists.txt b/Documentation/CMakeLists.txt index df29dd88ba8..0c19f9ce7f9 100644 --- a/Documentation/CMakeLists.txt +++ b/Documentation/CMakeLists.txt @@ -37,7 +37,7 @@ function(configure_doxygen_package CGAL_PACKAGE_NAME) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "IMAGE_PATH = ${CGAL_PACKAGE_DIR}/doc/${CGAL_PACKAGE_NAME}/fig\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "EXAMPLE_PATH = ${CGAL_PACKAGE_DIR}/examples\n") - file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "GENERATE_TAGFILE = ${CGAL_DOC_TAG_DIR}/${CGAL_PACKAGE_NAME}.tag\n") + file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "GENERATE_TAGFILE = ${CGAL_DOC_TAG_GEN_DIR}/${CGAL_PACKAGE_NAME}.tag\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_PATH = ${CGAL_PACKAGE_DIR}/doc/${CGAL_PACKAGE_NAME}/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_PATH += ${CGAL_PACKAGE_DIR}/include/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_INC_PATH = ${CGAL_PACKAGE_DIR}/doc/${CGAL_PACKAGE_NAME}/\n") @@ -61,11 +61,34 @@ function(configure_doxygen_package CGAL_PACKAGE_NAME) ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}.dxy) # TODO we also want to run html_post_process per package as a custom_command with POST_BUILD - add_custom_target(${CGAL_PACKAGE_NAME}_doc + # target that build the doc and put the tag file in the generation directory CGAL_DOC_TAG_GEN_DIR + add_custom_target(${CGAL_PACKAGE_NAME}_internal_doxygen_run ${DOXYGEN_EXECUTABLE} ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}.dxy) - set_target_properties(${CGAL_PACKAGE_NAME}_doc PROPERTIES FOLDER Documentation/Packages) + set_target_properties(${CGAL_PACKAGE_NAME}_internal_doxygen_run PROPERTIES FOLDER Documentation/Packages) + #target moving the tag file into the read directory CGAL_DOC_TAG_DIR + if ( "${CGAL_PACKAGE_NAME}" STREQUAL "Documentation" ) + set(CGAL_PACKAGE_TAGFILE "Manual.tag") + else() + set(CGAL_PACKAGE_TAGFILE "${CGAL_PACKAGE_NAME}.tag") + endif() + add_custom_target(${CGAL_PACKAGE_NAME}_copy_doc_tags + ${CMAKE_COMMAND} -E copy + "${CGAL_DOC_TAG_GEN_DIR}/${CGAL_PACKAGE_TAGFILE}" + "${CGAL_DOC_TAG_DIR}/${CGAL_PACKAGE_TAGFILE}" + ) + + #add the doc target doing both the doc generation and then the tag file copy + add_custom_target(${CGAL_PACKAGE_NAME}_doc + ${DOXYGEN_EXECUTABLE} ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}.dxy + COMMAND + ${CMAKE_COMMAND} -E copy + "${CGAL_DOC_TAG_GEN_DIR}/${CGAL_PACKAGE_TAGFILE}" + "${CGAL_DOC_TAG_DIR}/${CGAL_PACKAGE_TAGFILE}" + ) + + # ${depend}_doc) # don't do this for now # foreach(depend ${DEPENDENCIES}) # add_dependencies(${CGAL_PACKAGE_NAME}_doc @@ -98,6 +121,10 @@ if(DOXYGEN_FOUND) file(MAKE_DIRECTORY "${CGAL_DOC_LOG_DIR}") endif() + #we use two directories for the generation/reading of tag files to prevent issues + #if the targets are built in parallel + set(CGAL_DOC_TAG_GEN_DIR "${CMAKE_BINARY_DIR}/doc_gen_tags") + file(MAKE_DIRECTORY "${CGAL_DOC_TAG_GEN_DIR}") set(CGAL_DOC_TAG_DIR "${CMAKE_BINARY_DIR}/doc_tags") file(MAKE_DIRECTORY "${CGAL_DOC_TAG_DIR}") set(CGAL_DOC_DXY_DIR "${CMAKE_BINARY_DIR}/doc_dxy") @@ -115,7 +142,7 @@ if(DOXYGEN_FOUND) string(TIMESTAMP CGAL_BUILD_YEAR2 "%y") string(TIMESTAMP CGAL_BUILD_MONTH "%m") else() - MESSAGE(STATUS "You're using an old version of CGAL, date in bibtex files will be incorrect") + MESSAGE(WARNING "You're using an old version of CMake, date in bibtex files will be incorrect") set(CGAL_BUILD_YEAR4 "2000") set(CGAL_BUILD_YEAR2 "00") set(CGAL_BUILD_MONTH "1") @@ -133,14 +160,27 @@ if(DOXYGEN_FOUND) find_program(BIBTEX2HTML_EXECUTABLE bibtex2html DOC "Path to bibtex2html") find_program(SH_EXECUTABLE sh DOC "Path to sh") if (BIBTEX2HTML_EXECUTABLE AND SH_EXECUTABLE) + set(ENV{openout_any} "a") # may be needed with TexLive execute_process(COMMAND ${SH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/makebiblio ${CMAKE_BINARY_DIR}/how_to_cite_cgal.bib ${BIBTEX2HTML_EXECUTABLE} - OUTPUT_QUIET - ERROR_QUIET) #bibtex2html also prints info in stderr + OUTPUT_VARIABLE makebiblio_OUTPUT + ERROR_VARIABLE makebiblio_ERROR + RESULT_VARIABLE makebiblio_RESULT) #bibtex2html also prints info in stderr + if(makebiblio_RESULT GREATER 0) + message(WARNING " += makebiblio returned the error number ${makebiblio_RESULT} + +== Its standard output was: +${makebiblio_OUTPUT} +== Its error output was: +${makebiblio_ERROR} +" + ) + endif() else() - MESSAGE(STATUS "bibtex2html or sh missing, using default how_to_cite files") + MESSAGE(WARNING "bibtex2html or sh missing, using default how_to_cite files") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/how_to_cite.html.default ${CMAKE_BINARY_DIR}/how_to_cite.html COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/how_to_cite_cgal.txt.default ${CMAKE_BINARY_DIR}/how_to_cite_cgal.txt COPYONLY) endif() @@ -168,6 +208,8 @@ if(DOXYGEN_FOUND) # Add a custom target "doc" add_custom_target(doc) + add_custom_target(doc_pre) + add_custom_target(doc_post) # do the main package manually, it isn't part of ${CGAL_CONFIGURED_PACKAGES_NAMES} configure_doxygen_package("Documentation") @@ -176,29 +218,40 @@ if(DOXYGEN_FOUND) # hard-code that doc depends on all packages file(STRINGS ${CMAKE_SOURCE_DIR}/Documentation/doc/Documentation/dependencies DEPENDENCIES) foreach(depend ${DEPENDENCIES}) - add_dependencies(doc ${depend}_doc) + add_dependencies(doc_pre ${depend}_internal_doxygen_run) + add_dependencies(doc_post ${depend}_copy_doc_tags) + add_dependencies(${depend}_copy_doc_tags doc_pre) endforeach() - add_dependencies(doc Documentation_doc) + add_dependencies(doc_pre Documentation_internal_doxygen_run) + add_dependencies(doc_post Documentation_copy_doc_tags) + add_dependencies(Documentation_copy_doc_tags doc_pre) + + #total level doc dependencies + add_dependencies(doc doc_post) if(PYTHONINTERP_FOUND) add_custom_target(doc_with_postprocessing ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/html_output_post_processing.py --output ${CGAL_DOC_OUTPUT_DIR} --resources ${CMAKE_CURRENT_SOURCE_DIR}/resources - DEPENDS doc) + ) + add_dependencies(doc_with_postprocessing doc) if(CGAL_DOC_CREATE_LOGS) add_custom_target(Documentation_test ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testsuite.py --output-dir ${CGAL_DOC_OUTPUT_DIR} --doc-log-dir ${CGAL_DOC_LOG_DIR} - DEPENDS doc) + ) + add_dependencies(Documentation_test doc) add_custom_target(Documentation_test_publish ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testsuite.py --output-dir ${CGAL_DOC_OUTPUT_DIR} --doc-log-dir ${CGAL_DOC_LOG_DIR} --publish ${CGAL_DOC_PUBLISH_DIR} --do-copy-results - DEPENDS doc) + ) + add_dependencies(Documentation_test_publish doc) set(CGAL_DOC_VERSION_H "/tmp/version.h" CACHE PATH "Path to CGAL/version.h") add_custom_target(doc_and_publish_testsuite ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testsuite.py --output-dir ${CGAL_DOC_OUTPUT_DIR} --doc-log-dir ${CGAL_DOC_LOG_DIR} --publish ${CGAL_DOC_PUBLISH_DIR} --do-copy-results --cgal-version ${CGAL_DOC_VERSION_H} --version-to-keep 10 - DEPENDS doc_with_postprocessing) + ) + add_dependencies(doc_and_publish_testsuite doc_with_postprocessing) endif() endif() diff --git a/Documentation/doc/Documentation/Doxyfile.in b/Documentation/doc/Documentation/Doxyfile.in index 384f64e47c5..37bdcef0312 100644 --- a/Documentation/doc/Documentation/Doxyfile.in +++ b/Documentation/doc/Documentation/Doxyfile.in @@ -9,7 +9,7 @@ INPUT = ${CMAKE_SOURCE_DIR}/Documentation/doc/Documentation \ HTML_HEADER = ${CGAL_DOC_HEADER} LAYOUT_FILE = ${CMAKE_SOURCE_DIR}/Documentation/DoxygenLayout.xml -GENERATE_TAGFILE = ${CGAL_DOC_TAG_DIR}/Manual.tag +GENERATE_TAGFILE = ${CGAL_DOC_TAG_GEN_DIR}/Manual.tag EXAMPLE_PATH = ${CMAKE_SOURCE_DIR}/Convex_hull_2/examples FILTER_PATTERNS = *.txt=${CMAKE_BINARY_DIR}/pkglist_filter diff --git a/Documentation/html_output_post_processing.py b/Documentation/html_output_post_processing.py index 35abd1c79f8..113c491ee34 100755 --- a/Documentation/html_output_post_processing.py +++ b/Documentation/html_output_post_processing.py @@ -46,6 +46,8 @@ def conceptify(d): # fix the title title = d(".title") title.html(re.sub("((Class)|(Struct))( Template)? Reference", "Concept Reference", title.html())) + title = d("title") + title.html(re.sub("((Class)|(Struct))( Template)? Reference", "Concept Reference", title.html())) # remove the include include_statement = d(".contents").children().eq(0) # should check that this is really the div we think it is diff --git a/Documentation/scripts/makebiblio b/Documentation/scripts/makebiblio index 7ebef720672..f8692a32fd0 100755 --- a/Documentation/scripts/makebiblio +++ b/Documentation/scripts/makebiblio @@ -1,6 +1,8 @@ #!/bin/sh -$2 -nodoc $1 +set -e + +$2 -q -nodoc $1 mv ${1%.bib}.html tmp_array_bib.html mv ${1%.bib}_bib.html how_to_cite.html diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt b/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt index 014aef2ba90..1552a30fb75 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Periodic_2_triangulation_2/CMakeLists.txt @@ -36,7 +36,7 @@ qt4_wrap_ui( DT_UI_FILES Periodic_2_triangulation_2.ui ) qt4_add_resources ( DT_RESOURCE_FILES ./Periodic_2_triangulation_2.qrc ) # use the Qt MOC preprocessor on classes that derives from QObject -qt4_generate_moc( Periodic_2_triangulation_2.cpp Periodic_2_triangulation_2.moc ) +qt4_generate_moc( Periodic_2_Delaunay_triangulation_2.cpp Periodic_2_triangulation_2.moc ) # find header files for projects that can show them file(GLOB headers "*.h") @@ -47,7 +47,7 @@ SOURCE_GROUP("QT" FILES ${QT_headers}) # The executable itself. add_executable ( Periodic_2_Delaunay_triangulation_2 - Periodic_2_triangulation_2.cpp + Periodic_2_Delaunay_triangulation_2.cpp Periodic_2_triangulation_2.moc ${DT_UI_FILES} ${DT_RESOURCE_FILES} ${headers} ${QT_headers} ${P2T2_headers}) diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_triangulation_2.cpp b/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp similarity index 98% rename from GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_triangulation_2.cpp rename to GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp index e86d07378f0..81eeac6b3e1 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_triangulation_2.cpp +++ b/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp @@ -291,7 +291,8 @@ MainWindow::on_actionClear_triggered() void MainWindow::on_actionInsertRandomPoints_triggered() { - CGAL::Random_points_in_iso_rectangle_2 pg(triang.domain().min(), triang.domain().max()); + CGAL::Random_points_in_iso_rectangle_2 pg((triang.domain().min)(), + (triang.domain().max)()); bool ok = false; const int number_of_points = QInputDialog::getInteger(this, @@ -299,7 +300,7 @@ MainWindow::on_actionInsertRandomPoints_triggered() tr("Enter number of random points"), 250, 0, - std::numeric_limits::max(), + (std::numeric_limits::max)(), 1, &ok); diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/include/CGAL/Qt/PeriodicTriangulationGraphicsItem.h b/GraphicsView/demo/Periodic_2_triangulation_2/include/CGAL/Qt/PeriodicTriangulationGraphicsItem.h index 682d85ea76d..1c135993c88 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/include/CGAL/Qt/PeriodicTriangulationGraphicsItem.h +++ b/GraphicsView/demo/Periodic_2_triangulation_2/include/CGAL/Qt/PeriodicTriangulationGraphicsItem.h @@ -214,6 +214,7 @@ namespace CGAL { itype = T::UNIQUE_COVER_DOMAIN; break; case NONE: + default: assert(false); itype = T::STORED; break; @@ -344,7 +345,9 @@ namespace CGAL { typename T::Covering_sheets sheets = t->number_of_sheets(); for (int x=0; xdrawRect(domain.xmin() + x*dx, domain.ymin() + y*dy, dx, dy); + painter->drawRect((int)(domain.xmin() + x*dx), + (int)(domain.ymin() + y*dy), + (int)dx, (int)dy); } } m_painter = painter; diff --git a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp index 9622ed3b97c..7bd7e839af2 100644 --- a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp @@ -535,6 +535,8 @@ MainWindow::loadEdgConstraints(QString fileName) tim.stop(); statusBar()->showMessage(QString("Insertion took %1 seconds").arg(tim.time()), 2000); + initializeID(cdt); + discoverComponents(cdt); // default cursor QApplication::restoreOverrideCursor(); emit(changed()); diff --git a/GraphicsView/demo/resources/CGAL.qrc b/GraphicsView/demo/resources/CGAL.qrc index 47b2c5eec03..ef08023c288 100644 --- a/GraphicsView/demo/resources/CGAL.qrc +++ b/GraphicsView/demo/resources/CGAL.qrc @@ -3,7 +3,8 @@ about_CGAL.html - cgal_large_FAF8E8.gif + cgal_logo_ipe_2013.png + cgal_logo_ipe_2013.png cgal_logo.xpm diff --git a/GraphicsView/demo/resources/about_CGAL.html b/GraphicsView/demo/resources/about_CGAL.html index d87503a3469..6b2b2a5d943 100644 --- a/GraphicsView/demo/resources/about_CGAL.html +++ b/GraphicsView/demo/resources/about_CGAL.html @@ -1,6 +1,6 @@ -

+

Computational Geometry Algorithms Library

CGAL provides efficient and reliable geometric algorithms in the form of a C++ library.

For more information visit www.cgal.org

diff --git a/GraphicsView/demo/resources/cgal_large_FAF8E8.gif b/GraphicsView/demo/resources/cgal_large_FAF8E8.gif deleted file mode 100644 index 06d7016762d..00000000000 Binary files a/GraphicsView/demo/resources/cgal_large_FAF8E8.gif and /dev/null differ diff --git a/GraphicsView/demo/resources/cgal_logo_ipe_2013.png b/GraphicsView/demo/resources/cgal_logo_ipe_2013.png new file mode 100644 index 00000000000..15fe4edb6af Binary files /dev/null and b/GraphicsView/demo/resources/cgal_logo_ipe_2013.png differ diff --git a/Installation/CHANGES b/Installation/CHANGES index fef3591b4a7..b9451345b0b 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -2,6 +2,15 @@ -------------------------------- Release 4.4 -------------------------------- +* Installation + + - Additional supported platforms: + + - The Apple Clang compiler version 5.0 is now supported on + OS X Mavericks. + + + * Triangulated Surface Mesh Segmentation (new package) - This package implements the segmentation of triangulated surface meshes @@ -89,9 +98,19 @@ circumcenters and sliver criterion values only when needed. -* STL Extensions for CGAL +* Triangulated Surface Mesh Simplification - - Add the function CGAL::make_sorted_pair. + - Fix a bug in the way edges can be marked as non-removable by adding a + named-parameter edge_is_constrained_map to the function edge_collapse + + +* dD Spatial Searching + + - Fix a documentation bug: The property map passed as template parameter to + the classes Search_traits_adapter and Distance_adapter must be a lvalue + property map. To avoid incorrect usage, a static assertion has been added + in the CGAL code to prevent the user from instantiating these classes with + an incorrect property map type. * CGAL ipelets @@ -100,7 +119,7 @@ - New ipelet for pencils of circles - - New ipelet for hyperbolic geometry in Poincare model + - New ipelet for hyperbolic geometry in Poincaré model - The generator ipelet now generates point in a selected zone diff --git a/Installation/changes.html b/Installation/changes.html index 7b9f1c4c8ce..811f0ade56c 100644 --- a/Installation/changes.html +++ b/Installation/changes.html @@ -111,6 +111,19 @@ and src/ directories).

Release 4.4

+

Installation

+
    +
  • Additional supported platforms: +
      +
    • The Apple Clang compiler version 5.0 is now supported on + OS X Mavericks.
    • + +
    +
  • +

Triangulated Surface Mesh Segmentation (new package)

  • This package implements the segmentation of triangulated surface meshes @@ -216,20 +229,30 @@ and src/ directories).
-

STL Extensions for CGAL

+

Triangulated Surface Mesh Simplification

    -
  • Add the function CGAL::make_sorted_pair.
  • +
  • Fix a bug in the way edges can be marked as non-removable by adding + a named-parameter edge_is_constrained_map to the function + edge_collapse
  • +
+ +

dD Spatial Searching

+
    +
  • Fix a documentation bug: The property map passed as template parameter to the classes + Search_traits_adapter and Distance_adapter must be a + lvalue property map. To avoid incorrect usage, a static assertion has been added + in the CGAL code to prevent the user from instantiating these classes with an + incorrect property map type.

CGAL ipelets

  • Better description of the demo ipelets in the user manual
  • New ipelet for pencils of circles
  • -
  • New ipelet for hyperbolic geometry in Poincare model
  • +
  • New ipelet for hyperbolic geometry in Poincaré model
  • The generator ipelet now generates point in a selected zone
  • Hilbert sort ipelet implements two policies
-

Release 4.3

diff --git a/Installation/doc_html/Manual/index.html b/Installation/doc_html/Manual/index.html new file mode 100644 index 00000000000..ce6b70c0d9a --- /dev/null +++ b/Installation/doc_html/Manual/index.html @@ -0,0 +1,23 @@ + + + + + + CGAL - Computational Geometry Algorithms Library + + + + + +

CGAL Manual

+ +

+You can download the manual as tarball +from the +CGAL Download Page, or with the Windows Installer. +

+ + + + + diff --git a/Installation/doc_html/Manual/packages.html b/Installation/doc_html/Manual/packages.html new file mode 100644 index 00000000000..ce6b70c0d9a --- /dev/null +++ b/Installation/doc_html/Manual/packages.html @@ -0,0 +1,23 @@ + + + + + + CGAL - Computational Geometry Algorithms Library + + + + + +

CGAL Manual

+ +

+You can download the manual as tarball +from the +CGAL Download Page, or with the Windows Installer. +

+ + + + + diff --git a/Installation/doc_html/cgal.css b/Installation/doc_html/cgal.css new file mode 100644 index 00000000000..ae59a2a5ddb --- /dev/null +++ b/Installation/doc_html/cgal.css @@ -0,0 +1,58 @@ +html, body { + margin:0; + background-color: #FAF8E8; + font-family: arial,sans-serif; + color:black; +} + +li { font-size:100%;} +p { text-align:justify; font-size:100%; margin: 5pt;} + +img { border-width: 0pt; } + +dl,p,h1,h2,h3,h4,ul,ol,li,div,td,th,address,blockquote,nobr,b + { font-family:Arial,sans-serif; } + +td { text-align:justify;} + +h1 { font-size:180%; margin-left: 5pt;} +h2 { font-size:160%; margin-left: 5pt;} +h3 { font-size:100%; margin-left: 5pt;} +h4 { font-size:90%; margin-left: 5pt;} + +pre { font-family:Courier New,Courier; font-size:100%; } + +tt { font-family:Courier New,Courier; font-size:100%; } + +/* a:link { color:#050060; text-decoration:none; } */ +/* a:visited { color:#590059; text-decoration:none; } */ +/* a:active { color:#000000; text-decoration:none; } */ + +a:link { text-decoration:none; } +a:visited { color: #5000CC; text-decoration:none; } +a:active { color: #00A080; text-decoration:none; } + + +.contact { font-family:arial,sans-serif; font-size:100%} + +.news {font-size:90%;} + +td.menu { background-color: #C0C0D0; white-space:nowrap } + +/* We are forced to duplicate definitions because IE does not support ">" */ + +div.menu { font-size:100%; /* margin-left: -30pt; */ /* margin-top: 10pt; margin-bottom: 3pt */ } + +div.menu > h4 { font-size:100%; /* margin-left: 3pt; */ margin-top: 10pt; margin-bottom: 3pt; } + +h4.menu { font-size:100%; /* margin-left: 3pt; */ margin-top: 10pt; margin-bottom: 3pt; } + +div.menu > p { font-size:100%; margin-left: 10pt; margin-top: 0pt; margin-bottom:0pt; /*; margin-right:5pt */ } + +p.menu { font-size:100%; margin-left: 10pt; margin-top: 0pt; margin-bottom:0pt; /*; margin-right:5pt */ } + +img.menu { margin-top: 0pt; margin-bottom:0pt } + +em.menu { font-style: normal; font-family:Arial,sans-serif; font-size:90%; } + +.subtitle { font-family: cursive; font-size: 120% } diff --git a/Installation/doc_html/cgal.ico b/Installation/doc_html/cgal.ico new file mode 100644 index 00000000000..c0791175a95 Binary files /dev/null and b/Installation/doc_html/cgal.ico differ diff --git a/Installation/doc_html/images/cgal_2013_grey.png b/Installation/doc_html/images/cgal_2013_grey.png new file mode 100644 index 00000000000..e6d4776f417 Binary files /dev/null and b/Installation/doc_html/images/cgal_2013_grey.png differ diff --git a/Installation/doc_html/index.html b/Installation/doc_html/index.html new file mode 100644 index 00000000000..81ff1c889f4 --- /dev/null +++ b/Installation/doc_html/index.html @@ -0,0 +1,58 @@ + + + + + + CGAL - Computational Geometry Algorithms Library + + + + + +
+ CGAL +
+
+ Computational Geometry Algorithms Library +
+ + + +

+The goal of the CGAL Open Source Project is to provide +easy access to efficient and reliable geometric algorithms +in the form of a C++ library. +

+ +

Manuals

+ + + + + +

Further Links

+ + + + +

License

+ +

CGAL is distributed under a dual-license scheme. CGAL can be used together +with Open Source software free of charge. Using CGAL in other contexts can be +done by obtaining a commercial license from +GeometryFactory. +For more details see the License page. +

+ + + diff --git a/Installation/include/CGAL/config.h b/Installation/include/CGAL/config.h index 9dcf7df5e06..9c7e2953bf9 100644 --- a/Installation/include/CGAL/config.h +++ b/Installation/include/CGAL/config.h @@ -69,6 +69,14 @@ #include +//----------------------------------------------------------------------// +// Use an implementation of fabs with sse2 on Windows +//----------------------------------------------------------------------// + +#if (_M_IX86_FP >= 2) || defined(_M_X64) +#define CGAL_USE_SSE2_FABS +#endif + //----------------------------------------------------------------------// // Detect features at compile-time. Some macros have only been // introduced as of Boost 1.40. In that case, we simply say that the @@ -118,7 +126,7 @@ #if !defined(__GNUC__) || defined(__INTEL_COMPILER) #define CGAL_CFG_NO_STATEMENT_EXPRESSIONS 1 #endif -#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) || (BOOST_VERSION < 105100) +#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) || (BOOST_VERSION < 105100) || _MSC_VER==1800 #define CGAL_CFG_NO_CPP0X_UNIFIED_INITIALIZATION_SYNTAX #endif #if __cplusplus < 201103L && !(_MSC_VER >= 1600) diff --git a/Inventor/include/CGAL/IO/Inventor_ostream.h b/Inventor/include/CGAL/IO/Inventor_ostream.h index 7bf862bdc90..7d68211622e 100644 --- a/Inventor/include/CGAL/IO/Inventor_ostream.h +++ b/Inventor/include/CGAL/IO/Inventor_ostream.h @@ -53,9 +53,10 @@ public: || defined BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS typedef const void* Const_void_ptr; operator Const_void_ptr () const { - if ( m_os) - return *m_os; + if ( m_os->fail() ) return 0; + else + return static_cast(m_os); } #else explicit operator bool () diff --git a/Inventor/include/CGAL/IO/VRML_2_ostream.h b/Inventor/include/CGAL/IO/VRML_2_ostream.h index 6e8213f5125..a43310e9a8d 100644 --- a/Inventor/include/CGAL/IO/VRML_2_ostream.h +++ b/Inventor/include/CGAL/IO/VRML_2_ostream.h @@ -47,13 +47,13 @@ public: || defined BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS typedef const void* Const_void_ptr; operator Const_void_ptr () const { - if ( m_os) - return *m_os; + if ( m_os->fail() ) return 0; + else + return static_cast(m_os); } #else - explicit operator bool () - { + explicit operator bool () { return m_os && !m_os->fail(); } #endif diff --git a/Maintenance/infrastructure/magritte.geometryfactory.com/autocgalrc b/Maintenance/infrastructure/magritte.geometryfactory.com/autocgalrc index c2508399de6..415cceda873 100644 --- a/Maintenance/infrastructure/magritte.geometryfactory.com/autocgalrc +++ b/Maintenance/infrastructure/magritte.geometryfactory.com/autocgalrc @@ -1,7 +1,7 @@ PATH=$PATH:/usr/local/bin export PATH CGAL_TESTER="cgaltester" -CGAL_TESTER_NAME="GeometryFactory" +CGAL_TESTER_NAME="magritte (GF)" CGAL_TESTER_ADDRESS=sebastien.loriot@geometryfactory.com CGAL_ROOT=$HOME/cgal_test LOGS_DIR="${CGAL_ROOT}/AUTOTEST_LOGS" @@ -26,6 +26,7 @@ COMPILERS_localhost="${COMPILERS_localhost} x86-64_Darwin-13.0_Apple-clang-3.2_R COMPILERS_localhost="${COMPILERS_localhost} x86-64_Darwin-13.0_Apple-clang-3.2_Debug" COMPILERS_localhost="${COMPILERS_localhost} x86-64_Darwin-13.0_Apple-clang-3.2_Release" COMPILERS_localhost="${COMPILERS_localhost} x86-64_Darwin-13.0_Apple-clang-5.0_Release" +COMPILERS_localhost="${COMPILERS_localhost} x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11" COMPILERS_localhost="${COMPILERS_localhost} x86-64_Darwin-13.0_Apple-llvm-gcc-4.2_Release" BUILD_ON_localhost=all diff --git a/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-3.2_Release-cpp11/setup b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-3.2_Release-cpp11/setup index 13dd3272bd6..f3220703b86 100644 --- a/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-3.2_Release-cpp11/setup +++ b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-3.2_Release-cpp11/setup @@ -1,9 +1,10 @@ CXX=/usr/bin/clang++ CC=/usr/bin/clang -CXXFLAGS="-Wall -Wextra -std=c++11 -stdlib=libc++ -pipe" -export CXX CC CXXFLAGS BOOST_LIBRARYDIR=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib BOOST_INCLUDEDIR=/Users/cgaltester/boost-cpp11/boost_1_54_0 DYLD_LIBRARY_PATH=$BOOST_LIBRARYDIR:$DYLD_LIBRARY_PATH export BOOST_LIBRARYDIR BOOST_INCLUDEDIR DYLD_LIBRARY_PATH + +CXXFLAGS="-Wall -Wextra -std=c++11 -stdlib=libc++ -pipe -I$BOOST_INCLUDEDIR" +export CXX CC CXXFLAGS diff --git a/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/CMakeCache.txt b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/CMakeCache.txt new file mode 100644 index 00000000000..7c1ab1ef1cc --- /dev/null +++ b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/CMakeCache.txt @@ -0,0 +1,1763 @@ +# This is the CMakeCache file. +# For build in directory: /Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11 +# It was generated by CMake: /usr/local/Cellar/cmake/2.8.12.1/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Build shared libraries +BUILD_SHARED_LIBS:BOOL=ON + +//Path to a file. +Boost_INCLUDE_DIR:PATH=/Users/cgaltester/boost-cpp11/boost_1_54_0 + +//Boost library directory +Boost_LIBRARY_DIR:PATH=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib + +//Boost system library (debug) +Boost_SYSTEM_LIBRARY_DEBUG:FILEPATH=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib + +//Boost system library (release) +Boost_SYSTEM_LIBRARY_RELEASE:FILEPATH=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib + +//Boost thread library (debug) +Boost_THREAD_LIBRARY_DEBUG:FILEPATH=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib + +//Boost thread library (release) +Boost_THREAD_LIBRARY_RELEASE:FILEPATH=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib + +//Select to allow to use all preconfigured external libraries +CGAL_ALLOW_ALL_PRECONFIGURED_LIBS_COMPONENT:BOOL=OFF + +//Value Computed by CMake +CGAL_BINARY_DIR:STATIC=/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11 + +//Link with static Boost libraries +CGAL_Boost_USE_STATIC_LIBS:BOOL=OFF + +//The CGAL_Core library +CGAL_Core_LIBRARY:STRING=/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL_Core.dylib + +//Dependencies for the target +CGAL_Core_LIB_DEPENDS:STATIC=general;/usr/local/lib/libmpfr.dylib;general;/usr/local/lib/libgmp.dylib;general;/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib; + +//Set this to TRUE if you want to define or modify any of CMAKE_*_FLAGS. +// When this is FALSE, all the CMAKE_*_FLAGS flags are overriden +// with the values used when building the CGAL libs. For CGAL_*_flags +// (used for ADDITIONAL flags) , there is no need to set this to +// TRUE. +CGAL_DONT_OVERRIDE_CMAKE_FLAGS:BOOL=TRUE + +//Select to allow to preconfiguration of external libraries +CGAL_ENABLE_PRECONFIG:BOOL=ON + +//The folder where CGAL user-side scripts will be installed, relative +// to CMAKE_INSTALL_PREFIX +CGAL_INSTALL_BIN_DIR:STRING=bin + +//The folder where CGAL CMake modules will be installed, relative +// to CMAKE_INSTALL_PREFIX +CGAL_INSTALL_CMAKE_DIR:STRING=lib/CGAL + +//The folder where CGAL documentation and license files will be +// installed, relative to CMAKE_INSTALL_PREFIX +CGAL_INSTALL_DOC_DIR:STRING=share/doc/CGAL-4.4-Ic-124 + +//The folder where CGAL header files will be installed, relative +// to CMAKE_INSTALL_PREFIX +CGAL_INSTALL_INC_DIR:STRING=include + +//The folder where CGAL libraries will be installed, relative to +// CMAKE_INSTALL_PREFIX +CGAL_INSTALL_LIB_DIR:STRING=lib + +//The folder where manual pages for CGAL scripts will be installed, +// relative to CMAKE_INSTALL_PREFIX +CGAL_INSTALL_MAN_DIR:STRING=share/man/man1 + +//The CGAL_ImageIO library +CGAL_ImageIO_LIBRARY:STRING=/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL_ImageIO.dylib + +//Dependencies for the target +CGAL_ImageIO_LIB_DEPENDS:STATIC=general;/usr/local/lib/libmpfr.dylib;general;/usr/local/lib/libgmp.dylib;general;/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib;general;/System/Library/Frameworks/AGL.framework;general;/System/Library/Frameworks/OpenGL.framework;general;/usr/lib/libz.dylib; + +//The CGAL library +CGAL_LIBRARY:STRING=/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL.dylib + +//Dependencies for the target +CGAL_LIB_DEPENDS:STATIC=general;/usr/local/lib/libmpfr.dylib;general;/usr/local/lib/libgmp.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib; + +//The CGAL_Qt4 library +CGAL_Qt4_LIBRARY:STRING=/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL_Qt4.dylib + +//Dependencies for the target +CGAL_Qt4_LIB_DEPENDS:STATIC=general;/usr/local/lib/libmpfr.dylib;general;/usr/local/lib/libgmp.dylib;general;/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/lib/libCGAL.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib;general;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib;general;/usr/local/lib/QtOpenGL.framework;general;/usr/local/lib/QtGui.framework;general;/usr/local/lib/QtCore.framework;general;/System/Library/Frameworks/AGL.framework;general;/System/Library/Frameworks/OpenGL.framework; + +//Value Computed by CMake +CGAL_SOURCE_DIR:STATIC=/Users/cgaltester/cgal_test/CGAL-I + +//Path to a program. +CMAKE_AR:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/ar + +//Build type: Release or Debug +CMAKE_BUILD_TYPE:STRING=Release + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler. +CMAKE_CXX_COMPILER:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/clang++ + +//Flags used by the compiler during all build types. +CMAKE_CXX_FLAGS:STRING='-Wall -Wextra -std=c++11 -stdlib=libc++ -pipe ' + +//Flags used by the compiler during debug builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release minsize builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds (/MD /Ob1 /Oi +// /Ot /Oy /Gs will produce slightly less optimized but smaller +// files). +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 + +//Flags used by the compiler during Release with Debug Info builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler. +CMAKE_C_COMPILER:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/clang + +//Flags used by the compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release minsize builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds (/MD /Ob1 /Oi +// /Ot /Oy /Gs will produce slightly less optimized but smaller +// files). +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during Release with Debug Info builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING=' ' + +//Flags used by the linker during debug builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//Path to a program. +CMAKE_INSTALL_NAME_TOOL:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/install_name_tool + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING=' ' + +//Flags used by the linker during debug builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=CMAKE_OBJCOPY-NOTFOUND + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=CMAKE_OBJDUMP-NOTFOUND + +//Build architectures for OSX +CMAKE_OSX_ARCHITECTURES:STRING= + +//Minimum OS X version to target for deployment (at runtime); newer +// APIs weak linked. Set to empty string for default value. +CMAKE_OSX_DEPLOYMENT_TARGET:STRING= + +//The product will be built against the headers and libraries located +// inside the indicated SDK. +CMAKE_OSX_SYSROOT:STRING= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=CGAL + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/ranlib + +//User-defined flags +CMAKE_SHARED_LINKER_FLAGS:STRING= -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib + +//Flags used by the linker during debug builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/Library/Developer/CommandLineTools/usr/bin/strip + +//If true, cmake will use relative paths in makefiles and projects. +CMAKE_USE_RELATIVE_PATHS:BOOL=OFF + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//The directory containing the GMP header files +GMP_INCLUDE_DIR:PATH=/usr/local/include + +//Path to the GMP library +GMP_LIBRARIES:FILEPATH=/usr/local/lib/libgmp.dylib + +GMP_LIBRARIES_DIR:FILEPATH=/usr/local/lib + +//The directory containing the MPFR header files +MPFR_INCLUDE_DIR:PATH=/usr/local/include + +//Path to the MPFR library +MPFR_LIBRARIES:FILEPATH=/usr/local/lib/libmpfr.dylib + +MPFR_LIBRARIES_DIR:FILEPATH=/usr/local/lib + +//Include for OpenGL on OSX +OPENGL_INCLUDE_DIR:PATH=/System/Library/Frameworks/OpenGL.framework + +//OpenGL lib for OSX +OPENGL_gl_LIBRARY:FILEPATH=/System/Library/Frameworks/OpenGL.framework + +//AGL lib for OSX +OPENGL_glu_LIBRARY:FILEPATH=/System/Library/Frameworks/AGL.framework + +//path to Qt3 include directory +QT3_INCLUDE_DIR:PATH=QT3_INCLUDE_DIR-NOTFOUND + +//Path to a program. +QT3_MOC_EXECUTABLE:FILEPATH=/usr/local/bin/moc + +//Path to a library. +QT3_QASSISTANTCLIENT_LIBRARY:FILEPATH=QT3_QASSISTANTCLIENT_LIBRARY-NOTFOUND + +//Path to a library. +QT3_QT_LIBRARY:FILEPATH=QT3_QT_LIBRARY-NOTFOUND + +//Path to a program. +QT3_UIC_EXECUTABLE:FILEPATH=/usr/local/bin/uic + +//Path to a library. +QT_ARTHURPLUGIN_PLUGIN_DEBUG:FILEPATH=QT_ARTHURPLUGIN_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_ARTHURPLUGIN_PLUGIN_RELEASE:FILEPATH=QT_ARTHURPLUGIN_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_CONTAINEREXTENSION_PLUGIN_DEBUG:FILEPATH=QT_CONTAINEREXTENSION_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_CONTAINEREXTENSION_PLUGIN_RELEASE:FILEPATH=QT_CONTAINEREXTENSION_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_CUSTOMWIDGETPLUGIN_PLUGIN_DEBUG:FILEPATH=QT_CUSTOMWIDGETPLUGIN_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_CUSTOMWIDGETPLUGIN_PLUGIN_RELEASE:FILEPATH=QT_CUSTOMWIDGETPLUGIN_PLUGIN_RELEASE-NOTFOUND + +//Path to a program. +QT_DBUSCPP2XML_EXECUTABLE:FILEPATH=QT_DBUSCPP2XML_EXECUTABLE-NOTFOUND + +//Path to a program. +QT_DBUSXML2CPP_EXECUTABLE:FILEPATH=QT_DBUSXML2CPP_EXECUTABLE-NOTFOUND + +//Path to a program. +QT_DESIGNER_EXECUTABLE:FILEPATH=QT_DESIGNER_EXECUTABLE-NOTFOUND + +//The location of the Qt docs +QT_DOC_DIR:PATH=/usr/local/Cellar/qt/4.8.4/doc + +//The location of the Qt imports +QT_IMPORTS_DIR:PATH=/usr/local/Cellar/qt/4.8.4/imports + +//Path to a program. +QT_LINGUIST_EXECUTABLE:FILEPATH=QT_LINGUIST_EXECUTABLE-NOTFOUND + +//Path to a program. +QT_LRELEASE_EXECUTABLE:FILEPATH=/usr/local/Cellar/qt/4.8.4/bin/lrelease + +//Path to a program. +QT_LUPDATE_EXECUTABLE:FILEPATH=/usr/local/Cellar/qt/4.8.4/bin/lupdate + +//The location of the Qt mkspecs containing qconfig.pri +QT_MKSPECS_DIR:PATH=/usr/local/Cellar/qt/4.8.4/mkspecs + +//Path to a program. +QT_MOC_EXECUTABLE:FILEPATH=/usr/local/Cellar/qt/4.8.4/bin/moc + +//Path to a library. +QT_PHONONWIDGETS_PLUGIN_DEBUG:FILEPATH=QT_PHONONWIDGETS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_PHONONWIDGETS_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/designer/libphononwidgets.dylib + +//Path to a file. +QT_PHONON_INCLUDE_DIR:PATH=/usr/local/include/phonon + +//The Qt PHONON library +QT_PHONON_LIBRARY:STRING=/usr/local/lib/phonon.framework + +//Path to a library. +QT_PHONON_LIBRARY_DEBUG:FILEPATH=QT_PHONON_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_PHONON_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/phonon.framework + +//Path to a library. +QT_PHONON_QT7_PLUGIN_DEBUG:FILEPATH=QT_PHONON_QT7_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_PHONON_QT7_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/phonon_backend/libphonon_qt7.dylib + +//The location of the Qt plugins +QT_PLUGINS_DIR:PATH=/usr/local/Cellar/qt/4.8.4/plugins + +//Path to a library. +QT_QCNCODECS_PLUGIN_DEBUG:FILEPATH=QT_QCNCODECS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QCNCODECS_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/codecs/libqcncodecs.dylib + +//Path to a program. +QT_QCOLLECTIONGENERATOR_EXECUTABLE:FILEPATH=/usr/local/Cellar/qt/4.8.4/bin/qcollectiongenerator + +//Path to a library. +QT_QCOREWLANBEARER_PLUGIN_DEBUG:FILEPATH=QT_QCOREWLANBEARER_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QCOREWLANBEARER_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/bearer/libqcorewlanbearer.dylib + +//Path to a library. +QT_QDECLARATIVEVIEW_PLUGIN_DEBUG:FILEPATH=QT_QDECLARATIVEVIEW_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QDECLARATIVEVIEW_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/designer/libqdeclarativeview.dylib + +//Path to a library. +QT_QDECORATIONDEFAULT_PLUGIN_DEBUG:FILEPATH=QT_QDECORATIONDEFAULT_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QDECORATIONDEFAULT_PLUGIN_RELEASE:FILEPATH=QT_QDECORATIONDEFAULT_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QDECORATIONWINDOWS_PLUGIN_DEBUG:FILEPATH=QT_QDECORATIONWINDOWS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QDECORATIONWINDOWS_PLUGIN_RELEASE:FILEPATH=QT_QDECORATIONWINDOWS_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QGENERICBEARER_PLUGIN_DEBUG:FILEPATH=QT_QGENERICBEARER_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QGENERICBEARER_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/bearer/libqgenericbearer.dylib + +//Path to a library. +QT_QGIF_PLUGIN_DEBUG:FILEPATH=QT_QGIF_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QGIF_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/imageformats/libqgif.dylib + +//Path to a library. +QT_QGLGRAPHICSSYSTEM_PLUGIN_DEBUG:FILEPATH=QT_QGLGRAPHICSSYSTEM_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QGLGRAPHICSSYSTEM_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/graphicssystems/libqglgraphicssystem.dylib + +//Path to a library. +QT_QICO_PLUGIN_DEBUG:FILEPATH=QT_QICO_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QICO_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/imageformats/libqico.dylib + +//Path to a library. +QT_QIMSW_MULTI_PLUGIN_DEBUG:FILEPATH=QT_QIMSW_MULTI_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QIMSW_MULTI_PLUGIN_RELEASE:FILEPATH=QT_QIMSW_MULTI_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QJPCODECS_PLUGIN_DEBUG:FILEPATH=QT_QJPCODECS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QJPCODECS_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/codecs/libqjpcodecs.dylib + +//Path to a library. +QT_QJPEG_PLUGIN_DEBUG:FILEPATH=QT_QJPEG_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QJPEG_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/imageformats/libqjpeg.dylib + +//Path to a library. +QT_QKRCODECS_PLUGIN_DEBUG:FILEPATH=QT_QKRCODECS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QKRCODECS_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/codecs/libqkrcodecs.dylib + +//The qmake executable for the Qt installation to use +QT_QMAKE_EXECUTABLE:FILEPATH=/usr/local/bin/qmake + +//Path to a library. +QT_QMNG_PLUGIN_DEBUG:FILEPATH=QT_QMNG_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QMNG_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/imageformats/libqmng.dylib + +//Path to a library. +QT_QSQLDB2_PLUGIN_DEBUG:FILEPATH=QT_QSQLDB2_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLDB2_PLUGIN_RELEASE:FILEPATH=QT_QSQLDB2_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QSQLIBASE_PLUGIN_DEBUG:FILEPATH=QT_QSQLIBASE_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLIBASE_PLUGIN_RELEASE:FILEPATH=QT_QSQLIBASE_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QSQLITE2_PLUGIN_DEBUG:FILEPATH=QT_QSQLITE2_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLITE2_PLUGIN_RELEASE:FILEPATH=QT_QSQLITE2_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QSQLITE_PLUGIN_DEBUG:FILEPATH=QT_QSQLITE_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLITE_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/sqldrivers/libqsqlite.dylib + +//Path to a library. +QT_QSQLMYSQL_PLUGIN_DEBUG:FILEPATH=QT_QSQLMYSQL_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLMYSQL_PLUGIN_RELEASE:FILEPATH=QT_QSQLMYSQL_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QSQLOCI_PLUGIN_DEBUG:FILEPATH=QT_QSQLOCI_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLOCI_PLUGIN_RELEASE:FILEPATH=QT_QSQLOCI_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QSQLODBC_PLUGIN_DEBUG:FILEPATH=QT_QSQLODBC_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLODBC_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/sqldrivers/libqsqlodbc.dylib + +//Path to a library. +QT_QSQLPSQL_PLUGIN_DEBUG:FILEPATH=QT_QSQLPSQL_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLPSQL_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/sqldrivers/libqsqlpsql.dylib + +//Path to a library. +QT_QSQLTDS_PLUGIN_DEBUG:FILEPATH=QT_QSQLTDS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSQLTDS_PLUGIN_RELEASE:FILEPATH=QT_QSQLTDS_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QSVGICON_PLUGIN_DEBUG:FILEPATH=QT_QSVGICON_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSVGICON_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/iconengines/libqsvgicon.dylib + +//Path to a library. +QT_QSVG_PLUGIN_DEBUG:FILEPATH=QT_QSVG_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QSVG_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/imageformats/libqsvg.dylib + +//Path to a library. +QT_QT3SUPPORTWIDGETS_PLUGIN_DEBUG:FILEPATH=QT_QT3SUPPORTWIDGETS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QT3SUPPORTWIDGETS_PLUGIN_RELEASE:FILEPATH=QT_QT3SUPPORTWIDGETS_PLUGIN_RELEASE-NOTFOUND + +//Path to a file. +QT_QT3SUPPORT_INCLUDE_DIR:PATH=QT_QT3SUPPORT_INCLUDE_DIR-NOTFOUND + +//The Qt QT3SUPPORT library +QT_QT3SUPPORT_LIBRARY:STRING= + +//Path to a library. +QT_QT3SUPPORT_LIBRARY_DEBUG:FILEPATH=QT_QT3SUPPORT_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QT3SUPPORT_LIBRARY_RELEASE:FILEPATH=QT_QT3SUPPORT_LIBRARY_RELEASE-NOTFOUND + +//Path to a library. +QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_DEBUG:FILEPATH=QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_RELEASE:FILEPATH=QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_RELEASE-NOTFOUND + +//Path to a library. +QT_QTACCESSIBLEWIDGETS_PLUGIN_DEBUG:FILEPATH=QT_QTACCESSIBLEWIDGETS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QTACCESSIBLEWIDGETS_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/accessible/libqtaccessiblewidgets.dylib + +//Path to a file. +QT_QTASSISTANTCLIENT_INCLUDE_DIR:PATH=QT_QTASSISTANTCLIENT_INCLUDE_DIR-NOTFOUND + +//The Qt QTASSISTANTCLIENT library +QT_QTASSISTANTCLIENT_LIBRARY:STRING= + +//Path to a library. +QT_QTASSISTANTCLIENT_LIBRARY_DEBUG:FILEPATH=QT_QTASSISTANTCLIENT_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTASSISTANTCLIENT_LIBRARY_RELEASE:FILEPATH=QT_QTASSISTANTCLIENT_LIBRARY_RELEASE-NOTFOUND + +//Path to a file. +QT_QTASSISTANT_INCLUDE_DIR:PATH=QT_QTASSISTANT_INCLUDE_DIR-NOTFOUND + +//The Qt QTASSISTANT library +QT_QTASSISTANT_LIBRARY:STRING= + +//Path to a library. +QT_QTASSISTANT_LIBRARY_DEBUG:FILEPATH=QT_QTASSISTANT_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTASSISTANT_LIBRARY_RELEASE:FILEPATH=QT_QTASSISTANT_LIBRARY_RELEASE-NOTFOUND + +//The Qt QTCLUCENE library +QT_QTCLUCENE_LIBRARY:STRING=/usr/local/lib/libQtCLucene.dylib + +//Path to a library. +QT_QTCLUCENE_LIBRARY_DEBUG:FILEPATH=QT_QTCLUCENE_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTCLUCENE_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/libQtCLucene.dylib + +//Path to a file. +QT_QTCORE_INCLUDE_DIR:PATH=/usr/local/lib/QtCore.framework/Headers + +//The Qt QTCORE library +QT_QTCORE_LIBRARY:STRING=/usr/local/lib/QtCore.framework + +//Path to a library. +QT_QTCORE_LIBRARY_DEBUG:FILEPATH=QT_QTCORE_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTCORE_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtCore.framework + +//Path to a file. +QT_QTDBUS_INCLUDE_DIR:PATH=QT_QTDBUS_INCLUDE_DIR-NOTFOUND + +//The Qt QTDBUS library +QT_QTDBUS_LIBRARY:STRING= + +//Path to a library. +QT_QTDBUS_LIBRARY_DEBUG:FILEPATH=QT_QTDBUS_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTDBUS_LIBRARY_RELEASE:FILEPATH=QT_QTDBUS_LIBRARY_RELEASE-NOTFOUND + +//Path to a file. +QT_QTDECLARATIVE_INCLUDE_DIR:PATH=/usr/local/include/QtDeclarative + +//The Qt QTDECLARATIVE library +QT_QTDECLARATIVE_LIBRARY:STRING=/usr/local/lib/QtDeclarative.framework + +//Path to a library. +QT_QTDECLARATIVE_LIBRARY_DEBUG:FILEPATH=QT_QTDECLARATIVE_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTDECLARATIVE_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtDeclarative.framework + +//Path to a file. +QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR:PATH=/usr/local/include/QtDesigner + +//The Qt QTDESIGNERCOMPONENTS library +QT_QTDESIGNERCOMPONENTS_LIBRARY:STRING=/usr/local/lib/QtDesignerComponents.framework + +//Path to a library. +QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG:FILEPATH=QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtDesignerComponents.framework + +//Path to a file. +QT_QTDESIGNER_INCLUDE_DIR:PATH=/usr/local/include/QtDesigner + +//The Qt QTDESIGNER library +QT_QTDESIGNER_LIBRARY:STRING=/usr/local/lib/QtDesigner.framework + +//Path to a library. +QT_QTDESIGNER_LIBRARY_DEBUG:FILEPATH=QT_QTDESIGNER_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTDESIGNER_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtDesigner.framework + +//Path to a file. +QT_QTGUI_INCLUDE_DIR:PATH=/usr/local/include/QtGui + +//The Qt QTGUI library +QT_QTGUI_LIBRARY:STRING=/usr/local/lib/QtGui.framework + +//Path to a library. +QT_QTGUI_LIBRARY_DEBUG:FILEPATH=QT_QTGUI_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTGUI_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtGui.framework + +//Path to a file. +QT_QTHELP_INCLUDE_DIR:PATH=/usr/local/include/QtHelp + +//The Qt QTHELP library +QT_QTHELP_LIBRARY:STRING=/usr/local/lib/QtHelp.framework + +//Path to a library. +QT_QTHELP_LIBRARY_DEBUG:FILEPATH=QT_QTHELP_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTHELP_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtHelp.framework + +//Path to a library. +QT_QTIFF_PLUGIN_DEBUG:FILEPATH=QT_QTIFF_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QTIFF_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/imageformats/libqtiff.dylib + +//Path to a file. +QT_QTMULTIMEDIA_INCLUDE_DIR:PATH=/usr/local/include/QtMultimedia + +//The Qt QTMULTIMEDIA library +QT_QTMULTIMEDIA_LIBRARY:STRING=/usr/local/lib/QtMultimedia.framework + +//Path to a library. +QT_QTMULTIMEDIA_LIBRARY_DEBUG:FILEPATH=QT_QTMULTIMEDIA_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTMULTIMEDIA_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtMultimedia.framework + +//Path to a file. +QT_QTNETWORK_INCLUDE_DIR:PATH=/usr/local/include/QtNetwork + +//The Qt QTNETWORK library +QT_QTNETWORK_LIBRARY:STRING=/usr/local/lib/QtNetwork.framework + +//Path to a library. +QT_QTNETWORK_LIBRARY_DEBUG:FILEPATH=QT_QTNETWORK_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTNETWORK_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtNetwork.framework + +//Path to a file. +QT_QTNSPLUGIN_INCLUDE_DIR:PATH=QT_QTNSPLUGIN_INCLUDE_DIR-NOTFOUND + +//The Qt QTNSPLUGIN library +QT_QTNSPLUGIN_LIBRARY:STRING= + +//Path to a library. +QT_QTNSPLUGIN_LIBRARY_DEBUG:FILEPATH=QT_QTNSPLUGIN_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTNSPLUGIN_LIBRARY_RELEASE:FILEPATH=QT_QTNSPLUGIN_LIBRARY_RELEASE-NOTFOUND + +//Path to a file. +QT_QTOPENGL_INCLUDE_DIR:PATH=/usr/local/include/QtOpenGL + +//The Qt QTOPENGL library +QT_QTOPENGL_LIBRARY:STRING=/usr/local/lib/QtOpenGL.framework + +//Path to a library. +QT_QTOPENGL_LIBRARY_DEBUG:FILEPATH=QT_QTOPENGL_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTOPENGL_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtOpenGL.framework + +//Path to a library. +QT_QTRACEGRAPHICSSYSTEM_PLUGIN_DEBUG:FILEPATH=QT_QTRACEGRAPHICSSYSTEM_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QTRACEGRAPHICSSYSTEM_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/graphicssystems/libqtracegraphicssystem.dylib + +//Path to a library. +QT_QTSCRIPTDBUS_PLUGIN_DEBUG:FILEPATH=QT_QTSCRIPTDBUS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QTSCRIPTDBUS_PLUGIN_RELEASE:FILEPATH=QT_QTSCRIPTDBUS_PLUGIN_RELEASE-NOTFOUND + +//Path to a file. +QT_QTSCRIPTTOOLS_INCLUDE_DIR:PATH=/usr/local/include/QtScriptTools + +//The Qt QTSCRIPTTOOLS library +QT_QTSCRIPTTOOLS_LIBRARY:STRING=/usr/local/lib/QtScriptTools.framework + +//Path to a library. +QT_QTSCRIPTTOOLS_LIBRARY_DEBUG:FILEPATH=QT_QTSCRIPTTOOLS_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTSCRIPTTOOLS_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtScriptTools.framework + +//Path to a file. +QT_QTSCRIPT_INCLUDE_DIR:PATH=/usr/local/include/QtScript + +//The Qt QTSCRIPT library +QT_QTSCRIPT_LIBRARY:STRING=/usr/local/lib/QtScript.framework + +//Path to a library. +QT_QTSCRIPT_LIBRARY_DEBUG:FILEPATH=QT_QTSCRIPT_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTSCRIPT_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtScript.framework + +//Path to a file. +QT_QTSQL_INCLUDE_DIR:PATH=/usr/local/include/QtSql + +//The Qt QTSQL library +QT_QTSQL_LIBRARY:STRING=/usr/local/lib/QtSql.framework + +//Path to a library. +QT_QTSQL_LIBRARY_DEBUG:FILEPATH=QT_QTSQL_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTSQL_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtSql.framework + +//Path to a file. +QT_QTSVG_INCLUDE_DIR:PATH=/usr/local/include/QtSvg + +//The Qt QTSVG library +QT_QTSVG_LIBRARY:STRING=/usr/local/lib/QtSvg.framework + +//Path to a library. +QT_QTSVG_LIBRARY_DEBUG:FILEPATH=QT_QTSVG_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTSVG_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtSvg.framework + +//Path to a file. +QT_QTTEST_INCLUDE_DIR:PATH=/usr/local/include/QtTest + +//The Qt QTTEST library +QT_QTTEST_LIBRARY:STRING=/usr/local/lib/QtTest.framework + +//Path to a library. +QT_QTTEST_LIBRARY_DEBUG:FILEPATH=QT_QTTEST_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTTEST_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtTest.framework + +//Path to a file. +QT_QTUITOOLS_INCLUDE_DIR:PATH=/usr/local/include/QtUiTools + +//The Qt QTUITOOLS library +QT_QTUITOOLS_LIBRARY:STRING=optimized;/usr/local/lib/libQtUiTools.a;debug;/usr/local/lib/libQtUiTools_debug.a + +//Path to a library. +QT_QTUITOOLS_LIBRARY_DEBUG:FILEPATH=/usr/local/lib/libQtUiTools_debug.a + +//Path to a library. +QT_QTUITOOLS_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/libQtUiTools.a + +//Path to a library. +QT_QTWCODECS_PLUGIN_DEBUG:FILEPATH=QT_QTWCODECS_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QTWCODECS_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/codecs/libqtwcodecs.dylib + +//Path to a file. +QT_QTWEBKIT_INCLUDE_DIR:PATH=/usr/local/include/QtWebKit + +//The Qt QTWEBKIT library +QT_QTWEBKIT_LIBRARY:STRING=/usr/local/lib/QtWebKit.framework + +//Path to a library. +QT_QTWEBKIT_LIBRARY_DEBUG:FILEPATH=QT_QTWEBKIT_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTWEBKIT_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtWebKit.framework + +//Path to a file. +QT_QTXMLPATTERNS_INCLUDE_DIR:PATH=/usr/local/include/QtXmlPatterns + +//The Qt QTXMLPATTERNS library +QT_QTXMLPATTERNS_LIBRARY:STRING=/usr/local/lib/QtXmlPatterns.framework + +//Path to a library. +QT_QTXMLPATTERNS_LIBRARY_DEBUG:FILEPATH=QT_QTXMLPATTERNS_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTXMLPATTERNS_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtXmlPatterns.framework + +//Path to a file. +QT_QTXML_INCLUDE_DIR:PATH=/usr/local/include/QtXml + +//The Qt QTXML library +QT_QTXML_LIBRARY:STRING=/usr/local/lib/QtXml.framework + +//Path to a library. +QT_QTXML_LIBRARY_DEBUG:FILEPATH=QT_QTXML_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +QT_QTXML_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/QtXml.framework + +//Path to a library. +QT_QWEBVIEW_PLUGIN_DEBUG:FILEPATH=QT_QWEBVIEW_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QWEBVIEW_PLUGIN_RELEASE:FILEPATH=/usr/local/Cellar/qt/4.8.4/plugins/designer/libqwebview.dylib + +//Path to a library. +QT_QWSTSLIBMOUSEHANDLER_PLUGIN_DEBUG:FILEPATH=QT_QWSTSLIBMOUSEHANDLER_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_QWSTSLIBMOUSEHANDLER_PLUGIN_RELEASE:FILEPATH=QT_QWSTSLIBMOUSEHANDLER_PLUGIN_RELEASE-NOTFOUND + +//Path to a program. +QT_RCC_EXECUTABLE:FILEPATH=/usr/local/Cellar/qt/4.8.4/bin/rcc + +//Path to a library. +QT_TASKMENUEXTENSION_PLUGIN_DEBUG:FILEPATH=QT_TASKMENUEXTENSION_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_TASKMENUEXTENSION_PLUGIN_RELEASE:FILEPATH=QT_TASKMENUEXTENSION_PLUGIN_RELEASE-NOTFOUND + +//The location of the Qt translations +QT_TRANSLATIONS_DIR:PATH=/usr/local/Cellar/qt/4.8.4/translations + +//Path to a program. +QT_UIC3_EXECUTABLE:FILEPATH=QT_UIC3_EXECUTABLE-NOTFOUND + +//Path to a program. +QT_UIC_EXECUTABLE:FILEPATH=/usr/local/Cellar/qt/4.8.4/bin/uic + +//Path to a library. +QT_WORLDTIMECLOCKPLUGIN_PLUGIN_DEBUG:FILEPATH=QT_WORLDTIMECLOCKPLUGIN_PLUGIN_DEBUG-NOTFOUND + +//Path to a library. +QT_WORLDTIMECLOCKPLUGIN_PLUGIN_RELEASE:FILEPATH=QT_WORLDTIMECLOCKPLUGIN_PLUGIN_RELEASE-NOTFOUND + +//Select external library BLAS +WITH_BLAS:BOOL=OFF + +//Enable CGAL component CGAL_Core +WITH_CGAL_Core:BOOL=ON + +//Enable CGAL component CGAL_ImageIO +WITH_CGAL_ImageIO:BOOL=ON + +//Enable CGAL component CGAL_Qt3 +WITH_CGAL_Qt3:BOOL=OFF + +//Enable CGAL component CGAL_Qt4 +WITH_CGAL_Qt4:BOOL=ON + +//Select external library Coin3D +WITH_Coin3D:BOOL=OFF + +//Select external library ESBTL +WITH_ESBTL:BOOL=OFF + +//Select external library Eigen3 +WITH_Eigen3:BOOL=OFF + +//Select external library GMP +WITH_GMP:BOOL=ON + +//Select external library GMPXX +WITH_GMPXX:BOOL=OFF + +//Select external library IPE +WITH_IPE:BOOL=OFF + +//Select external library LAPACK +WITH_LAPACK:BOOL=OFF + +//Select external library LEDA +WITH_LEDA:BOOL=OFF + +//Select external library MPFI +WITH_MPFI:BOOL=OFF + +//Select external library MPFR +WITH_MPFR:BOOL=ON + +//Select external library NTL +WITH_NTL:BOOL=OFF + +//Select external library OpenGL +WITH_OpenGL:BOOL=OFF + +//Select external library OpenNL +WITH_OpenNL:BOOL=OFF + +//Select external library QGLViewer +WITH_QGLViewer:BOOL=OFF + +//Select external library RS +WITH_RS:BOOL=OFF + +//Select external library RS3 +WITH_RS3:BOOL=OFF + +//Select external library TAUCS +WITH_TAUCS:BOOL=OFF + +//Select external library ZLIB +WITH_ZLIB:BOOL=OFF + +//Select demos +WITH_demos:BOOL=OFF + +//Select examples +WITH_examples:BOOL=OFF + +//Select tests +WITH_tests:BOOL=OFF + +//Path to a file. +ZLIB_INCLUDE_DIR:PATH=/usr/include + +//Path to a library. +ZLIB_LIBRARY:FILEPATH=/usr/lib/libz.dylib + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: Boost_INCLUDE_DIR +Boost_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_LIBRARY_DIR +Boost_LIBRARY_DIR-ADVANCED:INTERNAL=1 +//Avoid future search of boost-cmake +Boost_NO_BOOST_CMAKE:INTERNAL=TRUE +//ADVANCED property for variable: Boost_SYSTEM_LIBRARY_DEBUG +Boost_SYSTEM_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_SYSTEM_LIBRARY_RELEASE +Boost_SYSTEM_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_THREAD_LIBRARY_DEBUG +Boost_THREAD_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_THREAD_LIBRARY_RELEASE +Boost_THREAD_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +CGAL_3RD_PARTY_DEFINITIONS:INTERNAL= +CGAL_3RD_PARTY_INCLUDE_DIRS:INTERNAL=/Users/cgaltester/boost-cpp11/boost_1_54_0 +CGAL_3RD_PARTY_LIBRARIES:INTERNAL=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_thread.dylib;/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib/libboost_system.dylib +CGAL_3RD_PARTY_LIBRARIES_DIRS:INTERNAL=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib +CGAL_3RD_PARTY_PRECONFIGURED:INTERNAL= +//ADVANCED property for variable: CGAL_Boost_USE_STATIC_LIBS +CGAL_Boost_USE_STATIC_LIBS-ADVANCED:INTERNAL=1 +CGAL_CFG_BOOST_VARIANT_SWAP_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_BOOST_VARIANT_SWAP_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_DENORMALS_COMPILE_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_DENORMALS_COMPILE_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_IEEE_754_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_IEEE_754_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_ISTREAM_INT_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_ISTREAM_INT_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_MATCHING_BUG_5:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_MATCHING_BUG_5_COMPILED:INTERNAL=TRUE +CGAL_CFG_MATCHING_BUG_6:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_MATCHING_BUG_6_COMPILED:INTERNAL=TRUE +CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG:INTERNAL=1 +//Result of TRY_COMPILE +CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG_COMPILED:INTERNAL=FALSE +CGAL_CFG_NO_LIMITS:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_NO_LIMITS_COMPILED:INTERNAL=TRUE +CGAL_CFG_NO_NEXTAFTER:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_NO_NEXTAFTER_COMPILED:INTERNAL=TRUE +CGAL_CFG_NO_STL:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_NO_STL_COMPILED:INTERNAL=TRUE +CGAL_CFG_NO_WARNING_CPP_DIRECTIVE_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_NO_WARNING_CPP_DIRECTIVE_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_NUMERIC_LIMITS_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_NUMERIC_LIMITS_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_TEMPLATE_IN_DEFAULT_PARAMETER_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_TEMPLATE_IN_DEFAULT_PARAMETER_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_TYPENAME_BEFORE_DEFAULT_ARGUMENT_BUG:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_TYPENAME_BEFORE_DEFAULT_ARGUMENT_BUG_COMPILED:INTERNAL=TRUE +CGAL_CFG_USING_BASE_MEMBER_BUG_2:INTERNAL=0 +//Result of TRY_COMPILE +CGAL_CFG_USING_BASE_MEMBER_BUG_2_COMPILED:INTERNAL=TRUE +CGAL_CONFIGURED_LIBRARIES:INTERNAL=CGAL_Core;CGAL_ImageIO;CGAL_Qt3;CGAL_Qt4 +//Directory containing the Core package +CGAL_CORE_PACKAGE_DIR:INTERNAL=/Users/cgaltester/cgal_test/CGAL-I +CGAL_Core_3RD_PARTY_DEFINITIONS:INTERNAL= +CGAL_Core_3RD_PARTY_INCLUDE_DIRS:INTERNAL= +CGAL_Core_3RD_PARTY_LIBRARIES:INTERNAL= +CGAL_Core_3RD_PARTY_LIBRARIES_DIRS:INTERNAL= +//ADVANCED property for variable: CGAL_Core_LIBRARY +CGAL_Core_LIBRARY-ADVANCED:INTERNAL=1 +//Variable hidden from user +CGAL_Core_LIBRARY_INSTALLED:INTERNAL=/usr/local/lib/libCGAL_Core.dylib +//Variable hidden from user +CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES:INTERNAL=GMP;MPFR +CGAL_EXECUTABLE_TARGETS:INTERNAL= +//Variable hidden from user +CGAL_EXT_LIB_BLAS_PREFIX:INTERNAL=BLAS +//Variable hidden from user +CGAL_EXT_LIB_Coin3D_PREFIX:INTERNAL=COIN3D +//Variable hidden from user +CGAL_EXT_LIB_ESBTL_PREFIX:INTERNAL=ESBTL +//Variable hidden from user +CGAL_EXT_LIB_Eigen3_PREFIX:INTERNAL=EIGEN3 +//Variable hidden from user +CGAL_EXT_LIB_GMPXX_PREFIX:INTERNAL=GMPXX +//Variable hidden from user +CGAL_EXT_LIB_GMP_PREFIX:INTERNAL=GMP +//Variable hidden from user +CGAL_EXT_LIB_IPE_PREFIX:INTERNAL=IPE +//Variable hidden from user +CGAL_EXT_LIB_LAPACK_PREFIX:INTERNAL=LAPACK +//Variable hidden from user +CGAL_EXT_LIB_LEDA_PREFIX:INTERNAL=LEDA +//Variable hidden from user +CGAL_EXT_LIB_MPFI_PREFIX:INTERNAL=MPFI +//Variable hidden from user +CGAL_EXT_LIB_MPFR_PREFIX:INTERNAL=MPFR +//Variable hidden from user +CGAL_EXT_LIB_NTL_PREFIX:INTERNAL=NTL +//Variable hidden from user +CGAL_EXT_LIB_OpenGL_PREFIX:INTERNAL=OpenGL +//Variable hidden from user +CGAL_EXT_LIB_OpenNL_PREFIX:INTERNAL=OpenNL +//Variable hidden from user +CGAL_EXT_LIB_QGLViewer_PREFIX:INTERNAL=QGLVIEWER +//Variable hidden from user +CGAL_EXT_LIB_RS3_PREFIX:INTERNAL=RS3 +//Variable hidden from user +CGAL_EXT_LIB_RS_PREFIX:INTERNAL=RS +//Variable hidden from user +CGAL_EXT_LIB_TAUCS_PREFIX:INTERNAL=TAUCS +//Variable hidden from user +CGAL_EXT_LIB_ZLIB_PREFIX:INTERNAL=ZLIB +//Directory containing the Installation package +CGAL_INSTALLATION_PACKAGE_DIR:INTERNAL=/Users/cgaltester/cgal_test/CGAL-I +CGAL_ImageIO_3RD_PARTY_DEFINITIONS:INTERNAL=-DCGAL_USE_ZLIB +CGAL_ImageIO_3RD_PARTY_INCLUDE_DIRS:INTERNAL=/System/Library/Frameworks/OpenGL.framework;/usr/include +CGAL_ImageIO_3RD_PARTY_LIBRARIES:INTERNAL=/System/Library/Frameworks/AGL.framework;/System/Library/Frameworks/OpenGL.framework;/usr/lib/libz.dylib +CGAL_ImageIO_3RD_PARTY_LIBRARIES_DIRS:INTERNAL= +//ADVANCED property for variable: CGAL_ImageIO_LIBRARY +CGAL_ImageIO_LIBRARY-ADVANCED:INTERNAL=1 +//Variable hidden from user +CGAL_ImageIO_LIBRARY_INSTALLED:INTERNAL=/usr/local/lib/libCGAL_ImageIO.dylib +CGAL_ImageIO_USE_ZLIB:INTERNAL=ON +//ADVANCED property for variable: CGAL_LIBRARY +CGAL_LIBRARY-ADVANCED:INTERNAL=1 +//Variable hidden from user +CGAL_LIBRARY_INSTALLED:INTERNAL=/usr/local/lib/libCGAL.dylib +//Directory containing the Maintenance package +CGAL_MAINTENANCE_PACKAGE_DIR:INTERNAL=/Users/cgaltester/cgal_test/CGAL-I +CGAL_Qt3_3RD_PARTY_DEFINITIONS:INTERNAL= +CGAL_Qt3_3RD_PARTY_INCLUDE_DIRS:INTERNAL= +CGAL_Qt3_3RD_PARTY_LIBRARIES:INTERNAL= +CGAL_Qt3_3RD_PARTY_LIBRARIES_DIRS:INTERNAL= +CGAL_Qt3_LIBRARY:INTERNAL= +//Variable hidden from user +CGAL_Qt3_LIBRARY_INSTALLED:INTERNAL= +CGAL_Qt4_3RD_PARTY_DEFINITIONS:INTERNAL= +CGAL_Qt4_3RD_PARTY_INCLUDE_DIRS:INTERNAL=/usr/local/include;/usr/local/lib/QtCore.framework;/System/Library/Frameworks/OpenGL.framework +CGAL_Qt4_3RD_PARTY_LIBRARIES:INTERNAL=/usr/local/lib/QtOpenGL.framework;/usr/local/lib/QtGui.framework;/usr/local/lib/QtCore.framework;/System/Library/Frameworks/AGL.framework;/System/Library/Frameworks/OpenGL.framework +CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS:INTERNAL= +//ADVANCED property for variable: CGAL_Qt4_LIBRARY +CGAL_Qt4_LIBRARY-ADVANCED:INTERNAL=1 +//Variable hidden from user +CGAL_Qt4_LIBRARY_INSTALLED:INTERNAL=/usr/local/lib/libCGAL_Qt4.dylib +//Variable hidden from user +CGAL_SUPPORTING_3RD_PARTY_LIBRARIES:INTERNAL=GMP;GMPXX;MPFR;ZLIB;OpenGL;LEDA;MPFI;RS;RS3;OpenNL;TAUCS;Eigen3;BLAS;LAPACK;QGLViewer;ESBTL;Coin3D;NTL;IPE +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_BUILD_TOOL +CMAKE_BUILD_TOOL-ADVANCED:INTERNAL=1 +//What is the target build tool cmake is generating for. +CMAKE_BUILD_TOOL:INTERNAL=/usr/bin/make +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/Users/cgaltester/cgal_test/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11 +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=2 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=8 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=12 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/local/Cellar/cmake/2.8.12.1/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/local/Cellar/cmake/2.8.12.1/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/local/Cellar/cmake/2.8.12.1/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/local/Cellar/cmake/2.8.12.1/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Start directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/Users/cgaltester/cgal_test/CGAL-I +//ADVANCED property for variable: CMAKE_INSTALL_NAME_TOOL +CMAKE_INSTALL_NAME_TOOL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_LOCAL_GENERATORS:INTERNAL=7 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/local/Cellar/cmake/2.8.12.1/share/cmake +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_USE_RELATIVE_PATHS +CMAKE_USE_RELATIVE_PATHS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +CONFIG_CXX_FLAGS:INTERNAL='-Wall -Wextra -std=c++11 -stdlib=libc++ -pipe ' +//Variable hidden from user +EXECUTABLE_OUTPUT_PATH:INTERNAL= +//Details about finding GMP +FIND_PACKAGE_MESSAGE_DETAILS_GMP:INTERNAL=[/usr/local/lib/libgmp.dylib][/usr/local/include][v()] +//Details about finding MPFR +FIND_PACKAGE_MESSAGE_DETAILS_MPFR:INTERNAL=[/usr/local/lib/libmpfr.dylib][/usr/local/include][v()] +//Details about finding OpenGL +FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/System/Library/Frameworks/OpenGL.framework][/System/Library/Frameworks/OpenGL.framework][v()] +//Details about finding ZLIB +FIND_PACKAGE_MESSAGE_DETAILS_ZLIB:INTERNAL=[/usr/lib/libz.dylib][/usr/include][v1.2.5()] +//Result of TRY_COMPILE +GMP_COMPILE_RES:INTERNAL=TRUE +//Result of TRY_RUN +GMP_RUN_RES:INTERNAL=0 +//Variable hidden from user +LIBRARY_OUTPUT_PATH:INTERNAL= +//Result of TRY_COMPILE +MPFR_COMPILE_RES:INTERNAL=TRUE +//Result of TRY_RUN +MPFR_RUN_RES:INTERNAL=0 +//Result of TRY_COMPILE +OPENGL_COMPILE_RES:INTERNAL=TRUE +//ADVANCED property for variable: OPENGL_INCLUDE_DIR +OPENGL_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//Result of TRY_RUN +OPENGL_RUN_RES:INTERNAL=0 +//ADVANCED property for variable: OPENGL_gl_LIBRARY +OPENGL_gl_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_glu_LIBRARY +OPENGL_glu_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT3_INCLUDE_DIR +QT3_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT3_MOC_EXECUTABLE +QT3_MOC_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT3_QASSISTANTCLIENT_LIBRARY +QT3_QASSISTANTCLIENT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT3_QT_LIBRARY +QT3_QT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT3_UIC_EXECUTABLE +QT3_UIC_EXECUTABLE-ADVANCED:INTERNAL=1 +//Result of TRY_COMPILE +QT4_COMPILE_RES:INTERNAL=TRUE +//Result of TRY_RUN +QT4_RUN_RES:INTERNAL=0 +//ADVANCED property for variable: QT_ARTHURPLUGIN_PLUGIN_DEBUG +QT_ARTHURPLUGIN_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_ARTHURPLUGIN_PLUGIN_RELEASE +QT_ARTHURPLUGIN_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +QT_BINARY_DIR:INTERNAL=/usr/local/Cellar/qt/4.8.4/bin +//ADVANCED property for variable: QT_CONTAINEREXTENSION_PLUGIN_DEBUG +QT_CONTAINEREXTENSION_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_CONTAINEREXTENSION_PLUGIN_RELEASE +QT_CONTAINEREXTENSION_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_CUSTOMWIDGETPLUGIN_PLUGIN_DEBUG +QT_CUSTOMWIDGETPLUGIN_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_CUSTOMWIDGETPLUGIN_PLUGIN_RELEASE +QT_CUSTOMWIDGETPLUGIN_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_DBUSCPP2XML_EXECUTABLE +QT_DBUSCPP2XML_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_DBUSXML2CPP_EXECUTABLE +QT_DBUSXML2CPP_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_DESIGNER_EXECUTABLE +QT_DESIGNER_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_DOC_DIR +QT_DOC_DIR-ADVANCED:INTERNAL=1 +QT_HEADERS_DIR:INTERNAL=/usr/local/include +//ADVANCED property for variable: QT_IMPORTS_DIR +QT_IMPORTS_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_LIBRARY_DIR +QT_LIBRARY_DIR-ADVANCED:INTERNAL=1 +//Qt library dir +QT_LIBRARY_DIR:INTERNAL=/usr/local/lib +//ADVANCED property for variable: QT_LINGUIST_EXECUTABLE +QT_LINGUIST_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_LRELEASE_EXECUTABLE +QT_LRELEASE_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_LUPDATE_EXECUTABLE +QT_LUPDATE_EXECUTABLE-ADVANCED:INTERNAL=1 +//Have symbol QT_MAC_USE_COCOA +QT_MAC_USE_COCOA:INTERNAL=1 +//ADVANCED property for variable: QT_MKSPECS_DIR +QT_MKSPECS_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_MOC_EXECUTABLE +QT_MOC_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONONWIDGETS_PLUGIN_DEBUG +QT_PHONONWIDGETS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONONWIDGETS_PLUGIN_RELEASE +QT_PHONONWIDGETS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONON_INCLUDE_DIR +QT_PHONON_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONON_LIBRARY +QT_PHONON_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONON_LIBRARY_DEBUG +QT_PHONON_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONON_LIBRARY_RELEASE +QT_PHONON_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONON_QT7_PLUGIN_DEBUG +QT_PHONON_QT7_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PHONON_QT7_PLUGIN_RELEASE +QT_PHONON_QT7_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_PLUGINS_DIR +QT_PLUGINS_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QCNCODECS_PLUGIN_DEBUG +QT_QCNCODECS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QCNCODECS_PLUGIN_RELEASE +QT_QCNCODECS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QCOLLECTIONGENERATOR_EXECUTABLE +QT_QCOLLECTIONGENERATOR_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QCOREWLANBEARER_PLUGIN_DEBUG +QT_QCOREWLANBEARER_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QCOREWLANBEARER_PLUGIN_RELEASE +QT_QCOREWLANBEARER_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QDECLARATIVEVIEW_PLUGIN_DEBUG +QT_QDECLARATIVEVIEW_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QDECLARATIVEVIEW_PLUGIN_RELEASE +QT_QDECLARATIVEVIEW_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QDECORATIONDEFAULT_PLUGIN_DEBUG +QT_QDECORATIONDEFAULT_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QDECORATIONDEFAULT_PLUGIN_RELEASE +QT_QDECORATIONDEFAULT_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QDECORATIONWINDOWS_PLUGIN_DEBUG +QT_QDECORATIONWINDOWS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QDECORATIONWINDOWS_PLUGIN_RELEASE +QT_QDECORATIONWINDOWS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QGENERICBEARER_PLUGIN_DEBUG +QT_QGENERICBEARER_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QGENERICBEARER_PLUGIN_RELEASE +QT_QGENERICBEARER_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QGIF_PLUGIN_DEBUG +QT_QGIF_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QGIF_PLUGIN_RELEASE +QT_QGIF_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QGLGRAPHICSSYSTEM_PLUGIN_DEBUG +QT_QGLGRAPHICSSYSTEM_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QGLGRAPHICSSYSTEM_PLUGIN_RELEASE +QT_QGLGRAPHICSSYSTEM_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QICO_PLUGIN_DEBUG +QT_QICO_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QICO_PLUGIN_RELEASE +QT_QICO_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QIMSW_MULTI_PLUGIN_DEBUG +QT_QIMSW_MULTI_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QIMSW_MULTI_PLUGIN_RELEASE +QT_QIMSW_MULTI_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QJPCODECS_PLUGIN_DEBUG +QT_QJPCODECS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QJPCODECS_PLUGIN_RELEASE +QT_QJPCODECS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QJPEG_PLUGIN_DEBUG +QT_QJPEG_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QJPEG_PLUGIN_RELEASE +QT_QJPEG_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QKRCODECS_PLUGIN_DEBUG +QT_QKRCODECS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QKRCODECS_PLUGIN_RELEASE +QT_QKRCODECS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QMNG_PLUGIN_DEBUG +QT_QMNG_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QMNG_PLUGIN_RELEASE +QT_QMNG_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLDB2_PLUGIN_DEBUG +QT_QSQLDB2_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLDB2_PLUGIN_RELEASE +QT_QSQLDB2_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLIBASE_PLUGIN_DEBUG +QT_QSQLIBASE_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLIBASE_PLUGIN_RELEASE +QT_QSQLIBASE_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLITE2_PLUGIN_DEBUG +QT_QSQLITE2_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLITE2_PLUGIN_RELEASE +QT_QSQLITE2_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLITE_PLUGIN_DEBUG +QT_QSQLITE_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLITE_PLUGIN_RELEASE +QT_QSQLITE_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLMYSQL_PLUGIN_DEBUG +QT_QSQLMYSQL_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLMYSQL_PLUGIN_RELEASE +QT_QSQLMYSQL_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLOCI_PLUGIN_DEBUG +QT_QSQLOCI_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLOCI_PLUGIN_RELEASE +QT_QSQLOCI_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLODBC_PLUGIN_DEBUG +QT_QSQLODBC_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLODBC_PLUGIN_RELEASE +QT_QSQLODBC_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLPSQL_PLUGIN_DEBUG +QT_QSQLPSQL_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLPSQL_PLUGIN_RELEASE +QT_QSQLPSQL_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLTDS_PLUGIN_DEBUG +QT_QSQLTDS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSQLTDS_PLUGIN_RELEASE +QT_QSQLTDS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSVGICON_PLUGIN_DEBUG +QT_QSVGICON_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSVGICON_PLUGIN_RELEASE +QT_QSVGICON_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSVG_PLUGIN_DEBUG +QT_QSVG_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QSVG_PLUGIN_RELEASE +QT_QSVG_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QT3SUPPORTWIDGETS_PLUGIN_DEBUG +QT_QT3SUPPORTWIDGETS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QT3SUPPORTWIDGETS_PLUGIN_RELEASE +QT_QT3SUPPORTWIDGETS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QT3SUPPORT_INCLUDE_DIR +QT_QT3SUPPORT_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QT3SUPPORT_LIBRARY +QT_QT3SUPPORT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QT3SUPPORT_LIBRARY_DEBUG +QT_QT3SUPPORT_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QT3SUPPORT_LIBRARY_RELEASE +QT_QT3SUPPORT_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_DEBUG +QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_RELEASE +QT_QTACCESSIBLECOMPATWIDGETS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTACCESSIBLEWIDGETS_PLUGIN_DEBUG +QT_QTACCESSIBLEWIDGETS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTACCESSIBLEWIDGETS_PLUGIN_RELEASE +QT_QTACCESSIBLEWIDGETS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANTCLIENT_INCLUDE_DIR +QT_QTASSISTANTCLIENT_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANTCLIENT_LIBRARY +QT_QTASSISTANTCLIENT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANTCLIENT_LIBRARY_DEBUG +QT_QTASSISTANTCLIENT_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANTCLIENT_LIBRARY_RELEASE +QT_QTASSISTANTCLIENT_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANT_INCLUDE_DIR +QT_QTASSISTANT_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANT_LIBRARY +QT_QTASSISTANT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANT_LIBRARY_DEBUG +QT_QTASSISTANT_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTASSISTANT_LIBRARY_RELEASE +QT_QTASSISTANT_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCLUCENE_LIBRARY +QT_QTCLUCENE_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCLUCENE_LIBRARY_DEBUG +QT_QTCLUCENE_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCLUCENE_LIBRARY_RELEASE +QT_QTCLUCENE_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCORE_INCLUDE_DIR +QT_QTCORE_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCORE_LIBRARY +QT_QTCORE_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCORE_LIBRARY_DEBUG +QT_QTCORE_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTCORE_LIBRARY_RELEASE +QT_QTCORE_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDBUS_INCLUDE_DIR +QT_QTDBUS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDBUS_LIBRARY +QT_QTDBUS_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDBUS_LIBRARY_DEBUG +QT_QTDBUS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDBUS_LIBRARY_RELEASE +QT_QTDBUS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDECLARATIVE_INCLUDE_DIR +QT_QTDECLARATIVE_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDECLARATIVE_LIBRARY +QT_QTDECLARATIVE_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDECLARATIVE_LIBRARY_DEBUG +QT_QTDECLARATIVE_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDECLARATIVE_LIBRARY_RELEASE +QT_QTDECLARATIVE_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR +QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNERCOMPONENTS_LIBRARY +QT_QTDESIGNERCOMPONENTS_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG +QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE +QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNER_INCLUDE_DIR +QT_QTDESIGNER_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNER_LIBRARY +QT_QTDESIGNER_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNER_LIBRARY_DEBUG +QT_QTDESIGNER_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTDESIGNER_LIBRARY_RELEASE +QT_QTDESIGNER_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTGUI_INCLUDE_DIR +QT_QTGUI_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTGUI_LIBRARY +QT_QTGUI_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTGUI_LIBRARY_DEBUG +QT_QTGUI_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTGUI_LIBRARY_RELEASE +QT_QTGUI_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTHELP_INCLUDE_DIR +QT_QTHELP_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTHELP_LIBRARY +QT_QTHELP_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTHELP_LIBRARY_DEBUG +QT_QTHELP_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTHELP_LIBRARY_RELEASE +QT_QTHELP_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTIFF_PLUGIN_DEBUG +QT_QTIFF_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTIFF_PLUGIN_RELEASE +QT_QTIFF_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTMULTIMEDIA_INCLUDE_DIR +QT_QTMULTIMEDIA_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTMULTIMEDIA_LIBRARY +QT_QTMULTIMEDIA_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTMULTIMEDIA_LIBRARY_DEBUG +QT_QTMULTIMEDIA_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTMULTIMEDIA_LIBRARY_RELEASE +QT_QTMULTIMEDIA_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNETWORK_INCLUDE_DIR +QT_QTNETWORK_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNETWORK_LIBRARY +QT_QTNETWORK_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNETWORK_LIBRARY_DEBUG +QT_QTNETWORK_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNETWORK_LIBRARY_RELEASE +QT_QTNETWORK_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNSPLUGIN_INCLUDE_DIR +QT_QTNSPLUGIN_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNSPLUGIN_LIBRARY +QT_QTNSPLUGIN_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNSPLUGIN_LIBRARY_DEBUG +QT_QTNSPLUGIN_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTNSPLUGIN_LIBRARY_RELEASE +QT_QTNSPLUGIN_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTOPENGL_INCLUDE_DIR +QT_QTOPENGL_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTOPENGL_LIBRARY +QT_QTOPENGL_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTOPENGL_LIBRARY_DEBUG +QT_QTOPENGL_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTOPENGL_LIBRARY_RELEASE +QT_QTOPENGL_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTRACEGRAPHICSSYSTEM_PLUGIN_DEBUG +QT_QTRACEGRAPHICSSYSTEM_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTRACEGRAPHICSSYSTEM_PLUGIN_RELEASE +QT_QTRACEGRAPHICSSYSTEM_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPTDBUS_PLUGIN_DEBUG +QT_QTSCRIPTDBUS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPTDBUS_PLUGIN_RELEASE +QT_QTSCRIPTDBUS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPTTOOLS_INCLUDE_DIR +QT_QTSCRIPTTOOLS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPTTOOLS_LIBRARY +QT_QTSCRIPTTOOLS_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPTTOOLS_LIBRARY_DEBUG +QT_QTSCRIPTTOOLS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPTTOOLS_LIBRARY_RELEASE +QT_QTSCRIPTTOOLS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPT_INCLUDE_DIR +QT_QTSCRIPT_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPT_LIBRARY +QT_QTSCRIPT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPT_LIBRARY_DEBUG +QT_QTSCRIPT_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSCRIPT_LIBRARY_RELEASE +QT_QTSCRIPT_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSQL_INCLUDE_DIR +QT_QTSQL_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSQL_LIBRARY +QT_QTSQL_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSQL_LIBRARY_DEBUG +QT_QTSQL_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSQL_LIBRARY_RELEASE +QT_QTSQL_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSVG_INCLUDE_DIR +QT_QTSVG_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSVG_LIBRARY +QT_QTSVG_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSVG_LIBRARY_DEBUG +QT_QTSVG_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTSVG_LIBRARY_RELEASE +QT_QTSVG_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTTEST_INCLUDE_DIR +QT_QTTEST_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTTEST_LIBRARY +QT_QTTEST_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTTEST_LIBRARY_DEBUG +QT_QTTEST_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTTEST_LIBRARY_RELEASE +QT_QTTEST_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTUITOOLS_INCLUDE_DIR +QT_QTUITOOLS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTUITOOLS_LIBRARY +QT_QTUITOOLS_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTUITOOLS_LIBRARY_DEBUG +QT_QTUITOOLS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTUITOOLS_LIBRARY_RELEASE +QT_QTUITOOLS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTWCODECS_PLUGIN_DEBUG +QT_QTWCODECS_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTWCODECS_PLUGIN_RELEASE +QT_QTWCODECS_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTWEBKIT_INCLUDE_DIR +QT_QTWEBKIT_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTWEBKIT_LIBRARY +QT_QTWEBKIT_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTWEBKIT_LIBRARY_DEBUG +QT_QTWEBKIT_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTWEBKIT_LIBRARY_RELEASE +QT_QTWEBKIT_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXMLPATTERNS_INCLUDE_DIR +QT_QTXMLPATTERNS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXMLPATTERNS_LIBRARY +QT_QTXMLPATTERNS_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXMLPATTERNS_LIBRARY_DEBUG +QT_QTXMLPATTERNS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXMLPATTERNS_LIBRARY_RELEASE +QT_QTXMLPATTERNS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXML_INCLUDE_DIR +QT_QTXML_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXML_LIBRARY +QT_QTXML_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXML_LIBRARY_DEBUG +QT_QTXML_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QTXML_LIBRARY_RELEASE +QT_QTXML_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QWEBVIEW_PLUGIN_DEBUG +QT_QWEBVIEW_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QWEBVIEW_PLUGIN_RELEASE +QT_QWEBVIEW_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QWSTSLIBMOUSEHANDLER_PLUGIN_DEBUG +QT_QWSTSLIBMOUSEHANDLER_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_QWSTSLIBMOUSEHANDLER_PLUGIN_RELEASE +QT_QWSTSLIBMOUSEHANDLER_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_RCC_EXECUTABLE +QT_RCC_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_TASKMENUEXTENSION_PLUGIN_DEBUG +QT_TASKMENUEXTENSION_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_TASKMENUEXTENSION_PLUGIN_RELEASE +QT_TASKMENUEXTENSION_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_TRANSLATIONS_DIR +QT_TRANSLATIONS_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_UIC3_EXECUTABLE +QT_UIC3_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_UIC_EXECUTABLE +QT_UIC_EXECUTABLE-ADVANCED:INTERNAL=1 +QT_USE_FRAMEWORKS:INTERNAL=ON +//ADVANCED property for variable: QT_WORLDTIMECLOCKPLUGIN_PLUGIN_DEBUG +QT_WORLDTIMECLOCKPLUGIN_PLUGIN_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: QT_WORLDTIMECLOCKPLUGIN_PLUGIN_RELEASE +QT_WORLDTIMECLOCKPLUGIN_PLUGIN_RELEASE-ADVANCED:INTERNAL=1 +//Have symbol Q_WS_MAC +Q_WS_MAC:INTERNAL=1 +//Have symbol Q_WS_QWS +Q_WS_QWS:INTERNAL= +//Have symbol Q_WS_WIN +Q_WS_WIN:INTERNAL= +//Have symbol Q_WS_X11 +Q_WS_X11:INTERNAL= +//Result of TRY_COMPILE +ZLIB_COMPILE_RES:INTERNAL=TRUE +//ADVANCED property for variable: ZLIB_INCLUDE_DIR +ZLIB_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: ZLIB_LIBRARY +ZLIB_LIBRARY-ADVANCED:INTERNAL=1 +//Result of TRY_RUN +ZLIB_RUN_RES:INTERNAL=0 +//Last used Boost_ADDITIONAL_VERSIONS value. +_Boost_ADDITIONAL_VERSIONS_LAST:INTERNAL=1.56.1;1.56.0;1.56;1.55.1;1.55.0;1.55;1.54.1;1.54.0;1.54;1.53.1;1.53.0;1.53;1.52.1;1.52.0;1.52;1.51.1;1.51.0;1.51;1.50.1;1.50.0;1.50;1.49.1;1.49.0;1.49;1.48.1;1.48.0;1.48;1.47.1;1.47.0;1.47;1.46.1;1.46.0;1.46;1.45.1;1.45.0;1.45;1.44.1;1.44.0;1.44;1.43.1;1.43.0;1.43;1.42.1;1.42.0;1.42;1.41.1;1.41.0;1.41;1.40.1;1.40.0;1.40;1.39.1;1.39.0;1.39;1.38.1;1.38.0;1.38;1.37.1;1.37.0;1.37 +//Components requested for this build tree. +_Boost_COMPONENTS_SEARCHED:INTERNAL=system;thread +//Last used Boost_INCLUDE_DIR value. +_Boost_INCLUDE_DIR_LAST:INTERNAL=/Users/cgaltester/boost-cpp11/boost_1_54_0 +//Last used Boost_LIBRARY_DIR value. +_Boost_LIBRARY_DIR_LAST:INTERNAL=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib +//Last used Boost_USE_MULTITHREADED value. +_Boost_USE_MULTITHREADED_LAST:INTERNAL=TRUE +//Last used Boost_USE_STATIC_LIBS value. +_Boost_USE_STATIC_LIBS_LAST:INTERNAL=OFF + diff --git a/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/setup b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/setup new file mode 100644 index 00000000000..e937a4b75a7 --- /dev/null +++ b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release-cpp11/setup @@ -0,0 +1,10 @@ +CXX=/Library/Developer/CommandLineTools/usr/bin/clang++ +CC=/Library/Developer/CommandLineTools/usr/bin/clang + +BOOST_LIBRARYDIR=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib +BOOST_INCLUDEDIR=/Users/cgaltester/boost-cpp11/boost_1_54_0 +DYLD_LIBRARY_PATH=$BOOST_LIBRARYDIR:$DYLD_LIBRARY_PATH +export BOOST_LIBRARYDIR BOOST_INCLUDEDIR DYLD_LIBRARY_PATH + +CXXFLAGS="-Wall -Wextra -std=c++11 -stdlib=libc++ -pipe -I$BOOST_INCLUDEDIR" +export CXX CC CXXFLAGS diff --git a/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release/setup b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release/setup index 3cf6f73c875..8cdba8510d6 100644 --- a/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release/setup +++ b/Maintenance/infrastructure/magritte.geometryfactory.com/reference_platforms/x86-64_Darwin-13.0_Apple-clang-5.0_Release/setup @@ -1,9 +1,10 @@ CXX=/Library/Developer/CommandLineTools/usr/bin/clang++ CC=/Library/Developer/CommandLineTools/usr/bin/clang -CXXFLAGS="-Wall -Wextra" -export CXX CC CXXFLAGS BOOST_LIBRARYDIR=/Users/cgaltester/boost-cpp11/boost_1_54_0/stage/lib BOOST_INCLUDEDIR=/Users/cgaltester/boost-cpp11/boost_1_54_0 DYLD_LIBRARY_PATH=$BOOST_LIBRARYDIR:$DYLD_LIBRARY_PATH export BOOST_LIBRARYDIR BOOST_INCLUDEDIR DYLD_LIBRARY_PATH + +CXXFLAGS="-Wall -Wextra -I$BOOST_INCLUDEDIR" +export CXX CC CXXFLAGS diff --git a/Maintenance/infrastructure/picasso.geometryfactory.com/autocgalrc b/Maintenance/infrastructure/picasso.geometryfactory.com/autocgalrc index d6b916fd764..153e48b3efc 100644 --- a/Maintenance/infrastructure/picasso.geometryfactory.com/autocgalrc +++ b/Maintenance/infrastructure/picasso.geometryfactory.com/autocgalrc @@ -3,15 +3,10 @@ CGAL_ROOT="/cygdrive/c/cgal/test" BUILD_HOSTS="localhost" REFERENCE_PLATFORMS_DIR="c:/cgal/reference_platforms" CGAL_TESTER="afabri" -CGAL_TESTER_NAME="Andreas Fabri" +CGAL_TESTER_NAME="picasso (GF)" CGAL_TESTER_ADDRESS="andreas.fabri@geometryfactory.com" COMPILERS_localhost="" -COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2008-Debug-64bits" -COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2008-Release-32bits" -COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2010-Debug-32bits" -COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2010-Release-64bits" -#COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2010-Release-64bits-LEDA" COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2012-Release-32bits" COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2012-Release-64bits" COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2012-Debug-64bits" @@ -19,6 +14,11 @@ COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2013-Release-3 COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2013-Release-64bits" COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2013-Debug-64bits" COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2013-Debug-32bits" +COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2010-Debug-32bits" +COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2010-Release-64bits" +#COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2010-Release-64bits-LEDA" +COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2008-Debug-64bits" +COMPILERS_localhost="$COMPILERS_localhost x64_Cygwin-Windows8_MSVC2008-Release-32bits" MYSHELL="bash --login" FTP_OPTS="-v -n" diff --git a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2008-Release-32bits/setup b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2008-Release-32bits/setup index 5c3e07bc6e9..7c3f6e72534 100644 --- a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2008-Release-32bits/setup +++ b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2008-Release-32bits/setup @@ -3,3 +3,6 @@ export VC_VERSION="9" export ARCH="32" export PLATFORM_REFERENCE="/cygdrive/c/CGAL/reference_platforms" source "${PLATFORM_REFERENCE}/setup_common" + +COLLECT_DEMOS_BINARIES=y +export COLLECT_DEMOS_BINARIES diff --git a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-32bits/CMakeCache.txt b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-32bits/CMakeCache.txt index e3b4241ff21..589ee2ee66a 100644 --- a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-32bits/CMakeCache.txt +++ b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-32bits/CMakeCache.txt @@ -894,7 +894,7 @@ WITH_CGAL_Core:BOOL=ON WITH_CGAL_ImageIO:BOOL=ON //Enable CGAL component CGAL_Qt3 -WITH_CGAL_Qt3:BOOL=ON +WITH_CGAL_Qt3:BOOL=OFF //Enable CGAL component CGAL_Qt4 WITH_CGAL_Qt4:BOOL=ON diff --git a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-64bits/CMakeCache.txt b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-64bits/CMakeCache.txt index 039aadccc75..0f7a291a83b 100644 --- a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-64bits/CMakeCache.txt +++ b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Debug-64bits/CMakeCache.txt @@ -894,7 +894,7 @@ WITH_CGAL_Core:BOOL=ON WITH_CGAL_ImageIO:BOOL=ON //Enable CGAL component CGAL_Qt3 -WITH_CGAL_Qt3:BOOL=ON +WITH_CGAL_Qt3:BOOL=OFF //Enable CGAL component CGAL_Qt4 WITH_CGAL_Qt4:BOOL=ON diff --git a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-32bits/CMakeCache.txt b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-32bits/CMakeCache.txt index 2eb130e05ec..6f7c4cea506 100644 --- a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-32bits/CMakeCache.txt +++ b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-32bits/CMakeCache.txt @@ -894,7 +894,7 @@ WITH_CGAL_Core:BOOL=ON WITH_CGAL_ImageIO:BOOL=ON //Enable CGAL component CGAL_Qt3 -WITH_CGAL_Qt3:BOOL=ON +WITH_CGAL_Qt3:BOOL=OFF //Enable CGAL component CGAL_Qt4 WITH_CGAL_Qt4:BOOL=ON diff --git a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-64bits/CMakeCache.txt b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-64bits/CMakeCache.txt index db280311120..411e389d9c8 100644 --- a/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-64bits/CMakeCache.txt +++ b/Maintenance/infrastructure/picasso.geometryfactory.com/reference_platforms/x64_Cygwin-Windows8_MSVC2013-Release-64bits/CMakeCache.txt @@ -894,7 +894,7 @@ WITH_CGAL_Core:BOOL=ON WITH_CGAL_ImageIO:BOOL=ON //Enable CGAL component CGAL_Qt3 -WITH_CGAL_Qt3:BOOL=ON +WITH_CGAL_Qt3:BOOL=OFF //Enable CGAL component CGAL_Qt4 WITH_CGAL_Qt4:BOOL=ON diff --git a/Maintenance/infrastructure/renoir.geometryfactory.com/.autocgalrc b/Maintenance/infrastructure/renoir.geometryfactory.com/.autocgalrc index 31dc6d98a0e..2293615cec0 100644 --- a/Maintenance/infrastructure/renoir.geometryfactory.com/.autocgalrc +++ b/Maintenance/infrastructure/renoir.geometryfactory.com/.autocgalrc @@ -1,7 +1,7 @@ # -*- mode: shell-script -*- CGAL_TESTER="lrineau" -CGAL_TESTER_NAME="GeometryFactory" +CGAL_TESTER_NAME="renoir (GF)" CGAL_TESTER_ADDRESS=Laurent.Rineau__cgal_testsuite@normalesup.org MYSHELL="/bin/sh -c" LC_ALL=C diff --git a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/CMakeCache.txt b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/CMakeCache.txt index 89c766a33e4..2f9476ee16a 100644 --- a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/CMakeCache.txt +++ b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/CMakeCache.txt @@ -7,7 +7,7 @@ # The syntax for the file is as follows: # KEY:TYPE=VALUE # KEY is the name of a variable in the cache. -# TYPE is a hint to GUI's for the type of VALUE, DO NOT EDIT TYPE!. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. # VALUE is the current value for the KEY. ######################## @@ -124,7 +124,7 @@ CMAKE_BUILD_TYPE:STRING=Release CMAKE_COLOR_MAKEFILE:BOOL=ON //CXX compiler. -CMAKE_CXX_COMPILER:FILEPATH=/no-raid/opt/intel/composer_xe_2013_sp1/bin/icpc +CMAKE_CXX_COMPILER:FILEPATH=/opt/intel/composer_xe_2013_sp1/bin/icpc //User-defined flags CMAKE_CXX_FLAGS:STRING=-w1 -fp-model strict @@ -144,7 +144,7 @@ CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG //C compiler. -CMAKE_C_COMPILER:FILEPATH=/no-raid/opt/intel/composer_xe_2013_sp1/bin/icc +CMAKE_C_COMPILER:FILEPATH=/opt/intel/composer_xe_2013_sp1/bin/icc //Flags used by the compiler during all build types. CMAKE_C_FLAGS:STRING= @@ -242,6 +242,21 @@ CMAKE_SKIP_INSTALL_RPATH:BOOL=OFF //If set, runtime paths are not added when using shared libraries. CMAKE_SKIP_RPATH:BOOL=OFF +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + //Path to a program. CMAKE_STRIP:FILEPATH=/usr/bin/strip @@ -1159,7 +1174,7 @@ X11_xf86misc_INCLUDE_PATH:PATH=/usr/include X11_xf86vmode_INCLUDE_PATH:PATH=/usr/include //Path to a program. -XIAR:FILEPATH=/no-raid/opt/intel/composer_xe_2013_sp1/bin/xiar +XIAR:FILEPATH=/opt/intel/composer_xe_2013_sp1/bin/xiar //Path to a file. ZLIB_INCLUDE_DIR:PATH=/usr/include @@ -1256,7 +1271,7 @@ CGAL_Core_LIBRARY-ADVANCED:INTERNAL=1 //Variable hidden from user CGAL_Core_LIBRARY_INSTALLED:INTERNAL=/usr/local/lib/libCGAL_Core.so //Variable hidden from user -CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES:INTERNAL=GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR +CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES:INTERNAL=GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR CGAL_EXECUTABLE_TARGETS:INTERNAL= //Variable hidden from user CGAL_EXT_LIB_BLAS_PREFIX:INTERNAL=BLAS @@ -1344,7 +1359,7 @@ CMAKE_CACHE_MAJOR_VERSION:INTERNAL=2 //Minor version of cmake used to create the current loaded cache CMAKE_CACHE_MINOR_VERSION:INTERNAL=8 //Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=11 +CMAKE_CACHE_PATCH_VERSION:INTERNAL=12 //ADVANCED property for variable: CMAKE_COLOR_MAKEFILE CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 //Path to CMake executable. @@ -1460,6 +1475,16 @@ CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SKIP_RPATH CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STRIP CMAKE_STRIP-ADVANCED:INTERNAL=1 //Suppress Warnings that are meant for the author of the CMakeLists.txt @@ -1479,7 +1504,7 @@ FIND_PACKAGE_MESSAGE_DETAILS_GMP:INTERNAL=[/usr/lib64/libgmp.so][/usr/include][v //Details about finding MPFR FIND_PACKAGE_MESSAGE_DETAILS_MPFR:INTERNAL=[/usr/lib64/libmpfr.so][/usr/include][v()] //Details about finding OpenGL -FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib64/libGL.so][v()] +FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib64/libGL.so][/usr/include][v()] //Details about finding Threads FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] //Details about finding X11 diff --git a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/setup b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/setup index 088ef89f9b6..1664da6eab1 100644 --- a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/setup +++ b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL/setup @@ -1,4 +1,4 @@ -source /opt/intel/composer_xe_2013_sp1.1.106/bin/compilervars.sh intel64 +source /opt/intel/composer_xe_2013_sp1/bin/compilervars.sh intel64 CXX=icpc CC=icc CXXFLAGS="-w1" diff --git a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/CMakeCache.txt b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/CMakeCache.txt index c27d3b6f292..d955084e270 100644 --- a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/CMakeCache.txt +++ b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/CMakeCache.txt @@ -7,7 +7,7 @@ # The syntax for the file is as follows: # KEY:TYPE=VALUE # KEY is the name of a variable in the cache. -# TYPE is a hint to GUI's for the type of VALUE, DO NOT EDIT TYPE!. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. # VALUE is the current value for the KEY. ######################## @@ -242,6 +242,21 @@ CMAKE_SKIP_INSTALL_RPATH:BOOL=OFF //If set, runtime paths are not added when using shared libraries. CMAKE_SKIP_RPATH:BOOL=OFF +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + //Path to a program. CMAKE_STRIP:FILEPATH=/usr/bin/strip @@ -1256,7 +1271,7 @@ CGAL_Core_LIBRARY-ADVANCED:INTERNAL=1 //Variable hidden from user CGAL_Core_LIBRARY_INSTALLED:INTERNAL=/usr/local/lib/libCGAL_Core.so //Variable hidden from user -CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES:INTERNAL=GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR +CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES:INTERNAL=GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR;GMP;MPFR CGAL_EXECUTABLE_TARGETS:INTERNAL= //Variable hidden from user CGAL_EXT_LIB_BLAS_PREFIX:INTERNAL=BLAS @@ -1344,7 +1359,7 @@ CMAKE_CACHE_MAJOR_VERSION:INTERNAL=2 //Minor version of cmake used to create the current loaded cache CMAKE_CACHE_MINOR_VERSION:INTERNAL=8 //Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=11 +CMAKE_CACHE_PATCH_VERSION:INTERNAL=12 //ADVANCED property for variable: CMAKE_COLOR_MAKEFILE CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 //Path to CMake executable. @@ -1460,6 +1475,16 @@ CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SKIP_RPATH CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STRIP CMAKE_STRIP-ADVANCED:INTERNAL=1 //Suppress Warnings that are meant for the author of the CMakeLists.txt @@ -1479,7 +1504,7 @@ FIND_PACKAGE_MESSAGE_DETAILS_GMP:INTERNAL=[/usr/lib64/libgmp.so][/usr/include][v //Details about finding MPFR FIND_PACKAGE_MESSAGE_DETAILS_MPFR:INTERNAL=[/usr/lib64/libmpfr.so][/usr/include][v()] //Details about finding OpenGL -FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib64/libGL.so][v()] +FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib64/libGL.so][/usr/include][v()] //Details about finding Threads FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] //Details about finding X11 diff --git a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/setup b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/setup index 5bfcf4de05b..c1a3e56bf1d 100644 --- a/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/setup +++ b/Maintenance/infrastructure/renoir.geometryfactory.com/reference-platforms/x86-64_Linux-Fedora19_IntelCompiler-14.0-with-g++-4.8-STL_strict-ansi/setup @@ -1,4 +1,4 @@ -source /opt/intel/composer_xe_2013_sp1.1.106/bin/compilervars.sh intel64 +source /opt/intel/composer_xe_2013_sp1/bin/compilervars.sh intel64 CXX=icpc CC=icc CXXFLAGS="-strict-ansi -w1 -diag-disable 11" diff --git a/Maintenance/public_release/announcement/mailing-beta b/Maintenance/public_release/announcement/mailing-beta.eml similarity index 91% rename from Maintenance/public_release/announcement/mailing-beta rename to Maintenance/public_release/announcement/mailing-beta.eml index e47c7de2bef..f4623744bd4 100644 --- a/Maintenance/public_release/announcement/mailing-beta +++ b/Maintenance/public_release/announcement/mailing-beta.eml @@ -1,4 +1,5 @@ Subject: CGAL 4.4 Beta 1 Released, Computational Geometry Algorithms Library +Content-Type: text/plain; charset="utf-8" Body: The CGAL Open Source Project is pleased to announce the release 4.4 Beta 1 @@ -12,6 +13,12 @@ release of the final version of CGAL 4.4 mid-March. Besides fixes to existing packages, the following has changed since CGAL 4.3: + o New compiler support + + The Apple Clang compiler version 5.0 is now supported on + OS X Mavericks. + + o Triangulated Surface Mesh Segmentation (new package) This package implements the segmentation of triangulated surface meshes @@ -20,6 +27,10 @@ CGAL 4.3: the SDF. +Note that Microsoft Visual Studio 2013, and its VC++ 12 compiler are not +yet supported. + + See http://www.cgal.org/releases.html for a complete list of changes. diff --git a/Maintenance/public_release/announcement/mailing b/Maintenance/public_release/announcement/mailing.eml similarity index 100% rename from Maintenance/public_release/announcement/mailing rename to Maintenance/public_release/announcement/mailing.eml diff --git a/Maintenance/public_release/scripts/prepare_release b/Maintenance/public_release/scripts/prepare_release index 965e20d371a..c81ca897574 100755 --- a/Maintenance/public_release/scripts/prepare_release +++ b/Maintenance/public_release/scripts/prepare_release @@ -32,7 +32,7 @@ printf "Copy documentation to doc_html/ and doc_html_online/...\n" [ -d "$DEST_DIR" ] || mkdir "$DEST_DIR" [ -d "$DEST_DIR/doc_html" ] || mkdir "$DEST_DIR/doc_html" -[ -d "/var/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual" ] || mkdir "/var/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual" +[ -d "/var/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual" ] || mkdir -p "/var/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual" cp "$PUBLIC_RELEASE_DIR"/*(.) "${RELEASE_CANDIDATES_DIR}/$PUBLIC_RELEASE_NAME" cp -a "$MANUAL_TESTS_DIR/$INTERNAL_RELEASE"/output/* "$DEST_DIR/doc_html" diff --git a/Maintenance/release_building/public_release_name b/Maintenance/release_building/public_release_name index 3071ae7eadd..2990407dcbe 100644 --- a/Maintenance/release_building/public_release_name +++ b/Maintenance/release_building/public_release_name @@ -1 +1,2 @@ -CGAL-4.4-dev +CGAL-4.4-beta2 + diff --git a/Mesh_3/demo/Mesh_3/Volume_plane_interface.h b/Mesh_3/demo/Mesh_3/Volume_plane_interface.h index 775af83f19c..3b46a32c7f2 100644 --- a/Mesh_3/demo/Mesh_3/Volume_plane_interface.h +++ b/Mesh_3/demo/Mesh_3/Volume_plane_interface.h @@ -5,6 +5,7 @@ #include #include #include +#include class Volume_plane_interface : public Scene_item { Q_OBJECT diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp index 0acdfdf5157..68bbb6010ea 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp @@ -1,3 +1,5 @@ +#define CGAL_MESH_3_VERBOSE + #include #include diff --git a/Mesh_3/examples/Mesh_3/mesh_implicit_sphere.cpp b/Mesh_3/examples/Mesh_3/mesh_implicit_sphere.cpp index 55a9350f40b..867a5395bc8 100644 --- a/Mesh_3/examples/Mesh_3/mesh_implicit_sphere.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_implicit_sphere.cpp @@ -31,7 +31,8 @@ FT sphere_function (const Point& p) int main() { // Domain (Warning: Sphere_3 constructor uses squared radius !) - Mesh_domain domain(sphere_function, K::Sphere_3(CGAL::ORIGIN, 2.)); + Mesh_domain domain(sphere_function, + K::Sphere_3(CGAL::ORIGIN, 2.)); // Mesh criteria Mesh_criteria criteria(facet_angle=30, facet_size=0.1, facet_distance=0.025, diff --git a/Mesh_3/examples/Mesh_3/mesh_implicit_sphere_variable_size.cpp b/Mesh_3/examples/Mesh_3/mesh_implicit_sphere_variable_size.cpp index acf57d24fa6..707d05dd631 100644 --- a/Mesh_3/examples/Mesh_3/mesh_implicit_sphere_variable_size.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_implicit_sphere_variable_size.cpp @@ -45,7 +45,8 @@ FT sphere_function (const Point& p) int main() { // Domain (Warning: Sphere_3 constructor uses squared radius !) - Mesh_domain domain(sphere_function, K::Sphere_3(CGAL::ORIGIN, 2.)); + Mesh_domain domain(sphere_function, + K::Sphere_3(CGAL::ORIGIN, 2.)); // Mesh criteria Spherical_sizing_field size; diff --git a/Mesh_3/examples/Mesh_3/mesh_two_implicit_spheres_with_balls.cpp b/Mesh_3/examples/Mesh_3/mesh_two_implicit_spheres_with_balls.cpp index c2ede3260ba..beb20cdb6f8 100644 --- a/Mesh_3/examples/Mesh_3/mesh_two_implicit_spheres_with_balls.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_two_implicit_spheres_with_balls.cpp @@ -53,7 +53,8 @@ FT sphere_function (const Point& p) int main() { // Domain (Warning: Sphere_3 constructor uses squared radius !) - Mesh_domain domain(sphere_function, K::Sphere_3(Point(1, 0, 0), 6.)); + Mesh_domain domain(sphere_function, + K::Sphere_3(Point(1, 0, 0), 6.)); // Mesh criteria Mesh_criteria criteria(edge_size = 0.15, diff --git a/Mesh_3/include/CGAL/Implicit_mesh_domain_3.h b/Mesh_3/include/CGAL/Implicit_mesh_domain_3.h index 16238012a35..ab672b652f2 100644 --- a/Mesh_3/include/CGAL/Implicit_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Implicit_mesh_domain_3.h @@ -31,6 +31,7 @@ # pragma warning(disable:4180) // qualifier applied to function type has no meaning; ignored #endif +#include #include #include @@ -47,7 +48,7 @@ template > class Implicit_mesh_domain_3 - : public Mesh_3::Labeled_mesh_domain_3 + : public Mesh_3::Labeled_mesh_domain_3 { public: /// Base type @@ -66,8 +67,9 @@ public: */ Implicit_mesh_domain_3(const Function& f, const Sphere_3& bounding_sphere, - const FT& error_bound = FT(1e-3)) - : Base(Wrapper(f), bounding_sphere, error_bound) {} + const FT& error_bound = FT(1e-3), + CGAL::Random* p_rng = NULL) + : Base(Wrapper(f), bounding_sphere, error_bound, p_rng) {} /// Destructor virtual ~Implicit_mesh_domain_3() {} diff --git a/Mesh_3/include/CGAL/Labeled_image_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_image_mesh_domain_3.h index 74fba59dfd7..4a27f055b2b 100644 --- a/Mesh_3/include/CGAL/Labeled_image_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_image_mesh_domain_3.h @@ -27,7 +27,7 @@ #ifndef CGAL_LABELED_IMAGE_MESH_DOMAIN_3_H #define CGAL_LABELED_IMAGE_MESH_DOMAIN_3_H - +#include #include #include @@ -41,6 +41,7 @@ namespace CGAL { */ template > class Labeled_image_mesh_domain_3 : public Mesh_3::Labeled_mesh_domain_3 @@ -55,10 +56,12 @@ public: /// Constructor Labeled_image_mesh_domain_3(const Image& image, - const FT& error_bound = FT(1e-3)) + const FT& error_bound = FT(1e-3), + CGAL::Random* p_rng = NULL) : Base(Wrapper(image), compute_bounding_box(image), - error_bound) + error_bound, + p_rng) {} /// Destructor diff --git a/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h index 92062a7c1c7..aa2bbde9ac0 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h @@ -38,6 +38,7 @@ #include #include #include +#include namespace CGAL { @@ -55,7 +56,8 @@ namespace Mesh_3 { * tags of it's incident subdomain. * Thus, a boundary facet of the domain is labelled <0,b>, where b!=0. */ -template +template class Labeled_mesh_domain_3 { public: @@ -94,14 +96,20 @@ public: */ Labeled_mesh_domain_3(const Function& f, const Sphere_3& bounding_sphere, - const FT& error_bound = FT(1e-3)); + const FT& error_bound = FT(1e-3), + CGAL::Random* p_rng = NULL); Labeled_mesh_domain_3(const Function& f, const Bbox_3& bbox, - const FT& error_bound = FT(1e-3)); + const FT& error_bound = FT(1e-3), + CGAL::Random* p_rng = NULL); /// Destructor - virtual ~Labeled_mesh_domain_3() {} + virtual ~Labeled_mesh_domain_3() + { + if(delete_rng_) + delete p_rng_; + } /** * Constructs a set of \ccc{n} points on the surface, and output them to @@ -461,6 +469,9 @@ private: const Function function_; /// The bounding box const Iso_cuboid_3 bbox_; + /// The random number generator used by Construct_initial_points + CGAL::Random* p_rng_; + bool delete_rng_; /// Error bound relative to sphere radius FT squared_error_bound_; @@ -483,24 +494,40 @@ template Labeled_mesh_domain_3::Labeled_mesh_domain_3( const F& f, const Sphere_3& bounding_sphere, - const FT& error_bound ) + const FT& error_bound, + CGAL::Random* p_rng) : function_(f) , bbox_(iso_cuboid(bounding_sphere.bbox())) +, p_rng_(p_rng) +, delete_rng_(false) , squared_error_bound_(squared_error_bound(bounding_sphere,error_bound)) { // TODO : CGAL_ASSERT(0 < f(bounding_sphere.get_center()) ) ? + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } } template Labeled_mesh_domain_3::Labeled_mesh_domain_3( const F& f, const Bbox_3& bbox, - const FT& error_bound ) + const FT& error_bound, + CGAL::Random* p_rng) : function_(f) , bbox_(iso_cuboid(bbox)) +, p_rng_(p_rng) +, delete_rng_(false) , squared_error_bound_(squared_error_bound(bbox_,error_bound)) { // TODO : CGAL_ASSERT(0 < f(bounding_sphere.get_center()) ) ? + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } } @@ -522,8 +549,9 @@ Labeled_mesh_domain_3::Construct_initial_points::operator()( const double radius = std::sqrt(CGAL::to_double(squared_radius)); - Random_points_on_sphere_3 random_point_on_sphere(radius); - Random_points_in_sphere_3 random_point_in_sphere(radius); + CGAL::Random& rng = *(r_domain_.p_rng_); + Random_points_on_sphere_3 random_point_on_sphere(radius, rng); + Random_points_in_sphere_3 random_point_in_sphere(radius, rng); // Get some functors typename BGT::Construct_segment_3 segment_3 = diff --git a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h index 1dc92d688e5..dd176988be4 100644 --- a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h +++ b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h @@ -448,6 +448,15 @@ public: , current_curve_index_(1) , curves_aabb_tree_is_built(false) {} + template + Mesh_domain_with_polyline_features_3(const T1& o1, + const T2& o2, + T3& o3) + : Base(o1, o2, o3) + , current_corner_index_(1) + , current_curve_index_(1) + , curves_aabb_tree_is_built(false) {} + #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES template Mesh_domain_with_polyline_features_3(const T& ...t) diff --git a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h index dceddaca71c..798b16a3ac9 100644 --- a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -203,36 +204,57 @@ public: Polyhedral_mesh_domain_3() : tree_() , bounding_tree_(&tree_) - , has_cache(false) {} + , has_cache(false) + , p_rng_(NULL) + , delete_rng_(true) + { + p_rng_ = new CGAL::Random(0); + } /** * @brief Constructor. Contruction from a polyhedral surface * @param polyhedron the polyhedron describing the polyhedral surface */ - Polyhedral_mesh_domain_3(const Polyhedron& p) + Polyhedral_mesh_domain_3(const Polyhedron& p, + CGAL::Random* p_rng = NULL) : tree_(TriangleAccessor().triangles_begin(p), TriangleAccessor().triangles_end(p)), bounding_tree_(&tree_) // the bounding tree is tree_ , has_cache(false) + , p_rng_(p_rng) + , delete_rng_(false) { if(!p.is_pure_triangle()) { std::cerr << "Your input polyhedron must be triangulated!\n"; CGAL_error_msg("Your input polyhedron must be triangulated!"); } + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } } Polyhedral_mesh_domain_3(const Polyhedron& p, - const Polyhedron& bounding_polyhedron) + const Polyhedron& bounding_polyhedron, + CGAL::Random* p_rng = NULL) : tree_(TriangleAccessor().triangles_begin(p), TriangleAccessor().triangles_end(p)) , bounding_tree_(new AABB_tree_(TriangleAccessor().triangles_begin(bounding_polyhedron), TriangleAccessor().triangles_end(bounding_polyhedron))) , has_cache(false) + , p_rng_(p_rng) + , delete_rng_(false) { tree_.insert(TriangleAccessor().triangles_begin(bounding_polyhedron), TriangleAccessor().triangles_end(bounding_polyhedron)); tree_.build(); bounding_tree_->build(); + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } } /** @@ -249,8 +271,11 @@ public: template Polyhedral_mesh_domain_3(InputPolyhedraPtrIterator begin, InputPolyhedraPtrIterator end, - const Polyhedron& bounding_polyhedron) - : has_cache(false) + const Polyhedron& bounding_polyhedron, + CGAL::Random* p_rng = NULL) + : has_cache(false) + , p_rng_(p_rng) + , delete_rng_(false) { if(begin != end) { for(; begin != end; ++begin) { @@ -270,6 +295,11 @@ public: TriangleAccessor().triangles_end(bounding_polyhedron)); bounding_tree_ = &tree_; } + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } } /** @@ -284,8 +314,11 @@ public: */ template Polyhedral_mesh_domain_3(InputPolyhedraPtrIterator begin, - InputPolyhedraPtrIterator end) - : has_cache(false) + InputPolyhedraPtrIterator end, + CGAL::Random* p_rng = NULL) + : has_cache(false) + , p_rng_(p_rng) + , delete_rng_(false) { if(begin != end) { for(; begin != end; ++begin) { @@ -295,6 +328,11 @@ public: tree_.build(); } bounding_tree_ = 0; + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } } /// Destructor @@ -302,6 +340,8 @@ public: if(bounding_tree_ != 0 && bounding_tree_ != &tree_) { delete bounding_tree_; } + if(delete_rng_) + delete p_rng_; } /** @@ -595,6 +635,10 @@ private: mutable Cached_query cached_query; mutable AABB_primitive_id cached_primitive_id; + //random number generator for Construct_initial_points + CGAL::Random* p_rng_; + bool delete_rng_; + public: template @@ -611,6 +655,17 @@ public: return has_cache && (cached_query == Cached_query(q)); } + void set_random_generator(CGAL::Random* p_rng) + { + if(!p_rng_) + { + p_rng_ = new CGAL::Random(0); + delete_rng_ = true; + } + else + p_rng_ = p_rng; + } + private: // Disabled copy constructor & assignment operator typedef Polyhedral_mesh_domain_3 Self; @@ -623,7 +678,8 @@ private: -template +template template OutputIterator Polyhedral_mesh_domain_3:: @@ -638,7 +694,8 @@ Construct_initial_points::operator()(OutputIterator pts, FT( (bbox.ymin() + bbox.ymax()) / 2), FT( (bbox.zmin() + bbox.zmax()) / 2) ); - Random_points_on_sphere_3 random_point(1.); + CGAL::Random& rng = *(r_domain_.p_rng_); + Random_points_on_sphere_3 random_point(1., rng); int i = n; #ifdef CGAL_MESH_3_VERBOSE @@ -678,7 +735,8 @@ Construct_initial_points::operator()(OutputIterator pts, } -template +template typename Polyhedral_mesh_domain_3::Subdomain Polyhedral_mesh_domain_3:: Is_in_domain::operator()(const Point_3& p) const diff --git a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h index 2f7ee62282a..0cd77eef14c 100644 --- a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h @@ -28,6 +28,7 @@ #include +#include #include #include #include @@ -93,11 +94,10 @@ public: typedef CGAL::Tag_true Has_features; /// Constructors - Polyhedral_mesh_domain_with_features_3(const Polyhedron& p); - Polyhedral_mesh_domain_with_features_3(const std::string& filename); - - template - Polyhedral_mesh_domain_with_features_3(const T1& a, const T2& b) : Base(a, b) {} + Polyhedral_mesh_domain_with_features_3(const Polyhedron& p, + CGAL::Random* p_rng = NULL); + Polyhedral_mesh_domain_with_features_3(const std::string& filename, + CGAL::Random* p_rng = NULL); template Polyhedral_mesh_domain_with_features_3(const T1& a, const T2& b, const T3& c) @@ -127,17 +127,20 @@ private: template < typename GT_, typename P_, typename TA_, typename Tag_, typename E_tag_> Polyhedral_mesh_domain_with_features_3:: -Polyhedral_mesh_domain_with_features_3(const Polyhedron& p) +Polyhedral_mesh_domain_with_features_3(const Polyhedron& p, + CGAL::Random* p_rng) : Base() , polyhedron_(p) { this->add_primitives(polyhedron_); + this->set_random_generator(p_rng); } template < typename GT_, typename P_, typename TA_, typename Tag_, typename E_tag_> Polyhedral_mesh_domain_with_features_3:: -Polyhedral_mesh_domain_with_features_3(const std::string& filename) +Polyhedral_mesh_domain_with_features_3(const std::string& filename, + CGAL::Random* p_rng) : Base() , polyhedron_() { @@ -145,6 +148,7 @@ Polyhedral_mesh_domain_with_features_3(const std::string& filename) std::ifstream input(filename.c_str()); input >> polyhedron_; this->add_primitives(polyhedron_); + this->set_random_generator(p_rng); } diff --git a/Mesh_3/test/Mesh_3/test_meshing_3D_image.cpp b/Mesh_3/test/Mesh_3/test_meshing_3D_image.cpp index 1728422ba5a..3e640f0793f 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_3D_image.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_3D_image.cpp @@ -50,7 +50,10 @@ public: //------------------------------------------------------- Image image; image.read("data/liver.inr.gz"); - Mesh_domain domain(image,1e-9); + + std::cout << "\tSeed is\t" + << CGAL::default_random.get_seed() << std::endl; + Mesh_domain domain(image, 1e-9, &CGAL::default_random); // Set mesh criteria Facet_criteria facet_criteria(25, 20*image.vx(), 5*image.vx()); diff --git a/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp b/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp index eac383a33fd..f6ad7af260c 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp @@ -38,8 +38,10 @@ int main(int argc, char* argv[]) double exude_bound = 15.; // Domain + std::cout << "\tSeed is\t 0" << std::endl; Mesh_domain domain("data/cube.off"); - + //no random generator is given, so CGAL::Random(0) is used + // Get sharp features domain.detect_features(); @@ -56,8 +58,6 @@ int main(int argc, char* argv[]) output_c3t3.reserve(5 * nb_runs); for(std::size_t i = 0; i < nb_runs; ++i) { - CGAL::default_random = CGAL::Random(0); - std::cout << "------- Iteration " << (i+1) << " -------" << std::endl; C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, no_perturb(), diff --git a/Mesh_3/test/Mesh_3/test_meshing_implicit_function.cpp b/Mesh_3/test/Mesh_3/test_meshing_implicit_function.cpp index 68737e1ae46..362cc8b053e 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_implicit_function.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_implicit_function.cpp @@ -57,8 +57,12 @@ struct Implicit_tester : public Tester //------------------------------------------------------- // Data generation //------------------------------------------------------- + std::cout << "\tSeed is\t" + << CGAL::default_random.get_seed() << std::endl; Mesh_domain domain(Implicit_tester::sphere_function, - Sphere_3(CGAL::ORIGIN,2.)); + Sphere_3(CGAL::ORIGIN,2.), + 1e-3, + &CGAL::default_random); // Set mesh criteria Facet_criteria facet_criteria(0, 0, 0.3); diff --git a/Mesh_3/test/Mesh_3/test_meshing_polyhedron.cpp b/Mesh_3/test/Mesh_3/test_meshing_polyhedron.cpp index b49ee30ea83..f7008010f34 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_polyhedron.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_polyhedron.cpp @@ -51,8 +51,10 @@ struct Polyhedron_tester : public Tester std::ifstream input("data/sphere.off"); input >> polyhedron; input.close(); - - Mesh_domain domain(polyhedron); + + std::cout << "\tSeed is\t" + << CGAL::default_random.get_seed() << std::endl; + Mesh_domain domain(polyhedron, &CGAL::default_random); // Set mesh criteria Facet_criteria facet_criteria(30, 0.2, 0.02); diff --git a/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp b/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp index 2d35bd2907c..641e477f499 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp @@ -51,7 +51,9 @@ struct Polyhedron_with_features_tester : public Tester //------------------------------------------------------- // Data generation //------------------------------------------------------- - Mesh_domain domain("data/cube.off"); + std::cout << "\tSeed is\t" + << CGAL::default_random.get_seed() << std::endl; + Mesh_domain domain("data/cube.off", &CGAL::default_random); domain.detect_features(); // Set mesh criteria diff --git a/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp b/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp index f0ecd430793..4b2a5ea7150 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp @@ -46,7 +46,9 @@ int main(int argc, char** argv) Point(0, 1, 0), Point(0, 0, 1)); - Mesh_domain domain(p); + std::cout << "\tSeed is\t" + << CGAL::default_random.get_seed() << std::endl; + Mesh_domain domain(p, &CGAL::default_random); typedef std::vector Polyline; typedef std::vector Polylines; diff --git a/Modular_arithmetic/doc/Modular_arithmetic/Concepts/Modularizable.h b/Modular_arithmetic/doc/Modular_arithmetic/Concepts/Modularizable.h index a889a5f2532..dacca3fda83 100644 --- a/Modular_arithmetic/doc/Modular_arithmetic/Concepts/Modularizable.h +++ b/Modular_arithmetic/doc/Modular_arithmetic/Concepts/Modularizable.h @@ -20,7 +20,7 @@ which can not be represented. \cgalHasModel `int` \cgalHasModel `long` -\cgalHasModel `CGAL::CORE::BigInt` +\cgalHasModel `CORE::BigInt` \cgalHasModel `CGAL::Gmpz` \cgalHasModel `leda_integer` \cgalHasModel `mpz_class` diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 247fc85e65e..48fd2a7cb97 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -45,6 +45,9 @@ #include "Show_point_dialog.h" #include "File_loader_dialog.h" +#include +#include + #ifdef QT_SCRIPT_LIB # include # include diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index 96a45163515..24024b22978 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -4,6 +4,7 @@ #include "Scene_draw_interface.h" #include #include +#include class Viewer_impl { public: diff --git a/Polyhedron_IO/examples/Polyhedron_IO/off2iv.cpp b/Polyhedron_IO/examples/Polyhedron_IO/off2iv.cpp index 8ccc1409774..b1288b4d5fe 100644 --- a/Polyhedron_IO/examples/Polyhedron_IO/off2iv.cpp +++ b/Polyhedron_IO/examples/Polyhedron_IO/off2iv.cpp @@ -81,6 +81,7 @@ int main( int argc, char **argv) { CGAL::Inventor_ostream os( *p_out); CGAL::File_writer_inventor writer; CGAL::generic_copy_OFF( *p_in, *p_out, writer); + if(!os) return EXIT_FAILURE; os.close(); vout << " .... done." << endl; diff --git a/Polyhedron_IO/examples/Polyhedron_IO/off2vrml.cpp b/Polyhedron_IO/examples/Polyhedron_IO/off2vrml.cpp index 23895ced7d7..dbf4a18419b 100644 --- a/Polyhedron_IO/examples/Polyhedron_IO/off2vrml.cpp +++ b/Polyhedron_IO/examples/Polyhedron_IO/off2vrml.cpp @@ -87,11 +87,13 @@ int main( int argc, char **argv) { CGAL::VRML_1_ostream os( *p_out); CGAL::File_writer_inventor writer; CGAL::generic_copy_OFF( *p_in, *p_out, writer); + if(!os) return EXIT_FAILURE; os.close(); } else { CGAL::VRML_2_ostream os( *p_out); CGAL::File_writer_VRML_2 writer; CGAL::generic_copy_OFF( *p_in, *p_out, writer); + if(!os) return EXIT_FAILURE; os.close(); } vout << " .... done." << endl; diff --git a/STL_Extension/doc/STL_Extension/CGAL/utility.h b/STL_Extension/doc/STL_Extension/CGAL/utility.h index 624684c0b65..f9d4f1bff32 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/utility.h +++ b/STL_Extension/doc/STL_Extension/CGAL/utility.h @@ -426,6 +426,7 @@ Equivalent to `Quadruple(x, y, z, w)`. template Quadruple make_tuple(T1 x, T2 y, T3 z, T4 w); +#ifndef DOXYGEN_RUNNING /*! \ingroup PkgStlExtensionUtilities Creates a pair `(t1,t2)` if `comp(t1,t2)==true` and `(t2,t1)` otherwise. @@ -440,5 +441,6 @@ std::pair make_sorted_pair(T t1, T t2, Compare comp) { return comp(t1, t2) ? std::make_pair(t1,t2) : std::make_pair(t2,t1); } +#endif } /* end namespace CGAL */ diff --git a/STL_Extension/doc/STL_Extension/PackageDescription.txt b/STL_Extension/doc/STL_Extension/PackageDescription.txt index 3918f76b522..f634c5391b1 100644 --- a/STL_Extension/doc/STL_Extension/PackageDescription.txt +++ b/STL_Extension/doc/STL_Extension/PackageDescription.txt @@ -48,7 +48,6 @@ - `CGAL::cpp11::prev` - `CGAL::predecessor` - `CGAL::successor` -- `CGAL::make_sorted_pair` ## Iterators and Iterator/Circulator Adaptors ## - `CGAL::Dispatch_output_iterator` diff --git a/STL_Extension/test/STL_Extension/test_Compact_container.cpp b/STL_Extension/test/STL_Extension/test_Compact_container.cpp index 51db525399b..4d7f6dd5e20 100644 --- a/STL_Extension/test/STL_Extension/test_Compact_container.cpp +++ b/STL_Extension/test/STL_Extension/test_Compact_container.cpp @@ -9,6 +9,8 @@ #include #include +#include + struct Node_1 : public CGAL::Compact_container_base @@ -108,6 +110,7 @@ void test(const Cont &) assert(check_empty(c1)); typename Cont::allocator_type t20 = c0.get_allocator(); + CGAL_USE(t20); std::cout << "Now filling some containers" << std::endl; diff --git a/Scripts/developer_scripts/create_internal_release b/Scripts/developer_scripts/create_internal_release index de7e3c1b97f..61a66446049 100755 --- a/Scripts/developer_scripts/create_internal_release +++ b/Scripts/developer_scripts/create_internal_release @@ -223,7 +223,7 @@ sub create_version_file() { #if VERSION starts with CGAL-, we remove "CGAL-" from version #the $newver variable will store the right version - if ($result = $VERSION =~ /CGAL-(.*)/){ + if ($VERSION =~ /CGAL-(.*)/) { $newver = $1; } else { $newver = $VERSION; diff --git a/Scripts/developer_scripts/create_new_release b/Scripts/developer_scripts/create_new_release index 5b2111a5568..18f7eb64bb2 100755 --- a/Scripts/developer_scripts/create_new_release +++ b/Scripts/developer_scripts/create_new_release @@ -243,6 +243,7 @@ sed -i -e "s/define CGAL_SVN_REVISION .*/define CGAL_SVN_REVISION $CGAL_SVN_REVI sed -i -e "s/define CGAL_GIT_HASH .*/define CGAL_GIT_HASH $CGAL_GIT_HASH/" include/CGAL/version.h cd .. # Make the release tarball +rm -f "${release_name}".tar* tar -cf "${release_name}.tar" "${release_name}" gzip "${release_name}.tar" cp "${release_name}.tar.gz" "${HTML_DIR}" @@ -316,6 +317,7 @@ if [ -n "$DO_PUBLIC" ]; then # popd # cp -a doc_html/* ${public_release_name}/doc_html + rm -f "${public_release_name}".tar* tar -cf "${public_release_name}.tar" "${public_release_name}" mkdir "${HTML_DIR}/${release_name}-public" xz --best "${public_release_name}.tar" -c > "${HTML_DIR}/${release_name}-public/${public_release_name}.tar.xz" @@ -342,6 +344,7 @@ fi if [ -n "$DO_PUBLIC" ]; then # Build the Windows installer + rm -rf "${public_release_name}-NSIS" mkdir ${public_release_name}-NSIS mv ${public_release_name} ${public_release_name}-NSIS cp ${SOURCES_DIR}/wininst/developer_scripts/* ${public_release_name}-NSIS @@ -355,12 +358,12 @@ if [ -n "$DO_PUBLIC" ]; then fi # Remove local directory and tarball -rm -rf ${release_name} +rm -rf "${release_name}" rm ${release_name}.tar.gz if [ -n "$DO_PUBLIC" ]; then - rm -rf ${public_release_name}-NSIS + rm -rf "${public_release_name}-NSIS" rm -rf doc # rm -rf doc_tex rm -rf doc_html - rm ${public_release_name}.tar.gz ${public_release_name}.zip + rm "${public_release_name}.tar.gz" "${public_release_name}.zip" fi diff --git a/Spatial_searching/doc/Spatial_searching/CGAL/Search_traits_adapter.h b/Spatial_searching/doc/Spatial_searching/CGAL/Search_traits_adapter.h index c1c8a693d8f..983275e70c5 100644 --- a/Spatial_searching/doc/Spatial_searching/CGAL/Search_traits_adapter.h +++ b/Spatial_searching/doc/Spatial_searching/CGAL/Search_traits_adapter.h @@ -12,7 +12,7 @@ in a nearest neighbor search algorithm, this class must be used as distance. `Key` is a type that is associated to a point of type `Base_distance::Point_d`. -`PointPropertyMap` is a model of `ReadablePropertyMap` +`PointPropertyMap` is a model of `LvaluePropertyMap` with `Key` as `key_type` and `Base_distance::Point_d` as `value_type`. `Base_distance` is a model of either `GeneralDistance` or `OrthogonalDistance`. @@ -84,7 +84,7 @@ must be used as distance. `Key` is a type that is associated to a point of type `Base_distance::Point_d`. -`PointPropertyMap` is a model of `ReadablePropertyMap` +`PointPropertyMap` is a model of `LvaluePropertyMap` with `Key` as `key_type` and `Base_distance::Point_d` as `value_type`. `BaseTraits` is a model of either `SearchTraits` or `RangeSearchTraits`. diff --git a/Spatial_searching/doc/Spatial_searching/PackageDescription.txt b/Spatial_searching/doc/Spatial_searching/PackageDescription.txt index 204472d6842..195a698b5bf 100644 --- a/Spatial_searching/doc/Spatial_searching/PackageDescription.txt +++ b/Spatial_searching/doc/Spatial_searching/PackageDescription.txt @@ -79,7 +79,7 @@ classes that are described in the reference pages. - `CGAL::Euclidean_distance_sphere_point` - `CGAL::Manhattan_distance_iso_box_point` - `CGAL::Weighted_Minkowski_distance` -- `CGAL::Distance_for_point_adapter` +- `CGAL::Distance_adapter` ## %Splitter Classes ## - `CGAL::Sliding_midpoint` diff --git a/Spatial_searching/examples/Spatial_searching/searching_with_point_with_info_inplace.cpp b/Spatial_searching/examples/Spatial_searching/searching_with_point_with_info_inplace.cpp index 07ba0a23e9c..8df35e84ea1 100644 --- a/Spatial_searching/examples/Spatial_searching/searching_with_point_with_info_inplace.cpp +++ b/Spatial_searching/examples/Spatial_searching/searching_with_point_with_info_inplace.cpp @@ -12,21 +12,23 @@ typedef Kernel::Point_3 Point_3; typedef std::size_t Point; -//definition of the property map and get -//function as friend function to have access to -//private member +//definition of a non-mutable lvalue property map, +//with the get function as a friend function to give it +//access to the private member class My_point_property_map{ const std::vector& points; public: typedef Point_3 value_type; typedef const value_type& reference; typedef Point key_type; - typedef boost::readable_property_map_tag category; + typedef boost::lvalue_property_map_tag category; My_point_property_map(const std::vector& pts):points(pts){} + reference operator[](key_type k) const {return points[k];} + friend reference get(const My_point_property_map& ppmap,key_type i) - {return ppmap.points[i];} + {return ppmap[i];} }; diff --git a/Spatial_searching/include/CGAL/Search_traits_adapter.h b/Spatial_searching/include/CGAL/Search_traits_adapter.h index 8c4560eec86..1526c084885 100644 --- a/Spatial_searching/include/CGAL/Search_traits_adapter.h +++ b/Spatial_searching/include/CGAL/Search_traits_adapter.h @@ -22,15 +22,12 @@ #define CGAL_SEARCH_TRAITS_WITH_INFO #include -#include #include //for default distance specialization +#include -#include -#if BOOST_VERSION >= 104000 - #include -#else - #include -#endif +#include +#include +#include namespace CGAL{ @@ -74,6 +71,10 @@ struct Get_iso_box_d template class Search_traits_adapter : public Base_traits{ PointPropertyMap ppmap; + + BOOST_STATIC_ASSERT( ( boost::is_same< boost::lvalue_property_map_tag, + typename boost::property_traits::category + >::value ) ); public: typedef Base_traits Base; typedef typename internal::Get_iso_box_d::type Iso_box_d; @@ -126,6 +127,10 @@ template class Distance_adapter : public Base_distance { PointPropertyMap ppmap; typedef typename Base_distance::FT FT; + + BOOST_STATIC_ASSERT( ( boost::is_same< boost::lvalue_property_map_tag, + typename boost::property_traits::category + >::value ) ); public: Distance_adapter( const PointPropertyMap& ppmap_=PointPropertyMap(), diff --git a/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_ddim_points.cpp b/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_ddim_points.cpp index dd3dbcd5871..b55e59e8b38 100644 --- a/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_ddim_points.cpp +++ b/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_ddim_points.cpp @@ -27,8 +27,9 @@ typedef CGAL::K_neighbor_search K_neighbor_searc typedef Orthogonal_k_neighbor_search::Distance Distance; //typdefs for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef CGAL::Orthogonal_k_neighbor_search Orthogonal_k_neighbor_search_with_info; typedef CGAL::K_neighbor_search K_neighbor_search_with_info; diff --git a/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_own_pointtype.cpp b/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_own_pointtype.cpp index 3e3a756162a..37cfcd109fd 100644 --- a/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_own_pointtype.cpp +++ b/Spatial_searching/test/Spatial_searching/Building_kd_tree_with_own_pointtype.cpp @@ -16,8 +16,9 @@ typedef CGAL::Search_traits K_neighbor_search; //typdefs for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef CGAL::Orthogonal_k_neighbor_search K_neighbor_search_with_info; const unsigned int N = 1000; diff --git a/Spatial_searching/test/Spatial_searching/Circular_query.cpp b/Spatial_searching/test/Spatial_searching/Circular_query.cpp index 9edb6c89a5b..1a58a38c59b 100644 --- a/Spatial_searching/test/Spatial_searching/Circular_query.cpp +++ b/Spatial_searching/test/Spatial_searching/Circular_query.cpp @@ -23,7 +23,8 @@ typedef CGAL::Counting_iterator N_Random_points_iterator typedef CGAL::Search_traits_2 Traits; //for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; template diff --git a/Spatial_searching/test/Spatial_searching/Iso_rectangle_2_query.cpp b/Spatial_searching/test/Spatial_searching/Iso_rectangle_2_query.cpp index 37480e692bf..1261dc3dc36 100644 --- a/Spatial_searching/test/Spatial_searching/Iso_rectangle_2_query.cpp +++ b/Spatial_searching/test/Spatial_searching/Iso_rectangle_2_query.cpp @@ -21,7 +21,8 @@ typedef CGAL::Random_points_in_square_2 Random_points_iterator; typedef CGAL::Counting_iterator N_Random_points_iterator; typedef CGAL::Search_traits_2 Traits; typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; template void run(std::list all_points) diff --git a/Spatial_searching/test/Spatial_searching/K_neighbor_search_manhattan_distance_isobox_point.cpp b/Spatial_searching/test/Spatial_searching/K_neighbor_search_manhattan_distance_isobox_point.cpp index 425be051905..b7d24c1beb7 100644 --- a/Spatial_searching/test/Spatial_searching/K_neighbor_search_manhattan_distance_isobox_point.cpp +++ b/Spatial_searching/test/Spatial_searching/K_neighbor_search_manhattan_distance_isobox_point.cpp @@ -16,8 +16,9 @@ typedef CGAL::Manhattan_distance_iso_box_point Distance; typedef CGAL::K_neighbor_search Neighbor_search; //typdefs for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef CGAL::K_neighbor_search Neighbor_search_with_info; const unsigned int K = 8; diff --git a/Spatial_searching/test/Spatial_searching/K_neighbor_search_with_circle.cpp b/Spatial_searching/test/Spatial_searching/K_neighbor_search_with_circle.cpp index 1498d333bf6..23183173313 100644 --- a/Spatial_searching/test/Spatial_searching/K_neighbor_search_with_circle.cpp +++ b/Spatial_searching/test/Spatial_searching/K_neighbor_search_with_circle.cpp @@ -21,8 +21,9 @@ typedef CGAL::K_neighbor_search Neighbor_search; typedef CGAL::Random_points_in_square_2 Random_points_iterator; //typdefs for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef CGAL::K_neighbor_search Neighbor_search_with_info; diff --git a/Spatial_searching/test/Spatial_searching/Orthogonal_incremental_neighbor_search.cpp b/Spatial_searching/test/Spatial_searching/Orthogonal_incremental_neighbor_search.cpp index fcbd73c898f..da57a550836 100644 --- a/Spatial_searching/test/Spatial_searching/Orthogonal_incremental_neighbor_search.cpp +++ b/Spatial_searching/test/Spatial_searching/Orthogonal_incremental_neighbor_search.cpp @@ -39,8 +39,9 @@ typedef Orthogonal_incremental_neighbor_search::iterator NN_iterator; typedef Orthogonal_incremental_neighbor_search::Point_with_transformed_distance Point_with_transformed_distance; //typdefs for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef CGAL::Incremental_neighbor_search Orthogonal_incremental_neighbor_search_with_info; diff --git a/Spatial_searching/test/Spatial_searching/Orthogonal_k_neighbor_search.cpp b/Spatial_searching/test/Spatial_searching/Orthogonal_k_neighbor_search.cpp index 31ddd170746..bbfed61ef41 100644 --- a/Spatial_searching/test/Spatial_searching/Orthogonal_k_neighbor_search.cpp +++ b/Spatial_searching/test/Spatial_searching/Orthogonal_k_neighbor_search.cpp @@ -16,8 +16,9 @@ typedef CGAL::Search_traits_2 TreeTrai typedef CGAL::Orthogonal_k_neighbor_search Neighbor_search; //typdefs fo Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef CGAL::Orthogonal_k_neighbor_search Neighbor_search_with_info; template diff --git a/Spatial_searching/test/Spatial_searching/Point_with_info.h b/Spatial_searching/test/Spatial_searching/Point_with_info.h index f8446c31870..933417462d8 100644 --- a/Spatial_searching/test/Spatial_searching/Point_with_info.h +++ b/Spatial_searching/test/Spatial_searching/Point_with_info.h @@ -16,17 +16,24 @@ struct Point_with_info_helper{ typedef My_point_with_info type; }; - +template struct Point_property_map{ - template - friend const Point& get(Point_property_map,const My_point_with_info& p) {return p.point();} + typedef Point value_type; + typedef const value_type& reference; + typedef const My_point_with_info& key_type; + typedef boost::lvalue_property_map_tag category; + + reference operator[](key_type k) const {return k.point();} + + friend reference get(const Point_property_map& ppmap, key_type i) + {return ppmap[i];} }; template const Point& get_point(const Point& p) {return p;} template -const Point& get_point(const My_point_with_info& p) {return get(Point_property_map(),p);} +const Point& get_point(const My_point_with_info& p) {return get(Point_property_map(),p);} template struct Create_point_with_info : public std::unary_function{ diff --git a/Spatial_searching/test/Spatial_searching/Range_searching.cpp b/Spatial_searching/test/Spatial_searching/Range_searching.cpp index 14b4d861cd3..938b5b9d70e 100644 --- a/Spatial_searching/test/Spatial_searching/Range_searching.cpp +++ b/Spatial_searching/test/Spatial_searching/Range_searching.cpp @@ -19,7 +19,8 @@ typedef CGAL::Counting_iterator N_Random_points_iterator typedef CGAL::Search_traits_3 Traits; //for Point_with_info typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; const int N=10000; diff --git a/Spatial_searching/test/Spatial_searching/Splitters.cpp b/Spatial_searching/test/Spatial_searching/Splitters.cpp index 319527a897b..af28a273992 100644 --- a/Spatial_searching/test/Spatial_searching/Splitters.cpp +++ b/Spatial_searching/test/Spatial_searching/Splitters.cpp @@ -29,8 +29,9 @@ typedef CGAL::Search_traits_3 TreeTraits; typedef CGAL::Euclidean_distance Distance; #endif typedef Point_with_info_helper::type Point_with_info; -typedef CGAL::Search_traits_adapter Traits_with_info; -typedef CGAL::Distance_adapter Distance_adapter; +typedef Point_property_map Ppmap; +typedef CGAL::Search_traits_adapter Traits_with_info; +typedef CGAL::Distance_adapter Distance_adapter; typedef std::vector Vector; diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h index 064ce08425f..c70ddeb16d5 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h @@ -13,7 +13,7 @@ and the derived visitor will never be used polymorphically at runtime (is perfec and hide a non-virtual method in the context of the static polymorphism used in the simplification algorithm). -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `EdgeCollapseSimplificationVisitor` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h new file mode 100644 index 00000000000..6dbd277a059 --- /dev/null +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h @@ -0,0 +1,38 @@ + +namespace CGAL { +namespace Surface_mesh_simplification { + +/*! +\ingroup PkgSurfaceMeshSimplification + +The class `Constrained_placement` is a model for the `GetPlacement` concept +provided the template parameter `BasePlacement` is such a model. +The placement of the vertex resulting from a contraction of an edge adjacent to a constrained edge +is the point of the common vertex. Otherwise the placement is the one computed by `BasePlacement`. + +\tparam BasePlacement a model of `GetPlacement`. +\tparam EdgeIsConstrainedMap a model of `boost::ReadablePropertyMap` with `GetPlacement::Profile::edge_descriptor` + as key type and `bool` as value type indicating if an edge is constrained. + +\cgalModels `GetPlacement` + +*/ +template +class Constrained_placement : public BasePlacement +{ +public: + +/// \name Creation +/// @{ + +/*! +Constructor +*/ + Constrained_placement( + EdgeIsConstrainedMap map=EdgeIsConstrainedMap(), + BasePlacement base= BasePlacement() ); +/// @} + +}; /* end Surface_mesh_simplification::Midpoint_placement */ +} /* end namespace Surface_Mesh_Simplification */ +} /* end namespace CGAL */ diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h index 87ba35060ec..64af66426fd 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h @@ -8,7 +8,7 @@ namespace Surface_mesh_simplification { The class `Count_ratio_stop_predicate` is a model for the `StopPredicate` concept which returns `true` when the relation between the initial and current number of edges drops below a certain ratio. -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `StopPredicate` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h index 05d025a069e..76e04686cf3 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h @@ -8,7 +8,7 @@ namespace Surface_mesh_simplification { The class `Count_stop_predicate` is a model for the `StopPredicate` concept, which returns `true` when the number of current edges drops below a certain threshold. -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `StopPredicate` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h index 281512ae1a0..f0cedb20cc8 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h @@ -8,7 +8,7 @@ namespace Surface_mesh_simplification { The class `Edge_length_cost` is a model for the `GetCost` concept, which computes the collapse cost as the squared length of the edge. -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `GetCost` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h index dcd14d4b3df..a68b8700d22 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h @@ -7,7 +7,7 @@ namespace Surface_mesh_simplification { The class `Edge_profile` provides a model for the `EdgeProfile` concept. -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `EdgeProfile` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h index fe1a4125ceb..0a9892d0d14 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h @@ -8,7 +8,7 @@ The class `LindstromTurk_cost` provides a model for the `GetCost` concept. It computes the collapse cost following the Lindstrom-Turk strategy (Section \ref SurfaceMeshSimplificationLindstromTurkStrategy) -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `GetCost` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h index 47ef963a781..c176b5fee52 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h @@ -10,7 +10,7 @@ It computes the placement, that is, the new position for the remaining vertex af a halfedge-collapse, following the Lindstrom-Turk strategy (Section \ref SurfaceMeshSimplificationLindstromTurkStrategy). -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `GetPlacement` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h index 8a4755da053..fd53d4f9fbb 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h @@ -8,7 +8,7 @@ namespace Surface_mesh_simplification { The class `Midpoint_placement` is a model for the `GetPlacement` concept which computes the placement as the midpoint position along the edge. -\tparam ECM is the type of surface being simplified, and must be a model of the `EdgeCollapsableMesh` concept. +\tparam ECM is the type of surface mesh being simplified, and must be a model of the `EdgeCollapsableSurfaceMesh` concept. \cgalModels `GetPlacement` diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h index 33808048b5a..18a6a70c82a 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h @@ -4,15 +4,15 @@ namespace Surface_mesh_simplification { /*! \ingroup PkgSurfaceMeshSimplification -Simplifies `surface` in-place by collapsing edges, and returns +Simplifies `surface_mesh` in-place by collapsing edges, and returns the number of edges effectively removed. The function `Surface_mesh_simplification::edge_collapse` simplifies in-place a triangulated surface mesh by iteratively collapsing edges. \cgalHeading{Non-Named Parameters} -`surface` is the surface to simplify. -It must be a model of the `EdgeCollapsableMesh` concept. +`surface_mesh` is the surface mesh to simplify. +It must be a model of the `EdgeCollapsableSurfaceMesh` concept. `should_stop` is the stop-condition policy. It must be a model of the `StopPredicate` concept. @@ -43,56 +43,70 @@ function designates which formal argument it is. \cgalHeading{vertex_index_map(VertexIndexMap vpm)} -Maps each vertex in the surface into an unsigned integer number -in the range `[0,num_vertices(surface))`. +Maps each vertex in the surface mesh into an unsigned integer number +in the range `[0,num_vertices(surface_mesh))`. `VertexIndexMap` must be a model of `ReadablePropertyMap` whose `key_type` is -`boost::graph_traits::%vertex_descriptor` +`boost::graph_traits::%vertex_descriptor` and whose `value_type` is -`boost::graph_traits::%size_type`, +`boost::graph_traits::%size_type`, -%Default: the property map obtained by calling `get(vertex_index,surface)`, -which requires the surface vertices to have an `id()` member properly initialized to the +%Default: the property map obtained by calling `get(vertex_index,surface_mesh)`, +which requires the surface mesh vertices to have an `id()` member properly initialized to the required value. If the vertices don't have such an `id()`, you must pass some property map explicitly. An external property map can be easily obtained by calling -`get(vertex_external_index,surface)`. This constructs on the fly, and returns, +`get(vertex_external_index,surface_mesh)`. This constructs on the fly, and returns, a property map which non-intrusively associates a proper id with each vertex. \cgalHeading{edge_index_map(EdgeIndexMap eim)} -Maps each directed edge in the surface into an unsigned integer number -in the range `[0,num_edges(surface))`. +Maps each directed edge in the surface mesh into an unsigned integer number +in the range `[0,num_edges(surface_mesh))`. `EdgeIndexMap` must be a model of `ReadablePropertyMap` whose `key_type` is -`boost::graph_traits::%edge_descriptor` +`boost::graph_traits::%edge_descriptor` and whose `value_type` is -`boost::graph_traits::%size_type` +`boost::graph_traits::%size_type` -%Default: the property map obtained by calling `get(edge_index,surface)`, -which requires the surface edges to have an `id()` member properly initialized to the +%Default: the property map obtained by calling `get(edge_index,surface_mesh)`, +which requires the surface mesh edges to have an `id()` member properly initialized to the require value. If the edges don't have such an `id()`, you must pass some property map explicitly. An external property map can be easily obtained by calling -`get(edge_external_index,surface)`. This constructs on the fly, and returns, +`get(edge_external_index,surface_mesh)`. This constructs on the fly, and returns, a property map which non-intrusively associates a proper id with each edge. \cgalHeading{edge_is_border_map(EdgeIsBorderMap ebm)} -Maps each directed edge in the surface into a Boolean value -which indicates if the edge belongs to the boundary of the surface +Maps each directed edge in the surface mesh into a Boolean value +which indicates if the edge belongs to the boundary of the surface mesh (facing the outside). `EdgeIsBorderMap` must be a model `ReadablePropertyMap` whose `key_type` is -`boost::graph_traits::%edge_descriptor` +`boost::graph_traits::%edge_descriptor` and whose `value_type` is `bool`. -%Default: the property map obtained by calling `get(edge_is_border,surface)`. +%Default: the property map obtained by calling `get(edge_is_border,surface_mesh)`. + +\cgalHeading{edge_is_constrained_map(EdgeIsConstrainedMap ecm)} + +Maps each undirected edge in the surface mesh into a Boolean value +which indicates if the edge is constrained. +`EdgeIsConstrainedMap` must be a model +`ReadablePropertyMap` whose `key_type` is +`boost::graph_traits::%edge_descriptor` +and whose `value_type` is `bool`. + +\attention If this parameter is provided, `surface_mesh` must be a model of the +`EdgeCollapsableSurfaceMeshWithConstraints` concept. + +%Default: A property map always returning `false`, that is no edge is constrained. \cgalHeading{get_cost(GetCost gc)} @@ -101,7 +115,7 @@ The policy which returns the collapse cost for an edge. The type of `gc` must be a model of the `GetCost` concept. %Default: -`CGAL::Surface_mesh_simplification::LindstromTurk_cost`. +`CGAL::Surface_mesh_simplification::LindstromTurk_cost`. \cgalHeading{get_placement(GetPlacement gp)} @@ -111,7 +125,7 @@ for an edge. The type of `gp` must be a model of the `GetPlacement` concept. %Default: -`CGAL::Surface_mesh_simplification::LindstromTurk_placement` +`CGAL::Surface_mesh_simplification::LindstromTurk_placement` \cgalHeading{visitor(EdgeCollapseSimplificationVisitor v)} @@ -123,7 +137,7 @@ The type of `v` must be a model of the `EdgeCollapseSimplificationVisitor` conce %Default: an implementation-defined dummy visitor. If you wish to provide your own visitor, you can derive from: -`CGAL::Surface_mesh_simplification::Edge_collapse_visitor_base` +`CGAL::Surface_mesh_simplification::Edge_collapse_visitor_base` and override only the callbacks you are interested in. All these functions naming parameters are defined in @@ -137,7 +151,7 @@ named parameter with `CGAL::`, as shown in the examples in the user manual. The simplification process continues until the `should_stop` policy returns `true` -or the surface cannot be simplified any further due to topological constraints. +or the surface mesh cannot be simplified any further due to topological constraints. `get_cost` and `get_placement` are the policies which control the cost-strategy, that is, the order in which edges are collapsed @@ -148,8 +162,8 @@ are called at certain points in the simplification code. */ -template -int edge_collapse ( EdgeCollapsableMesh& surface +template +int edge_collapse ( EdgeCollapsableSurfaceMesh& surface_mesh , StopPredicate const& should_stop , sms_named_params const& named_parameters ) ; diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableMesh.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableMesh.h deleted file mode 100644 index 7c45a870de8..00000000000 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableMesh.h +++ /dev/null @@ -1,99 +0,0 @@ - -/*! -\ingroup PkgSurfaceMeshSimplificationConcepts -\cgalConcept - -The concept `EdgeCollapsableMesh` describes the requirements for the type of -triangulated surface mesh that can be passed to the -simplification algorithm. - -The surface must be structurally equivalent to a polyhedral surface -having only triangular faces. -It can have any number of connected components, boundaries -(borders and holes) and handles (arbitrary genus). - -\cgalRefines `HalfedgeGraph` - -\cgalHeading{Valid Expressions} - -The mesh simplification algorithm requires the free function `halfedge_collapse()`. - -Let `v0` be the source and `v1` be the target vertices of `v0v1`. - -For `e` \f$ \in \{\f$ `v0v1,v1v0` \f$ \}\f$, let `en` and `ep` be the next and previous -edges, that is `en = next_edge(e, mesh)`, `ep = prev_edge(e,mesh)`, and let -`eno` and `epo` be their opposite edges, that is -`eno = opposite_edge(en, mesh)` and `epo = opposite_edge(ep,mesh)`. - -Then, after the collapse of `(v0v1,v1v0)` the following holds: - -

    -
  • The edge `e` is no longer in `mesh`. -
  • One of \f$ \{\f$`v0,v1`\f$ \}\f$ is no longer in `mesh` while the other remains. -\cgalFootnote{Even though it would appear that v0 can always be the vertex being removed, there is a case when removing the edge `e` requires `v1` to be removed as well. See figure \ref CollapseFigure5.} -Let `vgone` be the removed vertex and `vkept` be the remaining vertex. -
  • If `e` was a border edge, that is `get(is_border, e, mesh) == true`, then `next_edge(ep) == en`, and `prev_edge(en) == ep`. -
  • If `e` was not a border edge, that is `get(is_border, e, mesh) == false`, then `ep` and `epo` are no longer in `mesh` while `en` and `eno` are kept in `mesh`. -
  • For all edges `ie` in `in_edges(vgone,mesh)`, `target(ie,mesh) == vkept` and `source(opposite_edge(ie),mesh) == vkept`. -
  • No other incidence information has changed in `mesh`. -
- -The function returns vertex `vkept` (which can be either `v0` or `v1`). - -\image html general_collapse.png -\image latex general_collapse.png -
-General case. The following mesh elements are removed: triangles (\f$ v0,v1,vL\f$) and (\f$ v1,v0,vR\f$), edges \f$ (e,e')\f$, \f$ (ep,epo)\f$ and \f$ (ep',epo')\f$, and vertex \f$ v0\f$. -
- -\image html border_collapse3.png "When the collapsing edge is not itself a border, but is incident upon a border edge that is removed, the operation is the same as in the general case." -\image latex border_collapse3.png "When the collapsing edge is not itself a border, but is incident upon a border edge that is removed, the operation is the same as in the general case." - -\image html border_collapse2.png -\image latex border_collapse2.png -
-When the collapsing edge is not itself a border, but is incident upon -a border edge that is not removed, the operation is still the -same as in the general case. -
- -\image html border_collapse1.png -\image latex border_collapse1.png -
-When the collapsing edge is itself a border, only 1 triangle is -removed. Thus, even if \f$ (ep',epo')\f$ exists, it's not removed. -
- -\anchor CollapseFigure5 -\image html border_collapse4.png -\image latex border_collapse4.png -
-This figure illustrates the single exceptional case when removing \f$ -(v0,v1)\f$ neccesarily implies removing \f$ (v1)\f$, thus \f$ (v0)\f$ -remains. -
- -\cgalHasModel `CGAL::Polyhedron_3` (If it has only triangular faces, and via -External Adaptation, which is described in \cgalCite{cgal:sll-bgl-02} -and this Bgl web page: http://www.boost.org/libs/graph/doc/leda_conversion.html). - -\sa \link BGLPolyGT `boost::graph_traits< CGAL::Polyhedron_3 >` \endlink -\sa `CGAL::halfedge_graph_traits< CGAL::Polyhedron_3 >` - -*/ - -class EdgeCollapsableMesh { -public: -}; /* end EdgeCollapsableMesh */ - -/*! -Collapses the undirected edge `(v0v1,v1v0)` replacing it with `v0` or `v1`, -as described in the following paragraph. -\pre This function requires `mesh` to be an oriented 2-manifold with or without boundaries. Furthermore, the undirected edge `(v0v1,v1v0)` must satisfy the link condition \cgalCite{degn-tpec-98}, which guarantees that the surface is also 2-manifold after the edge collapse. -\relates EdgeCollapsableMesh -*/ -template -typename boost::graph_traits::vertex_descriptor -halfedge_collapse(typename boost::graph_traits::edge_descriptor const& ue, EdgeCollapsableMesh& mesh); - - diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableSurfaceMesh.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableSurfaceMesh.h new file mode 100644 index 00000000000..96c780c6d7d --- /dev/null +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableSurfaceMesh.h @@ -0,0 +1,99 @@ + +/*! +\ingroup PkgSurfaceMeshSimplificationConcepts +\cgalConcept + +The concept `EdgeCollapsableSurfaceMesh` describes the requirements for the type of +triangulated surface mesh that can be passed to the +simplification algorithm. + +The surface mesh must be structurally equivalent to a polyhedral surface +having only triangular faces. +It can have any number of connected components, boundaries +(borders and holes) and handles (arbitrary genus). + +\cgalRefines `HalfedgeGraph` + +\cgalHeading{Valid Expressions} + +Let `v0v1` an edge of the triangulated surface mesh `ecm` and +`v0` and `v1` being the source and target vertices of that edge. +The surface mesh simplification algorithm requires the call to the function `halfedge_collapse(v0v1,ecm)` +to be valid and to return the vertex not removed after collapsing +the undirected edge `(v0v1,v1v0)`. + +For `e` \f$ \in \{\f$ `v0v1,v1v0` \f$ \}\f$, let `en` and `ep` be the next and previous +edges, that is `en = next_edge(e, surface_mesh)`, `ep = prev_edge(e,surface_mesh)`, and let +`eno` and `epo` be their opposite edges, that is +`eno = opposite_edge(en, surface_mesh)` and `epo = opposite_edge(ep,surface_mesh)`. + +Then, after the collapse of `(v0v1,v1v0)` the following holds: + +
    +
  • The edge `e` is no longer in `surface_mesh`. +
  • One of \f$ \{\f$`v0,v1`\f$ \}\f$ is no longer in `surface_mesh` while the other remains. +\cgalFootnote{Most of the time v0 is the vertex being removed but in some cases removing the edge e requires v1 to be removed. See Figure \ref CollapseFigure5.} +Let `vgone` be the removed vertex and `vkept` be the remaining vertex. +
  • If `e` was a border edge, that is `get(is_border, e, surface_mesh) == true`, then `next_edge(ep) == en`, and `prev_edge(en) == ep`. +
  • If `e` was not a border edge, that is `get(is_border, e, surface_mesh) == false`, then `ep` and `epo` are no longer in `surface_mesh` while `en` and `eno` are kept in `surface_mesh`. +
  • For all edges `ie` in `in_edges(vgone,surface_mesh)`, `target(ie,surface_mesh) == vkept` and `source(opposite_edge(ie),surface_mesh) == vkept`. +
  • No other incidence information has changed in `surface_mesh`. +
+ + +\image html general_collapse.png +\image latex general_collapse.png +
+General case. The following surface mesh elements are removed: triangles (\f$ v0,v1,vL\f$) and (\f$ v1,v0,vR\f$), edges \f$ (e,e')\f$, \f$ (ep,epo)\f$ and \f$ (ep',epo')\f$, and vertex \f$ v0\f$. +
+ +\image html border_collapse3.png "When the collapsing edge is not itself a border, but is incident upon a border edge that is removed, the operation is the same as in the general case." +\image latex border_collapse3.png "When the collapsing edge is not itself a border, but is incident upon a border edge that is removed, the operation is the same as in the general case." + +\image html border_collapse2.png +\image latex border_collapse2.png +
+When the collapsing edge is not itself a border, but is incident upon +a border edge that is not removed, the operation is still the +same as in the general case. +
+ +\image html border_collapse1.png +\image latex border_collapse1.png +
+When the collapsing edge is itself a border, only 1 triangle is +removed. Thus, even if \f$ (ep',epo')\f$ exists, it's not removed. +
+ +\anchor CollapseFigure5 +\image html border_collapse4.png +\image latex border_collapse4.png +
+This figure illustrates the single exceptional case when removing \f$ +(v0,v1)\f$ neccesarily implies removing \f$ (v1)\f$, thus \f$ (v0)\f$ +remains. +
+ +\cgalHasModel `CGAL::Polyhedron_3` (If it has only triangular faces), +using the specialization \link BGLPolyGT `boost::graph_traits< CGAL::Polyhedron_3 >` \endlink. + +\sa \link BGLPolyGT `boost::graph_traits< CGAL::Polyhedron_3 >` \endlink +\sa `CGAL::halfedge_graph_traits< CGAL::Polyhedron_3 >` + +*/ + +class EdgeCollapsableSurfaceMesh { +public: +}; /* end EdgeCollapsableSurfaceMesh */ + +/*! +Collapses the undirected edge `(v0v1,v1v0)` replacing it with `v0` or `v1`, +as described in the paragraph above. +\pre This function requires `surface_mesh` to be an oriented 2-manifold with or without boundaries. Furthermore, the undirected edge `(v0v1,v1v0)` must satisfy the link condition \cgalCite{degn-tpec-98}, which guarantees that the surface mesh is also 2-manifold after the edge collapse. +\relates EdgeCollapsableSurfaceMesh +*/ +template +typename boost::graph_traits::vertex_descriptor +halfedge_collapse(typename boost::graph_traits::edge_descriptor const& ue, EdgeCollapsableSurfaceMesh& surface_mesh); + + diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableSurfaceMeshWithConstraints.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableSurfaceMeshWithConstraints.h new file mode 100644 index 00000000000..216a66a4342 --- /dev/null +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableSurfaceMeshWithConstraints.h @@ -0,0 +1,61 @@ + +/*! +\ingroup PkgSurfaceMeshSimplificationConcepts +\cgalConcept + +The concept `EdgeCollapsableSurfaceMeshWithConstraints` describes additional requirements +for the type of triangulated surface meshes that can be passed to the +simplification algorithm. + +\cgalRefines `EdgeCollapsableSurfaceMesh` + +\cgalHeading{Valid Expressions} + +Let `v0v1` be an edge of the triangulated surface mesh `ecm` and +`v0` and `v1` being the source and target vertices of that edge. +The surface mesh simplification algorithm requires the call to the function `halfedge_collapse(v0v1,ecm)` +to be valid and to return the vertex not removed after collapsing +the undirected edge `(v0v1,v1v0)`. + +For `e` \f$ \in \{\f$ `v0v1,v1v0` \f$ \}\f$, let `en` and `ep` be the next and previous +edges, that is `en = next_edge(e, surface_mesh)`, `ep = prev_edge(e,surface_mesh)`, and let +`eno` and `epo` be their opposite edges, that is +`eno = opposite_edge(en, surface_mesh)` and `epo = opposite_edge(ep,surface_mesh)`. + +Then, after the collapse of `(v0v1,v1v0)` the invariants described in the concept `EdgeCollapsableSurfaceMesh` hold +if `ep` is not constrained. Otherwise, it is `en` that is removed from `ecm`. + +\image html collapse_constraints.png +\image latex collapse_constraints.png + +\cgalHasModel `CGAL::Polyhedron_3` (If it has only triangular faces), +using the specialization \link BGLPolyGT `boost::graph_traits< CGAL::Polyhedron_3 >` \endlink. + +\sa \link BGLPolyGT `boost::graph_traits< CGAL::Polyhedron_3 >` \endlink +\sa `CGAL::halfedge_graph_traits< CGAL::Polyhedron_3 >` + +*/ + +class EdgeCollapsableSurfaceMeshWithConstraints { +public: +}; /* end EdgeCollapsableSurfaceMeshWithConstraints */ + +/*! +Collapses the undirected edge `(v0v1,v1v0)` replacing it with `v0` or `v1`, +as described in the paragraph above and guarantees that an halfedge `he`, for which `get(edge_is_constrained_map, he)==true`, is not removed after the collapse. +\tparam EdgeCollapsableSurfaceMeshWithConstraints a model of `HalfedgeGraph` +\tparam EdgeIsConstrainedMap a model of `ReadablePropertyMap` with the edge descriptor of + `EdgeCollapsableSurfaceMeshWithConstraints` as key type and a boolean as value type. + It indicates if an edge is constrained or not. +\pre This function requires `surface_mesh` to be an oriented 2-manifold with or without boundaries. Furthermore, the undirected edge `(v0v1,v1v0)` must satisfy the link condition \cgalCite{degn-tpec-98}, which guarantees that the surface mesh is also 2-manifold after the edge collapse. +\pre `get(edge_is_constrained_map, v0v1)==get(edge_is_constrained_map, v1v0)==false`. +\pre `v0` and `v1` are not both incident to a constrained edge. +\relates EdgeCollapsableSurfaceMeshWithConstraints +*/ +template +typename boost::graph_traits::vertex_descriptor +halfedge_collapse(typename boost::graph_traits::edge_descriptor const& ue, + EdgeCollapsableSurfaceMeshWithConstraints& surface_mesh, + EdgeIsConstrainedMap edge_is_constrained_map); + + diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapseSimplificationVisitor.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapseSimplificationVisitor.h index 27152586623..6d9cefe0d7a 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapseSimplificationVisitor.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapseSimplificationVisitor.h @@ -16,7 +16,7 @@ public: /// @{ /*! -The type of the surface to simplify. Must be a model of the `EdgeCollapsableMesh` concept. +The type of the surface mesh to simplify. Must be a model of the `EdgeCollapsableSurfaceMesh` concept. */ typedef unspecified_type ECM; @@ -31,7 +31,7 @@ The type of the edge profile cache. Must be a model of the `EdgeProfile` concept typedef unspecified_type Profile; /*! -The point type for the surface vertex. Must be a model of `Point_3`. +The point type for the surface mesh vertex. Must be a model of `Point_3`. */ typename CGAL::halfedge_graph_traits::Point Point; @@ -48,19 +48,19 @@ typedef unspecified_type size_type; /*! Called before the algorithm starts. */ -void OnStarted( ECM& surface ); +void OnStarted( ECM& surface_mesh ); /*! Called after the algorithm finishes. */ -void OnFinished ( ECM& surface ) ; +void OnFinished ( ECM& surface_mesh ) ; /*! Called when the `StopPredicate` returned `true` -(but not if the algorithm terminates because the surface could not be simplified any further). +(but not if the algorithm terminates because the surface mesh could not be simplified any further). */ -void OnStopConditionReached( ECM& surface ) ; +void OnStopConditionReached( ECM& surface_mesh ) ; /*! Called during the collecting phase (when a cost is assigned to the edges), @@ -105,7 +105,7 @@ void OnCollapsing( Profile const& profile /*! Called for each selected edge which cannot be collapsed because doing so would change the topological -type of the surface (turn it into a non-manifold +type of the surface mesh (turn it into a non-manifold for instance). */ diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeProfile.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeProfile.h index 694d5fa87e4..44a37db3410 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeProfile.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeProfile.h @@ -18,22 +18,22 @@ public: /// @{ /*! -The type of the surface to simplify. Must be a model of the `EdgeCollapsableMesh` concept. +The type of the surface mesh to simplify. Must be a model of the `EdgeCollapsableSurfaceMesh` concept. */ typedef unspecified_type ECM; /*! -A Bgl vertex descriptor representing a vertex of the surface. +A Bgl vertex descriptor representing a vertex of the surface mesh. */ typename boost::graph_traits::vertex_descriptor vertex_descriptor; /*! -A Bgl edge descriptor representing an edge of the surface. +A Bgl edge descriptor representing an edge of the surface mesh. */ typename boost::graph_traits::edge_descriptor edge_descriptor; /*! -The point type for the surface vertex. Must be a model of `Point_3`. +The point type for the surface mesh vertex. Must be a model of `Point_3`. */ typename CGAL::halfedge_graph_traits::Point Point; @@ -123,15 +123,20 @@ The unique collection of the border directed edges incident upon ` v0` and ` v1` std::vector border_edges() const; /*! -Indicates if `v0v1` belongs to a finite face of the mesh (i.e, `v0v1` is not a border edge). +Indicates if `v0v1` belongs to a finite face of the surface mesh (i.e, `v0v1` is not a border edge). */ bool left_face_exits() const; /*! -Indicates if `v0v1` belongs to a finite face of the mesh (i.e, `v1v0` is not a border edge). +Indicates if `v0v1` belongs to a finite face of the surface mesh (i.e, `v1v0` is not a border edge). */ bool right_face_exits() const; +/*! +Returns the surface mesh the edge belongs to. +*/ +const ECM& surface_mesh() const; + /// @} }; /* end EdgeProfile */ diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetCost.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetCost.h index 73594c048a3..e61d589880a 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetCost.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetCost.h @@ -36,7 +36,7 @@ A field type representing the collapse cost typedef unspecified_type FT; /*! -The point type for the surface vertex. Must be a model of `Point_3`. +The point type for the surface mesh vertex. Must be a model of `Point_3`. */ typename CGAL::halfedge_graph_traits::Point Point; diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetPlacement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetPlacement.h index f0fd4187121..09bd4f2dec5 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetPlacement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetPlacement.h @@ -12,7 +12,6 @@ The placement returned is a `boost::optional` value (i.e., it can be absent). An absent result indicates that the remaining vertex must be kept in place, not moved to a new position. -\cgalRefines `DefaultConstructible` \cgalRefines `CopyConstructible` \cgalHasModel `CGAL::Surface_mesh_simplification::Midpoint_placement` @@ -32,7 +31,7 @@ The type of the edge profile cache, model of the `EdgeProfile` concept. typedef unspecified_type Profile; /*! -The point type for the surface vertex. +The point type for the surface mesh vertex. */ typename CGAL::halfedge_graph_traits::Point Point; diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/StopPredicate.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/StopPredicate.h index 1f88bea3e2d..11ea37fa455 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/StopPredicate.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/StopPredicate.h @@ -17,7 +17,7 @@ public: /// @{ /*! -The type of the surface to simplify. Must be a model of the `EdgeCollapsableMesh` concept. +The type of the surface mesh to simplify. Must be a model of the `EdgeCollapsableSurfaceMesh` concept. */ typedef unspecified_type ECM; diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt index 6c778a8ea5d..a2cc7b8e568 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt @@ -8,7 +8,7 @@ \cgalPkgPicture{detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Fernando Cacciola} -\cgalPkgDesc{This package provides an algorithm to simplify a triangulated surface mesh by edge collapsing. It is an implementation of the Turk/Lindstrom memoryless mesh simplification algorithm.} +\cgalPkgDesc{This package provides an algorithm to simplify a triangulated surface mesh by edge collapsing. It is an implementation of the Turk/Lindstrom memoryless surface mesh simplification algorithm.} \cgalPkgManuals{Chapter_Triangulated_Surface_Mesh_Simplification,PkgSurfaceMeshSimplification} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin @@ -24,7 +24,8 @@ \cgalClassifedRefPages ## Concepts ## -- `EdgeCollapsableMesh` +- `EdgeCollapsableSurfaceMesh` +- `EdgeCollapsableSurfaceMeshWithConstraints` - `EdgeProfile` - `StopPredicate` - `GetCost` @@ -43,6 +44,7 @@ - `CGAL::Surface_mesh_simplification::Midpoint_placement` - `CGAL::Surface_mesh_simplification::LindstromTurk_cost` - `CGAL::Surface_mesh_simplification::LindstromTurk_placement` +- `CGAL::Surface_mesh_simplification::Constrained_placement` */ diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Surface_mesh_simplification.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Surface_mesh_simplification.txt index e9663bfcb7c..9cef75cbf63 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Surface_mesh_simplification.txt +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Surface_mesh_simplification.txt @@ -13,7 +13,7 @@ namespace CGAL { \section Surface_mesh_simplificationIntroduction Introduction -Surface mesh simplification is the process of reducing the number of faces used in the surface while +Surface mesh simplification is the process of reducing the number of faces used in a surface mesh while keeping the overall shape, volume and boundaries preserved as much as possible. It is the opposite of subdivision. @@ -28,11 +28,11 @@ and the coordinates of the replacing vertex are determined by another user-suppl placement function. The algorithm terminates when a user-supplied stop predicate is met, such as reaching the desired number of edges. -The algorithm implemented here is generic in the sense that it does not require the surface -to be of a particular type. Instead, it defines the concept of a `EdgeCollapsableMesh`, -which presents the surface as being a halfedge data structure, and any surface that +The algorithm implemented here is generic in the sense that it does not require the surface mesh +to be of a particular type. Instead, it defines the concept of a `EdgeCollapsableSurfaceMesh`, +which presents the surface mesh as being a halfedge data structure, and any surface mesh that is a model of that concept can be simplified. The concept is defined not in terms of a monolithic class, but in terms of a set -of functions and traits, making it easy to adapt any concrete surface type, +of functions and traits, making it easy to adapt any concrete surface mesh type, even if it is not a halfedge data structure at all. In particular, the concept definition follows the design of the Boost Graph Library (Bgl) @@ -50,7 +50,7 @@ default is appropriate. \section Surface_mesh_simplificationOverview Overview of the Simplification Process -The free function that implements the simplification algorithm takes not only the surface +The free function that implements the simplification algorithm takes not only the surface mesh and the desired stop predicate but a number of additional parameters which control and monitor the simplification process. This section briefly describes the process in order to set the background for the discussion of the parameters to the algorithm. @@ -69,11 +69,11 @@ It optionally moves the remaining vertex (`w`) into a new position, called placement, in which case the net effect is the same as in the edge-collapse operation. -Naturally, the surface that results from an edge collapse deviates from the initial -surface by some amount, and since the goal of simplification is to reduce the number -of triangles while retaining the overall look of the surface as much as possible, +Naturally, the surface mesh that results from an edge collapse deviates from the initial +surface mesh by some amount, and since the goal of simplification is to reduce the number +of triangles while retaining the overall look of the surface mesh as much as possible, it is necessary to measure such a deviation. Some methods attempt to measure the -total deviation from the initial surface to the completely simplified surface, +total deviation from the initial surface mesh to the completely simplified surface mesh, for example, by tracking an accumulated error while keeping a history of the simplification changes. Other methods, like the one implemented in this package, attempt to measure only the cost of each individual edge collapse (the local deviation introduced by @@ -88,7 +88,7 @@ The cost-driven method implemented in this package is mainly based on \cgalCite{ and \cgalCite{degn-tpec-98}. The algorithm proceeds in two stages. In the first stage, called collection stage, -an initial collapse cost is assigned to each and every edge in the surface. +an initial collapse cost is assigned to each and every edge in the surface mesh. Then in the second stage, called collapsing stage, edges are processed in order of increasing cost. Some processed edges are collapsed while some are just discarded. Collapsed edges are replaced by a vertex and the collapse @@ -102,7 +102,7 @@ and geometric conditions. The algorithm presented in \cgalCite{gh-ssqem-97} contracts (collapses) arbitrary vertex pairs and not only edges by considering certain vertex pairs as forming a pseudo-edge and proceeding to collapse both edges and pseudo-edges in the same way as in \cgalCite{cgal:lt-fmeps-98}, \cgalCite{cgal:lt-ems-99} ( -which is the algorithm implemented here). However, contracting an arbitrary vertex-pair may result in a non-manifold surface, but the current state of this package can only deal with manifold surfaces, thus, it can only collapse edges. That is, this package cannot be used as a framework for vertex contraction. +which is the algorithm implemented here). However, contracting an arbitrary vertex-pair may result in a non-manifold surface mesh, but the current state of this package can only deal with manifold surface meshes, thus, it can only collapse edges. That is, this package cannot be used as a framework for vertex contraction. \section Surface_mesh_simplificationCost Cost Strategy @@ -119,10 +119,10 @@ midpoint placement (much faster but less accurate). \subsection SurfaceMeshSimplificationLindstromTurkStrategy Lindstrom-Turk Cost and Placement Strategy The main characteristic of the strategy presented in -\cgalCite{cgal:lt-fmeps-98}, \cgalCite{cgal:lt-ems-99} is that the simplified surface -is not compared at each step with the original surface (or the surface +\cgalCite{cgal:lt-fmeps-98}, \cgalCite{cgal:lt-ems-99} is that the simplified surface mesh +is not compared at each step with the original surface mesh (or the surface mesh at a previous step) so there is no need to keep extra information, -such as the original surface or a history of the local changes. Hence +such as the original surface mesh or a history of the local changes. Hence the name memoryless simplification. At each step, all remaining edges are potential candidates for @@ -142,9 +142,9 @@ in which case it is rejected and the next constraint is considered. Once 3 constraints have been accepted, the system is solved for the vertex position. -The first constraints considered preserves the shape of the surface boundaries +The first constraints considered preserves the shape of the surface mesh boundaries (in case the edge profile has boundary edges). -The next constraints preserve the total volume of the surface. +The next constraints preserve the total volume of the surface mesh. The next constraints, if needed, optimize the local changes in volume and boundary shape. Lastly, if a constraint is still needed (because the ones previously computed were incompatible), a third (and last) constraint is added to favor equilateral triangles over elongated triangles. @@ -176,9 +176,9 @@ The algorithm maintains an internal data structure (a mutable priority queue) which allows each edge to be processed in increasing cost order. Such a data structure requires some per-edge additional information, such as the edge's cost. If the record of per-edge additional information occupies N bytes of storage, -simplifying a surface of 1 million edges (a normal size) requires 1 million times N bytes +simplifying a surface mesh of 1 million edges (a normal size) requires 1 million times N bytes of additional storage. Thus, to minimize the amount of additional memory required to -simplify a surface only the cost is attached to each edge and nothing else. +simplify a surface mesh only the cost is attached to each edge and nothing else. But this is a tradeoff: the cost of a collapse is a function of the placement (the new position chosen for the remaining vertex) so before `GetCost` @@ -211,10 +211,10 @@ The simplification algorithm is implemented as the free template function \subsection Surface_mesh_simplificationMandatoryParameters Mandatory Parameters -There are two main parameters to the algorithm: the surface to be simplified (in-place) and the stop predicate. +There are two main parameters to the algorithm: the surface mesh to be simplified (in-place) and the stop predicate. -The surface to simplify must be a model of the `EdgeCollapsableMesh` concept. -Many concrete surface types, such as `Polyhedron_3` with only triangular faces, +The surface mesh to simplify must be a model of the `EdgeCollapsableSurfaceMesh` concept. +Many concrete surface mesh types, such as `Polyhedron_3` with only triangular faces, become models of that concept via a technique known as external adaptation, which is described in \cgalCite{cgal:sll-bgl-02} and this Bgl web page: http://www.boost.org/libs/graph/doc/leda_conversion.html @@ -222,7 +222,7 @@ and this Bgl web page: > surface_mesh ; + + Constrained_edge_map constraints_map(constraint_hmap); + SMS::Constrained_placement, + Constrained_edge_map > placement(constraints_map); + + // map used to check that constrained_edges and the points of its vertices + // are preserved at the end of the simplification + // Warning: the computation of the diedral angle is only an approximation and can + // be far from the real value and could influence the detection of sharp + // edges after the simplification + std::map >constrained_edges; + std::size_t nb_sharp_edges=0; + + // detect sharp edges + std::ofstream cst_output("constrained_edges.cgal"); + for(Surface_mesh::Edge_iterator eb = surface_mesh.edges_begin(), ee = surface_mesh.edges_end() ; eb != ee ; ++eb ) + { + if ( eb->is_border_edge() ){ + ++nb_sharp_edges; + constraint_hmap[eb]=true; + constraint_hmap[eb->opposite()]=true; + constrained_edges[eb]=std::make_pair( eb->opposite()->vertex()->point(), + eb->vertex()->point() ); + } + else{ + double angle = CGAL::Mesh_3::dihedral_angle( + eb->opposite()->vertex()->point(), + eb->vertex()->point(), + eb->next()->vertex()->point(), + eb->opposite()->next()->vertex()->point() ); + if ( std::abs(angle)<100 ){ + ++nb_sharp_edges; + constraint_hmap[eb]=true; + constraint_hmap[eb->opposite()]=true; + constrained_edges[eb]=std::make_pair( eb->opposite()->vertex()->point(), + eb->vertex()->point() ); + cst_output << "2 " << eb->opposite()->vertex()->point() << " " + << " " << eb->vertex()->point() << "\n"; + } + } + } + cst_output.close(); + + // Contract the surface mesh as much as possible + SMS::Count_stop_predicate stop(0); + + int r + = SMS::edge_collapse(surface_mesh + ,stop + ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index,surface_mesh)) + .edge_index_map (boost::get(CGAL::edge_external_index ,surface_mesh)) + .edge_is_constrained_map(constraints_map) + .get_placement(placement) + ); + + std::cout << "\nFinished...\n" << r << " edges removed.\n" + << (surface_mesh.size_of_halfedges()/2) << " final edges.\n" ; + std::ofstream os(argc > 2 ? argv[2] : "out.off") ; os << surface_mesh ; + + std::cout << "Checking sharped edges were preserved...\n"; + // check sharp edges were preserved + for(Surface_mesh::Edge_iterator eb = surface_mesh.edges_begin(), ee = surface_mesh.edges_end() ; eb != ee ; ++eb ) + { + if ( eb->is_border_edge() ){ + --nb_sharp_edges; + assert( + constrained_edges[eb]==std::make_pair( eb->opposite()->vertex()->point(), + eb->vertex()->point() ) ); + } + else{ + double angle = CGAL::Mesh_3::dihedral_angle( + eb->opposite()->vertex()->point(), + eb->vertex()->point(), + eb->next()->vertex()->point(), + eb->opposite()->next()->vertex()->point() ); + if ( std::abs(angle)<100 ){ + ++nb_sharp_edges; + assert( + constrained_edges[eb]==std::make_pair( eb->opposite()->vertex()->point(), + eb->vertex()->point() ) ); + } + } + } + std::cout << "OK\n"; + + std::cout << "Check that no removable edge has been forgotten..." << std::endl; + r = SMS::edge_collapse(surface_mesh + ,stop + ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index, surface_mesh)) + .edge_index_map (boost::get(CGAL::edge_external_index, surface_mesh)) + .edge_is_constrained_map(constraints_map) + .get_placement(placement) + ); + + assert(r==0); + + if ( r==0 ) + std::cout << "OK\n"; + else{ + std::cout << "ERROR! " << r << " edges removed!\n"; + return 1; + } + + return 0; +} diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_polyhedron.cmd b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_polyhedron.cmd new file mode 100644 index 00000000000..74c878f26a1 --- /dev/null +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_polyhedron.cmd @@ -0,0 +1 @@ +mesh_with_border.off diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_polyhedron.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_polyhedron.cpp new file mode 100644 index 00000000000..0adc222b2c6 --- /dev/null +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_polyhedron.cpp @@ -0,0 +1,118 @@ +#include +#include +#include + +#include +#include +#include + +// Adaptor for Polyhedron_3 +#include + +// Simplification function +#include + +// Midpoint placement policy +#include + +//Placement wrapper +#include + +// Stop-condition policy +#include + +typedef CGAL::Simple_cartesian Kernel; +typedef Kernel::Point_3 Point_3; +typedef CGAL::Polyhedron_3 Surface_mesh; + +namespace SMS = CGAL::Surface_mesh_simplification ; + +// +// BGL property map which indicates whether an edge is marked as non-removable +// +struct Border_is_constrained_edge_map{ + typedef boost::graph_traits::edge_descriptor key_type; + typedef bool value_type; + typedef value_type reference; + typedef boost::readable_property_map_tag category; + friend bool get(Border_is_constrained_edge_map, key_type edge) { + return edge->is_border_edge(); + } +}; + +// +// Placement class +// +typedef SMS::Constrained_placement, + Border_is_constrained_edge_map > Placement; + +int main( int argc, char** argv ) +{ + Surface_mesh surface_mesh; + + if (argc!=2){ + std::cerr<< "Usage: " << argv[0] << " input.off\n"; + return 1; + } + + std::ifstream is(argv[1]); + if(!is){ + std::cerr<< "Filename provided is invalid\n"; + return 1; + } + + is >> surface_mesh ; + + // map used to check that constrained_edges and the points of its vertices + // are preserved at the end of the simplification + std::map >constrained_edges; + std::size_t nb_border_edges=0; + + for (Surface_mesh::Halfedge_iterator hit=surface_mesh.halfedges_begin(), + hit_end=surface_mesh.halfedges_end(); + hit!=hit_end; ++hit ) + { + if ( hit->is_border() ){ + constrained_edges[hit]=std::make_pair( hit->opposite()->vertex()->point(), + hit->vertex()->point() ); + ++nb_border_edges; + } + } + + // Contract the surface mesh as much as possible + SMS::Count_stop_predicate stop(0); + + // This the actual call to the simplification algorithm. + // The surface mesh and stop conditions are mandatory arguments. + // The index maps are needed because the vertices and edges + // of this surface mesh lack an "id()" field. + int r = SMS::edge_collapse + (surface_mesh + ,stop + ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index,surface_mesh)) + .edge_index_map (boost::get(CGAL::edge_external_index ,surface_mesh)) + .edge_is_constrained_map(Border_is_constrained_edge_map()) + .get_placement(Placement()) + ); + + std::cout << "\nFinished...\n" << r << " edges removed.\n" + << (surface_mesh.size_of_halfedges()/2) << " final edges.\n" ; + + std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface_mesh ; + + // now check! + for (Surface_mesh::Halfedge_iterator hit=surface_mesh.halfedges_begin(), + hit_end=surface_mesh.halfedges_end(); + hit!=hit_end; ++hit ) + { + if (hit->is_border()){ + --nb_border_edges; + assert( constrained_edges[hit] == + std::make_pair( hit->opposite()->vertex()->point(), + hit->vertex()->point() ) ); + } + } + assert( nb_border_edges==0 ); + + return 0 ; +} diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_polyhedron.cmd b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_polyhedron.cmd deleted file mode 100644 index 5cea844d830..00000000000 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_polyhedron.cmd +++ /dev/null @@ -1 +0,0 @@ -cube.off diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_polyhedron.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_polyhedron.cpp deleted file mode 100644 index 2044d1d220e..00000000000 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_polyhedron.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include - -#include -#include -#include - -// Adaptor for Polyhedron_3 -#include - -// Simplification function -#include - -// Stop-condition policy -#include - -// Map used to mark edges as fixed -#include - -typedef CGAL::Simple_cartesian Kernel; -typedef CGAL::Polyhedron_3 Surface; - -namespace SMS = CGAL::Surface_mesh_simplification ; - -// -// BGL property map which indicates whether an edge is border OR is marked as non-removable -// -class Constrains_map : public boost::put_get_helper -{ -public: - - typedef boost::readable_property_map_tag category; - typedef bool value_type; - typedef bool reference; - typedef boost::graph_traits::edge_descriptor key_type; - - Constrains_map() : mConstrains(false) {} - - reference operator[](key_type const& e) const { return e->is_border() || is_constrained(e) ; } - - void set_is_constrained ( key_type const& e, bool is ) { mConstrains[e]=is; } - - bool is_constrained( key_type const& e ) const { return mConstrains.is_defined(e) ? mConstrains[e] : false ; } - -private: - - CGAL::Unique_hash_map mConstrains ; - -}; - -int main( int argc, char** argv ) -{ - Surface surface; - - std::ifstream is(argv[1]) ; is >> surface ; - - // This is a stop predicate (defines when the algorithm terminates). - // In this example, the simplification stops when the number of undirected edges - // left in the surface drops below the specified number (1000) - SMS::Count_stop_predicate stop(10); - - Constrains_map constrains_map ; - - - // This example marks ALL edges as non-removable, but a real world application would mark only selected ones. - for( Surface::Halfedge_iterator eb = surface.halfedges_begin(), ee = surface.halfedges_end() ; eb != ee ; ++ eb ) - constrains_map.set_is_constrained(eb,true); - - // This the actual call to the simplification algorithm. - // The surface and stop conditions are mandatory arguments. - // The index maps are needed because the vertices and edges - // of this surface lack an "id()" field. - int r = SMS::edge_collapse - (surface - ,stop - ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index,surface)) - .edge_index_map (boost::get(CGAL::edge_external_index ,surface)) - .edge_is_border_map(constrains_map) - ); - - std::cout << "\nFinished...\n" << r << " edges removed.\n" - << (surface.size_of_halfedges()/2) << " final edges.\n" ; - - std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface ; - - return 0 ; -} diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_enriched_polyhedron.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_enriched_polyhedron.cpp index 0c8cde9f787..13a0a536e51 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_enriched_polyhedron.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_enriched_polyhedron.cpp @@ -30,14 +30,14 @@ typedef Kernel::Point_3 Point ; // // Setup an enriched polyhedron type which stores an id() field in the items // -typedef CGAL::Polyhedron_3 Surface; +typedef CGAL::Polyhedron_3 Surface_mesh; -typedef Surface::Halfedge_handle Halfedge_handle ; -typedef Surface::Vertex_handle Vertex_handle ; +typedef Surface_mesh::Halfedge_handle Halfedge_handle ; +typedef Surface_mesh::Vertex_handle Vertex_handle ; namespace SMS = CGAL::Surface_mesh_simplification ; -typedef SMS::Edge_profile Profile ; +typedef SMS::Edge_profile Profile ; // The following is a Visitor that keeps track of the simplification process. @@ -63,7 +63,7 @@ struct Stats std::size_t placement_uncomputable ; } ; -struct My_visitor : SMS::Edge_collapse_visitor_base +struct My_visitor : SMS::Edge_collapse_visitor_base { My_visitor( Stats* s) : stats(s){} @@ -103,7 +103,7 @@ struct My_visitor : SMS::Edge_collapse_visitor_base // Called for each edge which failed the so called link-condition, // that is, which cannot be collapsed because doing so would - // turn the surface into a non-manifold. + // turn the surface mesh into a non-manifold. void OnNonCollapsable( Profile const& ) { ++ stats->non_collapsable; @@ -121,9 +121,9 @@ struct My_visitor : SMS::Edge_collapse_visitor_base int main( int argc, char** argv ) { - Surface surface; + Surface_mesh surface_mesh; - std::ifstream is(argv[1]) ; is >> surface ; + std::ifstream is(argv[1]) ; is >> surface_mesh ; // The items in this polyhedron have an "id()" field // which the default index maps used in the algorithm @@ -132,16 +132,16 @@ int main( int argc, char** argv ) // this id(), so we must do it here: int index = 0 ; - for( Surface::Halfedge_iterator eb = surface.halfedges_begin() - , ee = surface.halfedges_end() + for( Surface_mesh::Halfedge_iterator eb = surface_mesh.halfedges_begin() + , ee = surface_mesh.halfedges_end() ; eb != ee ; ++ eb ) eb->id() = index++; index = 0 ; - for( Surface::Vertex_iterator vb = surface.vertices_begin() - , ve = surface.vertices_end() + for( Surface_mesh::Vertex_iterator vb = surface_mesh.vertices_begin() + , ve = surface_mesh.vertices_end() ; vb != ve ; ++ vb ) @@ -149,22 +149,22 @@ int main( int argc, char** argv ) // In this example, the simplification stops when the number of undirected edges // drops below 10% of the initial count - SMS::Count_ratio_stop_predicate stop(0.1); + SMS::Count_ratio_stop_predicate stop(0.1); Stats stats ; My_visitor vis(&stats) ; // The index maps are not explicitelty passed as in the previous - // example because the surface items have a proper id() field. + // example because the surface mesh items have a proper id() field. // On the other hand, we pass here explicit cost and placement // function which differ from the default policies, ommited in // the previous example. int r = SMS::edge_collapse - (surface + (surface_mesh ,stop - ,CGAL::get_cost (SMS::Edge_length_cost ()) - .get_placement(SMS::Midpoint_placement()) + ,CGAL::get_cost (SMS::Edge_length_cost ()) + .get_placement(SMS::Midpoint_placement()) .visitor (vis) ); @@ -178,9 +178,9 @@ int main( int argc, char** argv ) << std::endl ; std::cout << "\nFinished...\n" << r << " edges removed.\n" - << (surface.size_of_halfedges()/2) << " final edges.\n" ; + << (surface_mesh.size_of_halfedges()/2) << " final edges.\n" ; - std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface ; + std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface_mesh ; return 0 ; } diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_polyhedron.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_polyhedron.cpp index a3aac417636..009c02faad0 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_polyhedron.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_polyhedron.cpp @@ -15,36 +15,36 @@ #include typedef CGAL::Simple_cartesian Kernel; -typedef CGAL::Polyhedron_3 Surface; +typedef CGAL::Polyhedron_3 Surface_mesh; namespace SMS = CGAL::Surface_mesh_simplification ; int main( int argc, char** argv ) { - Surface surface; + Surface_mesh surface_mesh; - std::ifstream is(argv[1]) ; is >> surface ; + std::ifstream is(argv[1]) ; is >> surface_mesh ; // This is a stop predicate (defines when the algorithm terminates). // In this example, the simplification stops when the number of undirected edges - // left in the surface drops below the specified number (1000) - SMS::Count_stop_predicate stop(1000); + // left in the surface mesh drops below the specified number (1000) + SMS::Count_stop_predicate stop(1000); // This the actual call to the simplification algorithm. - // The surface and stop conditions are mandatory arguments. + // The surface mesh and stop conditions are mandatory arguments. // The index maps are needed because the vertices and edges - // of this surface lack an "id()" field. + // of this surface mesh lack an "id()" field. int r = SMS::edge_collapse - (surface + (surface_mesh ,stop - ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index,surface)) - .edge_index_map (boost::get(CGAL::edge_external_index ,surface)) + ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index,surface_mesh)) + .edge_index_map (boost::get(CGAL::edge_external_index ,surface_mesh)) ); std::cout << "\nFinished...\n" << r << " edges removed.\n" - << (surface.size_of_halfedges()/2) << " final edges.\n" ; + << (surface_mesh.size_of_halfedges()/2) << " final edges.\n" ; - std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface ; + std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface_mesh ; return 0 ; } diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/mesh_with_border.off b/Surface_mesh_simplification/examples/Surface_mesh_simplification/mesh_with_border.off new file mode 100644 index 00000000000..16cd6b1e2c7 --- /dev/null +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/mesh_with_border.off @@ -0,0 +1,1566 @@ +OFF +548 1014 0 + +92.0896999051 77.41989209583 -1.916832684148 +86.39100962126 72.78664496906 15.78278094865 +77.09376525879 89.87973022461 14.55043506622 +90.98168945312 96.21558380127 3.65913438797 +82.71570084509 81.86220870549 16.44397321995 +92.31691908737 86.77964878854 1.043011456447 +89.37290527712 74.91208629563 6.905433125042 +84.03774261475 93.04766845703 9.104772567749 +87.91614428888 83.98367629501 8.885449941462 +92.08308562722 91.51009411435 2.561394143404 +79.93436140773 85.95867809642 15.71871673187 +92.16810072909 82.08661851225 -0.4813870638146 +84.95054383138 77.42281772836 16.37560573549 +84.22521839805 85.24324921259 12.54660366583 +87.28833145411 78.56473572586 11.06770318225 +88.53858617073 89.67622996838 7.078736038751 +90.21472024103 80.41696412654 4.846493577097 +87.81428016343 73.7864628996 11.33105836088 +90.80739519912 76.15358418737 2.490105437257 +90.23304320467 85.72684363719 5.157361043466 +80.56578826904 91.463722229 11.8276386261 +87.50969696045 94.63160705566 6.381914138794 +85.28558449034 88.85493917666 10.09354883143 +85.27758279004 81.37161616953 13.2681149885 +82.42035268114 88.37159009099 12.28321454594 +88.64910272783 80.44739317924 8.19157083558 +91.34705696923 83.71941907076 2.518356602206 +86.54332632431 76.21153148326 13.50411389672 +91.67848926288 93.87171420986 3.215234177501 +92.10816413641 79.75050243058 -1.206542332568 +92.29622765622 89.13884414744 1.826720300829 +89.70542995812 92.32964625679 5.425094029631 +90.59106423297 89.29868580891 4.596301969103 +91.17972407486 79.36567116545 1.91073903372 +86.33903036171 91.18877364247 8.487076777961 +87.52474663172 87.12023386306 8.676494963161 +78.49607673255 87.91733917969 15.15035040429 +86.99901132535 81.62634788796 10.68441922028 +88.58945681826 74.33088989454 9.115347731003 +88.62578378798 77.40042441075 8.552444264328 +89.49626856147 82.8803041145 6.515565583687 +90.11337785606 75.52304884182 4.696506235514 +82.30175018311 92.25574493408 10.46619224548 +86.19309520102 85.47015639124 10.53423349659 +83.62519737065 83.26930177161 14.30213272629 +82.0111827497 86.17046138772 13.90531750866 +85.62502595062 78.76016915029 14.06135119224 +78.82978057861 90.67166137695 13.1890039444 +89.45795733185 78.72045615552 6.562115009714 +85.6876237692 83.36697320818 11.86120221103 +90.44759176655 78.12728045561 3.939338198359 +80.48132290292 88.08344582991 13.73552924292 +81.36934673359 83.95779586913 16.1769257545 +85.75871853097 75.11699965987 16.11420674811 +83.88932229025 79.65919077394 16.47804590138 +92.26242604584 84.4270568131 0.271220829177 +87.82876868723 76.19362041729 10.58641505821 +87.06673968633 73.27518730634 13.55175677477 +91.45894636523 76.78940059593 0.2867129567336 +89.1360658561 87.2730913458 6.776971477474 +91.27271853367 87.17795258214 3.336373635784 +87.86365825812 92.32249801315 6.989370325119 +89.24565124512 95.42362213135 5.020479202271 +85.77369689941 93.83967590332 7.74334526062 +84.1530047653 90.8891150393 10.01020383373 +84.7473737152 87.01795663413 11.27019134425 +90.49631836036 82.69742911034 4.431726418335 +89.14774062234 85.0408944843 6.999973531134 +91.46289377915 81.61758663607 1.630732294048 +82.3132325122 90.30474632652 11.36096779886 +86.90111626841 89.15160207096 8.72203909917 +84.11950356501 81.16699817827 15.0140687604 +86.28939352036 79.79002703214 12.40403490101 +80.46573968642 89.74182843265 12.71429924485 +89.60865143194 76.76812793407 6.178829509292 +90.89270834008 91.26374173479 4.176033399443 +86.80521922435 83.70802005279 10.38215960895 +89.48178847126 80.95757614811 6.534276165285 +88.11169455465 79.04731345898 9.395346300457 +88.583493635 82.36236771915 8.124783175307 +90.84324437988 81.26551998519 3.330565985771 +83.87247641686 88.5955192875 11.20891472132 +83.19459245527 86.7501647852 12.6283671037 +90.40385047626 87.51383281538 4.886414759175 +86.16951796704 87.23207527998 9.953337633655 +91.60399930071 85.59586026518 2.336331753486 +90.75668901041 84.4323814451 4.044852809319 +87.29901191592 75.34268635555 12.09818461047 +86.57400034054 77.89258327773 12.67355564934 +85.79080099281 76.54570082726 15.07525566634 +91.77179896274 80.57408744558 0.281974535061 +91.5475556147 89.95641279222 3.1931760263 +90.3442663496 93.92285130091 4.585233593477 +86.45794665313 74.70284569722 14.49144487954 +79.05721494196 89.10127736985 13.9682290256 +92.09571263016 78.58472307811 -1.56269428567 +91.61324652266 78.65370278208 0.2413144683142 +88.95158085097 93.87160551314 5.76487891664 +88.93172774873 91.16524184997 6.380833459336 +83.1217686748 84.84727135728 13.80594048831 +89.60708732727 88.78765137181 5.981576801907 +90.92546945959 77.800373802 2.393472143492 +89.88360646754 84.27551327628 5.789320637377 +87.82352645612 80.66325786631 9.616310711501 +80.65753881345 84.96774500172 15.96810193465 +81.91399561614 84.87065850033 14.91313114612 +90.704329777 79.64984094159 3.428700832615 +84.55592036845 83.70275449477 13.0115763795 +92.21273042203 83.25630400946 -0.1087730360537 +88.21238360604 88.22000875015 7.707421885366 +88.15959122892 85.57676575574 8.297069621225 +88.81394466763 78.89692552288 7.991139144449 +87.59941965207 82.59759096357 9.584046736566 +86.06838273588 81.83162256321 11.96328549717 +87.03192126414 80.10893594721 11.0553375274 +88.46537703634 75.92217371895 9.137222873303 +87.94183853539 77.63062238945 10.0069676505 +84.73188438726 79.65427763894 15.09106477496 +89.99572259739 90.6013158789 5.326148605559 +89.08109552443 76.28510581649 7.571875818205 +87.45358755135 90.32287833068 7.925755467503 +85.80653793821 90.02205488241 9.287945386385 +84.90573883057 93.44362640381 8.424060821533 +85.02462957381 91.82100314902 9.080210762303 +82.53828964184 83.53532004812 15.31098692782 +87.24565314739 85.21590788642 9.462906429098 +88.76907792079 83.77269954437 7.686026722444 +87.26020862849 77.16918094688 11.56186126234 +79.21183662051 86.93976318432 15.44173627227 +80.6772357635 86.72750384054 14.55134866499 +89.96968019319 81.91329385452 5.544516060987 +91.04107866369 92.74354582432 3.959510149799 +89.93672918584 77.98593262991 5.347731087816 +91.02614651348 85.78683581428 3.633030004003 +85.13548572186 85.65452792654 11.50140805416 +86.58175312226 92.53969079587 7.807716427241 +91.73194481166 83.03368102701 1.268949655066 +91.6054686603 88.52647150388 2.928124991176 +82.0440222159 87.34001414513 13.1416907498 +85.52842652024 80.03896830107 13.54193677916 +85.36404016149 77.88755226405 15.12055517891 +86.0765084065 77.46013649534 13.89021585768 +90.46661968935 75.83685629421 3.592188671691 +90.19681065692 76.89784761499 4.538397099543 +84.56138644799 82.48691782071 13.65137294073 +83.30403327714 82.36071585563 15.29489338667 +86.64169311523 94.23564147949 7.062632083893 +89.15075042396 77.62070306986 7.311016382239 +91.77578816761 77.10568331543 -0.8146003184522 +92.31458355115 87.95769882393 1.431302885641 +84.27631718922 89.64398620348 10.47724464253 +91.16950185257 82.39458802729 2.677383847529 +86.87516040998 74.96862991509 13.27991264815 +89.18314931403 79.84626795266 7.164286304372 +84.44360901566 78.54784372864 16.4455387666 +85.99928322555 84.35958928423 11.12543897065 +90.96268806848 88.23215442693 3.99433103563 +91.79917398165 86.86770228776 2.211270347125 +91.35660160611 95.04584327368 3.454739655752 +90.11364746094 95.81958770752 4.33976650238 +91.8114226106 84.52104497723 1.537204226449 +89.92268062963 79.29372508096 5.47162553997 +87.80022427991 74.99940383723 10.98461017787 +88.98391421327 74.61712962187 8.011383213137 +88.41189669657 86.76113359695 7.762849859456 +89.83990585597 86.78305575769 5.804147791076 +86.47708307705 82.70982487065 11.10320850079 +85.05990301504 84.41623279402 12.11437941264 +89.32975770952 89.98303370895 6.172890167703 +87.43364445809 73.52682079937 12.44056066412 +81.26149028386 88.68493750348 12.8445643021 +79.59530025292 87.7552167202 14.55929982062 +81.56095704279 89.65865012342 12.12054795257 +83.74650335188 87.5173532649 11.81482990264 +82.05580562551 82.9262281906 16.33684179161 +77.79110462112 88.89988096489 14.85615961682 +85.38491825728 76.27397332034 16.26002634304 +83.30952273933 80.76277415836 16.47482934558 +86.09057899059 73.95418022421 15.9528063478 +92.22202721814 90.32419016346 2.207048185808 +92.13015228425 80.91751070159 -0.8477875752077 +91.91128748784 92.69412778407 2.905822503365 +92.30352960777 85.60185389102 0.6571861560139 +88.80397882864 92.35845957816 6.230165128969 +87.56350554293 93.48546833814 6.794415435958 +86.77515477948 87.99073532884 9.163124693164 +91.2921995218 77.76012886914 1.141073203928 +87.24563285669 91.51266122799 7.717013849969 +91.05693732674 80.38765116816 2.536987922097 +88.09868991582 81.66739940773 8.994784785804 +88.20079182886 74.0545900789 10.22315122432 +91.13838295799 76.47160421784 1.38837785964 +89.74903229875 75.21462640485 5.800678292534 +86.7248444178 73.03032641041 14.66755655857 +91.42198188351 80.44639618037 1.409354415978 +86.70248244291 86.20631702261 9.772311187611 +85.32357668702 82.51604988631 12.67539856556 +83.34415171148 90.3563044528 10.73296744307 +83.16972351074 92.65168762207 9.785503387451 +83.16370643034 91.45261184562 10.33452960078 +88.3776473999 95.02765655518 5.701191902161 +79.6978225708 91.06776428223 12.50832748413 +81.43376159668 91.85966491699 11.14694881439 +77.96181488037 90.27571105957 13.8696937561 +82.88320612077 89.23701510152 11.54197182646 +90.59709590487 77.0431090884 3.326233951924 +90.4385053569 81.50740377165 4.417289906702 +90.92399955002 83.20459553336 3.474223453509 +90.04153909139 83.12197296545 5.464420913909 +84.84455473976 80.53727723718 14.34532209905 +88.97115981828 81.39918470952 7.526398209826 +88.19184958435 90.76480154662 7.16373228865 +88.95207671701 88.40527714282 6.846825372554 +86.85188444752 76.78765884766 12.56411815235 +91.82868788219 82.06718063471 0.6263483943344 +87.83397570175 89.26724425275 7.860215245696 +85.63889122331 86.49196601989 10.70444370687 +84.289256929 86.25422337269 12.00150866214 +85.28132021495 87.75990875058 10.52113336767 +87.61493912667 79.70302658741 10.17261837774 +89.34878250085 83.96799192039 6.745304265489 +89.71060304788 85.34737396029 6.077644732881 +89.04670719873 86.17050776147 7.033811940758 +83.33616210627 85.71360239737 13.08930299415 +80.90981870091 85.73270169067 15.12615535105 +91.21497714171 84.80822967201 3.070330870078 +90.64792720154 86.4992805173 4.432689133307 +90.32498894608 79.39071047162 4.441071424401 +86.59113065075 81.0079681309 11.48087340359 +88.20529733344 75.14799817208 9.928778947458 +91.46932714668 91.82413160531 3.426693900819 +84.05625152588 92.04026031494 9.551273345947 +81.34168250145 90.67680250169 11.74296930792 +91.55259019351 79.61359965956 0.734537667934 +86.14928903969 88.82644504097 9.435758125875 +86.63480151744 90.17649516787 8.626415734013 +85.61112519056 92.54511608244 8.415443520635 +90.77235413367 78.64450546717 3.044471825873 +86.03015612476 80.84246483408 12.39859916442 +84.09084387379 80.31011079893 15.65381057678 +87.42963074907 86.1429197771 9.024362828801 +84.58304230312 81.54684584424 14.13916022685 +82.71823885608 84.27191904384 14.58204533128 +86.14318337822 78.875724971 13.05390603302 +87.26466369629 79.24705505371 11.27718162537 +87.46308063449 88.31600007416 8.437690516399 +81.19461313203 87.2774180299 13.78930881295 +90.33868384664 83.96273511603 4.894040729647 +86.24349253624 75.76941990672 14.45146228254 +89.62070466303 79.96751622986 6.215618617518 +89.86045031553 87.81767110116 5.714444063781 +90.32493653663 92.86181087998 4.742895505028 +91.83660492574 79.70232495475 -0.2327343256045 +87.5598870147 81.60536240291 9.845685702366 +90.24277677565 91.55416058234 4.951816512248 +90.62251838342 90.33539527205 4.550076062657 +88.3684628344 84.57954172437 8.178119845641 +84.91706095676 90.18792368357 9.834589545214 +83.9286208171 84.51052198464 13.22924134799 +89.42617545693 75.90524494088 6.691736706803 +89.91402634483 76.30110923329 5.324186755154 +89.57647684262 77.76935141695 6.265239627438 +90.26302274 88.48759436779 5.08800413955 +85.56081184425 90.97427099583 9.095988527362 +80.00626334278 89.03147537546 13.41898396371 +79.37286329558 89.82291469539 13.32549985972 +88.14755221554 76.67312076792 9.744962597196 +89.65531497262 93.32206911079 5.323482453556 +91.22225608436 89.12207284975 3.629908520633 +83.96795217196 82.30680594897 14.49836357631 +83.45877795223 81.4494251123 15.73631635087 +89.94620514167 89.59487371469 5.467634763391 +82.29238891602 91.29810333252 10.90618038177 +90.811639497 82.22302301049 3.582510020635 +80.52007293701 90.59206390381 12.24966716766 +88.29109077723 78.09038216257 9.190419558197 +87.71177444011 78.74996062053 10.22093064536 +88.46730306671 79.57337952733 8.628829838468 +88.33761245464 83.26134698128 8.394543381393 +89.36645737065 81.92077744538 6.769106527411 +89.89907582446 80.92451760593 5.635455680689 +89.00589702596 82.86301063417 7.377557640286 +90.59027668966 94.87526374646 4.171108393016 +87.42512737492 76.17020838692 11.52442944207 +91.02426936631 93.72302643884 3.916591269877 +89.8870358383 94.74290090133 4.809697443233 +87.05838461737 82.52158227934 10.3681851657 +86.56171579354 84.61481200814 10.40923667174 +87.28978037789 84.22135089334 9.650016622116 +91.99796250152 85.97382150086 1.519676157958 +91.41983478308 86.34049730935 2.903012247065 +86.98268430651 78.05139466641 11.81754825277 +91.81560657137 78.14260723897 -0.6524242830686 +86.8722058784 87.03288787543 9.354827421718 +91.35672928113 78.7639907204 1.17125485171 +91.53968604339 77.7202798909 0.2403441317094 +84.86545927303 78.71558791114 15.51626244516 +86.79722653072 93.3408647828 7.342636373913 +91.63020782938 90.91409015372 3.14840834059 +87.25531824172 74.47592155632 12.52927221104 +86.07425696252 75.21362038574 15.21297464765 +91.16106283305 81.48663482954 2.492502407732 +90.5757893716 80.50375765165 3.922765152667 +82.67168107606 86.33491475752 13.27365472624 +82.96487921529 87.60913204281 12.329282444 +87.82636242729 84.88753643638 8.842631330747 +84.35474740005 87.83056859068 11.21352843057 +84.55876620841 88.79983575754 10.6423089934 +83.17465723672 88.40634089228 11.76835493646 +90.85284906504 87.33686142924 4.121887080868 +86.72724152045 73.8489141689 14.2127483518 +86.42355444031 73.80296018704 15.09471583991 +86.93659826144 75.89680908807 12.73505114447 +83.54500604627 89.52185961323 10.99503048512 +88.83978565047 75.58107846602 8.260375606895 +88.72239336258 76.48510243038 8.436356181968 +91.66303103922 87.64914656063 2.668165150909 +86.12595505386 76.63627073986 14.24302571059 +90.63286939882 85.3266640223 4.382207547975 +85.1824586822 79.69308786923 14.30335998377 +90.22312494777 84.82135828186 5.152478488357 +91.95415466013 83.85535866474 0.9179829688677 +88.23374725874 92.97600033614 6.514255895342 +88.15189788739 93.96486724046 6.24411450713 +85.3800757181 76.98502795314 15.73048748873 +84.80319976807 92.65283203125 8.842200279236 +89.09641550807 89.22223592452 6.551811823289 +85.8175845876 88.16254355025 9.930269660873 +87.66547683905 77.09918437201 10.72152242862 +78.94045741667 88.39228989734 14.52370677822 +79.71511631602 88.43273633661 14.0000620674 +89.61954054135 91.41099822565 5.649216608215 +89.23067474365 94.6247253418 5.391794204712 +91.14098067071 90.46179999326 3.826403976189 +91.93963698747 89.54916561137 2.519897373028 +90.67907607165 92.08784992503 4.414110286577 +92.00748229705 88.36647480616 2.15883145893 +87.31342900202 80.76548024745 10.42083525356 +88.54108873981 81.32345228217 8.303818225533 +86.29197840378 83.55138824339 11.06344748072 +91.63576602179 81.14048734557 0.926761868349 +91.96373053199 81.33067011421 -0.1021323030729 +88.10058326017 82.54123945134 8.854680095962 +87.02030891857 74.10770397135 13.29008336436 +88.66114033185 85.22844041822 7.687983749868 +83.37451380026 84.06156417283 14.06219752259 +82.3656683929 85.31267926977 14.18556991487 +81.62659745583 85.67233020136 14.57361705313 +79.91235379794 86.99394195408 14.90861860817 +91.92134843838 79.00929111616 -0.7694692860489 +87.93559569912 86.4273596092 8.393204653578 +90.64911812118 83.58820518874 4.189330441393 +90.19847423323 78.53839085091 4.690054556929 +82.70591734945 82.54285737196 15.89561516193 +87.55644665574 74.60603473099 11.72233372584 +86.59650472634 78.69950252896 12.30020046608 +85.76543352653 77.28645400239 14.66293197255 +88.30923622 91.57787766767 6.847835587868 +88.78585426569 90.38592908654 6.684616642745 +81.39871557718 87.91580271512 13.23167464013 +77.44239816095 89.3917582412 14.70647816142 +78.2346321736 89.45395679512 14.22778685506 +89.93552467668 77.14410101136 5.302068334108 +84.85307911288 90.96940089197 9.550021626143 +91.07435434956 77.22910817763 1.777355579159 +91.53472676551 84.75175611001 2.296705553252 +91.07428743866 84.0006697594 3.253891270141 +87.57206861003 83.44109160119 9.452703099751 +86.46837704385 77.01830345632 13.28299203037 +88.24534904025 80.33910657831 8.94283369881 +86.03946980836 78.22531162763 13.56218249175 +85.12085057396 83.64329737652 12.4032963563 +83.99859345837 83.65910767374 13.64917308958 +91.1068447306 78.5125448281 1.950304716625 +88.93743904592 77.0416921546 7.862316649276 +81.89763387706 84.16300891638 15.47949979105 +84.17142822011 79.10427843247 16.46661667861 +90.1977196189 77.71826121309 4.613359081808 +91.46686301969 82.4573958955 1.86560046256 +85.17639263798 78.97291532426 14.76262265383 +81.25829074791 85.01580337653 15.40024671834 +85.57806257522 75.69618258949 16.18963166867 +90.6740474846 77.84868862773 3.208271283977 +88.39299437575 88.93655007712 7.376023566561 +88.02443178926 87.46291572177 8.066227217816 +88.69549876852 87.75415760413 7.255780630642 +90.83584527911 76.98060581503 2.533464600951 +90.24894299365 86.54477235102 5.141658921075 +89.6976072794 83.56866623825 6.139232569616 +90.95815006486 79.5860525514 2.65996163632 +90.54331172733 78.9237771769 3.77410403802 +85.45053954275 84.87164856816 11.51553144517 +89.01834595117 80.58443177613 7.473181777199 +88.84104627055 78.03470716764 8.002824388128 +85.67184761911 78.03529306301 14.39524142803 +86.53578569197 81.78319067054 11.31637757513 +85.60993633696 81.75701177328 12.63336621461 +85.80387144362 82.58918845105 12.02841449852 +88.50429153833 75.12400624369 9.178192908443 +84.48876628209 84.50364974112 12.66249526191 +89.41742707428 86.59282506324 6.459802357741 +89.14239643036 75.46130015491 7.488269950964 +88.8400388208 93.12543610622 6.022451468792 +84.35601236007 79.54349955601 15.80498719226 +85.72661361084 91.66288450582 8.710852466457 +81.35632656989 86.57100524067 14.14937345639 +80.30996143596 86.3295074551 15.12856879422 +80.51503942099 87.4160358727 14.17386056988 +88.82555358781 79.70698776571 7.908609004999 +88.47215841331 78.74225769992 8.723597569818 +89.15110921007 79.03160706289 7.254502463971 +89.52260410248 84.66512629317 6.423342033217 +86.62964224798 80.05172781141 11.73751161387 +87.28315315953 79.35507964116 10.84288117454 +78.39582061768 90.47370910645 13.52938842773 +89.42167039058 88.09489616508 6.301769902343 +88.59964322506 86.00871702093 7.658460101584 +82.20010929418 89.13086851198 12.01494409867 +89.92675339147 80.15382280797 5.522754060304 +87.41138994867 77.77647847548 11.06513801808 +89.32906590509 76.65549889054 6.913354804829 +89.41991350218 90.72714883996 5.963601242846 +83.84750712961 85.91736606737 12.54230305646 +84.70610177702 77.98854431145 16.41686504562 +86.55716047843 75.25385523287 13.94340207575 +79.82708740234 90.28623199463 12.78842067719 +86.00337982178 93.08626556396 7.952734470367 +86.60580976688 91.80148730574 8.072677376784 +87.22050151166 92.6603694961 7.33227675047 +88.16716263207 75.91256782034 9.852927479006 +86.72900679298 85.25690869653 10.0289813322 +88.26398948523 77.33772345921 9.36442753796 +84.48457755837 80.3785157358 15.0009805203 +86.90911612862 90.76068403985 8.224517995328 +87.99764207043 89.9437017199 7.547420421772 +87.17673875088 89.73814630364 8.325225356834 +91.27346915349 80.9035465747 2.006769025922 +87.96093644471 79.91600342135 9.518832922801 +89.77981626992 94.04055669295 5.089906242403 +82.77049394816 85.64393889715 13.61366577784 +86.36565938384 89.5909865994 9.02122595877 +85.37867446359 89.55990884413 9.762504200646 +82.93187929823 89.91362149273 11.18538301618 +90.40184120368 77.36763120377 3.978408478545 +83.05097214393 83.5778676545 14.72926797176 +89.72248932475 78.42898288903 5.918966931824 +91.67516532539 83.73576836354 1.656707294069 +78.71974914613 89.79709073339 13.73515288393 +90.92734145902 89.78390610645 4.112839472319 +89.00168562649 84.3598607859 7.279939209434 +81.71748951367 83.44541399728 16.26328327578 +85.63151466028 80.6783179693 13.07487257959 +85.2061604245 80.70675069058 13.70207637819 +89.67707012829 76.04729367448 5.994030004774 +91.80352195174 93.28461363862 3.066921973103 +92.09239955624 78.00218956873 -1.739866962382 +86.92069711747 77.41143533536 12.17691558281 +88.95079812341 82.13893390599 7.523756483162 +91.95468325146 82.85228212281 0.526891242366 +90.81599675904 80.36183194305 3.237449743645 +90.54766845703 96.017578125 3.999451637268 +92.0055241551 85.22912795386 1.269253743002 +89.88338535679 86.02225332199 5.764867970561 +81.84564932064 88.23991492601 12.73434009247 +85.93024321957 74.5364087842 16.03535734115 +84.82059474593 82.96593066196 13.08379381789 +89.68150719318 82.24151111624 6.159472595437 +90.19728828303 82.48156059828 5.093752428947 +89.71125544255 81.47605972064 6.071317743465 +83.72882271397 81.77689831853 15.14467408305 +86.25218261707 74.5079949549 15.1626753312 +85.00988855546 78.03025378603 15.74992136855 +90.18405860601 81.13314612602 4.994330226107 +85.65257806689 85.78328208136 10.96127222822 +84.83030951908 86.3240240171 11.50096113237 +84.61082060889 85.59183835254 12.02018475677 +86.18189079471 86.17576795044 10.30566166154 +86.74048774938 74.51238814105 13.8384304986 +90.4003943129 76.54491258221 3.884703534253 +81.81327505325 86.83154980488 13.62882318444 +91.31694022014 87.95524252007 3.365571118591 +91.11867506879 86.49884415014 3.536760369568 +91.31518166869 85.6281458942 2.994287968664 +90.94835188199 85.05695431771 3.705049918602 +88.43889418727 76.69555098254 9.075219277086 +89.43228854681 85.86706706099 6.500004845721 +82.73513628171 90.71773976847 10.92107545621 +91.98887439509 87.6326927391 2.007190497912 +91.52793371682 94.46079285745 3.343908937295 +86.09082407967 90.54507374952 8.898060742125 +80.63731155247 88.65047179233 13.26168529876 +91.35347577036 83.01191364709 2.327252349276 +85.6788758969 76.12079563979 15.63082402037 +89.21793908226 78.32106678605 7.123794200307 +81.89286506116 90.88075220467 11.33043282293 +80.96296280172 90.02565655652 12.27699603282 +87.18562304132 83.17319429571 10.03197094628 +85.94523835859 79.61159497471 13.06151633859 +89.54586658536 87.39575929373 6.202245926172 +84.19560615902 86.93932821561 11.75398955827 +82.64923765358 87.17546494488 12.80072555853 +85.57182703976 79.40049630906 13.80412587682 +92.11813422526 80.3336940627 -1.0274672359 +91.58969915559 89.26351826489 3.053117287076 +82.90513702073 82.93644120087 15.35797196151 +83.51087357062 82.76432473619 14.76703486348 +90.13510669594 76.2169664233 4.66747957696 +90.64913923384 93.33554679517 4.353233685676 +84.13267337331 83.00396580987 13.88201394276 +84.87243712271 81.85866336116 13.57925886949 +89.28944999749 91.98966703195 5.879106347835 +87.81999722862 91.35373114943 7.320547757033 +91.93708444299 80.37746807551 -0.360749318184 +85.84211427154 85.13059367186 11.01535006381 +85.56820387932 84.18880644955 11.66829122503 +91.48388065108 92.79963299821 3.436939740116 +83.75276774305 86.54362591673 12.30003839505 +90.33403260788 89.84300780106 4.947890651582 +91.17155781479 95.62999233702 3.555330232582 +81.08768683738 86.17984327111 14.63971208729 +90.38594006628 83.29347411891 4.750388981447 +87.98665421745 78.28535011375 9.784775030141 +82.3679546364 89.67867529519 11.635015703 +83.74534240316 85.1538186026 13.04163202392 +91.63708732988 82.17328836847 1.27095837172 +85.97074285508 75.8696789085 15.06787457704 +88.78623129313 74.47325883927 8.562521367548 +84.53518886933 91.56446841495 9.484550907027 +84.32967128058 90.25555108377 10.18170123086 +84.85811913064 89.38922071855 10.19417118041 +92.05118344848 84.5308652651 0.9058592816885 +88.24781393992 81.01711913492 8.844436451774 +85.27588195651 87.09941342014 10.79102642662 +88.3946809784 83.91013776736 8.227404481239 +87.55246737728 75.47893998843 11.44680253484 +87.72693552863 85.56194386854 8.827585540933 +82.36266194973 87.7872771424 12.65064169419 +90.99625808495 81.84789400481 3.029675030284 +87.12534937579 76.26893668453 12.16272998574 +90.51427577132 90.99750450867 4.669163752209 +88.75231293904 87.09091301546 7.292276779629 +81.77196144489 88.83586075055 12.43768637401 +80.99975585938 91.66167449951 11.48725414276 +80.78927139352 89.16541907359 12.85188992007 +87.66350506837 78.08952304598 10.47636582897 +91.93329295926 77.26298047189 -1.365480028674 +83.43715667725 91.99025726318 9.931365013123 +83.88444128096 91.49158214368 9.898426233423 +3 110 256 305 +3 43 473 476 +3 316 137 336 +3 240 195 293 +3 238 228 412 +3 218 84 532 +3 15 383 434 +3 119 374 420 +3 227 16 302 +3 283 127 328 +3 106 302 459 +3 207 66 351 +3 344 110 416 +3 31 254 331 +3 199 197 486 +3 144 196 509 +3 65 474 499 +3 348 171 407 +3 119 314 315 +3 278 8 533 +3 301 151 378 +3 88 291 456 +3 324 140 356 +3 66 207 273 +3 11 214 458 +3 251 31 267 +3 75 255 539 +3 181 9 230 +3 83 165 250 +3 15 326 383 +3 161 132 445 +3 297 184 428 +3 34 427 433 +3 226 133 318 +3 256 110 344 +3 265 47 425 +3 405 246 479 +3 189 79 338 +3 276 78 521 +3 266 116 431 +3 74 261 362 +3 116 275 431 +3 190 162 229 +3 40 279 281 +3 208 40 388 +3 260 74 362 +3 150 307 313 +3 166 49 339 +3 112 189 253 +3 346 45 439 +3 99 242 346 +3 117 209 319 +3 128 36 171 +3 14 276 544 +3 466 130 468 +3 107 371 465 +3 49 371 514 +3 161 227 352 +3 352 227 390 +3 264 73 543 +3 81 173 308 +3 246 51 359 +3 239 71 432 +3 46 243 370 +3 273 151 537 +3 365 85 461 +3 276 14 413 +3 283 87 538 +3 93 248 424 +3 169 299 354 +3 100 250 415 +3 59 415 498 +3 208 102 247 +3 19 226 318 +3 254 118 331 +3 282 92 285 +3 34 404 427 +3 121 257 263 +3 257 441 529 +3 204 24 417 +3 65 218 532 +3 80 188 459 +3 207 151 273 +3 102 208 388 +3 79 278 281 +3 108 11 458 +3 73 265 425 +3 304 24 308 +3 218 22 327 +3 64 257 528 +3 241 71 269 +3 241 144 509 +3 37 166 286 +3 228 114 412 +3 264 51 330 +3 143 260 362 +3 131 284 515 +3 288 287 430 +3 126 278 533 +3 48 161 445 +3 408 153 410 +3 103 219 337 +3 275 78 409 +3 114 228 337 +3 278 126 281 +3 302 80 459 +3 80 273 537 +3 307 81 313 +3 81 204 313 +3 82 173 516 +3 82 223 303 +3 226 83 309 +3 226 309 481 +3 234 185 327 +3 195 84 293 +3 289 182 461 +3 85 365 482 +3 133 482 483 +3 207 351 366 +3 87 312 538 +3 464 300 470 +3 312 213 538 +3 213 88 456 +3 381 176 492 +3 248 89 317 +3 96 233 252 +3 32 271 517 +3 268 91 503 +3 31 251 254 +3 284 131 507 +3 248 27 424 +3 90 340 341 +3 194 90 233 +3 292 148 295 +3 294 186 373 +3 322 323 402 +3 146 21 184 +3 100 168 271 +3 109 212 385 +3 242 99 345 +3 258 107 372 +3 331 118 421 +3 118 168 421 +3 364 191 386 +3 221 102 411 +3 247 102 320 +3 288 367 496 +3 278 79 342 +3 224 347 380 +3 242 345 444 +3 105 242 375 +3 188 33 389 +3 227 106 390 +3 99 258 345 +3 167 371 399 +3 182 55 530 +3 70 185 234 +3 433 120 435 +3 35 240 293 +3 125 195 240 +3 25 392 408 +3 111 408 410 +3 166 76 286 +3 256 8 305 +3 72 238 412 +3 396 196 397 +3 328 419 544 +3 114 219 413 +3 314 119 401 +3 116 328 544 +3 328 127 419 +3 12 423 471 +3 255 118 539 +3 271 118 517 +3 115 314 398 +3 115 398 429 +3 184 61 428 +3 98 211 357 +3 234 121 440 +3 22 234 327 +3 236 122 426 +3 198 7 231 +3 122 236 325 +3 135 236 426 +3 124 242 444 +3 177 4 270 +3 76 287 288 +3 125 288 430 +3 220 126 449 +3 126 256 449 +3 419 14 544 +3 56 283 328 +3 129 348 407 +3 128 171 348 +3 104 10 224 +3 347 224 519 +3 220 40 281 +3 247 351 520 +3 251 131 335 +3 161 16 227 +3 132 161 352 +3 133 226 481 +3 482 225 483 +3 76 166 339 +3 474 134 475 +3 235 34 433 +3 135 187 427 +3 321 136 446 +3 378 151 491 +3 309 60 481 +3 173 82 304 +3 45 346 347 +3 23 241 509 +3 139 209 452 +3 376 54 403 +3 243 88 370 +3 27 213 312 +3 205 382 386 +3 18 142 205 +3 143 443 478 +3 205 142 478 +3 319 139 501 +3 209 71 241 +3 52 375 450 +3 345 44 444 +3 146 184 297 +3 135 297 428 +3 147 393 493 +3 153 48 410 +3 316 336 487 +3 30 149 336 +3 150 528 529 +3 528 257 529 +3 26 446 491 +3 68 301 378 +3 299 169 343 +3 77 210 279 +3 161 48 249 +3 423 154 471 +3 167 391 514 +3 134 391 475 +3 156 268 480 +3 60 309 480 +3 157 316 487 +3 336 149 487 +3 62 159 285 +3 159 282 285 +3 160 321 446 +3 26 365 446 +3 16 280 472 +3 161 249 418 +3 17 162 190 +3 6 163 401 +3 163 314 401 +3 164 384 540 +3 212 59 385 +3 67 221 411 +3 385 59 540 +3 113 166 395 +3 196 49 397 +3 107 258 399 +3 371 107 399 +3 168 118 271 +3 168 100 326 +3 299 87 354 +3 17 169 354 +3 170 490 543 +3 138 246 359 +3 51 171 330 +3 94 264 330 +3 274 232 495 +3 69 172 232 +3 173 304 308 +3 218 65 306 +3 174 124 353 +3 4 174 353 +3 264 94 265 +3 171 36 329 +3 89 324 356 +3 324 89 492 +3 71 239 270 +3 117 296 403 +3 248 93 300 +3 310 193 311 +3 91 334 503 +3 230 9 298 +3 233 90 252 +3 11 180 341 +3 454 181 515 +3 160 365 461 +3 5 182 289 +3 98 331 421 +3 61 357 511 +3 183 61 322 +3 61 184 322 +3 350 35 384 +3 35 185 245 +3 96 186 294 +3 148 58 295 +3 187 61 511 +3 357 211 511 +3 301 68 436 +3 33 188 194 +3 279 210 457 +3 210 25 338 +3 38 229 398 +3 38 190 229 +3 186 191 364 +3 186 58 191 +3 261 74 420 +3 41 260 506 +3 53 300 464 +3 57 193 310 +3 33 294 373 +3 33 194 233 +3 287 43 430 +3 216 84 476 +3 371 167 514 +3 113 396 397 +3 42 199 272 +3 64 197 199 +3 64 199 547 +3 202 42 272 +3 199 546 547 +3 198 231 546 +3 97 332 438 +3 184 21 323 +3 73 274 495 +3 73 264 265 +3 202 494 542 +3 20 232 274 +3 360 2 361 +3 417 172 522 +3 204 417 522 +3 352 50 377 +3 364 101 373 +3 280 130 472 +3 351 66 520 +3 208 247 520 +3 351 86 366 +3 130 466 467 +3 279 40 466 +3 209 139 319 +3 117 239 432 +3 210 77 392 +3 25 210 392 +3 326 15 358 +3 215 120 434 +3 100 212 326 +3 212 100 415 +3 88 368 370 +3 88 213 368 +3 180 502 512 +3 458 214 524 +3 212 109 383 +3 185 70 245 +3 84 216 532 +3 474 217 499 +3 217 474 475 +3 13 422 475 +3 441 22 529 +3 22 218 307 +3 219 114 337 +3 219 103 437 +3 126 220 281 +3 67 411 449 +3 400 462 485 +3 19 221 462 +3 222 400 485 +3 462 221 485 +3 223 82 422 +3 99 223 523 +3 346 105 347 +3 104 224 380 +3 365 160 446 +3 26 225 365 +3 165 83 387 +3 83 226 387 +3 106 227 302 +3 50 352 390 +3 113 228 238 +3 166 37 395 +3 162 56 229 +3 314 115 315 +3 255 75 333 +3 75 230 298 +3 123 231 325 +3 257 64 363 +3 202 272 494 +3 292 96 349 +3 96 292 295 +3 257 121 441 +3 70 234 440 +3 235 433 435 +3 70 235 435 +3 123 236 404 +3 236 123 325 +3 237 101 382 +3 50 237 382 +3 238 72 451 +3 23 396 451 +3 54 177 239 +3 239 177 270 +3 240 35 350 +3 125 240 535 +3 465 144 508 +3 144 241 269 +3 242 124 375 +3 242 105 346 +3 139 497 501 +3 72 243 497 +3 291 88 355 +3 88 243 355 +3 70 215 245 +3 215 109 245 +3 129 246 405 +3 171 51 407 +3 19 318 320 +3 366 86 483 +3 213 27 368 +3 27 248 317 +3 48 153 249 +3 153 77 249 +3 250 100 262 +3 83 250 262 +3 332 285 438 +3 92 251 267 +3 29 252 502 +3 189 103 253 +3 228 37 337 +3 254 251 335 +3 75 254 335 +3 333 91 448 +3 156 32 268 +3 305 125 535 +3 110 305 535 +3 123 263 363 +3 263 257 363 +3 258 99 523 +3 13 258 523 +3 41 192 260 +3 192 6 259 +3 259 74 453 +3 74 260 453 +3 147 261 420 +3 410 48 493 +3 32 156 262 +3 156 83 262 +3 263 34 489 +3 121 263 489 +3 490 264 543 +3 51 264 490 +3 2 203 361 +3 266 115 429 +3 56 266 429 +3 97 267 402 +3 323 97 402 +3 255 333 448 +3 118 255 517 +3 145 269 469 +3 44 269 505 +3 145 353 504 +3 269 71 469 +3 32 262 271 +3 262 100 271 +3 272 199 486 +3 272 486 494 +3 80 206 273 +3 206 66 273 +3 47 201 425 +3 201 20 274 +3 111 393 409 +3 374 39 393 +3 219 276 413 +3 219 78 276 +3 369 277 437 +3 25 277 369 +3 288 8 367 +3 8 278 367 +3 77 279 468 +3 279 466 468 +3 249 280 418 +3 249 77 280 +3 281 279 457 +3 79 281 457 +3 92 282 284 +3 92 284 507 +3 283 56 534 +3 87 283 534 +3 28 284 488 +3 267 97 438 +3 62 285 332 +3 112 253 286 +3 253 37 286 +3 391 155 514 +3 473 43 513 +3 367 112 496 +3 76 288 496 +3 85 157 289 +3 157 5 289 +3 60 157 290 +3 157 85 290 +3 244 291 355 +3 244 14 291 +3 29 95 349 +3 95 292 349 +3 84 185 293 +3 185 35 293 +3 33 233 294 +3 233 96 294 +3 58 186 295 +3 186 96 295 +3 46 319 501 +3 319 46 379 +3 122 63 426 +3 63 146 297 +3 9 179 298 +3 179 91 298 +3 152 299 343 +3 152 87 299 +3 93 310 311 +3 188 301 436 +3 188 80 301 +3 16 206 302 +3 206 80 302 +3 246 138 479 +3 304 82 500 +3 500 138 536 +3 138 359 463 +3 8 288 305 +3 288 125 305 +3 173 499 516 +3 173 81 306 +3 218 306 307 +3 306 81 307 +3 24 204 308 +3 204 81 308 +3 83 156 309 +3 309 156 480 +3 57 310 343 +3 169 57 343 +3 193 1 311 +3 1 178 311 +3 87 152 312 +3 152 27 312 +3 197 313 442 +3 197 150 313 +3 315 39 374 +3 119 315 374 +3 39 315 484 +3 275 39 431 +3 157 60 316 +3 268 137 480 +3 317 89 356 +3 141 317 356 +3 86 247 320 +3 318 86 320 +3 296 117 379 +3 117 319 379 +3 102 221 320 +3 221 19 320 +3 55 108 321 +3 136 458 524 +3 322 184 323 +3 183 322 402 +3 21 200 323 +3 200 97 323 +3 176 324 492 +3 176 12 324 +3 231 7 325 +3 7 122 325 +3 326 212 383 +3 168 326 358 +3 185 84 327 +3 84 218 327 +3 116 266 328 +3 266 56 328 +3 36 175 329 +3 175 360 361 +3 171 329 330 +3 329 94 330 +3 331 98 510 +3 31 331 510 +3 97 200 332 +3 200 62 332 +3 75 298 333 +3 298 91 333 +3 91 179 334 +3 179 30 334 +3 131 230 335 +3 230 75 335 +3 137 334 336 +3 334 30 336 +3 37 253 337 +3 253 103 337 +3 103 369 437 +3 369 103 531 +3 155 287 339 +3 287 76 339 +3 90 194 340 +3 68 340 436 +3 340 214 341 +3 214 11 341 +3 79 189 342 +3 189 112 342 +3 343 310 477 +3 152 343 477 +3 222 344 416 +3 222 67 344 +3 345 258 372 +3 44 345 372 +3 223 99 439 +3 99 346 439 +3 45 347 405 +3 45 405 479 +3 224 10 406 +3 10 128 406 +3 96 252 349 +3 252 29 349 +3 164 350 384 +3 110 350 416 +3 247 86 351 +3 225 366 483 +3 143 362 377 +3 362 132 377 +3 145 270 353 +3 270 4 353 +3 56 162 534 +3 162 17 354 +3 243 72 355 +3 72 244 355 +3 46 370 394 +3 370 141 394 +3 61 183 357 +3 183 98 357 +3 15 211 358 +3 211 98 358 +3 304 500 536 +3 24 304 536 +3 94 329 361 +3 329 175 361 +3 414 47 447 +3 47 265 447 +3 261 132 362 +3 132 352 377 +3 363 64 527 +3 123 363 527 +3 382 101 386 +3 186 364 373 +3 365 225 482 +3 85 289 461 +3 225 26 366 +3 26 207 366 +3 278 342 367 +3 342 112 367 +3 27 317 368 +3 317 141 368 +3 338 25 531 +3 25 369 531 +3 368 141 370 +3 141 356 394 +3 49 196 371 +3 371 196 465 +3 196 144 465 +3 44 372 508 +3 101 237 373 +3 33 373 389 +3 147 374 393 +3 374 147 420 +3 105 375 380 +3 347 105 380 +3 296 376 403 +3 296 154 376 +3 377 50 443 +3 143 377 443 +3 378 136 524 +3 68 378 524 +3 356 140 394 +3 140 296 379 +3 375 52 380 +3 52 104 380 +3 300 381 492 +3 300 53 381 +3 101 364 386 +3 50 382 443 +3 109 215 383 +3 383 215 434 +3 35 245 384 +3 245 109 384 +3 384 385 540 +3 384 109 385 +3 191 18 386 +3 18 205 386 +3 226 19 387 +3 400 165 462 +3 40 220 388 +3 220 102 388 +3 373 237 389 +3 237 106 389 +3 106 237 390 +3 237 50 390 +3 473 216 476 +3 155 391 513 +3 77 153 392 +3 392 153 408 +3 39 275 393 +3 393 275 409 +3 140 379 394 +3 379 46 394 +3 37 228 395 +3 228 113 395 +3 113 238 396 +3 396 238 451 +3 49 166 397 +3 166 113 397 +3 38 398 526 +3 258 13 399 +3 13 167 399 +3 222 59 400 +3 250 165 498 +3 119 259 401 +3 259 6 401 +3 267 31 402 +3 98 183 510 +3 54 239 403 +3 239 117 403 +3 34 263 404 +3 263 123 404 +3 405 347 519 +3 129 405 519 +3 128 348 406 +3 348 129 406 +3 51 246 407 +3 246 129 407 +3 111 277 408 +3 277 25 408 +3 78 277 409 +3 277 111 409 +3 393 111 493 +3 111 410 493 +3 102 220 411 +3 411 220 449 +3 114 244 412 +3 244 72 412 +3 14 244 413 +3 244 114 413 +3 361 203 447 +3 203 414 447 +3 415 250 498 +3 59 212 415 +3 350 164 416 +3 164 222 416 +3 359 170 463 +3 463 170 541 +3 280 16 418 +3 16 161 418 +3 127 291 419 +3 291 14 419 +3 74 259 420 +3 259 119 420 +3 168 358 421 +3 358 98 421 +3 499 217 516 +3 422 217 475 +3 140 324 471 +3 324 12 471 +3 27 152 424 +3 310 93 477 +3 201 274 425 +3 274 73 425 +3 63 297 426 +3 297 135 426 +3 404 236 427 +3 236 135 427 +3 61 187 428 +3 187 135 428 +3 398 229 429 +3 229 56 429 +3 84 195 476 +3 195 125 430 +3 431 39 484 +3 266 431 484 +3 71 209 432 +3 209 117 432 +3 427 187 433 +3 187 120 433 +3 120 211 434 +3 211 15 434 +3 120 215 435 +3 215 70 435 +3 340 194 436 +3 194 188 436 +3 277 78 437 +3 78 219 437 +3 285 92 438 +3 92 267 438 +3 45 303 439 +3 303 223 439 +3 34 235 489 +3 235 70 440 +3 121 234 441 +3 234 22 441 +3 313 204 442 +3 172 69 522 +3 382 205 443 +3 443 205 478 +3 124 444 504 +3 353 124 504 +3 132 261 445 +3 261 48 445 +3 136 378 491 +3 446 136 491 +3 265 94 447 +3 94 361 447 +3 91 268 448 +3 268 32 448 +3 256 344 449 +3 344 67 449 +3 375 124 450 +3 124 174 450 +3 451 139 452 +3 23 451 452 +3 209 241 452 +3 241 23 452 +3 260 192 453 +3 192 259 453 +3 284 28 515 +3 28 454 515 +3 148 292 545 +3 292 95 455 +3 291 127 456 +3 127 213 456 +3 210 338 457 +3 338 79 457 +3 136 321 458 +3 321 108 458 +3 188 389 459 +3 389 106 459 +3 158 282 518 +3 282 159 460 +3 461 182 530 +3 160 461 530 +3 165 387 462 +3 387 19 462 +3 417 24 541 +3 24 463 541 +3 311 178 470 +3 178 464 470 +3 372 107 508 +3 107 465 508 +3 40 208 466 +3 466 208 467 +3 66 206 467 +3 206 130 467 +3 130 280 468 +3 280 77 468 +3 71 270 469 +3 270 145 469 +3 300 93 470 +3 93 311 470 +3 154 296 471 +3 296 140 471 +3 130 206 472 +3 206 16 472 +3 391 134 513 +3 134 473 513 +3 216 473 474 +3 473 134 474 +3 391 167 475 +3 167 13 475 +3 195 430 476 +3 430 43 476 +3 93 424 477 +3 424 152 477 +3 143 478 506 +3 260 143 506 +3 138 303 479 +3 303 45 479 +3 137 316 480 +3 316 60 480 +3 60 290 481 +3 290 133 481 +3 133 290 482 +3 290 85 482 +3 86 318 483 +3 318 133 483 +3 315 115 484 +3 115 266 484 +3 221 67 485 +3 67 222 485 +3 197 442 486 +3 442 69 486 +3 149 5 487 +3 5 157 487 +3 284 282 488 +3 282 158 488 +3 235 440 489 +3 440 121 489 +3 170 359 490 +3 359 51 490 +3 151 207 491 +3 207 26 491 +3 492 89 525 +3 300 492 525 +3 48 261 493 +3 261 147 493 +3 486 69 494 +3 69 232 494 +3 232 172 495 +3 73 495 543 +3 112 286 496 +3 286 76 496 +3 139 451 497 +3 451 72 497 +3 165 400 498 +3 400 59 498 +3 173 306 499 +3 306 65 499 +3 82 303 500 +3 303 138 500 +3 497 243 501 +3 243 46 501 +3 90 341 512 +3 341 180 512 +3 334 137 503 +3 137 268 503 +3 145 504 505 +3 269 145 505 +3 504 444 505 +3 444 44 505 +3 478 142 506 +3 142 41 506 +3 131 251 507 +3 251 92 507 +3 144 269 508 +3 269 44 508 +3 196 396 509 +3 396 23 509 +3 183 402 510 +3 402 31 510 +3 211 120 511 +3 120 187 511 +3 502 252 512 +3 252 90 512 +3 43 287 513 +3 287 155 513 +3 155 339 514 +3 339 49 514 +3 181 230 515 +3 230 131 515 +3 217 422 516 +3 422 82 516 +3 255 448 517 +3 448 32 517 +3 282 460 518 +3 460 3 518 +3 224 406 519 +3 406 129 519 +3 66 467 520 +3 467 208 520 +3 78 275 521 +3 275 116 521 +3 69 442 522 +3 442 204 522 +3 223 422 523 +3 422 13 523 +3 214 340 524 +3 340 68 524 +3 89 248 525 +3 248 300 525 +3 398 314 526 +3 314 163 526 +3 546 231 547 +3 231 123 527 +3 150 197 528 +3 197 64 528 +3 22 307 529 +3 307 150 529 +3 55 321 530 +3 321 160 530 +3 103 189 531 +3 189 338 531 +3 216 474 532 +3 474 65 532 +3 8 256 533 +3 256 126 533 +3 162 354 534 +3 354 87 534 +3 240 350 535 +3 350 110 535 +3 138 463 536 +3 463 24 536 +3 151 301 537 +3 301 80 537 +3 213 127 538 +3 127 283 538 +3 118 254 539 +3 254 75 539 +3 59 222 540 +3 222 164 540 +3 495 172 543 +3 172 417 541 +3 494 232 542 +3 232 20 542 +3 172 541 543 +3 541 170 543 +3 276 521 544 +3 521 116 544 +3 292 455 545 +3 455 0 545 +3 199 42 546 +3 42 198 546 +3 231 527 547 +3 527 64 547 + diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Common.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Common.h index 01763dbbd60..0745ab75802 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Common.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Common.h @@ -80,6 +80,17 @@ bool handle_exists ( Iterator begin, Iterator end, Handle h ) return false ; } +template +struct No_constrained_edge_map{ + typedef typename boost::graph_traits::edge_descriptor key_type; + typedef bool value_type; + typedef value_type reference; + typedef boost::readable_property_map_tag category; + friend bool get(No_constrained_edge_map, key_type) { + return false; + } +}; + } // namespace Surface_mesh_simplification template diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse.h index b38d79ea315..b3355e6e27d 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse.h @@ -35,6 +35,7 @@ templateid() % xyz_to_string(p) ) ; + return boost::str( boost::format("[V%1%:%2%]") % get(Vertex_index_map,v) % xyz_to_string(p) ) ; } std::string edge_to_string ( const_edge_descriptor const& aEdge ) const { const_vertex_descriptor p,q ; boost::tie(p,q) = get_vertices(aEdge); - return boost::str( boost::format("{E%1% %2%->%3%}%4%") % aEdge->id() % vertex_to_string(p) % vertex_to_string(q) % ( is_border(aEdge) ? " (BORDER)" : ( is_border(aEdge->opposite()) ? " (~BORDER)": "" ) ) ) ; + return boost::str( boost::format("{E%1% %2%->%3%}%4%") % get(Edge_index_map,aEdge) % vertex_to_string(p) % vertex_to_string(q) % ( is_border(aEdge) ? " (BORDER)" : ( is_border(aEdge->opposite()) ? " (~BORDER)": "" ) ) ) ; } Cost_type get_cost ( Profile const& aProfile ) const @@ -321,18 +332,55 @@ private: } return rEdge ; } - + + /// Functions to ensure the backward compatibility before addition of the constrained edge map + template + vertex_descriptor + halfedge_collapse_bk_compatibility( + edge_descriptor const& pq, AEdgeIsConstrainedMap aEdge_is_constrained_map) + { + return halfedge_collapse(pq, mSurface, aEdge_is_constrained_map); + } + + template + vertex_descriptor + halfedge_collapse_bk_compatibility( + edge_descriptor const& pq, No_constrained_edge_map ) + { + return halfedge_collapse(pq, mSurface); + } + /// + + /// We wrap this test to avoid penalizing runtime when no constraints are present + template + bool + is_edge_adjacent_to_a_constrained_edge( + Profile const& aProfile, AEdgeIsConstrainedMap) + { + return is_constrained(aProfile.v0()) && is_constrained(aProfile.v1()); + } + + template + bool + is_edge_adjacent_to_a_constrained_edge( + edge_descriptor const&, No_constrained_edge_map ) + { + return false; + } + /// + private: ECM& mSurface ; - ShouldStop const& Should_stop ; - VertexIndexMap const& Vertex_index_map ; - EdgeIndexMap const& Edge_index_map ; - EdgeIsBorderMap const& Edge_is_border_map ; - GetCost const& Get_cost ; - GetPlacement const& Get_placement ; - VisitorT Visitor ; + ShouldStop const& Should_stop ; + VertexIndexMap const& Vertex_index_map ; + EdgeIndexMap const& Edge_index_map ; + EdgeIsBorderMap const& Edge_is_border_map; + EdgeIsConstrainedMap const& Edge_is_constrained_map; + GetCost const& Get_cost ; + GetPlacement const& Get_placement ; + VisitorT Visitor ; private: diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h index d60b4b429fd..0a8344024f0 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h @@ -24,15 +24,16 @@ namespace CGAL { namespace Surface_mesh_simplification { -template -EdgeCollapse::EdgeCollapse( ECM& aSurface - , ShouldStop const& aShould_stop - , VertexIndexMap const& aVertex_index_map - , EdgeIndexMap const& aEdge_index_map - , EdgeIsBorderMap const& aEdge_is_border_map - , GetCost const& aGet_cost - , GetPlacement const& aGet_placement - , VisitorT aVisitor +template +EdgeCollapse::EdgeCollapse( ECM& aSurface + , ShouldStop const& aShould_stop + , VertexIndexMap const& aVertex_index_map + , EdgeIndexMap const& aEdge_index_map + , EdgeIsBorderMap const& aEdge_is_border_map + , EdgeIsConstrainedMap const& aEdge_is_constrained_map + , GetCost const& aGet_cost + , GetPlacement const& aGet_placement + , VisitorT aVisitor ) : mSurface (aSurface) @@ -40,6 +41,7 @@ EdgeCollapse::EdgeCollapse( ECM& aS ,Vertex_index_map (aVertex_index_map) ,Edge_index_map (aEdge_index_map) ,Edge_is_border_map (aEdge_is_border_map) + ,Edge_is_constrained_map (aEdge_is_constrained_map) ,Get_cost (aGet_cost) ,Get_placement (aGet_placement) ,Visitor (aVisitor) @@ -63,8 +65,8 @@ EdgeCollapse::EdgeCollapse( ECM& aS #endif } -template -int EdgeCollapse::run() +template +int EdgeCollapse::run() { CGAL_SURF_SIMPL_TEST_assertion( mSurface.is_valid() && mSurface.is_pure_triangle() ) ; @@ -85,8 +87,8 @@ int EdgeCollapse::run() return r ; } -template -void EdgeCollapse::Collect() +template +void EdgeCollapse::Collect() { CGAL_ECMS_TRACE(0,"Collecting edges..."); @@ -114,10 +116,12 @@ void EdgeCollapse::Collect() std::set zero_length_edges; undirected_edge_iterator eb, ee ; - for ( boost::tie(eb,ee) = undirected_edges(mSurface); eb!=ee; ++eb ) + for ( boost::tie(eb,ee) = undirected_edges(mSurface); eb!=ee; ++eb, id+=2 ) { edge_descriptor lEdge = *eb ; - + + if ( is_constrained(lEdge) ) continue;//no not insert constrainted edges + CGAL_assertion( get_directed_edge_id(lEdge) == id ) ; CGAL_assertion( get_directed_edge_id(opposite_edge(lEdge,mSurface)) == id+1 ) ; @@ -141,8 +145,6 @@ void EdgeCollapse::Collect() CGAL_ECMS_TRACE(2,edge_to_string(lEdge)); - - id += 2 ; } CGAL_SURF_SIMPL_TEST_assertion ( lInserted + lNotInserted == mInitialEdgeCount ) ; @@ -156,20 +158,48 @@ void EdgeCollapse::Collect() // edges of length 0 removed no longer need to be treated if ( lProfile.left_face_exists() ) - zero_length_edges.erase( primary_edge(lProfile.vL_v0()) ); - if ( lProfile.right_face_exists() ) - zero_length_edges.erase( primary_edge(lProfile.vR_v1()) ); + { + edge_descriptor lEdge_to_remove = is_constrained(lProfile.vL_v0()) ? + primary_edge(lProfile.v1_vL()) : + primary_edge(lProfile.vL_v0()) ; + zero_length_edges.erase( lEdge_to_remove ); + Edge_data& lData = get_data(lEdge_to_remove) ; + if ( lData.is_in_PQ() ){ + CGAL_ECMS_TRACE(2,"Removing E" << get(Edge_index_map,lEdge_to_remove) << " from PQ" ); + remove_from_PQ(lEdge_to_remove,lData); + } + --mCurrentEdgeCount; + } + + if ( lProfile.right_face_exists() ) + { + edge_descriptor lEdge_to_remove = is_constrained(lProfile.vR_v1()) ? + primary_edge(lProfile.v0_vR()) : + primary_edge(lProfile.vR_v1()) ; + zero_length_edges.erase( lEdge_to_remove ); + Edge_data& lData = get_data(lEdge_to_remove) ; + if ( lData.is_in_PQ() ){ + CGAL_ECMS_TRACE(2,"Removing E" << get(Edge_index_map,lEdge_to_remove) << " from PQ" ); + remove_from_PQ(lEdge_to_remove,lData); + } + --mCurrentEdgeCount; + } + + --mCurrentEdgeCount; //the placement is trivial, it's always the point itself Placement_type lPlacement = lProfile.p0(); - Collapse(lProfile ,lPlacement); + vertex_descriptor rResult + = halfedge_collapse_bk_compatibility(lProfile.v0_v1(), Edge_is_constrained_map); + put(vertex_point,mSurface,rResult,*lPlacement); + Visitor.OnCollapsed(lProfile,rResult); } - + CGAL_ECMS_TRACE(0,"Initial edge count: " << mInitialEdgeCount ) ; } -template -void EdgeCollapse::Loop() +template +void EdgeCollapse::Loop() { CGAL_ECMS_TRACE(0,"Collapsing edges...") ; @@ -180,18 +210,23 @@ void EdgeCollapse::Loop() // Pops and processes each edge from the PQ // optional lEdge ; + #ifdef CGAL_SURF_SIMPL_INTERMEDIATE_STEPS_PRINTING + int i_rm=0; + #endif while ( (lEdge = pop_from_PQ()) ) { CGAL_SURF_SIMPL_TEST_assertion ( lLoop_watchdog ++ < mInitialEdgeCount ) ; CGAL_ECMS_TRACE(1,"Poped " << edge_to_string(*lEdge) ) ; + + CGAL_assertion( !is_constrained(*lEdge) ); Profile const& lProfile = create_profile(*lEdge); - + Cost_type lCost = get_data(*lEdge).cost(); Visitor.OnSelected(lProfile,lCost,mInitialEdgeCount,mCurrentEdgeCount); - + if ( lCost ) { if ( Should_stop(*lCost,lProfile,mInitialEdgeCount,mCurrentEdgeCount) ) @@ -212,7 +247,22 @@ void EdgeCollapse::Loop() Placement_type lPlacement = get_placement(lProfile); if ( Is_collapse_geometrically_valid(lProfile,lPlacement) ) + { + #ifdef CGAL_SURF_SIMPL_INTERMEDIATE_STEPS_PRINTING + std::cout << "step " << i_rm << " " << source(*lEdge,mSurface)->point() << " " << target(*lEdge,mSurface)->point() << "\n"; + #endif Collapse(lProfile,lPlacement); + #ifdef CGAL_SURF_SIMPL_INTERMEDIATE_STEPS_PRINTING + std::stringstream sstr; + sstr << "debug/P-"; + if (i_rm<10) sstr << "0"; + if (i_rm<100) sstr << "0"; + sstr << i_rm << ".off"; + std::ofstream out(sstr.str().c_str()); + out << mSurface; + ++i_rm; + #endif + } } else { @@ -230,8 +280,8 @@ void EdgeCollapse::Loop() } } -template -bool EdgeCollapse::is_border( const_vertex_descriptor const& aV ) const +template +bool EdgeCollapse::is_border( const_vertex_descriptor const& aV ) const { bool rR = false ; @@ -249,22 +299,44 @@ bool EdgeCollapse::is_border( const_vertex_descriptor return rR ; } +template +bool EdgeCollapse::is_border_or_constrained( const_vertex_descriptor const& aV ) const +{ + const_in_edge_iterator eb, ee ; + for ( boost::tie(eb,ee) = in_edges(aV,mSurface) ; eb != ee ; ++ eb ) + { + const_edge_descriptor lEdge = *eb ; + if ( is_undirected_edge_a_border(lEdge) || is_constrained(lEdge) ) + return true; + } + return false; +} + +template +bool EdgeCollapse::is_constrained( const_vertex_descriptor const& aV ) const +{ + const_in_edge_iterator eb, ee ; + for ( boost::tie(eb,ee) = in_edges(aV,mSurface) ; eb != ee ; ++ eb ) + if ( is_constrained(*eb) ) return true; + return false; +} + // Some edges are NOT collapsable: doing so would break the topological consistency of the mesh. // This function returns true if a edge 'p->q' can be collapsed. // // An edge p->q can be collapsed iff it satisfies the "link condition" // (as described in the "Mesh Optimization" article of Hoppe et al (1993)) // -// The link conidition is as follows: for every vertex 'k' adjacent to both 'p and 'q', +// The link condition is as follows: for every vertex 'k' adjacent to both 'p and 'q', // "p,k,q" is a facet of the mesh. // -template -bool EdgeCollapse::Is_collapse_topologically_valid( Profile const& aProfile ) +template +bool EdgeCollapse::Is_collapse_topologically_valid( Profile const& aProfile ) { bool rR = true ; - CGAL_ECMS_TRACE(3,"Testing topological collapsabilty of p_q=V" << aProfile.v0()->id() << "(%" << aProfile.v0()->vertex_degree() << ")" - << "->V" << aProfile.v1()->id() << "(%" << aProfile.v1()->vertex_degree() << ")" + CGAL_ECMS_TRACE(3,"Testing topological collapsabilty of p_q=V" << get(Vertex_index_map,aProfile.v0()) << "(%" << aProfile.v0()->vertex_degree() << ")" + << "->V" << get(Vertex_index_map,aProfile.v1()) << "(%" << aProfile.v1()->vertex_degree() << ")" ); CGAL_ECMS_TRACE(4, "is p_q border:" << aProfile.is_v0_v1_a_border() ); @@ -274,13 +346,13 @@ bool EdgeCollapse::Is_collapse_topologically_valid( Pr out_edge_iterator eb2, ee2 ; CGAL_ECMS_TRACE(4," t=V" - << ( aProfile.left_face_exists() ? aProfile.vL()->id() : -1 ) + << ( aProfile.left_face_exists() ? get(Vertex_index_map,aProfile.vL()) : -1 ) << "(%" << ( aProfile.left_face_exists() ? aProfile.vL()->vertex_degree() : 0 ) << ")" ); CGAL_ECMS_TRACE(4," b=V" - << ( aProfile.right_face_exists() ? aProfile.vR()->id() : -1 ) + << ( aProfile.right_face_exists() ? get(Vertex_index_map,aProfile.vR()) : -1 ) << "(%" << ( aProfile.right_face_exists() ? aProfile.vR()->vertex_degree() :0 ) << ")" @@ -343,13 +415,13 @@ bool EdgeCollapse::Is_collapse_topologically_valid( Pr if ( !lIsFace ) { - CGAL_ECMS_TRACE(3," k=V" << k->id() << " IS NOT in a face with p-q. NON-COLLAPSABLE edge." ) ; + CGAL_ECMS_TRACE(3," k=V" << get(Vertex_index_map,k) << " IS NOT in a face with p-q. NON-COLLAPSABLE edge." ) ; rR = false ; break ; } else { - CGAL_ECMS_TRACE(4," k=V" << k->id() << " is in a face with p-q") ; + CGAL_ECMS_TRACE(4," k=V" << get(Vertex_index_map,k) << " is in a face with p-q") ; } } } @@ -358,6 +430,10 @@ bool EdgeCollapse::Is_collapse_topologically_valid( Pr if ( rR ) { + /// ensure two constrained edges cannot get merged + if ( is_edge_adjacent_to_a_constrained_edge( + aProfile, Edge_is_constrained_map) ) return false ; + if ( aProfile.is_v0_v1_a_border() ) { if ( Is_open_triangle(aProfile.v0_v1()) ) @@ -399,8 +475,8 @@ bool EdgeCollapse::Is_collapse_topologically_valid( Pr return rR ; } -template -bool EdgeCollapse::Is_tetrahedron( edge_descriptor const& h1 ) +template +bool EdgeCollapse::Is_tetrahedron( edge_descriptor const& h1 ) { // // Code copied from Polyhedron_3::is_tetrahedron() @@ -451,8 +527,8 @@ bool EdgeCollapse::Is_tetrahedron( edge_descriptor con return true; } -template -bool EdgeCollapse::Is_open_triangle( edge_descriptor const& h1 ) +template +bool EdgeCollapse::Is_open_triangle( edge_descriptor const& h1 ) { bool rR = false ; @@ -463,7 +539,7 @@ bool EdgeCollapse::Is_open_triangle( edge_descriptor c if ( next_edge(h3,mSurface) == h1 ) { // Now check if it is open - CGAL_ECMS_TRACE(4," p-q is a border edge... checking E" << h2->id() << " and E" << h3->id() ) ; + CGAL_ECMS_TRACE(4," p-q is a border edge... checking E" << get(Edge_index_map,h2) << " and E" << get(Edge_index_map,h3) ) ; rR = is_border(h2) && is_border(h3); @@ -482,8 +558,8 @@ bool EdgeCollapse::Is_open_triangle( edge_descriptor c // respective areas is no greater than a max value and the internal // dihedral angle formed by their supporting planes is no greater than // a given threshold -template -bool EdgeCollapse::are_shared_triangles_valid( Point const& p0, Point const& p1, Point const& p2, Point const& p3 ) const +template +bool EdgeCollapse::are_shared_triangles_valid( Point const& p0, Point const& p1, Point const& p2, Point const& p3 ) const { bool rR = false ; @@ -533,9 +609,9 @@ bool EdgeCollapse::are_shared_triangles_valid( Point c } // Returns the directed halfedge connecting v0 to v1, if exists. -template -typename EdgeCollapse::edge_descriptor -EdgeCollapse::find_connection ( const_vertex_descriptor const& v0, const_vertex_descriptor const& v1 ) const +template +typename EdgeCollapse::edge_descriptor +EdgeCollapse::find_connection ( const_vertex_descriptor const& v0, const_vertex_descriptor const& v1 ) const { out_edge_iterator eb, ee ; for ( boost::tie(eb,ee) = out_edges(v0,mSurface) ; eb != ee ; ++ eb ) @@ -549,10 +625,10 @@ EdgeCollapse::find_connection ( const_vertex_descripto } // Given the edge 'e' around the link for the collapsinge edge "v0-v1", finds the vertex that makes a triangle adjacent to 'e' but exterior to the link (i.e not containing v0 nor v1) -// If 'e' is a mnull handle OR 'e' is a border edge, there is no such triangle and a null handle is returned. -template -typename EdgeCollapse::vertex_descriptor -EdgeCollapse::find_exterior_link_triangle_3rd_vertex ( const_edge_descriptor const& e, const_vertex_descriptor const& v0, const_vertex_descriptor const& v1 ) const +// If 'e' is a null handle OR 'e' is a border edge, there is no such triangle and a null handle is returned. +template +typename EdgeCollapse::vertex_descriptor +EdgeCollapse::find_exterior_link_triangle_3rd_vertex ( const_edge_descriptor const& e, const_vertex_descriptor const& v0, const_vertex_descriptor const& v1 ) const { vertex_descriptor r ; @@ -581,15 +657,15 @@ EdgeCollapse::find_exterior_link_triangle_3rd_vertex ( } -// A collase is geometrically valid if, in the resulting local mesh no two adjacent triangles form an internal dihedral angle +// A collapse is geometrically valid if, in the resulting local mesh no two adjacent triangles form an internal dihedral angle // greater than a fixed threshold (i.e. triangles do not "fold" into each other) // -template -bool EdgeCollapse::Is_collapse_geometrically_valid( Profile const& aProfile, Placement_type k0) +template +bool EdgeCollapse::Is_collapse_geometrically_valid( Profile const& aProfile, Placement_type k0) { bool rR = true ; - CGAL_ECMS_TRACE(3,"Testing geometrical collapsabilty of v0-v1=E" << aProfile.v0_v1()->id() ); + CGAL_ECMS_TRACE(3,"Testing geometrical collapsabilty of v0-v1=E" << get(Edge_index_map,aProfile.v0_v1()) ); if ( k0 ) { // @@ -610,7 +686,7 @@ bool EdgeCollapse::Is_collapse_geometrically_valid( Pr vertex_descriptor k2 = * l ; vertex_descriptor k3 = *nx ; - CGAL_ECMS_TRACE(4," Screening link vertices k1=V" << k1->id() << " k2=V" << k2->id() << " k3=V" << k3->id() ) ; + CGAL_ECMS_TRACE(4," Screening link vertices k1=V" << get(Vertex_index_map,k1) << " k2=V" << get(Vertex_index_map,k2) << " k3=V" << get(Vertex_index_map,k3) ) ; edge_descriptor e12 = find_connection(k1,k2); edge_descriptor e23 = k3 != k1 ? find_connection(k2,k3) : edge_descriptor() ; @@ -622,7 +698,7 @@ bool EdgeCollapse::Is_collapse_geometrically_valid( Pr if ( !are_shared_triangles_valid( *k0, get_point(k1), get_point(k2), get_point(k3) ) ) { - CGAL_ECMS_TRACE(3," Triangles VX-V" << k1->id() << "-V" << k2->id() << " and VX-V" << k3->id() << " are not geometrically valid. Collapse rejected"); + CGAL_ECMS_TRACE(3," Triangles VX-V" << get(Vertex_index_map,k1) << "-V" << get(Vertex_index_map,k2) << " and VX-V" << get(Vertex_index_map,k3) << " are not geometrically valid. Collapse rejected"); rR = false ; } } @@ -635,11 +711,11 @@ bool EdgeCollapse::Is_collapse_geometrically_valid( Pr // There is indeed a triangle shared along e12 if ( handle_assigned(k4) ) { - CGAL_ECMS_TRACE(4," Found exterior link triangle shared along E" << e12->id() << " with third vertex: V" << k4->id() ) ; + CGAL_ECMS_TRACE(4," Found exterior link triangle shared along E" << get(Edge_index_map,e12) << " with third vertex: V" << get(Vertex_index_map,k4) ) ; if ( !are_shared_triangles_valid( get_point(k1), get_point(k4), get_point(k2), *k0 ) ) { - CGAL_ECMS_TRACE(3," Triangles V" << k1->id() << "-V" << k4->id() << " and V" << k2->id() << "-VX are not geometrically valid. Collapse rejected"); + CGAL_ECMS_TRACE(3," Triangles V" << get(Vertex_index_map,k1) << "-V" << get(Vertex_index_map,k4) << " and V" << get(Vertex_index_map,k2) << "-VX are not geometrically valid. Collapse rejected"); rR = false ; } } @@ -653,11 +729,11 @@ bool EdgeCollapse::Is_collapse_geometrically_valid( Pr // There is indeed a triangle shared along e12 if ( handle_assigned(k5) ) { - CGAL_ECMS_TRACE(4," Found exterior link triangle shared along E" << e23->id() << " with third vertex: V" << k5->id() ) ; + CGAL_ECMS_TRACE(4," Found exterior link triangle shared along E" << get(Edge_index_map,e23) << " with third vertex: V" << get(Vertex_index_map,k5) ) ; if ( !are_shared_triangles_valid( get_point(k2), get_point(k5), get_point(k3), *k0 ) ) { - CGAL_ECMS_TRACE(3," Triangles V" << k2->id() << "-V" << k5->id() << " and V" << k3->id() << "-VX are not geometrically valid. Collapse rejected"); + CGAL_ECMS_TRACE(3," Triangles V" << get(Vertex_index_map,k2) << "-V" << get(Vertex_index_map,k5) << " and V" << get(Vertex_index_map,k3) << "-VX are not geometrically valid. Collapse rejected"); rR = false ; } } @@ -669,8 +745,8 @@ bool EdgeCollapse::Is_collapse_geometrically_valid( Pr return rR ; } -template -void EdgeCollapse::Collapse( Profile const& aProfile, Placement_type aPlacement ) +template +void EdgeCollapse::Collapse( Profile const& aProfile, Placement_type aPlacement ) { CGAL_ECMS_TRACE(1,"S" << mStep << ". Collapsig " << edge_to_string(aProfile.v0_v1()) ) ; @@ -691,15 +767,17 @@ void EdgeCollapse::Collapse( Profile const& aProfile, if ( aProfile.left_face_exists() ) { edge_descriptor lV0VL = primary_edge(aProfile.vL_v0()); + if ( is_constrained(lV0VL) ) //make sure a constrained edge will not disappear + lV0VL=primary_edge(aProfile.v1_vL()); - CGAL_ECMS_TRACE(3,"V0VL E" << lV0VL->id() - << "(V" << lV0VL->vertex()->id() << "->V" << lV0VL->opposite()->vertex()->id() << ")" + CGAL_ECMS_TRACE(3,"V0VL E" << get(Edge_index_map,lV0VL) + << "(V" << get(Vertex_index_map,lV0VL->vertex()) << "->V" << get(Vertex_index_map,lV0VL->opposite()->vertex()) << ")" ) ; Edge_data& lData = get_data(lV0VL) ; if ( lData.is_in_PQ() ) { - CGAL_ECMS_TRACE(2,"Removing E" << lV0VL->id() << " from PQ" ) ; + CGAL_ECMS_TRACE(2,"Removing E" << get(Edge_index_map,lV0VL) << " from PQ" ) ; remove_from_PQ(lV0VL,lData) ; } @@ -710,22 +788,24 @@ void EdgeCollapse::Collapse( Profile const& aProfile, if ( aProfile.right_face_exists() ) { edge_descriptor lVRV1 = primary_edge(aProfile.vR_v1()); - - CGAL_ECMS_TRACE(3,"V1VRE" << lVRV1->id() - << "(V" << lVRV1->vertex()->id() << "->V" << lVRV1->opposite()->vertex()->id() << ")" + if ( is_constrained(lVRV1) ) //make sure a constrained edge will not disappear + lVRV1=primary_edge(aProfile.v0_vR()); + + CGAL_ECMS_TRACE(3,"V1VRE" << get(Edge_index_map,lVRV1) + << "(V" << get(Vertex_index_map,lVRV1->vertex()) << "->V" << get(Vertex_index_map,lVRV1->opposite()->vertex()) << ")" ) ; Edge_data& lData = get_data(lVRV1) ; if ( lData.is_in_PQ() ) { - CGAL_ECMS_TRACE(2,"Removing E" << lVRV1->id() << " from PQ") ; + CGAL_ECMS_TRACE(2,"Removing E" << get(Edge_index_map,lVRV1) << " from PQ") ; remove_from_PQ(lVRV1,lData) ; } -- mCurrentEdgeCount ; CGAL_SURF_SIMPL_TEST_assertion_code( -- lResultingEdgeCount ) ; } - CGAL_ECMS_TRACE(1,"Removing:\n v0v1: E" << aProfile.v0_v1()->id() << "(V" << aProfile.v0()->id() << "->V" << aProfile.v1()->id() << ")" ); + CGAL_ECMS_TRACE(1,"Removing:\n v0v1: E" << get(Edge_index_map,aProfile.v0_v1()) << "(V" << get(Vertex_index_map,aProfile.v0()) << "->V" << get(Vertex_index_map,aProfile.v1()) << ")" ); // Perform the actuall collapse. @@ -734,7 +814,7 @@ void EdgeCollapse::Collapse( Profile const& aProfile, // (PT and QB are removed if they are not null). // All other edges must be kept. // All directed edges incident to vertex removed are relink to the vertex kept. - rResult = halfedge_collapse(aProfile.v0_v1(),mSurface); + rResult = halfedge_collapse_bk_compatibility(aProfile.v0_v1(), Edge_is_constrained_map); CGAL_SURF_SIMPL_TEST_assertion_code( -- lResultingEdgeCount ) ; @@ -746,7 +826,7 @@ void EdgeCollapse::Collapse( Profile const& aProfile, CGAL_SURF_SIMPL_TEST_assertion( mSurface.is_valid() && mSurface.is_pure_triangle() ) ; - CGAL_ECMS_TRACE(1,"V" << rResult->id() << " kept." ) ; + CGAL_ECMS_TRACE(1,"V" << get(Vertex_index_map,rResult) << " kept." ) ; #ifdef CGAL_SURFACE_SIMPLIFICATION_ENABLE_TRACE out_edge_iterator eb1, ee1 ; @@ -767,8 +847,8 @@ void EdgeCollapse::Collapse( Profile const& aProfile, CGAL_ECMS_DEBUG_CODE ( ++mStep ; ) } -template -void EdgeCollapse::Update_neighbors( vertex_descriptor const& aKeptV ) +template +void EdgeCollapse::Update_neighbors( vertex_descriptor const& aKeptV ) { CGAL_ECMS_TRACE(3,"Updating cost of neighboring edges..." ) ; @@ -779,6 +859,7 @@ void EdgeCollapse::Update_neighbors( vertex_descriptor typedef std::set edges ; edges lToUpdate(Compare_id(this)) ; + edges lToInsert(Compare_id(this)) ; // (A.1) Loop around all vertices adjacent to the vertex kept in_edge_iterator eb1, ee1 ; @@ -795,12 +876,14 @@ void EdgeCollapse::Update_neighbors( vertex_descriptor edge_descriptor lEdge2 = primary_edge(*eb2) ; Edge_data& lData2 = get_data(lEdge2); - CGAL_ECMS_TRACE(4,"Inedge around V" << lAdj_k->id() << edge_to_string(lEdge2) ) ; + CGAL_ECMS_TRACE(4,"Inedge around V" << get(Vertex_index_map,lAdj_k) << edge_to_string(lEdge2) ) ; - // Only those edges still in the PQ _and_ not already collected are updated. - if ( lData2.is_in_PQ() && lToUpdate.find(lEdge2) == lToUpdate.end() ) + // Only edges still in the PQ needs to be updated, the other needs to be re-inserted + if ( lData2.is_in_PQ() ) lToUpdate.insert(lEdge2) ; - } + else + lToInsert.insert(lEdge2) ; + } } // @@ -821,7 +904,28 @@ void EdgeCollapse::Update_neighbors( vertex_descriptor update_in_PQ(lEdge,lData); } - + + // + // (C) Insert ignored edges + // + // I think that this should be done for edges eliminated because of the geometric criteria + // and not the topological one.However maintaining such a set might be more expensive + // and hard to be safe ... + for ( typename edges::iterator it = lToInsert.begin(), + eit = lToInsert.end() ; it != eit ; ++ it ) + { + edge_descriptor lEdge = *it; + if ( is_constrained(lEdge) ) continue; //do not insert constrained edges + Edge_data& lData = get_data(lEdge); + + Profile const& lProfile = create_profile(lEdge); + + lData.cost() = get_cost(lProfile) ; + + CGAL_ECMS_TRACE(3, edge_to_string(lEdge) << " re-inserted in the PQ") ; + + insert_in_PQ(lEdge,lData); + } } diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h new file mode 100644 index 00000000000..c63497f7980 --- /dev/null +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h @@ -0,0 +1,80 @@ +// Copyright (c) 2014 GeometryFactory (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 +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// 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$ +// $Id$ +// +// Author(s) : Sebastien Loriot +// +#ifndef CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_CONSTRAINED_PLACEMENT_H +#define CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_CONSTRAINED_PLACEMENT_H + +#include +#include + +namespace CGAL { + +namespace Surface_mesh_simplification +{ + +template +class Constrained_placement : public BasePlacement +{ +public: + + typedef typename BasePlacement::Profile Profile; + typedef typename BasePlacement::Point Point; + typedef optional result_type ; + EdgeIsConstrainedMap Edge_is_constrained_map; + +public: + Constrained_placement( + EdgeIsConstrainedMap map=EdgeIsConstrainedMap(), + BasePlacement base=BasePlacement() ) + : BasePlacement(base) + , Edge_is_constrained_map(map) + {} + + result_type operator()( Profile const& aProfile ) const + { + typedef typename Profile::ECM ECM; + typedef typename boost::graph_traits GraphTraits; + typedef typename GraphTraits::in_edge_iterator in_edge_iterator; + + in_edge_iterator eb, ee ; + for ( boost::tie(eb,ee) = in_edges(aProfile.v0(),aProfile.surface_mesh()); + eb != ee ; ++ eb ) + { + if( get(Edge_is_constrained_map, *eb) ) + return get(vertex_point, + aProfile.surface_mesh(), + aProfile.v0()); + } + for ( boost::tie(eb,ee) = in_edges(aProfile.v1(),aProfile.surface_mesh()); + eb != ee ; ++ eb ) + { + if( get(Edge_is_constrained_map, *eb) ) + return get(vertex_point, + aProfile.surface_mesh(), + aProfile.v1()); + } + + return static_cast(this)->operator()(aProfile); + } +}; + +} // namespace Surface_mesh_simplification + +} //namespace CGAL + +#endif // CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_CONSTRAINED_PLACEMENT_H diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h index 6e4af5b0994..6d7d78608ec 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h @@ -112,6 +112,7 @@ public : edge_descriptor_vector const& border_edges() const { return mBorderEdges ; } ECM& surface() const { return *mSurface ; } + ECM& surface_mesh() const { return *mSurface ; } public : diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile_impl.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile_impl.h index 330375cd09a..e2465085d5b 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile_impl.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile_impl.h @@ -41,15 +41,15 @@ Edge_profile::Edge_profile ( edge_descriptor const& aV0V1 ,mSurface(boost::addressof(aSurface)) { - mV1V0 = opposite_edge(v0_v1(),surface()); + mV1V0 = opposite_edge(v0_v1(),surface_mesh()); - mV0 = source(v0_v1(),surface()); - mV1 = target(v0_v1(),surface()); + mV0 = source(v0_v1(),surface_mesh()); + mV1 = target(v0_v1(),surface_mesh()); CGAL_assertion( mV0 != mV1 ); - mP0 = get(vertex_point,surface(),mV0); - mP1 = get(vertex_point,surface(),mV1); + mP0 = get(vertex_point,surface_mesh(),mV0); + mP1 = get(vertex_point,surface_mesh(),mV1); mIsBorderV0V1 = is_border[v0_v1()]; mIsBorderV1V0 = is_border[v1_v0()]; @@ -58,12 +58,12 @@ Edge_profile::Edge_profile ( edge_descriptor const& aV0V1 { CGAL_SURF_SIMPL_TEST_assertion( !mV0V1->is_border() ) ; - mVLV0 = prev_edge(v0_v1(),surface()); - mV1VL = next_edge(v0_v1(),surface()); - mVL = target(v1_vL(),surface()); + mVLV0 = prev_edge(v0_v1(),surface_mesh()); + mV1VL = next_edge(v0_v1(),surface_mesh()); + mVL = target(v1_vL(),surface_mesh()); CGAL_SURF_SIMPL_TEST_assertion( mV0 != mVL ); - CGAL_SURF_SIMPL_TEST_assertion( mVL == source(vL_v0(),surface()) ); + CGAL_SURF_SIMPL_TEST_assertion( mVL == source(vL_v0(),surface_mesh()) ); } else { @@ -74,12 +74,12 @@ Edge_profile::Edge_profile ( edge_descriptor const& aV0V1 { CGAL_SURF_SIMPL_TEST_assertion( !mV1V0->is_border() ) ; - mV0VR = next_edge(v1_v0(),surface()); - mVRV1 = prev_edge(v1_v0(),surface()); - mVR = target(v0_vR(),surface()); + mV0VR = next_edge(v1_v0(),surface_mesh()); + mVRV1 = prev_edge(v1_v0(),surface_mesh()); + mVR = target(v0_vR(),surface_mesh()); CGAL_SURF_SIMPL_TEST_assertion( mV0 != mVR ); - CGAL_SURF_SIMPL_TEST_assertion( mVR == source(vR_v1(),surface()) ); + CGAL_SURF_SIMPL_TEST_assertion( mVR == source(vR_v1(),surface_mesh()) ); } else { @@ -99,10 +99,10 @@ void Edge_profile::Extract_borders( vertex_descriptor const& v ) { in_edge_iterator eb, ee ; - for ( boost::tie(eb,ee) = in_edges(v,surface()) ; eb != ee ; ++ eb ) + for ( boost::tie(eb,ee) = in_edges(v,surface_mesh()) ; eb != ee ; ++ eb ) { edge_descriptor edge = *eb ; - edge_descriptor opp_edge = opposite_edge(edge,surface()) ; + edge_descriptor opp_edge = opposite_edge(edge,surface_mesh()) ; bool is_edge_border = is_border[edge] ; bool is_opp_edge_border = is_border[opp_edge] ; @@ -150,7 +150,7 @@ void Edge_profile::Extract_triangle( vertex_descriptor const& v0 // Since these vertices are NOT obtained by circulating the face, the actual triangle orientation is unspecified. // The triangle is oriented v0->v2->v1 if the next edge that follows e02 (which is the edge v0->v2) is v2->v1. - if ( target(next_edge(e02,surface()),surface()) == v1 ) + if ( target(next_edge(e02,surface_mesh()),surface_mesh()) == v1 ) { // The triangle is oriented v0->v2->v1. // In this case e02 is an edge of the facet. @@ -163,7 +163,7 @@ void Edge_profile::Extract_triangle( vertex_descriptor const& v0 // The triangle is oriented v0->v1->v2. // In this case, e20 and not e02, is an edge of the facet. // If this facet edge is a border edge then this triangle is not in the mesh . - if ( !is_border[opposite_edge(e02,surface())] ) + if ( !is_border[opposite_edge(e02,surface_mesh())] ) mTriangles.push_back(Triangle(v0,v1,v2) ) ; } } @@ -190,8 +190,8 @@ void Edge_profile::Extract_triangles_and_link( VertexIdxMap const& verte do { - e02 = opposite_edge(prev_edge(e02,surface()), surface()); - vertex_descriptor v2 = target(e02,surface()); + e02 = opposite_edge(prev_edge(e02,surface_mesh()), surface_mesh()); + vertex_descriptor v2 = target(e02,surface_mesh()); if ( v2 != mV1 ) { @@ -212,20 +212,20 @@ void Edge_profile::Extract_triangles_and_link( VertexIdxMap const& verte v0 = mV1; - e02 = opposite_edge(prev_edge(mV1V0,surface()), surface()); + e02 = opposite_edge(prev_edge(mV1V0,surface_mesh()), surface_mesh()); - v1 = target(e02,surface()); + v1 = target(e02,surface_mesh()); // This could have been added to the link while circulating around mP if ( v1 != mV0 && lCollected.find(vertex_idx[v1]) == lCollected.end() ) mLink.push_back(v1) ; - e02 = opposite_edge(prev_edge(e02,surface()), surface()); + e02 = opposite_edge(prev_edge(e02,surface_mesh()), surface_mesh()); do { - vertex_descriptor v2 = target(e02,surface()); + vertex_descriptor v2 = target(e02,surface_mesh()); // Any of the vertices found around mP can be reached again around mQ, but we can't duplicate them here. if ( v2 != mV0 && lCollected.find(vertex_idx[v2]) == lCollected.end() ) @@ -235,7 +235,7 @@ void Edge_profile::Extract_triangles_and_link( VertexIdxMap const& verte v1 = v2 ; - e02 = opposite_edge(prev_edge(e02,surface()), surface()); + e02 = opposite_edge(prev_edge(e02,surface_mesh()), surface_mesh()); } while ( e02 != mV1V0 ) ; } diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/edge_collapse.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/edge_collapse.h index 6ec50601987..eb066093ec4 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/edge_collapse.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/edge_collapse.h @@ -23,6 +23,7 @@ #include #include +#include #include namespace CGAL { @@ -35,23 +36,25 @@ template -int edge_collapse ( ECM& aSurface - , ShouldStop const& aShould_stop +int edge_collapse ( ECM& aSurface + , ShouldStop const& aShould_stop // optional mesh information policies - , VertexIndexMap const& aVertex_index_map // defaults to get(vertex_index,aSurface) - , EdgeIndexMap const& aEdge_index_map // defaults to get(edge_index,aSurface) - , EdgeIsBorderMap const& aEdge_is_border_map // defaults to get(edge_is_border,aSurface) + , VertexIndexMap const& aVertex_index_map // defaults to get(vertex_index,aSurface) + , EdgeIndexMap const& aEdge_index_map // defaults to get(edge_index,aSurface) + , EdgeIsBorderMap const& aEdge_is_border_map // defaults to get(edge_is_border,aSurface) + , EdgeIsConstrainedMap const& aEdge_is_constrained_map // defaults to No_constrained_edge_map() // optional strategy policies - defaults to LindstomTurk - , GetCost const& aGet_cost - , GetPlacement const& aGet_placement + , GetCost const& aGet_cost + , GetPlacement const& aGet_placement - , Visitor aVisitor + , Visitor aVisitor ) { typedef EdgeCollapse< ECM @@ -59,6 +62,7 @@ int edge_collapse ( ECM& aSurface , VertexIndexMap , EdgeIndexMap , EdgeIsBorderMap + , EdgeIsConstrainedMap , GetCost , GetPlacement , Visitor @@ -70,6 +74,7 @@ int edge_collapse ( ECM& aSurface , aVertex_index_map , aEdge_index_map , aEdge_is_border_map + , aEdge_is_constrained_map , aGet_cost , aGet_placement , aVisitor @@ -110,10 +115,11 @@ int edge_collapse ( ECM& aSurface ,choose_const_pmap(get_param(aParams,boost::vertex_index),aSurface,boost::vertex_index) ,choose_const_pmap(get_param(aParams,boost::edge_index),aSurface,boost::edge_index) ,choose_const_pmap(get_param(aParams,edge_is_border),aSurface,edge_is_border) + ,choose_param (get_param(aParams,edge_is_constrained),No_constrained_edge_map()) ,choose_param (get_param(aParams,get_cost_policy), LindstromTurk_cost()) ,choose_param (get_param(aParams,get_placement_policy), LindstromTurk_placement()) ,choose_param (get_param(aParams,vis), Dummy_visitor()) - ) ; + ); } diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/halfedge_collapse_Polyhedron_3.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/halfedge_collapse_Polyhedron_3.h index 59ced4834db..e2b08a9c7ff 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/halfedge_collapse_Polyhedron_3.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/halfedge_collapse_Polyhedron_3.h @@ -28,93 +28,162 @@ namespace CGAL { namespace Surface_mesh_simplification { +/* +Function responsible for contracting an edge while respecting constrained edges + +Notations used in the following function: +Top=TopFace +Btm=BottomFace + + t + / \ + / \ + / Top \ + p -------- q + \ Btm / + \ / + \ / + b + +Prerequisites: +If Top exists, amongst p-t and t-q only one is constrained +If Btm exists, amongst p-b and q-b only one is constrained +p-q is not constrained +*/ +template +typename boost::graph_traits< Polyhedron_3 >::vertex_descriptor +halfedge_collapse( typename boost::graph_traits< Polyhedron_3 >::edge_descriptor const& pq + , Polyhedron_3& aSurface + , EdgeIsConstrainedMap Edge_is_constrained_map + ) +{ + CGAL_assertion( !get(Edge_is_constrained_map,pq) ); + typedef Polyhedron_3 Surface ; + + typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor ; + typedef typename boost::graph_traits::edge_descriptor edge_descriptor ; + + edge_descriptor qp = opposite_edge(pq,aSurface); + edge_descriptor pt = opposite_edge(prev_edge(pq,aSurface),aSurface); + edge_descriptor qb = opposite_edge(prev_edge(qp,aSurface),aSurface); + edge_descriptor tq = pq->next()->opposite(); + edge_descriptor bp = qp->next()->opposite(); + + bool lTopFaceExists = !pq->is_border() ; + bool lBottomFaceExists = !qp->is_border() ; + + CGAL_precondition( !lTopFaceExists || (lTopFaceExists && ( pt->vertex()->vertex_degree() > 2 ) ) ) ; + CGAL_precondition( !lBottomFaceExists || (lBottomFaceExists && ( qb->vertex()->vertex_degree() > 2 ) ) ) ; + + vertex_descriptor q = pq->vertex(); + vertex_descriptor p = pq->opposite()->vertex(); + + CGAL_ECMS_TRACE(3, "Collapsing p-q E" << pq->id() << " (V" << p->id() << "->V" << q->id() << ")" ) ; + + //used to collect edges to remove from the surface + edge_descriptor edges_to_erase[2]; + edge_descriptor* edges_to_erase_ptr=edges_to_erase; + + // If the top facet exists, we need to choose one out of the two edges which one disappears: + // p-t if it is not constrained and t-q otherwise + if ( lTopFaceExists ) + { + CGAL_precondition( !pt->opposite()->is_border() ) ; // p-q-t is a face of the mesh + if ( !get(Edge_is_constrained_map,pt) ) + { + CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->id() << " (V" << p->id() << "->V" << pt->vertex()->id()) ; + *edges_to_erase_ptr++=pt; + } + else + { + CGAL_ECMS_TRACE(3, "Removing t-q E" << pt->id() << " (V" << pt->vertex()->id() << "->V" << q->id() ) ; + CGAL_assertion( !get(Edge_is_constrained_map,tq) ); + *edges_to_erase_ptr++=tq; + } + } + + // If the bottom facet exists, we need to choose one out of the two edges which one disappears: + // q-b if it is not constrained and b-p otherwise + if ( lBottomFaceExists ) + { + if ( !get(Edge_is_constrained_map,qb) ) + { + CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->id() << " (V" << q->id() << "->V" << qb->vertex()->id() ) ; + *edges_to_erase_ptr++=qb; + } + else{ + CGAL_ECMS_TRACE(3, "Removing b-p E" << qb->id() << " (V" << qb->vertex()->id() << "->V" << p->id() ) ; + CGAL_assertion( !get(Edge_is_constrained_map,bp) ); + *edges_to_erase_ptr++=bp; + } + } + + if (lTopFaceExists && lBottomFaceExists) + { + if ( edges_to_erase[0]->facet()==edges_to_erase[1]->facet() + && !edges_to_erase[0]->is_border() ) + { + // the vertex is of valence 3 and we simply need to remove the vertex + // and its indicent edges + bool lP_Erased=false; + edge_descriptor edge = + edges_to_erase[0]->next()==edges_to_erase[1]? + edges_to_erase[0]:edges_to_erase[1]; + if (edge->vertex()==p) + lP_Erased=true; + aSurface.erase_center_vertex(edge); + return lP_Erased? q : p; + } + else + { + if (!edges_to_erase[0]->is_border()) + aSurface.join_facet(edges_to_erase[0]); + else + aSurface.erase_facet(edges_to_erase[0]->opposite()); + if (!edges_to_erase[1]->is_border()) + aSurface.join_facet(edges_to_erase[1]); + else + aSurface.erase_facet(edges_to_erase[1]->opposite()); + aSurface.join_vertex(pq); + return q; + } + } + else + { + if (lTopFaceExists) + { + if (!edges_to_erase[0]->is_border()){ + aSurface.join_facet(edges_to_erase[0]); + aSurface.join_vertex(pq); + return q; + } + bool lQ_Erased=pq->next()->opposite()->is_border(); + aSurface.erase_facet(edges_to_erase[0]->opposite()); + return lQ_Erased?p:q; + } + + CGAL_assertion(lBottomFaceExists); + if (!edges_to_erase[0]->is_border()){ + aSurface.join_facet(edges_to_erase[0]); + aSurface.join_vertex(qp); + return p; + } + bool lP_Erased=qp->next()->opposite()->is_border(); + aSurface.erase_facet(edges_to_erase[0]->opposite()); + return lP_Erased?q:p; + }; +} template typename boost::graph_traits< Polyhedron_3 >::vertex_descriptor halfedge_collapse( typename boost::graph_traits< Polyhedron_3 >::edge_descriptor const& pq , Polyhedron_3& aSurface - ) + ) { - typedef Polyhedron_3 Surface ; - - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor ; - typedef typename boost::graph_traits::edge_descriptor edge_descriptor ; - - edge_descriptor qp = opposite_edge(pq,aSurface); - edge_descriptor pt = opposite_edge(prev_edge(pq,aSurface),aSurface); - edge_descriptor qb = opposite_edge(prev_edge(qp,aSurface),aSurface); - - bool lTopFaceExists = !pq->is_border() ; - bool lBottomFaceExists = !qp->is_border() ; - bool lTopLeftFaceExists = lTopFaceExists && !pt->is_border() ; - bool lBottomRightFaceExists = lBottomFaceExists && !qb->is_border() ; - - CGAL_precondition( !lTopFaceExists || (lTopFaceExists && ( pt->vertex()->vertex_degree() > 2 ) ) ) ; - CGAL_precondition( !lBottomFaceExists || (lBottomFaceExists && ( qb->vertex()->vertex_degree() > 2 ) ) ) ; - - vertex_descriptor q = pq->vertex(); - vertex_descriptor p = pq->opposite()->vertex(); - - CGAL_ECMS_TRACE(3, "Collapsing p-q E" << pq->id() << " (V" << p->id() << "->V" << q->id() << ")" ) ; - - bool lP_Erased = false, lQ_Erased = false ; - - if ( lTopFaceExists ) - { - CGAL_precondition( !pt->opposite()->is_border() ) ; // p-q-t is a face of the mesh - if ( lTopLeftFaceExists ) - { - CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->id() << " (V" << p->id() << "->V" << pt->vertex()->id() << ") by joining top-left face" ) ; - - aSurface.join_facet (pt); - } - else - { - CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->id() << " (V" << p->id() << "->V" << pt->vertex()->id() << ") by erasing top face" ) ; - - aSurface.erase_facet(pt->opposite()); - - if ( !lBottomFaceExists ) - { - CGAL_ECMS_TRACE(3, "Bottom face doesn't exist so vertex P already removed" ) ; - lP_Erased = true ; - } - } - } - - if ( lBottomFaceExists ) - { - CGAL_precondition( !qb->opposite()->is_border() ) ; // p-q-b is a face of the mesh - if ( lBottomRightFaceExists ) - { - CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->id() << " (V" << q->id() << "->V" << qb->vertex()->id() << ") by joining bottom-right face" ) ; - aSurface.join_facet (qb); - } - else - { - CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->id() << " (V" << q->id() << "->V" << qb->vertex()->id() << ") by erasing bottom face" ) ; - - aSurface.erase_facet(qb->opposite()); - - if ( !lTopFaceExists ) - { - CGAL_ECMS_TRACE(3, "Top face doesn't exist so vertex Q already removed" ) ; - lQ_Erased = true ; - } - } - } - - CGAL_assertion( !lP_Erased || !lQ_Erased ) ; - - if ( !lP_Erased && !lQ_Erased ) - { - CGAL_ECMS_TRACE(3, "Removing vertex P by joining pQ" ) ; - aSurface.join_vertex(pq); - lP_Erased = true ; - } - - return lP_Erased ? q : p ; -} + return halfedge_collapse( pq, + aSurface, + No_constrained_edge_map >() ); +} } // namespace Surface_mesh_simplification @@ -124,4 +193,4 @@ halfedge_collapse( typename boost::graph_traits< Polyhedron_3 >::edg #endif // CGAL_SURFACE_MESH_SIMPLIFICATION_COLLAPSE_TRIANGULATION_EDGE_POLYHEDRON_3_H // EOF // - + diff --git a/Surface_mesh_simplification/off2gts/off2gts.cpp b/Surface_mesh_simplification/off2gts/off2gts.cpp index d54f6785259..b79ce6d20f8 100644 --- a/Surface_mesh_simplification/off2gts/off2gts.cpp +++ b/Surface_mesh_simplification/off2gts/off2gts.cpp @@ -8,16 +8,16 @@ typedef CGAL::Simple_cartesian Kernel ; -typedef CGAL::Polyhedron_3 OffSurface; +typedef CGAL::Polyhedron_3 OffSurface_mesh; -typedef OffSurface::Vertex_handle Vertex_handle ; -typedef OffSurface::Halfedge_handle Halfedge_handle ; -typedef OffSurface::Facet_handle Facet_handle ; -typedef OffSurface::Vertex_iterator Vertex_iterator ; -typedef OffSurface::Edge_iterator Edge_iterator ; -typedef OffSurface::Facet_iterator Facet_iterator ; +typedef OffSurface_mesh::Vertex_handle Vertex_handle ; +typedef OffSurface_mesh::Halfedge_handle Halfedge_handle ; +typedef OffSurface_mesh::Facet_handle Facet_handle ; +typedef OffSurface_mesh::Vertex_iterator Vertex_iterator ; +typedef OffSurface_mesh::Edge_iterator Edge_iterator ; +typedef OffSurface_mesh::Facet_iterator Facet_iterator ; -void Convert ( OffSurface& off, char const* gts_name ) +void Convert ( OffSurface_mesh& off, char const* gts_name ) { std::ofstream gts(gts_name); if ( gts ) @@ -67,7 +67,7 @@ int main( int argc, char* argv[] ) std::ifstream in(argv[1]); if ( in ) { - OffSurface off ; + OffSurface_mesh off ; in >> off ; std::cout << "Converting " << argv[1] << " with " << off.size_of_vertices() << " vertices, " << (off.size_of_halfedges()/2) << " edges and " << off.size_of_facets() << " faces" << std::endl ; if ( off.is_valid() ) @@ -76,7 +76,7 @@ int main( int argc, char* argv[] ) { Convert(off,argv[2]); } - else std::cerr << "Polyhedron is not a purely triangulated surface" << std::endl ; + else std::cerr << "Polyhedron is not a purely triangulated surface mesh" << std::endl ; } else std::cerr << "Invalid polyhedron" << std::endl ; } diff --git a/Surface_mesh_simplification/test/Surface_mesh_simplification/edge_collapse_topology.cpp b/Surface_mesh_simplification/test/Surface_mesh_simplification/edge_collapse_topology.cpp index 57675d8d4dc..5d14391ea0d 100644 --- a/Surface_mesh_simplification/test/Surface_mesh_simplification/edge_collapse_topology.cpp +++ b/Surface_mesh_simplification/test/Surface_mesh_simplification/edge_collapse_topology.cpp @@ -36,23 +36,25 @@ int main( int argc, char** argv ) Surface surface; is >> surface ; - + std::size_t initial_count = (surface.size_of_halfedges()/2); + std::cout << "Initial count " << initial_count << " edges.\n" ; // Contract the surface as much as possible SMS::Count_stop_predicate stop(0); - + int r = SMS::edge_collapse (surface ,stop ,CGAL::vertex_index_map(boost::get(CGAL::vertex_external_index,surface)) .edge_index_map (boost::get(CGAL::edge_external_index ,surface)) ); - + std::cout << "\nFinished...\n" << r << " edges removed.\n" << (surface.size_of_halfedges()/2) << " final edges.\n" ; - + + assert( initial_count == (surface.size_of_halfedges()/2) + r ); // std::ofstream os( argc > 2 ? argv[2] : "out.off" ) ; os << surface ; - + return 0 ; } diff --git a/Surface_mesher/demo/Surface_mesher/viewer.cpp b/Surface_mesher/demo/Surface_mesher/viewer.cpp index 39ba1204228..710be7f1949 100644 --- a/Surface_mesher/demo/Surface_mesher/viewer.cpp +++ b/Surface_mesher/demo/Surface_mesher/viewer.cpp @@ -1,6 +1,7 @@ #include "viewer.h" #include "surface.h" #include +#include Viewer::Viewer(QWidget* parent) : QGLViewer(parent), surface(0) diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/MainWindow.cpp b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/MainWindow.cpp index bc94fe444bf..2e49db28823 100644 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/MainWindow.cpp +++ b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/MainWindow.cpp @@ -17,6 +17,8 @@ #include #include +#include + #include "Polyhedron_demo_plugin_interface.h" #include "Polyhedron_demo_io_plugin_interface.h" diff --git a/wininst/developer_scripts/script_cgal.nsh b/wininst/developer_scripts/script_cgal.nsh index e174a00100c..9e341bfd203 100644 --- a/wininst/developer_scripts/script_cgal.nsh +++ b/wininst/developer_scripts/script_cgal.nsh @@ -19,7 +19,7 @@ !define ViaFTP Var Platform -Var IsTAUCSInstalled +;Var IsTAUCSInstalled !ifdef ViaFTP !define DownloadOK "OK" diff --git a/wininst/developer_scripts/script_cgal.nsi b/wininst/developer_scripts/script_cgal.nsi index 55ba704cadf..52e99d5f43e 100644 --- a/wininst/developer_scripts/script_cgal.nsi +++ b/wininst/developer_scripts/script_cgal.nsi @@ -29,7 +29,7 @@ !include "script_cgal.nsh" -!define CGAL_SRC "CGAL-4.3" +!define CGAL_SRC "CGAL-4.4" !define FTP_SRC "https://cgal.geometryfactory.com/CGAL/precompiled_libs/" ;-------------------------------- @@ -45,7 +45,7 @@ OutFile "${CGAL_SRC}-Setup.exe" !endif - ;Default installation folder: C:\Program Files\CGAL-4.3 + ;Default installation folder: C:\Program Files\CGAL-4.4 ; See also .onInit Installdir "" @@ -55,12 +55,12 @@ BrandingText "The CGAL Project and GeometryFactory - Installer created with NSIS." - VIProductVersion "4.3.0.0" + VIProductVersion "4.4.0.0" VIAddVersionKey "ProductName" "CGAL Windows Installer" VIAddVersionKey "CompanyName" "The CGAL Project and GeometryFactory" VIAddVersionKey "LegalCopyright" "© The CGAL Project and GeometryFactory" VIAddVersionKey "FileDescription" "Windows Installer for CGAL" - VIAddVersionKey "FileVersion" "4.3" + VIAddVersionKey "FileVersion" "4.4" ;-------------------------------- ; Variables @@ -181,7 +181,7 @@ Section "!Main CGAL" MAIN_Idx ; Write uninstall informations ; http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \ - "DisplayName" "${CGAL_SRC} -- Computational Geometry Algorithms Library, version 4.3" + "DisplayName" "${CGAL_SRC} -- Computational Geometry Algorithms Library, version 4.4" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \ "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \ @@ -200,7 +200,7 @@ Section "!Main CGAL" MAIN_Idx WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \ "URLInfoAbout" "http://www.cgal.org/" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \ - "DisplayedVersion" "4.3.0" + "DisplayedVersion" "4.4.0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \ "CGALUninstallRegLoc" "$RegLoc" @@ -231,11 +231,13 @@ SectionEnd ; Download and install LAPACK and TAUCSbinaries. ; Depend only on the platform (one variant per platform) -Section /o "LAPACK and TAUCS precompiled libs" TAUCS_LIB_Idx - !ifndef FetchLocal - !insertmacro Install_LAPACK_TAUCS_libs "$Platform" - !endif -SectionEnd + +; Laurent Rineau, 2014/03/05: Remove TAUCS from the installer +;Section /o "LAPACK and TAUCS precompiled libs" TAUCS_LIB_Idx +; !ifndef FetchLocal +; !insertmacro Install_LAPACK_TAUCS_libs "$Platform" +; !endif +;SectionEnd ;-------------------------------- @@ -243,7 +245,7 @@ SectionEnd Section /o "HTML Manuals" DOC_Idx !ifndef FetchLocal - !insertmacro DownloadFileFrom "https://cgal.geometryfactory.com/" "CGAL/4.3/Manual/" "cgal_manual.zip" "$INSTDIR\doc_html" + !insertmacro DownloadFileFrom "https://cgal.geometryfactory.com/" "CGAL/4.4/Manual/" "cgal_manual.zip" "$INSTDIR\doc_html" !endif SectionEnd @@ -312,7 +314,8 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${MAIN_Idx} $(DESC_MAIN) !insertmacro MUI_DESCRIPTION_TEXT ${SAMPLES_Idx} $(DESC_SAMPLES) !insertmacro MUI_DESCRIPTION_TEXT ${GMP_LIB_Idx} $(DESC_GMP_LIB) - !insertmacro MUI_DESCRIPTION_TEXT ${TAUCS_LIB_Idx} $(DESC_TAUCS_LIB) +; Laurent Rineau, 2014/03/05: Remove TAUCS from the installer +; !insertmacro MUI_DESCRIPTION_TEXT ${TAUCS_LIB_Idx} $(DESC_TAUCS_LIB) !insertmacro MUI_DESCRIPTION_TEXT ${DOC_Idx} $(DESC_DOC) !insertmacro MUI_FUNCTION_DESCRIPTION_END