Merge pull request #5495 from danston/Surface_mesher-fix_demo_warnings-danston

Remove Surface_mesher demo (was "Fix Surface_mesher_demo Apple warnings")
This commit is contained in:
Laurent Rineau 2021-03-10 10:35:15 +01:00
commit 02b3ff8594
44 changed files with 0 additions and 6760 deletions

View File

@ -1,155 +0,0 @@
set(prj Surface_mesher)
cmake_minimum_required(VERSION 3.1...3.15)
project(Surface_mesher_Demo)
if(NOT POLICY CMP0070 AND POLICY CMP0053)
# Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning.
cmake_policy(SET CMP0053 OLD)
endif()
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
if(POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
endif()
if(POLICY CMP0072)
# About the use of OpenGL
cmake_policy(SET CMP0072 NEW)
endif()
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
set(PACKAGE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..)
# Add several CGAL packages to the include and link paths,
# if they lie in ${PACKAGE_ROOT}/.
foreach(LIB_DIR ${PACKAGE_ROOT}/../CGAL_ImageIO/src/CGAL_ImageIO
${PACKAGE_ROOT}/../GraphicsView/src/CGALQt5)
if(EXISTS ${LIB_DIR})
link_directories(${LIB_DIR})
endif()
endforeach()
include_directories(./)
# QGLViewer needs Qt5 configured with QtOpenGL
find_package(CGAL REQUIRED COMPONENTS ImageIO Qt5)
if(CGAL_Qt5_FOUND AND CGAL_ImageIO_FOUND)
add_definitions(-DQT_NO_KEYWORDS)
find_package(Qt5 QUIET COMPONENTS OpenGL Svg)
find_package(OpenGL)
if(Qt5_FOUND
AND OPENGL_FOUND
AND OPENGL_GLU_FOUND)
set(sources
Raw_image_dialog.cpp
colorlisteditor.cpp
values_list.cpp
mainwindow.cpp
Surface_mesher.cpp
viewer.cpp
volume.cpp)
if(EXISTS ${PACKAGE_ROOT}/../Marching_cube)
option(SURFACE_MESH_DEMO_USE_MARCHING_CUBE
"Embed a marching cube implementation in the Surface Mesh demo."
ON)
mark_as_advanced(SURFACE_MESH_DEMO_USE_MARCHING_CUBE)
endif()
if(EXISTS ${PACKAGE_ROOT}/include/CGAL/Polyhedral_surface_3.h)
option(SURFACE_MESH_DEMO_WITH_POLYHEDRAL_SURFACE
"Compile the support for polyhedral surfaces." OFF)
mark_as_advanced(SURFACE_MESH_DEMO_WITH_POLYHEDRAL_SURFACE)
endif()
option(
SURFACE_MESH_DEMO_VERBOSE
"Set this option if you want the Surface Mesh demo to display messages on standard output."
OFF)
mark_as_advanced(SURFACE_MESH_DEMO_VERBOSE)
if(SURFACE_MESH_DEMO_VERBOSE)
add_definitions(-DCGAL_SURFACE_MESHER_VERBOSE)
endif()
if(SURFACE_MESH_DEMO_WITH_POLYHEDRAL_SURFACE)
set(sources ${sources} polyhedral_surface.cpp)
else(SURFACE_MESH_DEMO_WITH_POLYHEDRAL_SURFACE)
add_definitions(-DCGAL_DO_NOT_USE_POLYHEDRAL_SURFACE)
endif(SURFACE_MESH_DEMO_WITH_POLYHEDRAL_SURFACE)
if(SURFACE_MESH_DEMO_USE_MARCHING_CUBE)
set(sources ${sources} ${PACKAGE_ROOT}/../Marching_cube/src/mc/ply.c)
add_definitions(-DCGAL_SURFACE_MESH_DEMO_USE_MARCHING_CUBE)
endif()
qt5_generate_moc("surface.h" "${CMAKE_CURRENT_BINARY_DIR}/moc_surface.cpp")
set(sources ${sources} moc_surface.cpp)
qt5_wrap_ui(uis ui/values_list.ui ui/mainwindow.ui ui/optionsdialog.ui
ui/raw_image.ui)
qt5_add_resources(CGAL_Qt5_RESOURCE_FILES values_list.qrc
surface_mesher.qrc)
add_executable(${prj} ${sources} ${uis} ${CGAL_Qt5_RESOURCE_FILES}
${CGAL_Qt5_MOC_FILES})
add_to_cached_list(CGAL_EXECUTABLE_TARGETS ${prj})
find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE)
if(VTK_FOUND)
if(VTK_USE_FILE)
include(${VTK_USE_FILE})
endif()
if("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
message(STATUS "VTK found")
add_definitions(-DCGAL_USE_VTK)
if(TARGET VTK::IOImage)
set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral)
endif()
else()
message(STATUS "Vtk must be at least Rel 6")
endif()
else()
message(STATUS "For reading Dicom files install VTK first")
endif()
target_link_libraries(
${prj} PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_ImageIO
${OPENGL_LIBRARIES} ${VTK_LIBRARIES})
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
cgal_add_compilation_test(${prj})
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
cgal_add_compilation_test(${prj})
endif(
Qt5_FOUND
AND OPENGL_FOUND
AND OPENGL_GLU_FOUND)
else(
CGAL_Qt5_FOUND
AND CGAL_ImageIO_FOUND)
if(RUNNING_CGAL_AUTO_TEST)
# Just to avoid a warning from CMake if that variable is set on the command line...
endif()
message(STATUS "NOTICE: This demo needs Qt5, and will not be compiled.")
endif(
CGAL_Qt5_FOUND
AND CGAL_ImageIO_FOUND)

View File

@ -1,211 +0,0 @@
/*********************************************************************
* 25 - 02 - 97
* gestion des fichiers image ELF
*
*********************************************************************/
#ifndef CGAL_FILE_XT_H
#define CGAL_FILE_XT_H
#include <stdio.h>
#include <string.h>
#include <CGAL/config.h>
namespace CGAL {
namespace Total {
namespace internal {
//To avoid "fopen may be unsafe" on Visual.
bool open_file(FILE **fin, const char* filename)
{
#if defined(BOOST_MSVC)
return (fopen_s(fin, filename, "rw") == 0);
#else
*fin = fopen(filename, "rw");
return (fin != NULL);
#endif
}
} // namespace internal
void permuteLong(char *a)
{
char tmp;
#ifdef CGAL_LITTLE_ENDIAN
tmp=a[0]; a[0]=a[3]; a[3]=tmp;
tmp=a[1]; a[1]=a[2]; a[2]=tmp;
#endif
}
void permuteLongTab(long *a,int nb)
{
int i;
#ifdef CGAL_LITTLE_ENDIAN
for(i=0;i<nb;i++) permuteLong( (char *) &a[i]);
#endif
}
void permuteShort(char *a)
{
char tmp;
#ifdef CGAL_LITTLE_ENDIAN
tmp=a[0]; a[0]=a[1]; a[1]=tmp;
#endif
}
void permuteShortTab(short *a, int nb)
{
int i;
#ifdef CGAL_LITTLE_ENDIAN
for(i=0;i<nb;i++) permuteShort( (char *) &a[i]);
#endif
}
void permuteFloat(char *a )
{
char tmp;
#ifdef CGAL_LITTLE_ENDIAN
tmp=a[0]; a[0]=a[3]; a[3]=tmp;
tmp=a[1]; a[1]=a[2]; a[2]=tmp;
#endif
}
void permuteFloatTab(float *a, int nb)
{
int i;
#ifdef CGAL_LITTLE_ENDIAN
for(i=0;i<nb;i++) permuteFloat((char *) &a[i]);
#endif
}
void permuteDouble(char *a )
{
char tmp;
#ifdef CGAL_LITTLE_ENDIAN
tmp=a[0]; a[0]=a[3]; a[3]=tmp;
tmp=a[1]; a[1]=a[2]; a[2]=tmp;
#endif
}
void permuteDoubleTab(double *a, int nb)
{
int i;
#ifdef CGAL_LITTLE_ENDIAN
for(i=0;i<nb;i++) permuteDouble((char *) &a[i]);
#endif
}
/*******************************************************************/
int lire_longueur_trace(const char * nomfich, long * long_trace)
{
FILE *fin;
int flag=0;
if ( internal::open_file(&fin, nomfich) )
{
fseek(fin,4,0);
if (fread(long_trace,4,1,fin) != 1) {
flag = -1;
}
permuteLong((char *)long_trace);
fclose(fin);
}
else flag=-1;
return(flag);
}
/********************************************************************/
int lire_nb_trace(const char * nomfich, long * nb_trace)
{
FILE *fin;
int flag=0;
if ( internal::open_file(&fin, nomfich) )
{
fseek(fin,8,0);
if (fread(nb_trace,4,1,fin) != 1) {
flag = -1;
}
permuteLong((char *)nb_trace);
fclose(fin);
}
else flag=-1;
return(flag);
}
/********************************************************************/
int lire_nb_plan(const char * nomfich, long * nb_plan)
{
FILE *fin;
int flag=0;
if ( internal::open_file(&fin, nomfich) )
{
fseek(fin,12,0);
if (fread(nb_plan,4,1,fin) != 1) {
flag = -1;
}
permuteLong((char *)nb_plan);
fclose(fin);
}
else flag=-1;
return(flag);
}
/********************************************************************/
int lire_nb_octet(const char * nomfich, long * nb_octet)
{
FILE *fin;
int flag=0;
if ( internal::open_file(&fin, nomfich) )
{
fseek(fin,36,0);
if (fread(nb_octet,4,1,fin) != 1) {
flag = -1;
}
permuteLong((char *)nb_octet);
fclose(fin);
}
else flag=-1;
return(flag);
}
/********************************************************************/
int lire_longueur_entete(const char * nomfich, long * long_entete)
{
FILE *fin;
int flag=0;
if ( internal::open_file(&fin, nomfich) )
{
fseek(fin,72,0);
if (fread(long_entete,4,1,fin) != 1) {
flag = -1;
}
permuteLong((char *)long_entete);
fclose(fin);
}
else flag=-1;
return(flag);
}
} // end namespace Total
} // end namespace CGAL
#endif // CGAL_FILE_XT_H

View File

@ -1,28 +0,0 @@
#include "Raw_image_dialog.h"
Raw_image_dialog::Raw_image_dialog(QWidget* parent)
: QDialog(parent)
{
setupUi(this);
}
void Raw_image_dialog::update_image_size() {
label_image_size->setNum((int)image_word_size() *
dim_x->value() *
dim_y->value() *
dim_z->value());
}
unsigned int Raw_image_dialog::image_word_size() const {
if(short_bt->isChecked())
return 2;
if(int_bt->isChecked())
return 4;
else if(float_bt->isChecked())
return 4;
else if(double_bt->isChecked())
return 8;
else
return 1;
}

View File

@ -1,19 +0,0 @@
#ifndef RAW_IMAGE_DIALOG_H
#define RAW_IMAGE_DIALOG_H
#include "ui_raw_image.h"
class Raw_image_dialog : public QDialog, public Ui::Raw_image_dialog
{
Q_OBJECT
public:
Raw_image_dialog(QWidget* parent = 0);
unsigned int image_word_size() const;
private Q_SLOTS:
void update_image_size();
};
#endif // RAW_IMAGE_DIALOG

View File

@ -1,23 +0,0 @@
#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <clocale>
int main(int argc, char** argv)
{
QApplication application(argc,argv);
application.setOrganizationDomain("geometryfactory.com");
application.setOrganizationName("GeometryFactory");
application.setApplicationName("Surface mesher Qt5 demo");
MainWindow w;
if(argc>1)
w.surface_open(argv[1]);
w.show();
std::setlocale(LC_ALL, "C");
return application.exec();
std::cerr << "Exit\n";
}

View File

