Merge pull request #5495 from danston/Surface_mesher-fix_demo_warnings-danston
Remove Surface_mesher demo (was "Fix Surface_mesher_demo Apple warnings")
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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";
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
|
|
@ -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 |
|
Before Width: | Height: | Size: 4.0 KiB |
|
|
@ -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 |
|
|
@ -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 */
|
||||
"................",
|
||||
"...++++...++++..",
|
||||
"..+....+.+....+.",
|
||||
"..+......+......",
|
||||
"..+......+..+++.",
|
||||
"..+......+....+.",
|
||||
"..+....+.+....+.",
|
||||
"...++++...++++..",
|
||||
"................",
|
||||
"...++++...+.....",
|
||||
"..+....+..+.....",
|
||||
"..+....+..+.....",
|
||||
"..++++++..+.....",
|
||||
"..+....+..+.....",
|
||||
"..+....+..+++++.",
|
||||
"................"};
|
||||
|
Before Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.4 KiB |
|
|
@ -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>></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 |
|
Before Width: | Height: | Size: 250 B |
|
Before Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 7.9 KiB |
|
|
@ -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 |
|
Before Width: | Height: | Size: 12 KiB |
|
|
@ -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 |
|
Before Width: | Height: | Size: 7.8 KiB |
|
|
@ -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>></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 |
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>&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>&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>&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>&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>&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&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>&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>&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>&Open...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+O</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Quit">
|
||||
<property name="text">
|
||||
<string>&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>&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&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 &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>&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 &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 &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 &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 &cubes</string>
|
||||
</property>
|
||||
<property name="iconText">
|
||||
<string>Marching &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 &mesher</string>
|
||||
</property>
|
||||
<property name="iconText">
|
||||
<string>Surface &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 &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-&resize</string>
|
||||
</property>
|
||||
<property name="iconText">
|
||||
<string>Auto-&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 &edges</string>
|
||||
</property>
|
||||
<property name="iconText">
|
||||
<string>Draw triangles &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 &Gouraud shading (marching cube only)</string>
|
||||
</property>
|
||||
<property name="iconText">
|
||||
<string>Use &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 &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 &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 &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>
|
||||
|
|
@ -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>&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>&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>
|
||||
|
|
@ -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 &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>&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>&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>&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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -38,7 +38,6 @@
|
|||
\cgalPkgDependsOn{\ref PkgTriangulation3}
|
||||
\cgalPkgBib{cgal:ry-smg}
|
||||
\cgalPkgLicense{\ref licensesGPL}
|
||||
\cgalPkgDemo{Surface Mesh Generator,surface_mesher.zip}
|
||||
\cgalPkgShortInfoEnd
|
||||
\cgalPkgDescriptionEnd
|
||||
|
||||
|
|
|
|||