@ -1,190 +0,0 @@
// Copyright (c) 2005-2008 INRIA Sophia-Antipolis (France).
// Copyright (c) 2008 GeometryFactory (France)
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Laurent RINEAU, Pierre ALLIEZ
#ifndef BINARY_IMAGE_3
#define BINARY_IMAGE_3
#include <CGAL/basic.h>
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple.hpp>
#include <CGAL/algorithm.h>
#include <boost/format.hpp>
#include <CGAL/ImageIO.h>
#include <limits>
#include <CGAL/Image_3.h>
template <typename FT_, typename Point>
class CBinary_image_3 : public CGAL::Image_3
{
bool interpolate_;
bool labellized_;
public:
double min_value;
double max_value;
typedef FT_ FT;
public:
CBinary_image_3()
: Image_3(), interpolate_(true)
{
}
CBinary_image_3(const Image_3& bi)
: Image_3(bi), interpolate_(true)
{
}
CBinary_image_3(const CBinary_image_3& bi)
: Image_3(bi), interpolate_(bi.interpolate_),labellized_(bi.labellized_)
{
std::cerr << "CBinary_image_3::copy_constructor\n";
min_value = bi.min_value;
max_value = bi.max_value;
}
void finish_open() {
CGAL_IMAGE_IO_CASE(image_ptr.get(),
Word *min; Word *max;
(boost::tie(min, max)) =
(CGAL::min_max_element((Word*)(data()),
(Word*)(data()) +
xdim() * ydim() * zdim()));
min_value = *min;
max_value = *max;)
}
float xmax() const
{
return (float)(((image_ptr->xdim) - 1.0)*(image_ptr->vx));
}
float ymax() const
{
return (float)(((image_ptr->ydim) - 1.0)*(image_ptr->vy));
}
float zmax() const
{
return (float)(((image_ptr->zdim) - 1.0)*(image_ptr->vz));
}
Point center()
{
FT cx = 0.5 * xmax();
FT cy = 0.5 * ymax();
FT cz = 0.5 * zmax();
return Point(cx,cy,cz);
}
FT radius()
{
return (std::max)((std::max)(xmax(),ymax()),zmax());
}
Point point(const std::size_t i,
const std::size_t j,
const std::size_t k) const
{
return Point(i * (image_ptr->vx),
j * (image_ptr->vy),
k * (image_ptr->vz));
}
public:
bool inside(const float x,
const float y,
const float z) const
{
return ( x >= 0.0f &&
y >= 0.0f &&
z >= 0.0f &&
x <= xmax() &&
y <= ymax() &&
z <= zmax() );
}
float rand_x() { return (float)rand() / (float)RAND_MAX * xmax(); }
float rand_y() { return (float)rand() / (float)RAND_MAX * ymax(); }
float rand_z() { return (float)rand() / (float)RAND_MAX * zmax(); }
void set_interpolation(const bool b)
{
interpolate_ = b;
}
bool interpolation() const {
return interpolate_;
}
void set_labellized(const bool b)
{
labellized_ = b;
}
bool labellized() const {
return labellized_;
}
FT operator()(Point p) const
{
const float x = static_cast<float>(CGAL::to_double(p.x()));
const float y = static_cast<float>(CGAL::to_double(p.y()));
const float z = static_cast<float>(CGAL::to_double(p.z()));
if(interpolation()) {
if(labellized()) {
CGAL_IMAGE_IO_CASE(image_ptr.get(),
return (this->labellized_trilinear_interpolation<Word, double>(x, y, z, min_value));)
}
else {
CGAL_IMAGE_IO_CASE(image_ptr.get(),
return (this->trilinear_interpolation<Word, double>(x, y, z, min_value));)
}
}
else {
const std::ptrdiff_t i = static_cast<std::ptrdiff_t>(x/image()->vx + 0.5f);
const std::ptrdiff_t j = static_cast<std::ptrdiff_t>(y/image()->vy + 0.5f);
const std::ptrdiff_t k = static_cast<std::ptrdiff_t>(z/image()->vz + 0.5f);
if( i < 0 ||
j < 0 ||
k < 0 )
{
return 0;
}
else
{
const std::size_t ui = static_cast<std::size_t>(i);
const std::size_t uj = static_cast<std::size_t>(j);
const std::size_t uk = static_cast<std::size_t>(k);
if( ui >= image()->xdim ||
uj >= image()->ydim ||
uk >= image()->zdim )
{
return 0;
}
else
{
return this->value(ui, uj, uk);
}
}
}
return FT();
}
}; // end CBinary_image_3
#endif // BINARY_IMAGE_3

View File

@ -1,69 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2007-2007 Trolltech ASA. All rights reserved.
**
** This file is part of the example classes of the Qt Toolkit.
**
** This file may be used under the terms of the GNU General Public
** License version 2.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
** http://trolltech.com/products/qt/licenses/licensing/opensource/
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
** or contact the sales department at sales@trolltech.com.
**
** In addition, as a special exception, Trolltech gives you certain
** additional rights. These rights are described in the Trolltech GPL
** Exception version 1.0, which can be found at
** http://www.trolltech.com/products/qt/gplexception/ and in the file
** GPL_EXCEPTION.txt in this package.
**
** In addition, as a special exception, Trolltech, as the sole copyright
** holder for Qt Designer, grants users of the Qt/Eclipse Integration
** plug-in the right for the Qt/Eclipse Integration to link to
** functionality provided by Qt Designer and its related libraries.
**
** Trolltech reserves all rights not expressly granted herein.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** SPDX-License-Identifier: LGPL-2.0-only
**
****************************************************************************/
#include <QtGui>
#include "colorlisteditor.h"
ColorListEditor::ColorListEditor(QWidget *widget) : QComboBox(widget)
{
populateList();
}
QColor ColorListEditor::color() const
{
return itemData(currentIndex(), Qt::DecorationRole).value<QColor>();
}
void ColorListEditor::setColor(QColor color)
{
setCurrentIndex(findData(color, int(Qt::DecorationRole)));
}
void ColorListEditor::populateList()
{
QStringList colorNames = QColor::colorNames();
for (int i = 0; i < colorNames.size(); ++i) {
QColor color(colorNames[i]);
insertItem(i, colorNames[i]);
setItemData(i, color, Qt::DecorationRole);
}
}

View File

@ -1,63 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2007-2007 Trolltech ASA. All rights reserved.
**
** This file is part of the example classes of the Qt Toolkit.
**
** This file may be used under the terms of the GNU General Public
** License version 2.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
** http://trolltech.com/products/qt/licenses/licensing/opensource/
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
** or contact the sales department at sales@trolltech.com.
**
** In addition, as a special exception, Trolltech gives you certain
** additional rights. These rights are described in the Trolltech GPL
** Exception version 1.0, which can be found at
** http://www.trolltech.com/products/qt/gplexception/ and in the file
** GPL_EXCEPTION.txt in this package.
**
** In addition, as a special exception, Trolltech, as the sole copyright
** holder for Qt Designer, grants users of the Qt/Eclipse Integration
** plug-in the right for the Qt/Eclipse Integration to link to
** functionality provided by Qt Designer and its related libraries.
**
** Trolltech reserves all rights not expressly granted herein.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** SPDX-License-Identifier: LGPL-2.0-only
**
****************************************************************************/
#ifndef COLORLISTEDITOR_H
#define COLORLISTEDITOR_H
#include <QComboBox>
class QColor;
class QWidget;
class ColorListEditor : public QComboBox
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor USER true)
public:
ColorListEditor(QWidget *widget = 0);
public:
QColor color() const;
void setColor(QColor c);
private:
void populateList();
};
#endif

View File

@ -1,8 +0,0 @@
#ifndef _GET_POLYHEDRAL_SURFACE_H
#define _GET_POLYHEDRAL_SURFACE_H
#include "surface.h"
Surface* get_polyhedral_surface(QObject*, double, double);
#endif // _GET_POLYHEDRAL_SURFACE_H

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -1,209 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo"
sodipodi:docname="bbox-red.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo/bbox-red.png"
inkscape:export-xdpi="19.200001"
inkscape:export-ydpi="19.200001">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="50"
guidetolerance="10"
objecttolerance="10000"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="362.38483"
inkscape:cy="237.32577"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="600px"
height="600px"
inkscape:object-nodes="true"
inkscape:grid-bbox="false"
inkscape:object-points="true"
inkscape:object-bbox="true"
inkscape:window-width="1160"
inkscape:window-height="767"
inkscape:window-x="200"
inkscape:window-y="182" />
<defs
id="defs4">
<linearGradient
id="linearGradient4266">
<stop
offset="0"
id="stop4268"
style="stop-color:#cb0000;stop-opacity:1" />
<stop
offset="1"
id="stop4270"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient4240">
<stop
style="stop-color:#cb0000;stop-opacity:0.69411767"
id="stop4242"
offset="0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
id="stop4244"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient9002">
<stop
offset="0"
id="stop9004"
style="stop-color:#0000cb;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop9006"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient9008"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11034"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11034-671"
y2="379.5257"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002-51"
x1="33.504745" />
<linearGradient
id="linearGradient9002-51">
<stop
offset="0"
id="stop11046"
style="stop-color:#656565;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop11048"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient9002-51-419">
<stop
offset="0"
id="stop11291"
style="stop-color:#6a5f5f;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop11293"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4240"
id="linearGradient2255"
gradientUnits="userSpaceOnUse"
x1="33.504745"
y1="507.50024"
x2="253.6991"
y2="379.5257"
gradientTransform="matrix(1.1359177,0,0,1.1359177,-18.160013,-8.8673534)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4240"
id="linearGradient4255"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1359177,0,0,1.1359177,-18.160013,-8.8673534)"
x1="33.504745"
y1="507.50024"
x2="253.6991"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4266"
id="linearGradient4264"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1359177,0,0,1.1359177,-18.160013,-8.8673534)"
x1="33.504745"
y1="507.50024"
x2="305.26218"
y2="266.33841" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1">
<path
style="fill:url(#linearGradient4264);fill-opacity:1;stroke:#000000;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 24.249737,217.12695 L 413.33946,217.12695 L 413.33946,557.58044 L 24.249737,557.58044 L 24.249737,217.12695 z "
id="rect2178" />
<path
sodipodi:nodetypes="cc"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 24.249737,217.12695 L 175.22464,75.271335"
id="path2186" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 411.31294,217.12695 L 565.32764,75.271321"
id="path2188" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 413.33949,555.55394 L 565.32764,415.72481"
id="path2190" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20.06141663;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:40.1228295, 40.1228295;stroke-dashoffset:0;stroke-opacity:1"
d="M 24.249737,556.5672 L 176.23792,415.72481"
id="path2192" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 175.22464,75.271335 L 565.32764,75.271321 L 565.32764,415.72481"
id="path6075" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20.06141663;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:40.1228295, 40.1228295;stroke-dashoffset:0;stroke-opacity:1"
d="M 176.2379,75.271337 L 176.23792,415.72481 L 565.32764,415.72481"
id="path6077" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="/home/lrineau/CGAL/Packages/Surface_mesher/demo/Surface_mesher/qt4-demo"
sodipodi:docname="bbox.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="50"
guidetolerance="10"
objecttolerance="10000"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="920.19323"
inkscape:cy="180.18291"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="600px"
height="600px"
inkscape:object-nodes="true"
inkscape:grid-bbox="false"
inkscape:object-points="true"
inkscape:object-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1175"
inkscape:window-x="0"
inkscape:window-y="0" />
<defs
id="defs4">
<linearGradient
id="linearGradient9002">
<stop
offset="0"
id="stop9004"
style="stop-color:#0000cb;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop9006"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient9008"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11016"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11034"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11034-671"
y2="379.5257"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002-51"
x1="33.504745" />
<linearGradient
id="linearGradient9002-51">
<stop
offset="0"
id="stop11046"
style="stop-color:#656565;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop11048"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient9002-51-419">
<stop
offset="0"
id="stop11291"
style="stop-color:#6a5f5f;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop11293"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1">
<g
id="g11007"
transform="matrix(1.1359177,0,0,1.1359177,-18.160013,-8.8673534)">
<path
id="rect2178"
d="M 37.335231,198.95306 L 379.86861,198.95306 L 379.86861,498.66975 L 37.335231,498.66975 L 37.335231,198.95306 z "
style="opacity:1;fill:url(#linearGradient11016);fill-opacity:1;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path2186"
d="M 37.335231,198.95306 L 170.2453,74.071113"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
id="path2188"
d="M 378.08457,198.95306 L 513.67071,74.071101"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path2190"
d="M 379.86863,496.88573 L 513.67071,373.78779"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path2192"
d="M 37.335231,497.77775 L 171.13734,373.78779"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:35.32195114, 35.32195114;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path6075"
d="M 170.2453,74.071113 L 513.67071,74.071101 L 513.67071,373.78779"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path6077"
d="M 171.13732,74.071115 L 171.13734,373.78779 L 513.67071,373.78779"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:35.32195114, 35.32195114;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -1,24 +0,0 @@
/* XPM */
const char * demoicon_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 16 3 1",
" c None",
". c #FFFF00",
"+ c #000000",
/* pixels */
"................",
"...++++...++++..",
"..+....+.+....+.",
"..+......+......",
"..+......+..+++.",
"..+......+....+.",
"..+....+.+....+.",
"...++++...++++..",
"................",
"...++++...+.....",
"..+....+..+.....",
"..+....+..+.....",
"..++++++..+.....",
"..+....+..+.....",
"..+....+..+++++.",
"................"};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -1,207 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="flip.svg"
sodipodi:docbase="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo"
inkscape:version="0.45.1"
sodipodi:version="0.32"
id="svg11300"
height="48"
width="48"
inkscape:export-filename="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo/twosides.png"
inkscape:export-xdpi="240"
inkscape:export-ydpi="240"
version="1.0"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<linearGradient
id="linearGradient4214">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4216" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop4218" />
</linearGradient>
<linearGradient
x1="-0.07032413"
y1="25.541344"
x2="122.11304"
y2="25.541344"
id="XMLID_2_"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.2706977,0.1446251,-0.1502412,-0.2812096,36.632009,11.666724)">
<stop
style="stop-color:#555;stop-opacity:1"
offset="0"
id="stop4" />
<stop
style="stop-color:#323232;stop-opacity:1"
offset="1"
id="stop6" />
</linearGradient>
<linearGradient
id="linearGradient2591">
<stop
style="stop-color:#73d216"
offset="0"
id="stop2593" />
<stop
style="stop-color:#4e9a06"
offset="1.0000000"
id="stop2595" />
</linearGradient>
<linearGradient
id="linearGradient8662"
inkscape:collect="always">
<stop
id="stop8664"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop8666"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8662"
id="radialGradient2253"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
cx="24.837126"
cy="36.421127"
fx="24.837126"
fy="36.421127"
r="15.644737" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2591"
id="linearGradient2212"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2706977,-0.1446251,0.1502412,0.2812096,8.3389857,32.770591)"
x1="-0.07032413"
y1="25.541344"
x2="122.11304"
y2="25.541344" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2591"
id="linearGradient4212"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.2706977,0.1446251,-0.1502412,-0.2812096,36.632009,11.666724)"
x1="-0.07032413"
y1="25.541344"
x2="122.11304"
y2="25.541344" />
</defs>
<sodipodi:namedview
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="1177"
inkscape:window-width="1920"
inkscape:showpageshadow="false"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:cy="7.3480719"
inkscape:cx="77.518892"
inkscape:zoom="10.506095"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.25490196"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
fill="#4e9a06"
stroke="#4e9a06" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Go Next</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>go</rdf:li>
<rdf:li>next</rdf:li>
<rdf:li>right</rdf:li>
<rdf:li>arrow</rdf:li>
<rdf:li>pointer</rdf:li>
<rdf:li>&gt;</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
inkscape:label="Layer 1"
id="layer1">
<path
transform="matrix(1.1151181,-0.305532,0.3723672,0.5976558,-23.064239,26.693437)"
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
sodipodi:ry="8.3968935"
sodipodi:rx="15.644737"
sodipodi:cy="36.421127"
sodipodi:cx="24.837126"
id="path8660"
style="opacity:0.29946522;color:#000000;fill:url(#radialGradient2253);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
d="M 3.5762942,29.327333 L 16.068497,22.608327 C 16.068497,22.608327 11.236809,19.995651 11.748627,20.272375 C 15.449962,12.804004 24.47628,10.006176 31.910228,14.025311 C 32.869674,12.089205 33.829241,10.152675 34.788839,8.2168481 C 24.162078,2.4720104 11.259208,6.4697916 5.9674122,17.147268 L 1.6157001,14.794711 L 3.5762942,29.327333 z "
style="fill:url(#linearGradient4212);fill-opacity:1.0;stroke:#3a7304;stroke-opacity:1"
id="path8"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 23.465999,9.1779573 L 33.671137,33.751781 L 34.275709,42.579142 L 22.670925,36.677371 L 11.577228,10.931146 L 13.365623,2.5091673 L 23.465999,9.1779573 z "
id="rect2273"
sodipodi:nodetypes="ccccccc" />
<path
id="path2210"
style="fill:url(#linearGradient2212);fill-opacity:1.0;stroke:#3a7304;stroke-opacity:1"
d="M 41.394701,15.109982 L 28.902498,21.828988 C 28.902498,21.828988 33.734186,24.441664 33.222368,24.16494 C 29.521033,31.633311 20.494715,34.431139 13.060767,30.412004 C 12.101321,32.34811 11.141754,34.28464 10.182156,36.220467 C 20.808917,41.965305 33.711787,37.967524 39.003583,27.290047 L 43.355295,29.642604 L 41.394701,15.109982 z "
sodipodi:nodetypes="cccccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -1,297 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo"
sodipodi:docname="resize.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo/resize.png"
inkscape:export-xdpi="19.200001"
inkscape:export-ydpi="19.200001">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="50"
guidetolerance="10"
objecttolerance="50"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.95347948"
inkscape:cx="304.78869"
inkscape:cy="273.05108"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="600px"
height="600px"
inkscape:object-nodes="false"
inkscape:grid-bbox="false"
inkscape:object-points="false"
inkscape:object-bbox="false"
inkscape:window-width="1920"
inkscape:window-height="1177"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:object-paths="false"
inkscape:guide-bbox="true"
showguides="true">
<sodipodi:guide
orientation="horizontal"
position="158.57143"
id="guide2275" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
id="linearGradient5379">
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="0"
id="stop5381" />
<stop
style="stop-color:#ff0000;stop-opacity:0.49494949;"
offset="1"
id="stop5383" />
</linearGradient>
<linearGradient
id="linearGradient9002">
<stop
offset="0"
id="stop9004"
style="stop-color:#0000cb;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop9006"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient9008"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11016"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11034"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11034-671"
y2="379.5257"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002-51"
x1="33.504745" />
<linearGradient
id="linearGradient9002-51">
<stop
offset="0"
id="stop11046"
style="stop-color:#656565;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop11048"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient9002-51-419">
<stop
offset="0"
id="stop11291"
style="stop-color:#6a5f5f;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop11293"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2195"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002"
y2="379.5257" />
<linearGradient
inkscape:collect="always"
id="linearGradient11016-578"
y2="379.5257"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002-831"
x1="33.504745" />
<linearGradient
id="linearGradient9002-831">
<stop
offset="0"
id="stop2216"
style="stop-color:#0505c5;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop2218"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient11016-578-763"
x1="33.504745"
y1="507.50024"
x2="253.6991"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient9002-831-467"
y2="379.5257" />
<linearGradient
id="linearGradient9002-831-467">
<stop
offset="0"
id="stop2301"
style="stop-color:#0b0bdb;stop-opacity:0.69387758;" />
<stop
offset="1"
id="stop2303"
style="stop-color:#0a0a0a;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient9002-831-467"
id="linearGradient2371"
gradientUnits="userSpaceOnUse"
x1="33.504745"
y1="507.50024"
x2="253.6991"
y2="379.5257"
gradientTransform="matrix(1.1359177,0,0,1.1359177,-8.160013,-40.295925)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5379"
id="linearGradient5405"
gradientUnits="userSpaceOnUse"
x1="69.46875"
y1="-233.40625"
x2="950.46875"
y2="-233.40625"
gradientTransform="matrix(-5.5253575e-2,0.2000569,-0.1158097,-9.5448522e-2,552.01824,2.0337638)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5379"
id="linearGradient5411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.153172,0.1373665,-0.1373665,0.153172,-6.1313023,210.21874)"
x1="69.46875"
y1="-233.40625"
x2="950.46875"
y2="-233.40625" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1">
<path
sodipodi:nodetypes="cc"
style="fill:none;fill-rule:evenodd;stroke:#0a0a0a;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 34.249737,185.69838 L 185.22464,43.842763"
id="path2186" />
<path
style="fill:none;fill-rule:evenodd;stroke:#0a0a0a;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 421.31294,185.69838 L 575.32764,43.84275"
id="path2188" />
<path
style="fill:none;fill-rule:evenodd;stroke:#0a0a0a;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 423.33949,524.12537 L 575.32764,384.29624"
id="path2190" />
<path
style="fill:none;fill-rule:evenodd;stroke:#0a0a0a;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 185.22464,43.842763 L 575.32764,43.84275 L 575.32764,384.29624"
id="path6075" />
<g
transform="matrix(0.7418376,0,0,0.7418376,142.52551,157.80295)"
id="g2178">
<path
d="M 37.335231,198.95306 L 379.86861,198.95306 L 379.86861,498.66975 L 37.335231,498.66975 L 37.335231,198.95306 z "
id="path2180"
style="opacity:1;fill:url(#linearGradient2195);fill-opacity:1;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
d="M 37.335231,198.95306 L 170.2453,74.071113"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path2182" />
<path
d="M 378.08457,198.95306 L 513.67071,74.071101"
id="path2184"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="M 379.86863,496.88573 L 513.67071,373.78779"
id="path2187"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="M 37.335231,497.77775 L 171.13734,373.78779"
id="path2189"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:35.32195114, 35.32195114;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="M 170.2453,74.071113 L 513.67071,74.071101 L 513.67071,373.78779"
id="path2191"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="M 171.13732,74.071115 L 171.13734,373.78779 L 513.67071,373.78779"
id="path2193"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:17.66097641;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:35.32195114, 35.32195114;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<path
style="fill:url(#linearGradient2371);fill-opacity:1;stroke:#0a0a0a;stroke-width:20.06141663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 34.249737,185.69838 L 423.33946,185.69838 L 423.33946,526.15187 L 34.249737,526.15187 L 34.249737,185.69838 z "
id="rect2178" />
<path
id="path5403"
d="M 578.23591,105.22582 L 576.6167,72.240139 L 574.99576,39.260711 L 559.27308,58.176053 L 543.54505,77.094677 L 552.97135,84.740878 L 533.47376,155.33591 L 523.60863,147.07475 L 524.98957,180.08664 L 526.37413,213.1015 L 542.23321,194.52882 L 558.09229,175.95612 L 548.92392,168.27689 L 568.51474,97.344265 L 578.23591,105.22582 z "
style="fill:url(#linearGradient5405);fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:5.06451797;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none" />
<path
style="fill:url(#linearGradient5411);fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:6.17853355;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none;opacity:1"
d="M 97.619367,196.89811 L 67.512475,190.75473 L 37.410367,184.61563 L 47.145547,213.75398 L 56.881242,242.90143 L 67.952798,230.40189 L 122.00332,278.87505 L 110.18569,291.88871 L 140.2082,298.40551 L 170.23497,304.91751 L 160.8666,275.65902 L 151.49824,246.40052 L 140.51389,258.49463 L 86.204904,209.78968 L 97.619367,196.89811 z "
id="path5409" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,166 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo"
sodipodi:docname="surface.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/lrineau/CGAL/Packages/Surface_mesher/demo/Surface_mesher/qt4-demo/surface.png"
inkscape:export-xdpi="19.200001"
inkscape:export-ydpi="19.200001">
<defs
id="defs4">
<linearGradient
id="linearGradient3162">
<stop
style="stop-color:#1f4eff;stop-opacity:1;"
offset="0"
id="stop3164" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3166" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3162"
id="linearGradient3168"
x1="47.097626"
y1="487.4476"
x2="609.17371"
y2="117.4476"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3162"
id="linearGradient3175"
gradientUnits="userSpaceOnUse"
x1="47.097626"
y1="487.4476"
x2="609.17371"
y2="117.4476" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3162"
id="linearGradient3184"
gradientUnits="userSpaceOnUse"
x1="47.097626"
y1="487.4476"
x2="609.17371"
y2="117.4476"
gradientTransform="translate(-4.2857143,-47.857143)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3162"
id="linearGradient3193"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-4.2857143,-47.857143)"
x1="47.097626"
y1="487.4476"
x2="609.17371"
y2="117.4476" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3162"
id="linearGradient3146"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0159723,0,0,1.172144,-18.187276,-82.316631)"
x1="47.097626"
y1="487.4476"
x2="609.17371"
y2="117.4476" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3162"
id="linearGradient3160"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0159723,0,0,1.172144,-18.187276,-82.316631)"
x1="47.097626"
y1="487.4476"
x2="609.17371"
y2="117.4476" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="50"
guidetolerance="10"
objecttolerance="20.8"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="357.26338"
inkscape:cy="322.98544"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="600px"
height="600px"
inkscape:object-nodes="true"
inkscape:object-points="true"
inkscape:grid-bbox="false"
inkscape:object-paths="true"
inkscape:guide-bbox="false"
inkscape:window-width="1920"
inkscape:window-height="1175"
inkscape:window-x="0"
inkscape:window-y="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g3153"
transform="translate(2.1428571,-0.7142857)">
<path
sodipodi:nodetypes="csccssc"
id="path2180"
d="M 3.5835599,497.0574 C 3.5835599,497.0574 -11.005782,321.17442 176.8656,224.00691 C 345.52236,136.77726 338.69864,16.716857 338.69864,16.716857 L 592.95144,131.09635 C 592.95144,131.09635 568.64178,309.62855 385.76677,398.3766 C 294.32926,442.75062 301.49038,584.80768 300.80799,584.60668 L 3.5835599,497.0574 z "
style="fill:url(#linearGradient3160);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="csc"
id="path2183"
d="M 91.918625,523.07703 C 161.78497,382.35474 125.01899,360.06528 253.31904,288.06213 C 344.39339,236.9504 373.16298,149.39519 423.41056,54.825799"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="csc"
id="path2189"
d="M 180.60157,549.19914 C 180.60157,549.19914 208.98236,371.40028 351.21848,313.63035 C 472.97195,264.17952 534.63257,104.8607 534.63257,104.8607"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3177"
d="M 63.090508,317.88682 C 63.090508,317.88682 160.66223,282.01439 243.69333,338.51948 C 326.72444,395.02458 356.27108,419.19355 356.27108,419.19355"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cssc"
id="path3179"
d="M 250.31969,174.7178 C 250.31969,174.7178 330.14609,182.25301 354.81969,193.97445 C 379.4933,205.69589 421.8678,271.41001 465.63022,287.1132 C 509.39263,302.8164 509.39263,302.8164 509.39263,302.8164"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -1,169 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="twosides.svg"
sodipodi:docbase="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo"
inkscape:version="0.45.1"
sodipodi:version="0.32"
id="svg11300"
height="48"
width="48"
inkscape:export-filename="/home/lrineau/CGAL/Packages/trunk/Surface_mesher/demo/Surface_mesher/qt4-demo/twosides.png"
inkscape:export-xdpi="240"
inkscape:export-ydpi="240"
version="1.0"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<linearGradient
id="linearGradient2591">
<stop
style="stop-color:#73d216"
offset="0"
id="stop2593" />
<stop
style="stop-color:#4e9a06"
offset="1.0000000"
id="stop2595" />
</linearGradient>
<linearGradient
id="linearGradient8662"
inkscape:collect="always">
<stop
id="stop8664"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop8666"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8662"
id="radialGradient2253"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
cx="24.837126"
cy="36.421127"
fx="24.837126"
fy="36.421127"
r="15.644737" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2591"
id="radialGradient2277"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.5871988,0.5392198,0.6525272,0.7105881,12.376796,4.9356871)"
cx="22.291636"
cy="32.797512"
fx="22.291636"
fy="32.797512"
r="16.9562" />
</defs>
<sodipodi:namedview
inkscape:window-y="211"
inkscape:window-x="808"
inkscape:window-height="769"
inkscape:window-width="1272"
inkscape:showpageshadow="false"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:cy="25.360833"
inkscape:cx="34.827552"
inkscape:zoom="11.313708"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.25490196"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
fill="#4e9a06"
stroke="#4e9a06" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Go Next</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>go</rdf:li>
<rdf:li>next</rdf:li>
<rdf:li>right</rdf:li>
<rdf:li>arrow</rdf:li>
<rdf:li>pointer</rdf:li>
<rdf:li>&gt;</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
inkscape:label="Layer 1"
id="layer1">
<path
transform="matrix(1.526579,-0.4925951,0.5097648,0.9635726,-31.747181,13.769802)"
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
sodipodi:ry="8.3968935"
sodipodi:rx="15.644737"
sodipodi:cy="36.421127"
sodipodi:cx="24.837126"
id="path8660"
style="opacity:0.29946522;color:#000000;fill:url(#radialGradient2253);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
style="color:#000000;fill:url(#radialGradient2277);fill-opacity:1;fill-rule:evenodd;stroke:#3a7304;stroke-width:0.94567013;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 18.593761,17.375149 L 29.463854,29.212448 L 20.420105,37.517248 L 25.885744,43.469211 L 1.1690944,44.460047 L 4.2648682,19.758428 L 9.6361601,25.607649 L 18.593761,17.375149 z "
id="path2173"
sodipodi:nodetypes="cccccccc" />
<path
transform="matrix(0.7459833,0.6659647,-0.9950298,9.9577731e-2,0,0)"
style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:0.69893335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 16.209641,-6.8346353 L 45.067204,-3.320717 L 56.465845,1.604697 L 52.622595,11.714304 L 22.52373,8.5133874 L 10.850841,0.98396036 L 16.209641,-6.8346353 z "
id="rect2273"
sodipodi:nodetypes="ccccccc" />
<path
sodipodi:nodetypes="cccccccc"
id="path8643"
d="M 18.549753,17.415561 L 29.419846,29.25286 L 38.463595,20.94806 L 43.929233,26.900023 L 47.018243,2.3571525 L 22.142846,3.3412285 L 27.514138,9.1904502 L 18.549753,17.415561 z "
style="color:#000000;fill:#59ab0a;fill-opacity:1;fill-rule:evenodd;stroke:#3a7304;stroke-width:0.94567013;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -1,179 +0,0 @@
#include "mainwindow.h"
#include <QFileDialog>
#include <QUrl>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QtDebug>
#include <QMenu>
#include <QAction>
#include <QVariant>
#include <QStringList>
#include <QtGlobal>
#include <QToolBar>
#include <QDoubleSpinBox>
#include <QLabel>
#include <QSettings>
#include <QMimeData>
#include <CGAL/Qt/vec.h>
#include <algorithm> // std::max
#include <cmath> // std::sqrt
#include <boost/format.hpp>
#include "ui_mainwindow.h"
#include "volume.h"
#ifndef CGAL_DO_NOT_USE_POLYHEDRAL_SURFACE
# include "polyhedral_surface.h"
#endif
MainWindow::MainWindow(MainWindow* other_window /* = 0 */) :
CGAL::Qt::DemosMainWindow(),
surface(0)
{
setupUi(this);
setAcceptDrops(true);
if(other_window != 0)
{
viewer->setCamera(other_window->viewer->camera());
connect(other_window, SIGNAL(destroyed()),
this, SLOT(close()));
}
this->addAboutCGAL();
this->addRecentFiles(this->menu_File,
this->action_Quit);
connect(this, SIGNAL(openRecentFile(QString)),
this, SLOT(surface_open(QString)));
this->readState();
show_only("");
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("text/uri-list"))
event->acceptProposedAction();
}
void MainWindow::dropEvent(QDropEvent *event)
{
QString filename = event->mimeData()->urls().at(0).toLocalFile();
surface_open(filename);
event->acceptProposedAction();
}
void MainWindow::surface_open(const QString& filename)
{
if(surface != 0) {
delete surface;
surface = 0;
}
#ifndef CGAL_DO_NOT_USE_POLYHEDRAL_SURFACE
surface = new Polyhedral_surface(this);
if(surface->open(filename)) {
this->addToRecentFiles(filename);
return;
}
delete surface;
surface = 0;
#endif
surface = new Volume(this);
if(surface->open(filename)) {
this->addToRecentFiles(filename);
}
}
void MainWindow::show_only(QString tag)
{
#if 0
QTextStream err(stderr);
#else
QString dummy;
QTextStream err(&dummy);
#endif
err << "** Show only in \"" << tag << "\"\n";
Q_FOREACH(QObject* object,
this->findChildren<QObject*>())
{
QStringList show_only_in = object->property("show_only_in").toStringList();
if(!show_only_in.isEmpty())
{
err << object->metaObject()->className()
<< " \"" << object->objectName() << "\" only in: ";
Q_FOREACH(QString s, show_only_in)
err << s << " ";
const bool visible = show_only_in.contains(tag);
err << (visible ? "(enabled)\n" : "(disabled)\n");
if(QMenu* menu = qobject_cast<QMenu*>(object)) {
menu->menuAction()->setVisible(visible);
}
else {
object->setProperty("visible", QVariant::fromValue<bool>(visible));
}
}
}
}
void MainWindow::on_action_Open_triggered()
{
QSettings settings;
QString directory = settings.value("Open directory",
QDir::current().dirName()).toString();
QString filename = QFileDialog::getOpenFileName(this, tr("Open File"),
directory,
tr("all Files (*.*)"));
if(!filename.isEmpty()) {
QFileInfo fileinfo(filename);
if(fileinfo.isFile() && fileinfo.isReadable()) {
settings.setValue("Open directory",
fileinfo.absoluteDir().absolutePath());
surface_open(filename);
}
}
}
void MainWindow::on_action_OpenDirectory_triggered()
{
QSettings settings;
QString start_dir = settings.value("Open directory",
QDir::current().dirName()).toString();
QString dir =
QFileDialog::getExistingDirectory(this,
tr("Open directory"),
start_dir,
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);
if (!dir.isEmpty()) {
QFileInfo fileinfo(dir);
if (fileinfo.isDir() && fileinfo.isReadable())
{
settings.setValue("Open directory",
fileinfo.absoluteDir().absolutePath());
surface_open(dir);
}
}
}
void MainWindow::on_action_Quit_triggered()
{
this->writeState();
qApp->exit();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
this->writeState();
event->accept();
}
void MainWindow::on_action_Clone_triggered()
{
MainWindow* other = new MainWindow(this);
other->show();
}

View File

@ -1,42 +0,0 @@
#ifndef _MAINWINDOW_H
#define _MAINWINDOW_H
#include <QMainWindow>
#include "ui_mainwindow.h"
#include <CGAL/Qt/DemosMainWindow.h>
class QDragEnterEvent;
class QDropEvent;
class Surface;
class QDoubleSpinBox;
class QCloseEvent;
namespace CGAL{
class QGLViewer;
}
class MainWindow : public CGAL::Qt::DemosMainWindow, public Ui::MainWindow
{
Q_OBJECT
public:
MainWindow(MainWindow* other_window = 0);
void dragEnterEvent(QDragEnterEvent *);
void dropEvent(QDropEvent *event);
public Q_SLOTS:
void show_only(QString);
void surface_open(const QString& filename);
private Q_SLOTS:
void on_action_Open_triggered();
void on_action_OpenDirectory_triggered();
void on_action_Quit_triggered();
void on_action_Clone_triggered();
private:
void closeEvent(QCloseEvent *event);
Surface* surface;
};
#endif // _MAINWINDOW_H

View File

@ -1,407 +0,0 @@
#include "polyhedral_surface.h"
#include "get_polyhedral_surface.h"
#include <QMainWindow>
#include <QString>
#include <QStatusBar>
#include <QApplication>
#include <QAction>
#include <QDialog>
#include "ui_optionsdialog.h"
#include <QDoubleSpinBox>
#include <iostream>
#include <fstream>
#include <boost/format.hpp>
#include "mainwindow.h"
typedef CGAL_polyhedral_surface::Polyhedron Polyhedron;
Polyhedral_surface::Polyhedral_surface(QObject* parent,
double sharp_edges_angle_lower_bound,
double sharp_edges_angle_upper_bound)
: Surface(parent),
m_inverse_normals(false),
surface_ptr(0),
parent(parent),
display_octree(false),
display_edges_octree(false),
display_surface(true),
display_all_edges(true),
display_control_edges(false),
sharp_edges_angle_lower_bound(sharp_edges_angle_lower_bound),
sharp_edges_angle_upper_bound(sharp_edges_angle_upper_bound),
is_octree_initialized(false),
selected_edge(-1),
selected_facet(-1),
is_dirty(true),
list_id(0)
{
connection_map["actionDisplay_octree"] =
std::make_pair(SIGNAL(toggled(bool)),
SLOT(toggle_display_octree(bool)));
connection_map["actionDisplay_edges_octree"] =
std::make_pair(SIGNAL(toggled(bool)),
SLOT(toggle_display_edges_octree(bool)));
connection_map["actionDisplay_surface"] =
std::make_pair(SIGNAL(toggled(bool)),
SLOT(toggle_display_surface(bool)));
connection_map["actionDisplay_all_edges"] =
std::make_pair(SIGNAL(toggled(bool)),
SLOT(toggle_display_all_edges(bool)));
connection_map["actionDisplay_control_edges"] =
std::make_pair(SIGNAL(toggled(bool)),
SLOT(toggle_display_control_edges(bool)));
connection_map["actionInverse_normals"] =
std::make_pair(SIGNAL(toggled(bool)),
SLOT(set_inverse_normals(bool)));
connection_map["actionSubdivision"] =
std::make_pair(SIGNAL(triggered()),
SLOT(make_one_subdivision_step()));
connection_map["action_Options"] =
std::make_pair(SIGNAL(triggered()),
SLOT(on_action_Options_triggered()));
}
Polyhedral_surface::~Polyhedral_surface()
{
clear();
delete surface_ptr;
}
void Polyhedral_surface::on_action_Options_triggered()
{
QDialog *options_dialog = new QDialog(qobject_cast<QWidget*>(parent));
Ui::OptionDialog ui;
ui.setupUi(options_dialog);
QDoubleSpinBox* sb_upper = options_dialog->findChild<QDoubleSpinBox*>("angle_upper_bound");
QDoubleSpinBox* sb_lower = options_dialog->findChild<QDoubleSpinBox*>("angle_lower_bound");
if(!sb_lower || !sb_upper)
return;
sb_lower->setValue(sharp_edges_angle_lower_bound);
sb_upper->setValue(sharp_edges_angle_upper_bound);
if(options_dialog->exec() == QDialog::Accepted)
{
sharp_edges_angle_upper_bound = sb_upper->value();
sharp_edges_angle_lower_bound = sb_lower->value();
set_sharp_edges_angle_bounds(sharp_edges_angle_lower_bound,
sharp_edges_angle_upper_bound);
}
}
void Polyhedral_surface::clear() {
for(Connection_map::const_iterator
it = connection_map.begin(),
end = connection_map.end();
it != end;
++it)
{
QAction* action = parent->findChild<QAction*>(it->first);
action->setVisible(false);
}
}
void Polyhedral_surface::connect_actions()
{
for(Connection_map::const_iterator
it = connection_map.begin(),
end = connection_map.end();
it != end;
++it)
{
QAction* action = parent->findChild<QAction*>(it->first);
action->setVisible(true);
if(action)
connect(action, it->second.first,
this, it->second.second);
}
MainWindow* mw = qobject_cast<MainWindow *>(parent);
if(mw) {
// mw->fix_menus_visibility();
mw->show_only("polyhedral");
}
connect(this, SIGNAL(changed()), this, SLOT(display_nb_elements_in_status_bar()));
}
void Polyhedral_surface::display_nb_elements_in_status_bar() const
{
QMainWindow* mw = qobject_cast<QMainWindow *>(parent);
if(surface_ptr && mw)
{
mw->statusBar()->showMessage(QString("%1 vertices. %2 edges. %3 facets.")
.arg(surface_ptr->size_of_vertices())
.arg(surface_ptr->size_of_halfedges()/2)
.arg(surface_ptr->size_of_facets()));
}
}
void Polyhedral_surface::set_dirty()
{
is_dirty = true;
Q_EMIT changed();
}
void Polyhedral_surface::busy() const
{
QMainWindow* mw = qobject_cast<QMainWindow *>(parent);
if(mw)
{
mw->statusBar()->showMessage(QString("Constructing octree..."));
}
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
}
void Polyhedral_surface::not_busy() const
{
QApplication::restoreOverrideCursor();
QMainWindow* mw = qobject_cast<QMainWindow *>(parent);
if(mw)
{
mw->statusBar()->clearMessage();
}
}
void Polyhedral_surface::set_sharp_edges_angle_bounds(const double lower_bound,
const double upper_bound)
{
sharp_edges_angle_lower_bound = lower_bound;
sharp_edges_angle_upper_bound = upper_bound;
if(surface_ptr) {
surface_ptr->set_sharp_edges_angle_bounds(lower_bound, upper_bound);
surface_ptr->set_sharp_vertices_angle_bounds(lower_bound, upper_bound);
update_data_structures();
Q_EMIT set_dirty();
}
}
void Polyhedral_surface::update_data_structures()
{
surface_ptr->compute_sharp_edges_incidence_graph();
if(display_octree || display_edges_octree) {
construct_octree();
is_octree_initialized = true;
}
else
is_octree_initialized = false;
}
void Polyhedral_surface::construct_octree()
{
busy();
surface_ptr->construct_octree();
not_busy();
}
void Polyhedral_surface::toggle_display_octree(bool b)
{
if(surface_ptr && b && !is_octree_initialized) {
is_octree_initialized = true;
construct_octree();
}
display_octree = b;
Q_EMIT set_dirty();
}
void Polyhedral_surface::toggle_display_edges_octree(bool b)
{
if(surface_ptr && b && !is_octree_initialized) {
is_octree_initialized = true;
construct_octree();
}
display_edges_octree = b;
Q_EMIT set_dirty();
}
void Polyhedral_surface::toggle_display_surface(bool b)
{
display_surface = b;
Q_EMIT set_dirty();
}
void Polyhedral_surface::toggle_display_all_edges(bool b)
{
display_all_edges = b;
Q_EMIT set_dirty();
}
void Polyhedral_surface::toggle_display_control_edges(bool b)
{
display_control_edges = b;
Q_EMIT set_dirty();
}
void Polyhedral_surface::make_one_subdivision_step()
{
if(surface_ptr)
{
Polyhedron output;
CSubdivider_loop<Polyhedron , Poly_kernel> pw_loop_subdiviser;
pw_loop_subdiviser.subdivide(*surface_ptr, output);
static_cast<Polyhedron&>(*surface_ptr) = output;
surface_ptr->compute_normals();
surface_ptr->compute_type();
update_data_structures();
Q_EMIT set_dirty();
}
}
bool Polyhedral_surface::open(const QString& filename)
{
clear();
std::cerr << "Opening file \"" << qPrintable(filename) << "\"...";
std::ifstream in(filename.toUtf8());
if(!in) return false;
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
if(surface_ptr)
delete surface_ptr;
surface_ptr = new CGAL_polyhedral_surface(in,
sharp_edges_angle_lower_bound,
sharp_edges_angle_upper_bound,
false /*do not construct
octree*/);
if(!in) {
QApplication::restoreOverrideCursor();
return false;
}
is_octree_initialized = false;
selected_facet = selected_edge = -1;
update_data_structures();
connect_actions();
std::cerr << " Done.\n";
QApplication::restoreOverrideCursor();
float xmin, ymin, zmin, xmax, ymax, zmax;
get_bbox(xmin, ymin, zmin, xmax, ymax, zmax);
const float xcenter = (xmin + xmax) / 2;
const float ycenter = (ymin + ymax) / 2;
const float zcenter = (zmin + zmax) / 2;
const float xdelta = (-xmin + xmax);
const float ydelta = (-ymin + ymax);
const float zdelta = (-zmin + zmax);
// const float radius = std::max(std::max(xdelta, ydelta), zdelta) * std::sqrt(3.)/ 2.;
std::cerr << boost::format("Bounding box: xmin=%1%, ymin=%2%, zmin=%3%\n"
" xmax=%4%, ymax=%5%, zmax=%6%\n"
" center=(%7%, %8%, %9%)\n")
% xmin % ymin % zmin % xmax % ymax % zmax
% xcenter % ycenter % zcenter
<< boost::format(" span=(%1%,%2%,%3%)\n")
% xdelta % ydelta % zdelta;
viewer->camera()->setSceneBoundingBox(CGAL::qglviewer::Vec(xmin, ymin, zmin),
CGAL::qglviewer::Vec(xmax, ymax, zmax));
viewer->setBackgroundColor(Qt::white);
viewer->showEntireScene();
QAction* actionInverse_normals = qFindChild<QAction*>(this, "actionInverse_normals");
if(actionInverse_normals) actionInverse_normals->setChecked(false);
Q_EMIT set_dirty();
return true;
}
void Polyhedral_surface::close()
{
delete surface_ptr;
surface_ptr = 0;
}
void Polyhedral_surface::draw() {
draw(false);
}
void Polyhedral_surface::drawWithNames() {
draw(true);
}
void Polyhedral_surface::postSelection(const QPoint&)
{
if(!surface_ptr) return;
selected_facet = selected_edge = -1;
const int nb_vertices = surface_ptr->incidence_graph.vertices.size();
const int nb_edges = surface_ptr->incidence_graph.edges.size();
if(viewer->selectedName() >= nb_edges + nb_vertices)
selected_facet = viewer->selectedName() - nb_edges - nb_vertices;
else if(viewer->selectedName() >= nb_vertices)
selected_edge = viewer->selectedName() - nb_vertices;
std::cerr << boost::format("post-selection.\n"
"selectedName()=%1%\n"
"selected edge=%2%\n"
"selected facet=%3%\n")
% viewer->selectedName() % selected_edge % selected_facet;
Q_EMIT set_dirty();
}
void Polyhedral_surface::draw(bool with_names)
{
if(!list_id)
{
std::cerr << "Generating OpenGL display list ID: ";
std::cerr << (list_id = ::glGenLists(1)) << "\n";
}
if(!with_names)
{
if(is_dirty)
::glNewList(list_id, GL_COMPILE_AND_EXECUTE);
else if(::glIsList(list_id))
{
::glCallList(list_id);
return;
}
else
std::cerr << "Call list (" << list_id << ")failed.\n";
}
}
void Polyhedral_surface::get_bbox(float& xmin, float& ymin, float& zmin,
float& xmax, float& ymax, float& zmax)
{
if(surface_ptr) {
xmin=surface_ptr->bbox().xmin();
ymin=surface_ptr->bbox().ymin();
ymin=surface_ptr->bbox().zmin();
xmax=surface_ptr->bbox().xmax();
ymax=surface_ptr->bbox().ymax();
zmax=surface_ptr->bbox().zmax();
}
else
{
xmin = ymin = zmin = 0.f;
xmax = ymax = zmax = 1.f;
}
}
void Polyhedral_surface::set_inverse_normals(const bool b) {
m_inverse_normals = b;
set_dirty();
}
bool Polyhedral_surface::inverse_normals() const {
return m_inverse_normals;
}
Surface* get_polyhedral_surface(QObject* parent,
double sharp_edges_angle_lower_bound,
double sharp_edges_angle_upper_bound = 180.)
{
return new Polyhedral_surface(parent,
sharp_edges_angle_lower_bound,
sharp_edges_angle_upper_bound);
}
#include "polyhedral_surface.moc"

View File

@ -1,102 +0,0 @@
#ifndef _POLYHEDRAL_SURFACE_H
#define _POLYHEDRAL_SURFACE_H
#define CGAL_SURFACE_MESHER_DEBUG_POLYHEDRAL_SURFACE_CONSTRUCTION
#include "surface.h"
#include "viewer.h"
#include <map>
#include <utility>
typedef std::pair<const char*, const char*> Signal_slot_pair;
typedef std::map<const char*, Signal_slot_pair> Connection_map;
// CGAL
#include <CGAL/basic.h>
// kernel
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
// surface
#include <CGAL/Polyhedral_surface_3.h>
// piece-wise loop subdivision
#include <CGAL/pws_loop_subdivision.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Poly_kernel;
typedef Poly_kernel::FT FT;
typedef Poly_kernel::Point_3 Poly_point;
typedef Poly_kernel::Sphere_3 Sphere;
typedef Poly_kernel::Vector_3 Vector;
typedef Poly_kernel::Triangle_3 Triangle_3;
typedef CGAL::Polyhedral_surface_3<Poly_kernel,
CGAL::Surface_mesher::Has_edges> CGAL_polyhedral_surface;
class Polyhedral_surface : public Surface
{
Q_OBJECT;
public:
Polyhedral_surface(QObject* parent,
double sharp_edges_angle_lower_bound = 90,
double sharp_edges_angle_upper_bound = 120);
~Polyhedral_surface();
public Q_SLOTS:
void clear();
void connect_actions();
void display_nb_elements_in_status_bar() const;
void set_dirty();
void busy() const;
void not_busy() const;
void set_sharp_edges_angle_bounds(const double lower_bound,
const double upper_bound);
void update_data_structures();
void construct_octree();
void toggle_display_octree(bool b);
void toggle_display_edges_octree(bool b);
void toggle_display_surface(bool b);
void toggle_display_all_edges(bool b);
void toggle_display_control_edges(bool b);
void make_one_subdivision_step();
void on_action_Options_triggered();
public:
bool open(const QString& filename);
void close();
void draw();
void drawWithNames();
void postSelection(const QPoint&);
void draw(bool with_names);
void get_bbox(float& xmin, float& ymin, float& zmin,
float& xmax, float& ymax, float& zmax);
public Q_SLOTS:
void set_inverse_normals(const bool b);
public:
bool inverse_normals() const;
protected:
bool m_inverse_normals;
CGAL_polyhedral_surface* surface_ptr;
QObject* parent;
bool display_octree;
bool display_edges_octree;
bool display_surface;
bool display_all_edges;
bool display_control_edges;
double sharp_edges_angle_lower_bound;
double sharp_edges_angle_upper_bound;
bool is_octree_initialized;
int selected_edge;
int selected_facet;
bool is_dirty;
GLint list_id;
Connection_map connection_map;
};
#endif // _POLYHEDRAL_SURFACE_H

View File

@ -1,37 +0,0 @@
#ifndef _SURFACE_H
#define _SURFACE_H
#include <QObject>
#include <QString>
#include <QGLWidget>
#include "viewer.h"
class Surface : public QObject
{
Q_OBJECT
protected:
Surface(QObject* parent)
{
viewer = parent->findChild<Viewer*>("viewer");
if(viewer)
connect(this, SIGNAL(changed()), viewer, SLOT(updateGL()));
viewer->set_surface(this);
}
public Q_SLOTS:
virtual bool open(const QString& filename) = 0;
virtual void close() = 0;
virtual void draw() = 0;
virtual void get_bbox(float&, float&, float&,
float&, float&, float&) = 0;
virtual void drawWithNames() {};
virtual void postSelection(const QPoint&) {};
Q_SIGNALS:
void changed();
protected:
Viewer* viewer;
};
#endif // _SURFACE_H

View File

@ -1,13 +0,0 @@
<RCC>
<qresource prefix="/" >
<file>icons/bbox-red.png</file>
<file>icons/bbox.png</file>
<file>icons/cgal_logo.xpm</file>
<file>icons/fileopen.png</file>
<file>icons/filesave.png</file>
<file>icons/flip.png</file>
<file>icons/resize.png</file>
<file>icons/surface.png</file>
<file>icons/twosides.png</file>
</qresource>
</RCC>

View File

@ -1,808 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1147</width>
<height>648</height>
</rect>
</property>
<property name="windowTitle">
<string>CGAL Surface mesh generator</string>
</property>
<property name="windowIcon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/cgal_logo.xpm</normaloff>:/icons/cgal_logo.xpm</iconset>
</property>
<property name="dockNestingEnabled">
<bool>true</bool>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="Viewer" name="viewer" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1147</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menu_File">
<property name="title">
<string>&amp;File</string>
</property>
<addaction name="action_Open"/>
<addaction name="action_OpenDirectory"/>
<addaction name="actionSave"/>
<addaction name="actionExport_surface_mesh_to_OFF"/>
<addaction name="separator"/>
<addaction name="action_Quit"/>
</widget>
<widget class="QMenu" name="menuOptions">
<property name="title">
<string>&amp;Options</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
<string>polyhedral</string>
</stringlist>
</property>
<addaction name="actionInverse_normals"/>
<addaction name="actionDisplay_octree"/>
<addaction name="actionDisplay_surface"/>
<addaction name="actionDisplay_control_edges"/>
<addaction name="actionDisplay_all_edges"/>
<addaction name="action_Options"/>
<addaction name="actionAuto_resize"/>
<addaction name="actionDisplay_front_and_back"/>
<addaction name="actionDraw_triangles_edges"/>
<addaction name="actionUse_Gouraud_shading"/>
<addaction name="actionShow_triangulation"/>
<addaction name="actionTriangulation_edges_color"/>
<addaction name="actionShow_the_image_bounding_box"/>
</widget>
<widget class="QMenu" name="menuEdit">
<property name="title">
<string>&amp;Edit</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
<addaction name="actionSubdivision"/>
</widget>
<addaction name="menu_File"/>
<addaction name="menuEdit"/>
<addaction name="menuOptions"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>Actions toolbar</string>
</property>
<property name="allowedAreas">
<set>Qt::AllToolBarAreas</set>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_Open"/>
<addaction name="actionExport_surface_mesh_to_OFF"/>
<addaction name="separator"/>
<addaction name="actionAuto_resize"/>
<addaction name="actionDisplay_front_and_back"/>
<addaction name="actionInverse_normals"/>
<addaction name="actionShow_the_image_bounding_box"/>
<addaction name="separator"/>
<addaction name="actionDisplay_surface"/>
<addaction name="actionDisplay_octree"/>
<addaction name="actionDisplay_edges_octree"/>
</widget>
<widget class="QToolBar" name="toolBar_meshing">
<property name="enabled">
<bool>true</bool>
</property>
<property name="windowTitle">
<string>Meshing toolbar</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionMarching_cubes"/>
<addaction name="actionSurface_mesher"/>
</widget>
<widget class="QDockWidget" name="ImageOptions">
<property name="allowedAreas">
<set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
</property>
<property name="windowTitle">
<string>Images options</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
<attribute name="dockWidgetArea">
<number>1</number>
</attribute>
<widget class="QWidget" name="ImageOptionsContents">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBoxImageType">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>&amp;Image type</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QRadioButton" name="grayLevelRadioButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Grayscale image</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="labellizedRadioButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Segmented image</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>&amp;Operations</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="interpolationCheckBox">
<property name="text">
<string>Trilinear interpolation</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="searchSeedsCheckBox">
<property name="text">
<string>Search for seeds</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxCriteria">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>C&amp;riteria</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="manifoldCheckBox">
<property name="text">
<string>Manifold</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="sameIndexCheckBox">
<property name="text">
<string>Facets vertices have same index</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>&amp;Sizing bound:</string>
</property>
<property name="buddy">
<cstring>spinBox_radius_bound</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="spinBox_radius_bound">
<property name="decimals">
<number>5</number>
</property>
<property name="maximum">
<double>9999.989999999999782</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>&amp;Distance bound:</string>
</property>
<property name="buddy">
<cstring>spinBox_distance_bound</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="spinBox_distance_bound">
<property name="decimals">
<number>5</number>
</property>
<property name="maximum">
<double>9999.989999999999782</double>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
<widget class="QDockWidget" name="ImageLabels">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Image sub-domaines</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
<attribute name="dockWidgetArea">
<number>1</number>
</attribute>
<widget class="QWidget" name="ImageLabelsContents">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>10</horstretch>
<verstretch>10</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="Values_list" name="values" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>5</verstretch>
</sizepolicy>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<action name="action_Open">
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/fileopen.png</normaloff>:/icons/fileopen.png</iconset>
</property>
<property name="text">
<string>&amp;Open...</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="action_Quit">
<property name="text">
<string>&amp;Quit</string>
</property>
<property name="shortcut">
<string>Ctrl+Q</string>
</property>
<property name="menuRole">
<enum>QAction::QuitRole</enum>
</property>
</action>
<action name="actionInverse_normals">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/flip.png</normaloff>:/icons/flip.png</iconset>
</property>
<property name="text">
<string>&amp;Inverse normals</string>
</property>
<property name="iconText">
<string>Flip</string>
</property>
<property name="shortcut">
<string>Ctrl+I</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionDisplay_octree">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/bbox.png</normaloff>:/icons/bbox.png</iconset>
</property>
<property name="text">
<string>Display oc&amp;tree</string>
</property>
<property name="shortcut">
<string>Ctrl+T</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionDisplay_surface">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/surface.png</normaloff>:/icons/surface.png</iconset>
</property>
<property name="text">
<string>Display &amp;surface</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="action_Options">
<property name="text">
<string>&amp;Options...</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionSubdivision">
<property name="text">
<string>Piecewise-smooth &amp;subdivision</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionDisplay_all_edges">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Display &amp;all edges</string>
</property>
<property name="shortcut">
<string>Ctrl+A</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionDisplay_control_edges">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="text">
<string>Display &amp;control edges</string>
</property>
<property name="shortcut">
<string>Ctrl+C</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionDisplay_edges_octree">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/bbox-red.png</normaloff>:/icons/bbox-red.png</iconset>
</property>
<property name="text">
<string>Display edges octree</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionMarching_cubes">
<property name="text">
<string>Marching &amp;cubes</string>
</property>
<property name="iconText">
<string>Marching &amp;cubes</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionSurface_mesher">
<property name="text">
<string>Surface &amp;mesher</string>
</property>
<property name="iconText">
<string>Surface &amp;mesher</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionDisplay_front_and_back">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/twosides.png</normaloff>:/icons/twosides.png</iconset>
</property>
<property name="text">
<string>Display facets with &amp;front and back</string>
</property>
<property name="iconText">
<string>Two-sides</string>
</property>
<property name="shortcut">
<string>Ctrl+F</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="action_Clone">
<property name="text">
<string>Clone</string>
</property>
</action>
<action name="actionAuto_resize">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/resize.png</normaloff>:/icons/resize.png</iconset>
</property>
<property name="text">
<string>Auto-&amp;resize</string>
</property>
<property name="iconText">
<string>Auto-&amp;resize</string>
</property>
<property name="toolTip">
<string>Automaticaly zoom in or out when the object change.</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
<string>polyhedral</string>
</stringlist>
</property>
</action>
<action name="actionDraw_triangles_edges">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Draw triangles &amp;edges</string>
</property>
<property name="iconText">
<string>Draw triangles &amp;edges</string>
</property>
<property name="shortcut">
<string>Ctrl+E</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionUse_Gouraud_shading">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="text">
<string>Use &amp;Gouraud shading (marching cube only)</string>
</property>
<property name="iconText">
<string>Use &amp;Gouraud shading</string>
</property>
<property name="statusTip">
<string>Use Gouraud shading to display the marching cubes.</string>
</property>
<property name="shortcut">
<string>Ctrl+G</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionShow_triangulation">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Show the whole &amp;triangulation (surface mesher only)</string>
</property>
<property name="shortcut">
<string>Ctrl+T</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionTriangulation_edges_color">
<property name="text">
<string>Choose the triangulation edges &amp;color...</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionExport_surface_mesh_to_OFF">
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/filesave.png</normaloff>:/icons/filesave.png</iconset>
</property>
<property name="text">
<string>Export surface mesh to OFF...</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionShow_the_image_bounding_box">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/bbox.png</normaloff>:/icons/bbox.png</iconset>
</property>
<property name="text">
<string>Show the image &amp;bounding box</string>
</property>
<property name="shortcut">
<string>Ctrl+B</string>
</property>
<property name="show_only_in" stdset="0">
<stringlist>
<string>volume</string>
</stringlist>
</property>
</action>
<action name="actionSave">
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/filesave.png</normaloff>:/icons/filesave.png</iconset>
</property>
<property name="text">
<string>Save the image as Inrimage...</string>
</property>
</action>
<action name="action_OpenDirectory">
<property name="icon">
<iconset resource="../surface_mesher.qrc">
<normaloff>:/icons/fileopen.png</normaloff>:/icons/fileopen.png</iconset>
</property>
<property name="text">
<string>Open directory...</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>Values_list</class>
<extends>QWidget</extends>
<header>values_list.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>Viewer</class>
<extends>QWidget</extends>
<header>viewer.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>viewer</tabstop>
<tabstop>grayLevelRadioButton</tabstop>
<tabstop>labellizedRadioButton</tabstop>
<tabstop>manifoldCheckBox</tabstop>
<tabstop>sameIndexCheckBox</tabstop>
<tabstop>spinBox_radius_bound</tabstop>
<tabstop>spinBox_distance_bound</tabstop>
</tabstops>
<resources>
<include location="../surface_mesher.qrc"/>
</resources>
<connections>
<connection>
<sender>labellizedRadioButton</sender>
<signal>toggled(bool)</signal>
<receiver>sameIndexCheckBox</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>130</x>
<y>172</y>
</hint>
<hint type="destinationlabel">
<x>139</x>
<y>414</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,128 +0,0 @@
<ui version="4.0" >
<class>OptionDialog</class>
<widget class="QDialog" name="OptionDialog" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>210</width>
<height>167</height>
</rect>
</property>
<property name="windowTitle" >
<string>Set options</string>
</property>
<property name="windowIcon" >
<iconset resource="../../../../../Surface_mesher/demo/Surface_mesher/qt5-demo/surface_mesher.qrc" >:/icons/cgal_logo.xpm</iconset>
</property>
<layout class="QVBoxLayout" >
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="title" >
<string>Sharp edges angle bounds</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>&amp;Lower bound</string>
</property>
<property name="buddy" >
<cstring>angle_lower_bound</cstring>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QDoubleSpinBox" name="angle_lower_bound" >
<property name="maximum" >
<double>180.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>&amp;Upper bound</string>
</property>
<property name="buddy" >
<cstring>angle_upper_bound</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QDoubleSpinBox" name="angle_upper_bound" >
<property name="maximum" >
<double>180.000000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" >
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../../../../Surface_mesher/demo/Surface_mesher/qt5-demo/surface_mesher.qrc" />
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>OptionDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<x>227</x>
<y>215</y>
</hint>
<hint type="destinationlabel" >
<x>157</x>
<y>90</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>OptionDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<x>243</x>
<y>221</y>
</hint>
<hint type="destinationlabel" >
<x>252</x>
<y>90</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,454 +0,0 @@
<ui version="4.0" >
<class>Raw_image_dialog</class>
<widget class="QDialog" name="Raw_image_dialog" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>585</width>
<height>342</height>
</rect>
</property>
<property name="windowTitle" >
<string>Open raw image</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<widget class="QGroupBox" name="groupBox_2" >
<property name="title" >
<string>Image &amp;value type</string>
</property>
<layout class="QGridLayout" name="gridLayout" >
<item row="2" column="0" >
<widget class="QRadioButton" name="short_bt" >
<property name="text" >
<string>Short (16 bits)</string>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QRadioButton" name="float_bt" >
<property name="text" >
<string>Float</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QRadioButton" name="int_bt" >
<property name="text" >
<string>Int (32 bits)</string>
</property>
</widget>
</item>
<item row="3" column="1" >
<widget class="QRadioButton" name="double_bt" >
<property name="text" >
<string>Double</string>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QCheckBox" name="signed_bt" >
<property name="text" >
<string>Signed</string>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QRadioButton" name="char_bt" >
<property name="text" >
<string>char (8 bits)</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="title" >
<string>Image dimensions</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2" >
<item>
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label_dim" >
<property name="text" >
<string>&amp;Dimensions:</string>
</property>
<property name="alignment" >
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy" >
<cstring>dim_x</cstring>
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="QLabel" name="label_spacing" >
<property name="text" >
<string>&amp;Spacing:</string>
</property>
<property name="alignment" >
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy" >
<cstring>spacing_x</cstring>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QSpinBox" name="dim_x" >
<property name="prefix" >
<string>x: </string>
</property>
<property name="maximum" >
<number>100000000</number>
</property>
</widget>
</item>
<item row="0" column="2" >
<widget class="QSpinBox" name="dim_y" >
<property name="prefix" >
<string>y: </string>
</property>
<property name="maximum" >
<number>100000000</number>
</property>
</widget>
</item>
<item row="0" column="3" >
<widget class="QSpinBox" name="dim_z" >
<property name="prefix" >
<string>z: </string>
</property>
<property name="maximum" >
<number>100000000</number>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QDoubleSpinBox" name="spacing_x" >
<property name="prefix" >
<string>vx: </string>
</property>
<property name="decimals" >
<number>5</number>
</property>
<property name="value" >
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="2" >
<widget class="QDoubleSpinBox" name="spacing_y" >
<property name="prefix" >
<string>vy: </string>
</property>
<property name="decimals" >
<number>5</number>
</property>
<property name="value" >
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="3" >
<widget class="QDoubleSpinBox" name="spacing_z" >
<property name="prefix" >
<string>vz: </string>
</property>
<property name="decimals" >
<number>5</number>
</property>
<property name="value" >
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QLabel" name="offset_label" >
<property name="text" >
<string>&amp;Offset:</string>
</property>
<property name="alignment" >
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy" >
<cstring>offset</cstring>
</property>
</widget>
</item>
<item row="3" column="1" >
<widget class="QSpinBox" name="offset" >
<property name="suffix" >
<string> bytes</string>
</property>
<property name="maximum" >
<number>999999999</number>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="imagesize_budy" >
<property name="text" >
<string>Image size:</string>
</property>
<property name="alignment" >
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLabel" name="label_image_size" >
<property name="text" >
<string>0</string>
</property>
</widget>
</item>
<item row="1" column="2" >
<widget class="QLabel" name="filesize_budy" >
<property name="text" >
<string>File size:</string>
</property>
<property name="alignment" >
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="3" >
<widget class="QLabel" name="label_file_size" >
<property name="text" >
<string>0</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Open</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>int_bt</tabstop>
<tabstop>short_bt</tabstop>
<tabstop>signed_bt</tabstop>
<tabstop>float_bt</tabstop>
<tabstop>double_bt</tabstop>
<tabstop>dim_x</tabstop>
<tabstop>dim_y</tabstop>
<tabstop>dim_z</tabstop>
<tabstop>spacing_x</tabstop>
<tabstop>spacing_y</tabstop>
<tabstop>spacing_z</tabstop>
<tabstop>offset</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>float_bt</sender>
<signal>toggled(bool)</signal>
<receiver>signed_bt</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>47</x>
<y>112</y>
</hint>
<hint type="destinationlabel" >
<x>553</x>
<y>94</y>
</hint>
</hints>
</connection>
<connection>
<sender>double_bt</sender>
<signal>toggled(bool)</signal>
<receiver>signed_bt</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>564</x>
<y>127</y>
</hint>
<hint type="destinationlabel" >
<x>564</x>
<y>94</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<x>191</x>
<y>316</y>
</hint>
<hint type="destinationlabel" >
<x>183</x>
<y>313</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<x>253</x>
<y>319</y>
</hint>
<hint type="destinationlabel" >
<x>252</x>
<y>312</y>
</hint>
</hints>
</connection>
<connection>
<sender>dim_x</sender>
<signal>valueChanged(int)</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>178</x>
<y>187</y>
</hint>
<hint type="destinationlabel" >
<x>99</x>
<y>141</y>
</hint>
</hints>
</connection>
<connection>
<sender>dim_z</sender>
<signal>valueChanged(int)</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>473</x>
<y>178</y>
</hint>
<hint type="destinationlabel" >
<x>441</x>
<y>142</y>
</hint>
</hints>
</connection>
<connection>
<sender>char_bt</sender>
<signal>clicked()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>71</x>
<y>52</y>
</hint>
<hint type="destinationlabel" >
<x>137</x>
<y>3</y>
</hint>
</hints>
</connection>
<connection>
<sender>short_bt</sender>
<signal>clicked()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>117</x>
<y>81</y>
</hint>
<hint type="destinationlabel" >
<x>49</x>
<y>6</y>
</hint>
</hints>
</connection>
<connection>
<sender>float_bt</sender>
<signal>clicked()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>137</x>
<y>111</y>
</hint>
<hint type="destinationlabel" >
<x>67</x>
<y>-5</y>
</hint>
</hints>
</connection>
<connection>
<sender>int_bt</sender>
<signal>clicked()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>358</x>
<y>49</y>
</hint>
<hint type="destinationlabel" >
<x>584</x>
<y>52</y>
</hint>
</hints>
</connection>
<connection>
<sender>dim_y</sender>
<signal>valueChanged(int)</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>332</x>
<y>186</y>
</hint>
<hint type="destinationlabel" >
<x>271</x>
<y>142</y>
</hint>
</hints>
</connection>
<connection>
<sender>double_bt</sender>
<signal>clicked()</signal>
<receiver>Raw_image_dialog</receiver>
<slot>update_image_size()</slot>
<hints>
<hint type="sourcelabel" >
<x>514</x>
<y>119</y>
</hint>
<hint type="destinationlabel" >
<x>581</x>
<y>116</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>update_image_size()</slot>
</slots>
</ui>

View File

@ -1,118 +0,0 @@
<ui version="4.0" >
<class>Values_list</class>
<widget class="QWidget" name="Values_list" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>429</width>
<height>632</height>
</rect>
</property>
<property name="windowTitle" >
<string>Form</string>
</property>
<layout class="QVBoxLayout" >
<item>
<widget class="QTreeWidget" name="treeWidget" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="lineWidth" >
<number>1</number>
</property>
<property name="editTriggers" >
<set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked</set>
</property>
<property name="alternatingRowColors" >
<bool>true</bool>
</property>
<property name="selectionMode" >
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="indentation" >
<number>0</number>
</property>
<property name="rootIsDecorated" >
<bool>false</bool>
</property>
<property name="uniformRowHeights" >
<bool>true</bool>
</property>
<property name="itemsExpandable" >
<bool>false</bool>
</property>
<property name="sortingEnabled" >
<bool>true</bool>
</property>
<property name="allColumnsShowFocus" >
<bool>false</bool>
</property>
<property name="columnCount" >
<number>3</number>
</property>
<column>
<property name="text" >
<string>Iso-value</string>
</property>
</column>
<column>
<property name="text" >
<string>Color</string>
</property>
</column>
<column>
<property name="text" >
<string>Name</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QHBoxLayout" >
<item>
<widget class="QToolButton" name="plusButton" >
<property name="text" >
<string>...</string>
</property>
<property name="icon" >
<iconset resource="../values_list.qrc" >:/values/plus.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="minusButton" >
<property name="text" >
<string>...</string>
</property>
<property name="icon" >
<iconset resource="../values_list.qrc" >:/values/minus.png</iconset>
</property>
<property name="shortcut" >
<string>Del</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources>
<include location="../surface_mesher.qrc" />
<include location="../values_list.qrc" />
</resources>
<connections/>
</ui>

View File

@ -1,280 +0,0 @@
#include "values_list.h"
#include "ui_values_list.h"
#include "colorlisteditor.h"
#include <iostream>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QTreeWidgetItemIterator>
#include <QHeaderView>
#include <QMetaProperty>
#include <QItemDelegate>
#include <QItemEditorFactory>
#include <QItemEditorCreatorBase>
#include <QPainter>
#include <QStringList>
#include <QString>
#include <QList>
#include <QVariant>
#include <QSettings>
#include <QUrl>
#include <QLineEdit>
#include <QDoubleValidator>
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
#include <QRandomGenerator>
#endif
Values_delegate::Values_delegate(QWidget* parent) : QItemDelegate(parent) {}
void Values_delegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
switch(index.column())
{
case Values_list::Color: {
painter->fillRect(option.rect, index.data().value<QColor>());
drawFocus(painter, option, option.rect);
break;
}
default:
QItemDelegate::paint(painter, option, index);
}
}
QWidget *Values_delegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & option,
const QModelIndex & index) const
{
if(index.column() == Values_list::Color)
{
return new ColorListEditor(parent);
}
else if(index.column() == Values_list::Value)
{
QLineEdit* lineedit = new QLineEdit(parent);
lineedit->setAutoFillBackground(true);
lineedit->setValidator(new QDoubleValidator(lineedit));
return lineedit;
}
else return QItemDelegate::createEditor(parent, option, index);
}
void Values_delegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
if(index.column() == Values_list::Color)
{
ColorListEditor* coloreditor = qobject_cast<ColorListEditor*>(editor);
if(coloreditor)
coloreditor->setColor(index.data().value<QColor>());
}
else if(index.column() == Values_list::Value)
{
QLineEdit* lineedit = qobject_cast<QLineEdit*>(editor);
if(lineedit)
lineedit->setText(index.data().toString());
}
else QItemDelegate::setEditorData(editor, index);
}
void Values_delegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
if(index.column() == Values_list::Color)
{
ColorListEditor* coloreditor = qobject_cast<ColorListEditor*>(editor);
if(coloreditor)
{
model->setData(index, coloreditor->color());
Q_EMIT new_color(index);
}
}
else if(index.column() == Values_list::Value)
{
QLineEdit* lineedit = qobject_cast<QLineEdit*>(editor);
if(lineedit)
{
model->setData(index, lineedit->text().toDouble());
Q_EMIT new_value(index);
}
}
else QItemDelegate::setModelData(editor, model, index);
}
const double Values_list::default_value = 0.0;
Values_list::Values_list(QWidget* parent):
QWidget(parent)
{
Ui::Values_list().setupUi(this);
treeWidget = parent->findChild<QTreeWidget*>("treeWidget");
Q_ASSERT_X(treeWidget, "Values_list constructor", "cannot find widget \"treeWidget\"");
treeWidget->sortByColumn(Value, Qt::AscendingOrder);
treeWidget->header()->setSectionsClickable(false);
Values_delegate* values_delegate = new Values_delegate(parent);
treeWidget->setItemDelegate(values_delegate);
connect(values_delegate, SIGNAL(new_value(const QModelIndex&)),
this, SIGNAL(values_changed()));
connect(values_delegate, SIGNAL(new_color(const QModelIndex&)),
this, SIGNAL(colors_changed()));
connect(this->treeWidget->model(),
SIGNAL(dataChanged (const QModelIndex &, const QModelIndex &)),
this, SIGNAL(changed()));
connect(this, SIGNAL(changed()),
this, SLOT(update_items_cache()));
}
QColor Values_list::color(const int i) const
{
if(i < 0 || i > treeWidget->topLevelItemCount())
return QColor();
else
return treeWidget->topLevelItem(i)->data(Color, Qt::DisplayRole).value<QColor>();
}
QColor Values_list::color(const QTreeWidgetItem* item) const
{
return item->data(Color, Qt::DisplayRole).value<QColor>();
}
int Values_list::numberOfValues() const
{
return treeWidget->topLevelItemCount();
}
double Values_list::value(const int i) const
{
if(i < 0 || i > numberOfValues())
return 0.;
else
return treeWidget->topLevelItem(i)->data(Value, Qt::DisplayRole).toDouble();
}
QString Values_list::name(const int i) const
{
if(i < 0 || i > treeWidget->topLevelItemCount())
return QString();
else
return treeWidget->topLevelItem(i)->data(Name, Qt::DisplayRole).toString();
}
bool Values_list::enabled(const int i) const
{
if(i < 0 || i > treeWidget->topLevelItemCount())
return false;
else
return treeWidget->topLevelItem(i)->data(Value, Qt::CheckStateRole).toInt() > 0;
}
bool Values_list::enabled(const QTreeWidgetItem* item) const
{
return item->data(Value, Qt::CheckStateRole).toInt() > 0;
}
const QTreeWidgetItem* Values_list::item(const int i) const
{
if(i < 0 || i > treeWidget->topLevelItemCount())
return 0;
else
return treeWidget->topLevelItem(i);
}
void Values_list::save_values(QString filename) const
{
QSettings settings;
settings.beginGroup(QUrl::toPercentEncoding(filename));
settings.beginWriteArray("values");
for (int i = 0; i < numberOfValues(); ++i) {
settings.setArrayIndex(i);
settings.setValue("value", value(i));
settings.setValue("color", color(i));
settings.setValue("name", name(i));
settings.setValue("enabled", enabled(i));
}
settings.endArray();
settings.endGroup();
}
void Values_list::load_values(QString filename)
{
QSettings settings;
treeWidget->clear();
settings.beginGroup(QUrl::toPercentEncoding(filename));
int nb = settings.beginReadArray("values");
for (int i = 0; i < nb; ++i) {
settings.setArrayIndex(i);
QTreeWidgetItem *newItem = new QTreeWidgetItem(treeWidget);
newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
newItem->setData(Value, Qt::CheckStateRole, settings.value("enabled").toBool() ? Qt::Checked : Qt::Unchecked);
newItem->setData(Value, Qt::DisplayRole, settings.value("value").toDouble());
newItem->setData(Color, Qt::DisplayRole, settings.value("color").value<QColor>());
newItem->setData(Name, Qt::DisplayRole, settings.value("name").toString());
}
settings.endArray();
settings.endGroup();
update_items_cache();
}
void Values_list::on_minusButton_clicked()
{
Q_FOREACH(QTreeWidgetItem* item, treeWidget->selectedItems())
{
// treeWidget->invisibleRootItem()->removeChild(item);
delete item;
}
Q_EMIT values_changed();
}
void Values_list::on_plusButton_clicked()
{
addValue();
}
void Values_list::addValue(const double i)
{
QTreeWidgetItem *newItem = new QTreeWidgetItem(treeWidget);
newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
newItem->setData(Value, Qt::CheckStateRole, Qt::Checked);
newItem->setData(Value, Qt::DisplayRole, i);
QStringList colors = QColor::colorNames();
#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0)
const int color_index = qrand() % colors.size();
#else
const int color_index = QRandomGenerator::global()->generate() % colors.size();
#endif
QColor color = QColor(colors[color_index]);
newItem->setData(Color, Qt::DisplayRole, color);
newItem->setData(Name, Qt::DisplayRole, "");
Q_EMIT values_changed();
}
void Values_list::update_items_cache() {
items_cache.clear();
for(int i = 0, nb = numberOfValues(); i < nb; ++i) {
items_cache.insert(std::make_pair(value(i), item(i)));
}
}
const QTreeWidgetItem* Values_list::search(const double value) const
{
Items_cache::const_iterator it = items_cache.find(value);
if(it != items_cache.end()) {
return it->second;
}
else {
return 0;
}
}
void Values_list::setHeaderTitle(QString title)
{
treeWidget->headerItem()->setText(0, title);
}

View File

@ -1,79 +0,0 @@
#ifndef _VALUES_LIST_H
#define _VALUES_LIST_H
#include <QWidget>
#include <QString>
#include <QList>
#include <QModelIndex>
#include <QItemDelegate>
class QTreeWidget;
class QTreeWidgetItem;
class Values_delegate : public QItemDelegate
{
Q_OBJECT
public:
Values_delegate(QWidget* parent);
Q_SIGNALS:
void new_color(const QModelIndex&) const;
void new_value(const QModelIndex&) const;
protected:
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
QWidget *createEditor(QWidget *parent,
const QStyleOptionViewItem & option,
const QModelIndex & index) const;
void setEditorData(QWidget *editor,
const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
};
class Values_list : public QWidget
{
Q_OBJECT
public:
enum Field { Value = 0 , Color = 1, Name = 2};
Values_list(QWidget* parent);
// const accessors
int numberOfValues() const;
QColor color(const int i) const;
QColor color(const QTreeWidgetItem* i) const;
double value(const int i) const;
QString name(const int i) const;
bool enabled(const int i) const;
bool enabled(const QTreeWidgetItem* i) const;
const QTreeWidgetItem* item(const int i) const;
const QTreeWidgetItem* search(const double value) const;
public Q_SLOTS:
void save_values(QString) const;
void load_values(QString);
void on_plusButton_clicked();
void on_minusButton_clicked();
// setters
void addValue(const double v = Values_list::default_value);
void setHeaderTitle(QString);
private Q_SLOTS:
void update_items_cache();
Q_SIGNALS:
void changed();
void colors_changed();
void values_changed();
private:
QTreeWidget* treeWidget;
typedef std::map<double, const QTreeWidgetItem*> Items_cache;
Items_cache items_cache;
static const double default_value;
};
#endif // _VALUES_LIST_H

View File

@ -1,6 +0,0 @@
<RCC>
<qresource prefix="/values" >
<file alias="minus.png">icons/minus.png</file>
<file alias="plus.png">icons/plus.png</file>
</qresource>
</RCC>

View File

@ -1,66 +0,0 @@
#include "viewer.h"
#include "surface.h"
#include <QAction>
#include <CGAL/Qt/manipulatedCameraFrame.h>
Viewer::Viewer(QWidget* parent)
: CGAL::QGLViewer(parent), surface(nullptr)
{
}
void Viewer::init()
{
setBackgroundColor(Qt::white);
glLineStipple(5, 0xaaaa);
glDisable(GL_LINE_STIPPLE);
// anti-aliasing
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
QString Viewer::helpString() const
{
return ""
"<h1>Surface mesher demo</h1>\n"
"<p>No help availlable for now.</p>";
}
void Viewer::interpolateToFitBoundingBox(double xmin, double ymin, double zmin,
double xmax, double ymax, double zmax)
{
QAction* auto_resize = parent()->parent()->findChild<QAction*>("actionAuto_resize");
Q_ASSERT_X(auto_resize, "Viewer::interpolateToFitBoundingBox", "cannot find action \"actionAuto_resize\"");
if(auto_resize && auto_resize->isChecked())
{
CGAL::qglviewer::Camera new_camera = *(camera ());
new_camera.fitBoundingBox(CGAL::qglviewer::Vec(xmin, ymin, zmin),
CGAL::qglviewer::Vec(xmax, ymax, zmax));
camera()->interpolateTo(*new_camera.frame(), 1.);
}
}
void Viewer::draw()
{
if(surface)
surface->draw();
}
void Viewer::drawWithNames()
{
if(surface)
surface->drawWithNames();
}
void Viewer::postSelection(const QPoint& p)
{
if(surface)
surface->postSelection(p);
}
void Viewer::set_surface(Surface* s)
{
surface = s;
}

View File

@ -1,30 +0,0 @@
#ifndef _VIEWER_H
#define _VIEWER_H
#include <QMap>
#include <CGAL/Qt/qglviewer.h>
class Surface;
class Viewer : public CGAL::QGLViewer
{
Q_OBJECT
public:
Viewer(QWidget* parent);
void set_surface(Surface*);
public Q_SLOTS:
void interpolateToFitBoundingBox(double, double, double, double, double, double);
protected :
virtual void init();
virtual void draw();
virtual void drawWithNames();
virtual void postSelection(const QPoint&);
virtual QString helpString() const;
Surface* surface;
};
#endif // _VIEWER_H

File diff suppressed because it is too large Load Diff

View File

@ -1,392 +0,0 @@
#ifndef _VOLUME_H
#define _VOLUME_H
#include <CGAL/basic.h>
#include <CGAL/Object.h>
#include <CGAL/Timer.h>
#include "surface.h"
#include "binary_image.h"
#include <boost/multi_array.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include <boost/format.hpp>
#include <queue>
#include <vector>
#include <iterator> // std::back_inserter
#include <QString>
#include <QFileInfo>
#ifdef CGAL_USE_VTK
class vtkImageReader;
class vtkImageData;
class vtkDICOMImageReader;
class vtkDemandDrivenPipeline;
class vtkImageGaussianSmooth;
#endif // CGAL_USE_VTK
class QTreeWidgetItem;
// kernel
// #include <CGAL/Simple_cartesian.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel1;
#include <CGAL/Point_with_psc_localisation.h>
struct Kernel : public Kernel1 {
typedef CGAL::Point_with_psc_localisation<Kernel::Point_3,
const QTreeWidgetItem*> Point_3;
};
typedef Kernel::FT FT;
typedef Kernel::Point_3 Point_3;
typedef Kernel::Sphere_3 Sphere;
typedef Kernel::Vector_3 Vector;
typedef Kernel::Triangle_3 Triangle_3;
typedef Kernel::Segment_3 Segment_3;
// typedef CGAL::Triple<Triangle_3,Vector,const QTreeWidgetItem*> Facet;
typedef boost::tuple<Triangle_3,Vector,const QTreeWidgetItem*> Facet_;
typedef CBinary_image_3<FT,Point_3> Binary_image;
class QTreeWidgetItem;
// surface mesher
// #define CGAL_MESHES_NO_OUTPUT
#include <CGAL/Surface_mesh_vertex_base_3.h>
#include <CGAL/Triangulation_cell_base_with_info_3.h>
#include <CGAL/Surface_mesh_cell_base_3.h>
#include <CGAL/Delaunay_triangulation_cell_base_3.h>
#include <CGAL/Delaunay_triangulation_cell_base_with_circumcenter_3.h>
#include <CGAL/Delaunay_triangulation_3.h>
#include <CGAL/Surface_mesh_complex_2_in_triangulation_3.h>
#include <CGAL/Surface_mesh_default_criteria_3.h>
#include <CGAL/Implicit_surface_3.h>
#include <CGAL/Surface_mesh_traits_generator_3.h>
typedef CGAL::Surface_mesh_vertex_base_3<Kernel> Vb;
typedef CGAL::Triangulation_cell_base_with_info_3<unsigned char, Kernel> Cb1;
typedef CGAL::Delaunay_triangulation_cell_base_3<Kernel, Cb1> Cb2;
typedef CGAL::Delaunay_triangulation_cell_base_with_circumcenter_3<Kernel, Cb2> Cb3;
typedef CGAL::Surface_mesh_cell_base_3<Kernel, Cb3> Cb;
typedef CGAL::Triangulation_data_structure_3<Vb, Cb> Tds;
typedef CGAL::Delaunay_triangulation_3<Kernel, Tds> Tr;
typedef CGAL::Surface_mesh_complex_2_in_triangulation_3<Tr> C2t3;
typedef CGAL::Implicit_surface_3<Kernel, Binary_image> Surface_3;
#ifdef CGAL_SURFACE_MESH_DEMO_USE_MARCHING_CUBE
#include <mc/MarchingCubes.h>
#endif
class MainWindow;
class QDoubleSpinBox;
class Viewer;
class Values_list;
class Volume : public Surface
{
Q_OBJECT
public:
Volume(MainWindow* mw);
~Volume();
private:
Binary_image m_image;
// options
FT m_sm_angle;
FT m_sm_radius;
FT m_sm_distance;
double m_relative_precision;
// visualization
bool m_view_surface;
bool m_draw_triangulation;
QColor m_triangulation_color;
bool m_inverse_normals;
bool two_sides;
bool draw_triangles_edges;
bool use_gouraud;
bool show_bbox;
std::vector<Facet_> m_surface;
Tr del; // 3D-Delaunay triangulation
C2t3 c2t3; // 2D complex in 3D triangulation
MainWindow* mw;
QFileInfo fileinfo;
Values_list* values_list;
QDoubleSpinBox* spinBox_radius_bound;
QDoubleSpinBox* spinBox_distance_bound;
bool direct_draw; // do not use display lists
std::vector<GLint> lists_draw_surface;
bool lists_draw_surface_is_valid;
GLint list_draw_marching_cube;
bool list_draw_marching_cube_is_valid;
CGAL::Timer sm_timer;
int sm_total_time;
#ifdef CGAL_SURFACE_MESH_DEMO_USE_MARCHING_CUBE
std::vector<Facet_> m_surface_mc;
MarchingCubes<unsigned char> mc ;
std::vector<int> nbs_of_mc_triangles;
std::vector<GLint> lists_draw_surface_mc;
bool lists_draw_surface_mc_is_valid;
CGAL::Timer mc_timer;
int mc_total_time;
public:
void gl_draw_surface_mc();
void gl_draw_marchingcube();
private:
void gl_draw_one_marching_cube_vertex(int);
#endif // CGAL_SURFACE_MESH_DEMO_USE_MARCHING_CUBE
bool m_view_mc; // that boolean is here even with if
// CGAL_SURFACE_MESH_DEMO_USE_MARCHING_CUBE
// is not defined.
#ifdef CGAL_USE_VTK
vtkImageReader* vtk_reader;
vtkImageData* vtk_image;
vtkDICOMImageReader* dicom_reader;
vtkDemandDrivenPipeline* executive;
vtkImageGaussianSmooth* smoother;
#endif // CGAL_USE_VTK
public Q_SLOTS:
void display_marchin_cube();
private:
template <typename Iterator>
void gl_draw_surface(Iterator begin, Iterator end, const QTreeWidgetItem* = 0);
void gl_draw_image_bbox(const float line_width,
const unsigned char red,
const unsigned char green,
const unsigned char blue);
template <typename PointsOutputIterator,
typename DomainsOutputIterator,
typename TransformOperator>
void search_for_connected_components(PointsOutputIterator,
DomainsOutputIterator,
TransformOperator);
public:
void gl_draw_surface();
Q_SIGNALS:
void new_bounding_box(double, double, double, double, double, double);
public Q_SLOTS:
void only_in();
void set_inverse_normals(const bool);
void set_two_sides(const bool);
void set_draw_triangles_edges(const bool);
void set_triangulation_edges_color();
void set_draw_triangulation(const bool);
void set_use_gouraud(const bool);
void set_show_bbox(const bool);
bool open(const QString& filename);
#ifdef CGAL_USE_VTK
bool open_vtk(const QString& filename);
#endif
bool open_xt(const QString& filename);
bool opendir(const QString& dirname);
void finish_open();
void export_off();
void save_image_to_inr();
void check_can_export_off();
void draw();
void get_bbox(float& /*xmin*/, float& /*ymin*/, float& /*zmin*/,
float& /*xmax*/, float& /*ymax*/, float& /*zmax*/) {}
void close() {}
void display_surface_mesher_result();
void set_radius_bound(double);
void set_distance_bound(double);
void changed_parameters();
void labellizedToogled(bool);
void save_image_settings(QString);
void load_image_settings(QString);
private:
void status_message(QString);
void busy() const;
void not_busy() const;
};
template <typename PointsOutputIterator,
typename DomainsOutputIterator,
typename TransformOperator>
void Volume::search_for_connected_components(PointsOutputIterator it,
DomainsOutputIterator dom_it,
TransformOperator transform)
{
const std::size_t nx = m_image.xdim();
const std::size_t ny = m_image.ydim();
const std::size_t nz = m_image.zdim();
const double max_v = (std::max)((std::max)(m_image.vx(),
m_image.vy()),
m_image.vz());
typedef unsigned char Marker;
typedef typename TransformOperator::result_type Label;
boost::multi_array<Marker, 3> visited(boost::extents[nx][ny][nz]);
typedef boost::tuple<std::size_t, std::size_t, std::size_t, std::size_t>
Indices;
typedef std::queue<Indices> Indices_queue;
typedef std::vector<Indices> Border_vector;
int number_of_connected_components = 0;
for(std::size_t i=0; i<nx; i++)
for(std::size_t j=0; j<ny; j++)
for(std::size_t k=0; k<nz; k++)
{
if(visited[i][j][k]>0)
continue;
const Label current_label = transform(m_image.value(i, j, k));
*dom_it++ = current_label;
if(current_label == Label()) {
visited[i][j][k] = 3;
continue;
}
// if we reach here, (i, j, k) is a new connected component
++number_of_connected_components;
std::cerr << boost::format("Found new connected component (#%5%) "
"at voxel (%1%, %2%, %3%), value=%4%, volume id=%6%\n")
% i % j % k
% m_image.value(i, j, k)
% number_of_connected_components
% (int)current_label;
int nb_voxels = 0;
Indices_queue queue;
Indices indices(i, j ,k, 0);
queue.push(indices);
Border_vector border;
/*
* First pass is a BFS to retrieve all the connected component, and
* its border.
* Second pass is a BFS initialized with all voxel of the border.
* The last voxel of that BFS is used as the seed.
*/
Marker pass = 1; // pass will be equal to 2 in second pass
Indices bbox_min = indices;
Indices bbox_max = indices;
while(!queue.empty()) // walk through the connected component
{
Indices indices = queue.front();
queue.pop();
// warning: those indices i, j and k are local to the while loop
const std::size_t i = boost::get<0>(indices);
const std::size_t j = boost::get<1>(indices);
const std::size_t k = boost::get<2>(indices);
const std::size_t depth = boost::get<3>(indices);
if(visited[i][j][k] < pass)
{
visited[i][j][k] = pass;
if(pass == 1 )
{
++nb_voxels;
boost::get<0>(bbox_min) = (std::min)(i, boost::get<0>(bbox_min));
boost::get<0>(bbox_max) = (std::max)(i, boost::get<0>(bbox_max));
boost::get<1>(bbox_min) = (std::min)(j, boost::get<1>(bbox_min));
boost::get<1>(bbox_max) = (std::max)(j, boost::get<1>(bbox_max));
boost::get<2>(bbox_min) = (std::min)(k, boost::get<2>(bbox_min));
boost::get<2>(bbox_max) = (std::max)(k, boost::get<2>(bbox_max));
}
static const int neighbors_offset[6][3] = { { +1, 0, 0 },
{ -1, 0, 0 },
{ 0, +1, 0 },
{ 0, -1, 0 },
{ 0, 0, +1 },
{ 0, 0, -1 } };
bool voxel_is_on_border = false;
// Visit neighbors.
// (i_n, j_n, k_n) are indices of neighbors.
for(int n = 0; n < 6; ++n)
{
const ptrdiff_t i_n = i + neighbors_offset[n][0];
const ptrdiff_t j_n = j + neighbors_offset[n][1];
const ptrdiff_t k_n = k + neighbors_offset[n][2];
if(i_n < 0 || i_n >= static_cast<ptrdiff_t>(nx) ||
j_n < 0 || j_n >= static_cast<ptrdiff_t>(ny) ||
k_n < 0 || k_n >= static_cast<ptrdiff_t>(nz))
{
voxel_is_on_border = true;
continue;
}
else
{
if(transform(m_image.value(i_n, j_n, k_n)) == current_label)
{
if(visited[i_n][j_n][k_n] < pass) {
Indices indices(i_n, j_n, k_n, depth+1);
queue.push(indices);
}
}
else
voxel_is_on_border = true;
}
} // end for neighbors
if(pass == 1 && voxel_is_on_border)
border.push_back(indices);
} // end if voxel not already visited
if(queue.empty()) {
if(pass == 1)
{ // End of first pass. Begin second pass with the voxels of
// the border.
for(typename Border_vector::const_iterator
border_it = border.begin(), border_end = border.end();
border_it != border_end; ++border_it)
queue.push(*border_it);
pass = 2;
}
else // end of second pass, return the last visited voxel
{
// if(nb_voxels >= 100)
{
*it++ = std::make_pair(m_image.point(i, j, k), (depth+1)*max_v);
std::cerr << boost::format("Found seed %5%, which is voxel (%1%, %2%, %3%), value=%4%\n")
% i % j % k % m_image.value(i, j, k) % m_image.point(i, j, k);
}
}
} // end if queue.empty()
} // end while !queue.empty() (with local indices i, j, k)
std::cerr << boost::format("There was %1% voxel(s) in that component.\n"
"The bounding box is (%2% %3% %4%, %5% %6% %7%).\n"
"%8% voxel(s) on border\n")
% nb_voxels
% boost::get<0>(bbox_min) % boost::get<1>(bbox_min) % boost::get<2>(bbox_min)
% boost::get<0>(bbox_max) % boost::get<1>(bbox_max) % boost::get<2>(bbox_max)
% border.size();
} // end for i,j,k
} // end function Volume::search_for_connected_components()
#endif // _VOLUME_H

View File

@ -38,7 +38,6 @@
\cgalPkgDependsOn{\ref PkgTriangulation3} \cgalPkgDependsOn{\ref PkgTriangulation3}
\cgalPkgBib{cgal:ry-smg} \cgalPkgBib{cgal:ry-smg}
\cgalPkgLicense{\ref licensesGPL} \cgalPkgLicense{\ref licensesGPL}
\cgalPkgDemo{Surface Mesh Generator,surface_mesher.zip}
\cgalPkgShortInfoEnd \cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd \cgalPkgDescriptionEnd