Merge branch 'devel' of github.com:cnr-isti-vclab/vcglib into devel
This commit is contained in:
commit
a41a1fb8dc
|
@ -1,12 +1,12 @@
|
||||||
name: BuildSamplesUbuntu
|
name: BuildExamplesLinux
|
||||||
|
|
||||||
on:
|
on:
|
||||||
[push, pull_request]
|
[push, pull_request]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ubuntu_build_tests:
|
ubuntu_build_tests:
|
||||||
name: Build Samples (Ubuntu)
|
name: Build Examples (Linux)
|
||||||
runs-on: ubuntu-latest #in order to deploy, need to use oldest supported version
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@ -14,5 +14,7 @@ jobs:
|
||||||
uses: jurplel/install-qt-action@v2
|
uses: jurplel/install-qt-action@v2
|
||||||
- name: Build Samples
|
- name: Build Samples
|
||||||
run: |
|
run: |
|
||||||
qmake apps/sample/sample.pro
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DVCG_BUILD_EXAMPLES=ON ..
|
||||||
make -j4
|
make -j4
|
|
@ -1,11 +1,11 @@
|
||||||
name: BuildSamplesMacOS
|
name: BuildExamplesMacOS
|
||||||
|
|
||||||
on:
|
on:
|
||||||
[push, pull_request]
|
[push, pull_request]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
macos_build_tests:
|
macos_build_tests:
|
||||||
name: Build Samples (MacOS)
|
name: Build Examples (MacOS)
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -14,5 +14,7 @@ jobs:
|
||||||
uses: jurplel/install-qt-action@v2
|
uses: jurplel/install-qt-action@v2
|
||||||
- name: Build Samples
|
- name: Build Samples
|
||||||
run: |
|
run: |
|
||||||
qmake apps/sample/sample.pro
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DVCG_BUILD_EXAMPLES=ON ..
|
||||||
make -j4
|
make -j4
|
|
@ -1,10 +1,10 @@
|
||||||
name: BuildSamplesWindows
|
name: BuildExamplesWindows
|
||||||
|
|
||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
windows_build_tests:
|
windows_build_tests:
|
||||||
name: Build Samples (Windows)
|
name: Build Examples (Windows)
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -25,5 +25,7 @@ jobs:
|
||||||
uses: jurplel/install-qt-action@v2
|
uses: jurplel/install-qt-action@v2
|
||||||
- name: Build Samples
|
- name: Build Samples
|
||||||
run: |
|
run: |
|
||||||
qmake apps/sample/sample.pro
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G "NMake Makefiles" -DVCG_BUILD_EXAMPLES=ON ..
|
||||||
jom -j4
|
jom -j4
|
|
@ -13,6 +13,9 @@ option(ALLOW_SYSTEM_EIGEN "Allow use of system-provided Eigen" ON)
|
||||||
option(VCG_HEADER_ONLY "Use VCG library in header only mode" ON)
|
option(VCG_HEADER_ONLY "Use VCG library in header only mode" ON)
|
||||||
option(VCG_BUILD_EXAMPLES "Build a set of examples of the library" OFF)
|
option(VCG_BUILD_EXAMPLES "Build a set of examples of the library" OFF)
|
||||||
|
|
||||||
|
set (VCG_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
set (VCG_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR} PARENT_SCOPE)
|
||||||
|
|
||||||
# Prefer GLVND
|
# Prefer GLVND
|
||||||
if(POLICY CMP0072)
|
if(POLICY CMP0072)
|
||||||
cmake_policy(SET CMP0072 NEW)
|
cmake_policy(SET CMP0072 NEW)
|
||||||
|
@ -272,6 +275,9 @@ set(VCG_HEADERS
|
||||||
vcg/connectors/halfedge_pos.h
|
vcg/connectors/halfedge_pos.h
|
||||||
vcg/connectors/hedge.h
|
vcg/connectors/hedge.h
|
||||||
vcg/connectors/hedge_component.h
|
vcg/connectors/hedge_component.h
|
||||||
|
|
||||||
|
#wrap
|
||||||
|
wrap/callback.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
|
@ -293,4 +299,5 @@ endif()
|
||||||
|
|
||||||
if(VCG_BUILD_EXAMPLES)
|
if(VCG_BUILD_EXAMPLES)
|
||||||
#TODO make the list of samples to build
|
#TODO make the list of samples to build
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/apps)
|
||||||
endif()
|
endif()
|
||||||
|
|
15
README.md
15
README.md
|
@ -1,8 +1,8 @@
|
||||||
The **_Visualization and Computer Graphics Library_** (VCGlib for short) is a open source, portable, C++, templated, no dependency, library for manipulation, processing, cleaning, simplifying triangle meshes.
|
The **_Visualization and Computer Graphics Library_** (VCGlib for short) is a open source, portable, C++, templated, no dependency, library for manipulation, processing, cleaning, simplifying triangle meshes.
|
||||||
|
|
||||||
![BuildSamplesUbuntu](https://github.com/cnr-isti-vclab/vcglib/workflows/BuildSamplesUbuntu/badge.svg)
|
![BuildExamplesLinux](https://github.com/cnr-isti-vclab/vcglib/workflows/BuildExamplesLinux/badge.svg)
|
||||||
![BuildSamplesMacOS](https://github.com/cnr-isti-vclab/vcglib/workflows/BuildSamplesMacOS/badge.svg)
|
![BuildExamplesMacOS](https://github.com/cnr-isti-vclab/vcglib/workflows/BuildExamplesMacOS/badge.svg)
|
||||||
![BuildSamplesWindows](https://github.com/cnr-isti-vclab/vcglib/workflows/BuildSamplesWindows/badge.svg)
|
![BuildExamplesWindows](https://github.com/cnr-isti-vclab/vcglib/workflows/BuildExamplesWindows/badge.svg)
|
||||||
|
|
||||||
The library, composed by more than 100k lines of code, is released under the GPL license, and it is the base of most of the software tools of the [Visual Computing Lab](http://vcg.isti.cnr.it) of the Italian National Research Council Institute ISTI, like MeshLab, metro and many others.
|
The library, composed by more than 100k lines of code, is released under the GPL license, and it is the base of most of the software tools of the [Visual Computing Lab](http://vcg.isti.cnr.it) of the Italian National Research Council Institute ISTI, like MeshLab, metro and many others.
|
||||||
|
|
||||||
|
@ -28,17 +28,10 @@ A number of applications have been developed using the vcglib:
|
||||||
- Metro, the tool for measuring differences between meshes
|
- Metro, the tool for measuring differences between meshes
|
||||||
- The first high quality out-of-core mesh simplifier that was used by the Stanford Digital Michelangelo project to process their huge 3D scanned models.
|
- The first high quality out-of-core mesh simplifier that was used by the Stanford Digital Michelangelo project to process their huge 3D scanned models.
|
||||||
|
|
||||||
## Contributing
|
|
||||||
In case of bugs please report them [here](https://github.com/cnr-isti-vclab/vcglib/issues).
|
|
||||||
|
|
||||||
Copyright of the library is fully owned by CNR. Contributing means signing an appropriate [license agreement](https://github.com/cnr-isti-vclab/vcglib/blob/master/docs/ContributorLicenseAgreement.pdf) .
|
|
||||||
|
|
||||||
Pull requests about trivial, small, questionable updates (e.g. small stylistic changes like int -> uint8_t) will be rejected without discussion.
|
|
||||||
|
|
||||||
|
|
||||||
## Contacts
|
## Contacts
|
||||||
|
|
||||||
For any info about licensing (portion of) the library please contact us:
|
For any info about licensing (portion of) the library please contact us:
|
||||||
Paolo Cignoni (p.cignoni@isti.cnr.it)
|
Paolo Cignoni (p.cignoni@isti.cnr.it)
|
||||||
Visual Computing Lab of the Italian National Research Council - ISTI
|
Visual Computing Lab of the Italian National Research Council - ISTI
|
||||||
|
|
||||||
|
In case of bugs please report them [here](https://github.com/cnr-isti-vclab/vcglib/issues) .
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
project(VCGApps)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
|
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
|
add_subdirectory(sample)
|
||||||
include_directories(../)
|
|
||||||
include_directories(../eigenlib)
|
|
||||||
add_subdirectory(metro)
|
add_subdirectory(metro)
|
||||||
add_subdirectory(tridecimator)
|
add_subdirectory(tridecimator)
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* \ *
|
* \ *
|
||||||
* All rights reserved. *
|
* All rights reserved. *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
* it under the terms of the GNU General Public License as published by *
|
* it under the terms of the GNU General Public License as published by *
|
||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
|
@ -64,10 +64,10 @@ class CMesh : public vcg::tri::TriMesh< std::vector<CVertex>, std::vector<CFac
|
||||||
|
|
||||||
class GLArea:public QGLWidget
|
class GLArea:public QGLWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
GLArea (QWidget * parent = 0);
|
GLArea (QWidget * parent = 0);
|
||||||
/// we choosed a subset of the avaible drawing modes
|
/// we chose a subset of the available drawing modes
|
||||||
enum DrawMode{SMOOTH=0,POINTS,WIRE,FLATWIRE,HIDDEN,FLAT};
|
enum DrawMode{SMOOTH=0,POINTS,WIRE,FLATWIRE,HIDDEN,FLAT};
|
||||||
public slots:
|
public slots:
|
||||||
/// widget-based user interaction slots
|
/// widget-based user interaction slots
|
||||||
|
@ -89,7 +89,7 @@ protected:
|
||||||
void mousePressEvent(QMouseEvent*e);
|
void mousePressEvent(QMouseEvent*e);
|
||||||
void mouseMoveEvent(QMouseEvent*e);
|
void mouseMoveEvent(QMouseEvent*e);
|
||||||
void mouseReleaseEvent(QMouseEvent*e);
|
void mouseReleaseEvent(QMouseEvent*e);
|
||||||
void wheelEvent(QWheelEvent*e);
|
void wheelEvent(QWheelEvent*e);
|
||||||
private:
|
private:
|
||||||
/// the active mesh instance
|
/// the active mesh instance
|
||||||
CMesh mesh;
|
CMesh mesh;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* \ *
|
* \ *
|
||||||
* All rights reserved. *
|
* All rights reserved. *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
* it under the terms of the GNU General Public License as published by *
|
* it under the terms of the GNU General Public License as published by *
|
||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
|
@ -65,13 +65,13 @@ public:
|
||||||
|
|
||||||
class GLArea:public QGLWidget
|
class GLArea:public QGLWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
GLArea (SharedDataOpenGLContext* sharedcontext,MainWindow* parent);
|
GLArea (SharedDataOpenGLContext* sharedcontext,MainWindow* parent);
|
||||||
~GLArea();
|
~GLArea();
|
||||||
void resetTrackBall();
|
void resetTrackBall();
|
||||||
//unsigned int getId() const {return areaid;}
|
//unsigned int getId() const {return areaid;}
|
||||||
/// we choosed a subset of the avaible drawing modes
|
/// we chose a subset of the available drawing modes
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/// signal for setting the statusbar message
|
/// signal for setting the statusbar message
|
||||||
|
@ -88,7 +88,7 @@ protected:
|
||||||
void mousePressEvent(QMouseEvent*e);
|
void mousePressEvent(QMouseEvent*e);
|
||||||
void mouseMoveEvent(QMouseEvent*e);
|
void mouseMoveEvent(QMouseEvent*e);
|
||||||
void mouseReleaseEvent(QMouseEvent*e);
|
void mouseReleaseEvent(QMouseEvent*e);
|
||||||
void wheelEvent(QWheelEvent*e);
|
void wheelEvent(QWheelEvent*e);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWindow* parwin;
|
MainWindow* parwin;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* \ *
|
* \ *
|
||||||
* All rights reserved. *
|
* All rights reserved. *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
* it under the terms of the GNU General Public License as published by *
|
* it under the terms of the GNU General Public License as published by *
|
||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
/**
|
/**
|
||||||
* Minimal trimesh viewer made with AntTweakBar and freglut
|
* Minimal trimesh viewer made with AntTweakBar and freglut
|
||||||
*
|
*
|
||||||
* This sample shows how to use togheter:
|
* This sample shows how to use togheter:
|
||||||
* - the trimesh loading and initialization
|
* - the trimesh loading and initialization
|
||||||
* - basic usage of the default manipulators (the "Trackball")
|
* - basic usage of the default manipulators (the "Trackball")
|
||||||
*/
|
*/
|
||||||
|
@ -75,7 +75,7 @@ vcg::Trackball track;
|
||||||
/// window size
|
/// window size
|
||||||
int width,height;
|
int width,height;
|
||||||
|
|
||||||
/// we choosed a subset of the avaible drawing modes
|
/// we chose a subset of the available drawing modes
|
||||||
enum DrawMode{SMOOTH=0,PERPOINTS,WIRE,FLATWIRE,HIDDEN,FLAT};
|
enum DrawMode{SMOOTH=0,PERPOINTS,WIRE,FLATWIRE,HIDDEN,FLAT};
|
||||||
|
|
||||||
/// the current drawmode
|
/// the current drawmode
|
||||||
|
@ -101,7 +101,7 @@ static vcg::Trackball::Button GLUT2VCG (int glut_button, int )
|
||||||
return vcg::Trackball::Button (vcgbt);
|
return vcg::Trackball::Button (vcgbt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -124,29 +124,29 @@ void Display(){
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
float d=1.0f/mesh.bbox.Diag();
|
float d=1.0f/mesh.bbox.Diag();
|
||||||
vcg::glScale(d);
|
vcg::glScale(d);
|
||||||
glTranslate(-glWrap.m->bbox.Center());
|
glTranslate(-glWrap.m->bbox.Center());
|
||||||
// the trimesh drawing calls
|
// the trimesh drawing calls
|
||||||
switch(drawmode)
|
switch(drawmode)
|
||||||
{
|
{
|
||||||
case SMOOTH:
|
case SMOOTH:
|
||||||
glWrap.Draw<vcg::GLW::DMSmooth, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
glWrap.Draw<vcg::GLW::DMSmooth, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||||
break;
|
break;
|
||||||
case PERPOINTS:
|
case PERPOINTS:
|
||||||
glWrap.Draw<vcg::GLW::DMPoints, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
glWrap.Draw<vcg::GLW::DMPoints, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||||
break;
|
break;
|
||||||
case WIRE:
|
case WIRE:
|
||||||
glWrap.Draw<vcg::GLW::DMWire, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
glWrap.Draw<vcg::GLW::DMWire, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||||
break;
|
break;
|
||||||
case FLATWIRE:
|
case FLATWIRE:
|
||||||
glWrap.Draw<vcg::GLW::DMFlatWire, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
glWrap.Draw<vcg::GLW::DMFlatWire, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||||
break;
|
break;
|
||||||
case HIDDEN:
|
case HIDDEN:
|
||||||
glWrap.Draw<vcg::GLW::DMHidden, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
glWrap.Draw<vcg::GLW::DMHidden, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||||
break;
|
break;
|
||||||
case FLAT:
|
case FLAT:
|
||||||
glWrap.Draw<vcg::GLW::DMFlat, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
glWrap.Draw<vcg::GLW::DMFlat, vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ void initMesh()
|
||||||
}
|
}
|
||||||
|
|
||||||
void TW_CALL loadMesh(void *)
|
void TW_CALL loadMesh(void *)
|
||||||
{
|
{
|
||||||
if(filename==0) return;
|
if(filename==0) return;
|
||||||
int err=vcg::tri::io::ImporterPLY<CMesh>::Open(mesh,(char*)filename);
|
int err=vcg::tri::io::ImporterPLY<CMesh>::Open(mesh,(char*)filename);
|
||||||
if(err!=0){
|
if(err!=0){
|
||||||
|
@ -276,7 +276,7 @@ int main(int argc, char *argv[])
|
||||||
// (note that AntTweakBar could also be intialized after GLUT, no matter)
|
// (note that AntTweakBar could also be intialized after GLUT, no matter)
|
||||||
if( !TwInit(TW_OPENGL, NULL) )
|
if( !TwInit(TW_OPENGL, NULL) )
|
||||||
{
|
{
|
||||||
// A fatal error occured
|
// A fatal error occured
|
||||||
fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError());
|
fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -311,12 +311,12 @@ int main(int argc, char *argv[])
|
||||||
glutKeyboardFunc(keyPressEvent);
|
glutKeyboardFunc(keyPressEvent);
|
||||||
glutKeyboardUpFunc(keyReleaseEvent);
|
glutKeyboardUpFunc(keyReleaseEvent);
|
||||||
|
|
||||||
|
|
||||||
glutMouseWheelFunc(wheelEvent);
|
glutMouseWheelFunc(wheelEvent);
|
||||||
bar = TwNewBar("TweakBar");
|
bar = TwNewBar("TweakBar");
|
||||||
|
|
||||||
TwCopyCDStringToClientFunc (CopyCDStringToClient);
|
TwCopyCDStringToClientFunc (CopyCDStringToClient);
|
||||||
|
|
||||||
TwAddVarRW(bar,"Input",TW_TYPE_CDSTRING,&filename," label='Filepath' group=SetMesh help=` Name of the file to load` ");
|
TwAddVarRW(bar,"Input",TW_TYPE_CDSTRING,&filename," label='Filepath' group=SetMesh help=` Name of the file to load` ");
|
||||||
TwAddButton(bar,"Load from file",loadMesh,0, " label='Load Mesh' group=SetMesh help=`load the mesh` ");
|
TwAddButton(bar,"Load from file",loadMesh,0, " label='Load Mesh' group=SetMesh help=`load the mesh` ");
|
||||||
TwAddButton(bar,"Use tetrahedron",loadTetrahedron,0, " label='Make Tetrahedron' group=SetMesh help=`use tetrahedron.` ");
|
TwAddButton(bar,"Use tetrahedron",loadTetrahedron,0, " label='Make Tetrahedron' group=SetMesh help=`use tetrahedron.` ");
|
||||||
|
|
|
@ -1,2 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project (metro)
|
project (metro)
|
||||||
add_executable(metro metro.cpp ../../wrap/ply/plylib.cpp)
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
metro.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(metro
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
metro
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
||||||
|
|
|
@ -112,7 +112,7 @@ template<class TriMeshType>
|
||||||
// ALNParser::ParseALN(rmaps, alnName);
|
// ALNParser::ParseALN(rmaps, alnName);
|
||||||
|
|
||||||
// for(size_t i=0; i<rmaps.size(); i++)
|
// for(size_t i=0; i<rmaps.size(); i++)
|
||||||
// AddSingleMesh(rmaps[i].filename.c_str(), rmaps[i].trasformation, rmaps[i].quality);
|
// AddSingleMesh(rmaps[i].filename.c_str(), rmaps[i].transformation, rmaps[i].quality);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(VCGExamples)
|
||||||
|
|
||||||
|
set(VCG_EXAMPLE_PROJECTS
|
||||||
|
aabb_binary_tree
|
||||||
|
colorspace
|
||||||
|
polygonmesh_base
|
||||||
|
polygonmesh_dual
|
||||||
|
polygonmesh_optimize
|
||||||
|
polygonmesh_polychord_collapse
|
||||||
|
polygonmesh_smooth
|
||||||
|
space_index_2d
|
||||||
|
space_packer
|
||||||
|
space_rasterized_packer
|
||||||
|
trimesh_align_pair
|
||||||
|
trimesh_allocate
|
||||||
|
trimesh_attribute
|
||||||
|
trimesh_attribute_saving
|
||||||
|
trimesh_ball_pivoting
|
||||||
|
trimesh_base
|
||||||
|
trimesh_closest
|
||||||
|
trimesh_clustering
|
||||||
|
trimesh_color
|
||||||
|
trimesh_copy
|
||||||
|
trimesh_create
|
||||||
|
trimesh_curvature
|
||||||
|
trimesh_cylinder_clipping
|
||||||
|
trimesh_disk_parametrization
|
||||||
|
trimesh_fitting
|
||||||
|
trimesh_geodesic
|
||||||
|
trimesh_harmonic
|
||||||
|
trimesh_hole
|
||||||
|
trimesh_implicit_smooth
|
||||||
|
trimesh_indexing
|
||||||
|
trimesh_inertia
|
||||||
|
trimesh_intersection_plane
|
||||||
|
trimesh_intersection_mesh
|
||||||
|
trimesh_isosurface
|
||||||
|
trimesh_join
|
||||||
|
trimesh_kdtree
|
||||||
|
trimesh_montecarlo_sampling
|
||||||
|
trimesh_normal
|
||||||
|
trimesh_optional
|
||||||
|
trimesh_pointmatching
|
||||||
|
trimesh_pointcloud_sampling
|
||||||
|
trimesh_ray
|
||||||
|
trimesh_refine
|
||||||
|
trimesh_remeshing
|
||||||
|
trimesh_sampling
|
||||||
|
trimesh_select
|
||||||
|
trimesh_smooth
|
||||||
|
trimesh_split_vertex
|
||||||
|
trimesh_texture
|
||||||
|
trimesh_texture_clean
|
||||||
|
trimesh_topology
|
||||||
|
trimesh_topological_cut
|
||||||
|
trimesh_voronoi
|
||||||
|
trimesh_voronoiatlas
|
||||||
|
trimesh_voronoiclustering
|
||||||
|
trimesh_voronoisampling)
|
||||||
|
|
||||||
|
foreach(VCG_EXAMPLE ${VCG_EXAMPLE_PROJECTS})
|
||||||
|
add_subdirectory(${VCG_EXAMPLE})
|
||||||
|
endforeach()
|
|
@ -0,0 +1,14 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(aabb_binary_tree)
|
||||||
|
|
||||||
|
set(SOURCES
|
||||||
|
aabb_binary_tree.cpp)
|
||||||
|
|
||||||
|
add_executable(aabb_binary_tree
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
aabb_binary_tree
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,14 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(colorspace)
|
||||||
|
|
||||||
|
set(SOURCES
|
||||||
|
colorspace.cpp)
|
||||||
|
|
||||||
|
add_executable(colorspace
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
colorspace
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(polygonmesh_base)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
polygonmesh.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(polygonmesh_base
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
polygonmesh_base
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(polygonmesh_dual)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
polygonmesh_dual.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(polygonmesh_dual
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
polygonmesh_dual
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(polygonmesh_optimize)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
polygonmesh_optimize.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(polygonmesh_optimize
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
polygonmesh_optimize
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(polygonmesh_polychord_collapse)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
polygonmesh_polychord_collapse.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(polygonmesh_polychord_collapse
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
polygonmesh_polychord_collapse
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(polygonmesh_smooth)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
polygonmesh_smooth.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(polygonmesh_smooth
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
polygonmesh_smooth
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -60,4 +60,4 @@ SUBDIRS = \
|
||||||
trimesh_voronoi \
|
trimesh_voronoi \
|
||||||
trimesh_voronoiatlas \
|
trimesh_voronoiatlas \
|
||||||
trimesh_voronoiclustering \
|
trimesh_voronoiclustering \
|
||||||
trimesh_voronoisampling \
|
trimesh_voronoisampling
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(space_index_2d)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
space_index_2d.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(space_index_2d
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
space_index_2d
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,30 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(space_packer)
|
||||||
|
|
||||||
|
find_package(
|
||||||
|
Qt5
|
||||||
|
COMPONENTS OpenGL Svg)
|
||||||
|
|
||||||
|
if (TARGET Qt5::OpenGL AND TARGET Qt5::Svg)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
space_packer.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/qt/Outline2ToQImage.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/qt/outline2_rasterizer.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(space_packer
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
space_packer
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
Qt5::OpenGL
|
||||||
|
Qt5::Svg
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(
|
||||||
|
STATUS "VCG examples - Skipping space_packer example")
|
||||||
|
endif()
|
|
@ -0,0 +1,29 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(space_rasterized_packer)
|
||||||
|
|
||||||
|
find_package(
|
||||||
|
Qt5
|
||||||
|
COMPONENTS OpenGL Svg)
|
||||||
|
|
||||||
|
if (TARGET Qt5::OpenGL AND TARGET Qt5::Svg)
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
space_rasterized_packer.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/qt/Outline2ToQImage.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/qt/outline2_rasterizer.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(space_rasterized_packer
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
space_rasterized_packer
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
Qt5::OpenGL
|
||||||
|
Qt5::Svg
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(
|
||||||
|
STATUS "VCG examples - Skipping space_rasterized_packer example")
|
||||||
|
endif()
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_align_pair)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_align_pair.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_align_pair
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_align_pair
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_allocate)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_allocate.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_allocate
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_allocate
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_attribute)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_attribute.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_attribute
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_attribute
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_attribute_saving)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_attribute_saving.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_attribute_saving
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_attribute_saving
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_ball_pivoting)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_ball_pivoting.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_ball_pivoting
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_ball_pivoting
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -1,8 +1,16 @@
|
||||||
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
project(trimesh_base)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
|
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
|
if (VCG_HEADER_ONLY)
|
||||||
project (trimesh_base)
|
set(SOURCES
|
||||||
add_executable(trimesh_base trimesh_base.cpp)
|
trimesh_base.cpp)
|
||||||
include_directories(../../..)
|
endif()
|
||||||
include_directories(../../../eigenlib)
|
|
||||||
|
add_executable(trimesh_base
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_base
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_closest)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_closest.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_closest
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_closest
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_clustering)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_clustering.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_clustering
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_clustering
|
||||||
|
PUBLIC vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_color)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_color.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_color
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_color
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_copy)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_copy.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_copy
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_copy
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_create)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_create.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_create
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_create
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_curvature)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_curvature.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_curvature
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_curvature
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_cylinder_clipping)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_cylinder_clipping.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_cylinder_clipping
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_cylinder_clipping
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_disk_parametrization)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_disk_parametrization.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_disk_parametrization
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_disk_parametrization
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_fitting)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_fitting.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_fitting
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_fitting
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_geodesic)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_geodesic.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_geodesic
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_geodesic
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_harmonic)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_harmonic.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_harmonic
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_harmonic
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_hole)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_hole.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_hole
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_hole
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_implicit_smooth)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_implicit_smooth.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_implicit_smooth
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_implicit_smooth
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_indexing)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_indexing.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_indexing
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_indexing
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_inertia)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_inertia.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_inertia
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_inertia
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_intersection_mesh)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_intersection_mesh.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_intersection_mesh
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_intersection_mesh
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_intersection_plane)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_intersection_plane.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_intersection_plane
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_intersection_plane
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_isosurface)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_isosurface.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_isosurface
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_isosurface
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_join)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_join.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_join
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_join
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_kdtree)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_kdtree.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_kdtree
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_kdtree
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_montecarlo_sampling)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_montecarlo_sampling.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_montecarlo_sampling
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_montecarlo_sampling
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_normal)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_normal.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_normal
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_normal
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_optional)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_optional.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_optional
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_optional
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_pointcloud_sampling)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_pointcloud_sampling.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_pointcloud_sampling
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_pointcloud_sampling
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_pointmatching)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_pointmatching.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_pointmatching
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_pointmatching
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_ray)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_ray.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_ray
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_ray
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_refine)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_refine.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_refine
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_refine
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_remeshing)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_remeshing.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_remeshing
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_remeshing
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_sampling)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_sampling.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_sampling
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_sampling
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_select)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_select.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_select
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_select
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_smooth)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_smooth.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_smooth
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_smooth
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_split_vertex)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_split_vertex.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_split_vertex
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_split_vertex
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,31 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_texture)
|
||||||
|
|
||||||
|
find_package(
|
||||||
|
Qt5
|
||||||
|
COMPONENTS OpenGL Svg)
|
||||||
|
|
||||||
|
if (TARGET Qt5::OpenGL AND TARGET Qt5::Svg)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_texture.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/qt/Outline2ToQImage.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/qt/outline2_rasterizer.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_texture
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_texture
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
Qt5::OpenGL
|
||||||
|
Qt5::Svg
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(
|
||||||
|
STATUS "VCG examples - Skipping trimesh_texture example")
|
||||||
|
endif()
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_texture_clean)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_texture_clean.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_texture_clean
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_texture_clean
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_topological_cut)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_topological_cut.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_topological_cut
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_topological_cut
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_topology)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_topology.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_topology
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_topology
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_voronoi)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_voronoi.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_voronoi
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_voronoi
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_voronoiatlas)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_voronoiatlas.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_voronoiatlas
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_voronoiatlas
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_voronoiclustering)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_voronoiclustering.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_voronoiclustering
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_voronoiclustering
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(trimesh_voronoisampling)
|
||||||
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
trimesh_voronoisampling.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(trimesh_voronoisampling
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
trimesh_voronoisampling
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
|
@ -1,2 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project (tridecimator)
|
project (tridecimator)
|
||||||
add_executable(tridecimator tridecimator.cpp ../../wrap/ply/plylib.cpp)
|
|
||||||
|
if (VCG_HEADER_ONLY)
|
||||||
|
set(SOURCES
|
||||||
|
tridecimator.cpp
|
||||||
|
${VCG_INCLUDE_DIRS}/wrap/ply/plylib.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(tridecimator
|
||||||
|
${SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
tridecimator
|
||||||
|
PUBLIC
|
||||||
|
vcglib
|
||||||
|
)
|
||||||
|
|
|
@ -1529,7 +1529,7 @@ public:
|
||||||
std::vector< VertexPointer > minVertVec;
|
std::vector< VertexPointer > minVertVec;
|
||||||
std::vector< VertexPointer > maxVertVec;
|
std::vector< VertexPointer > maxVertVec;
|
||||||
|
|
||||||
// The set of directions to be choosen
|
// The set of directions to be chosen
|
||||||
std::vector< CoordType > dirVec;
|
std::vector< CoordType > dirVec;
|
||||||
dirVec.push_back(CoordType(1,0,0));
|
dirVec.push_back(CoordType(1,0,0));
|
||||||
dirVec.push_back(CoordType(0,1,0));
|
dirVec.push_back(CoordType(0,1,0));
|
||||||
|
|
|
@ -235,19 +235,19 @@ public:
|
||||||
ScalarT cotB = 0;
|
ScalarT cotB = 0;
|
||||||
|
|
||||||
// Get the edge (a pair of vertices)
|
// Get the edge (a pair of vertices)
|
||||||
VertexType * v0 = f.cV(edge);
|
const VertexType * v0 = f.cV(edge);
|
||||||
VertexType * v1 = f.cV((edge+1)%f.VN());
|
const VertexType * v1 = f.cV((edge+1)%f.VN());
|
||||||
|
|
||||||
if (fp != NULL &&
|
if (fp != NULL &&
|
||||||
fp != &f)
|
fp != &f)
|
||||||
{
|
{
|
||||||
// not a border edge
|
// not a border edge
|
||||||
VertexType * vb = fp->cV((f.cFFi(edge)+2)%fp->VN());
|
const VertexType * vb = fp->cV((f.cFFi(edge)+2)%fp->VN());
|
||||||
ScalarT angleB = ComputeAngle<ScalarT>(v0, vb, v1);
|
ScalarT angleB = ComputeAngle<ScalarT>(v0, vb, v1);
|
||||||
cotB = vcg::math::Cos(angleB) / vcg::math::Sin(angleB);
|
cotB = vcg::math::Cos(angleB) / vcg::math::Sin(angleB);
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexType * va = f.cV((edge+2)%f.VN());
|
const VertexType * va = f.cV((edge+2)%f.VN());
|
||||||
ScalarT angleA = ComputeAngle<ScalarT>(v0, va, v1);
|
ScalarT angleA = ComputeAngle<ScalarT>(v0, va, v1);
|
||||||
cotA = vcg::math::Cos(angleA) / vcg::math::Sin(angleA);
|
cotA = vcg::math::Cos(angleA) / vcg::math::Sin(angleA);
|
||||||
|
|
||||||
|
|
|
@ -813,7 +813,7 @@ private:
|
||||||
{
|
{
|
||||||
if (faces[i]->IsFaceEdgeS(VtoE(vIdxes[i], (vIdxes[i]+1)%3)) && !vcg::tri::IsMarked(*params.m, faces[i]->cV1(vIdxes[i])))
|
if (faces[i]->IsFaceEdgeS(VtoE(vIdxes[i], (vIdxes[i]+1)%3)) && !vcg::tri::IsMarked(*params.m, faces[i]->cV1(vIdxes[i])))
|
||||||
{
|
{
|
||||||
vcg::tri::Mark(*params.m,faces[i]->cV1(vIdxes[i]));
|
vcg::tri::Mark(*params.m,faces[i]->V1(vIdxes[i]));
|
||||||
incidentFeatures++;
|
incidentFeatures++;
|
||||||
CoordType movingEdgeVector0 = (faces[i]->cP1(vIdxes[i]) - faces[i]->cP(vIdxes[i])).Normalize();
|
CoordType movingEdgeVector0 = (faces[i]->cP1(vIdxes[i]) - faces[i]->cP(vIdxes[i])).Normalize();
|
||||||
if (std::fabs(movingEdgeVector0 * dEdgeVector) < .9f || !p.IsEdgeS())
|
if (std::fabs(movingEdgeVector0 * dEdgeVector) < .9f || !p.IsEdgeS())
|
||||||
|
@ -821,7 +821,7 @@ private:
|
||||||
}
|
}
|
||||||
if (faces[i]->IsFaceEdgeS(VtoE(vIdxes[i], (vIdxes[i]+2)%3)) && !vcg::tri::IsMarked(*params.m, faces[i]->cV2(vIdxes[i])))
|
if (faces[i]->IsFaceEdgeS(VtoE(vIdxes[i], (vIdxes[i]+2)%3)) && !vcg::tri::IsMarked(*params.m, faces[i]->cV2(vIdxes[i])))
|
||||||
{
|
{
|
||||||
vcg::tri::Mark(*params.m,faces[i]->cV2(vIdxes[i]));
|
vcg::tri::Mark(*params.m,faces[i]->V2(vIdxes[i]));
|
||||||
incidentFeatures++;
|
incidentFeatures++;
|
||||||
CoordType movingEdgeVector1 = (faces[i]->cP2(vIdxes[i]) - faces[i]->cP(vIdxes[i])).Normalize();
|
CoordType movingEdgeVector1 = (faces[i]->cP2(vIdxes[i]) - faces[i]->cP(vIdxes[i])).Normalize();
|
||||||
if (std::fabs(movingEdgeVector1 * dEdgeVector) < .9f || !p.IsEdgeS())
|
if (std::fabs(movingEdgeVector1 * dEdgeVector) < .9f || !p.IsEdgeS())
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
#ifndef __VCGLIB_MESH_ASSERT
|
#ifndef __VCGLIB_MESH_ASSERT
|
||||||
#define __VCGLIB_MESH_ASSERT
|
#define __VCGLIB_MESH_ASSERT
|
||||||
|
|
||||||
|
#include <vcg/complex/exception.h>
|
||||||
|
#include <vcg/simplex/edge/pos.h>
|
||||||
|
#include <vcg/complex/algorithms/update/flag.h>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1005,7 +1005,7 @@ static void AllEdge(MeshType & m, VertexSampler &ps)
|
||||||
|
|
||||||
// Regular Uniform Edge sampling
|
// Regular Uniform Edge sampling
|
||||||
// Each edge is subdivided in a number of pieces proprtional to its length
|
// Each edge is subdivided in a number of pieces proprtional to its length
|
||||||
// Sample are choosen without touching the vertices.
|
// Samples are chosen without touching the vertices.
|
||||||
|
|
||||||
static void EdgeUniform(MeshType & m, VertexSampler &ps,int sampleNum, bool sampleFauxEdge=true)
|
static void EdgeUniform(MeshType & m, VertexSampler &ps,int sampleNum, bool sampleFauxEdge=true)
|
||||||
{
|
{
|
||||||
|
|
|
@ -303,7 +303,7 @@ Given a mesh the following function refines it according to two functor objects:
|
||||||
|
|
||||||
- a predicate that tells if a given edge must be splitted
|
- a predicate that tells if a given edge must be splitted
|
||||||
|
|
||||||
- a functor that gives you the new poistion of the created vertices (starting from an edge)
|
- a functor that gives you the new position of the created vertices (starting from an edge)
|
||||||
|
|
||||||
If RefineSelected is true only selected faces are taken into account for being splitted.
|
If RefineSelected is true only selected faces are taken into account for being splitted.
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* \ *
|
* \ *
|
||||||
* All rights reserved. *
|
* All rights reserved. *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
* it under the terms of the GNU General Public License as published by *
|
* it under the terms of the GNU General Public License as published by *
|
||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
|
@ -45,13 +45,13 @@ namespace tri
|
||||||
|
|
||||||
|
|
||||||
/* Base class for all Texture Optimizers*/
|
/* Base class for all Texture Optimizers*/
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
class TextureOptimizer{
|
class TextureOptimizer{
|
||||||
protected:
|
protected:
|
||||||
MESH_TYPE &m;
|
MESH_TYPE &m;
|
||||||
SimpleTempData<typename MESH_TYPE::VertContainer, int > isFixed;
|
SimpleTempData<typename MESH_TYPE::VertContainer, int > isFixed;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/* Tpyes */
|
/* Tpyes */
|
||||||
typedef MESH_TYPE MeshType;
|
typedef MESH_TYPE MeshType;
|
||||||
typedef typename MESH_TYPE::VertexIterator VertexIterator;
|
typedef typename MESH_TYPE::VertexIterator VertexIterator;
|
||||||
|
@ -59,26 +59,26 @@ public:
|
||||||
typedef typename MESH_TYPE::VertexType VertexType;
|
typedef typename MESH_TYPE::VertexType VertexType;
|
||||||
typedef typename MESH_TYPE::FaceType FaceType;
|
typedef typename MESH_TYPE::FaceType FaceType;
|
||||||
typedef typename MESH_TYPE::ScalarType ScalarType;
|
typedef typename MESH_TYPE::ScalarType ScalarType;
|
||||||
|
|
||||||
|
|
||||||
/* Access functions */
|
/* Access functions */
|
||||||
const MeshType & Mesh() const {return m;}
|
const MeshType & Mesh() const {return m;}
|
||||||
MeshType & Mesh() {return m;}
|
MeshType & Mesh() {return m;}
|
||||||
|
|
||||||
/* Constructior */
|
/* Constructior */
|
||||||
TextureOptimizer(MeshType &_m):m(_m),isFixed(_m.vert){
|
TextureOptimizer(MeshType &_m):m(_m),isFixed(_m.vert){
|
||||||
assert(m.HasPerVertexTexture());
|
assert(m.HasPerVertexTexture());
|
||||||
}
|
}
|
||||||
|
|
||||||
// initializes on current geometry
|
// initializes on current geometry
|
||||||
virtual void TargetCurrentGeometry()=0;
|
virtual void TargetCurrentGeometry()=0;
|
||||||
|
|
||||||
// performs an interation. Returns largest movement.
|
// performs an iteration. Returns largest movement.
|
||||||
virtual ScalarType Iterate()=0;
|
virtual ScalarType Iterate()=0;
|
||||||
|
|
||||||
// performs an iteration (faster, but it does not tell how close it is to stopping)
|
// performs an iteration (faster, but it does not tell how close it is to stopping)
|
||||||
virtual void IterateBlind()=0;
|
virtual void IterateBlind()=0;
|
||||||
|
|
||||||
// performs <steps> iteration
|
// performs <steps> iteration
|
||||||
virtual ScalarType IterateN(int step){
|
virtual ScalarType IterateN(int step){
|
||||||
for (int i=0; i<step-1; i++) {
|
for (int i=0; i<step-1; i++) {
|
||||||
|
@ -86,7 +86,7 @@ public:
|
||||||
}
|
}
|
||||||
if (step>1) return this->Iterate(); else return 0;
|
if (step>1) return this->Iterate(); else return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// performs iterations until convergence.
|
// performs iterations until convergence.
|
||||||
bool IterateUntilConvergence(ScalarType threshold=0.0001, int maxite=5000){
|
bool IterateUntilConvergence(ScalarType threshold=0.0001, int maxite=5000){
|
||||||
int i;
|
int i;
|
||||||
|
@ -95,34 +95,34 @@ public:
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// desctuctor: free temporary field
|
// desctuctor: free temporary field
|
||||||
~TextureOptimizer(){
|
~TextureOptimizer(){
|
||||||
isFixed.Stop();
|
isFixed.Stop();
|
||||||
};
|
};
|
||||||
|
|
||||||
// set the current border as fixed (forced to stay in position during text optimization)
|
// set the current border as fixed (forced to stay in position during text optimization)
|
||||||
void SetBorderAsFixed(){
|
void SetBorderAsFixed(){
|
||||||
isFixed.Start();
|
isFixed.Start();
|
||||||
for (VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) {
|
for (VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) {
|
||||||
isFixed[v]=(v->IsB())?1:0;
|
isFixed[v]=(v->IsB())?1:0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// everything moves, no vertex must fixed during texture optimization)
|
// everything moves, no vertex must fixed during texture optimization)
|
||||||
void SetNothingAsFixed(){
|
void SetNothingAsFixed(){
|
||||||
isFixed.Start();
|
isFixed.Start();
|
||||||
for (VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) {
|
for (VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) {
|
||||||
isFixed[v]=0;
|
isFixed[v]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix a given vertex
|
// fix a given vertex
|
||||||
void FixVertex(const VertexType *v, bool fix=true){
|
void FixVertex(const VertexType *v, bool fix=true){
|
||||||
isFixed[v]=(fix)?1:0;
|
isFixed[v]=(fix)?1:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,12 +130,12 @@ public:
|
||||||
/*
|
/*
|
||||||
AREA PRESERVING TEXTURE OPTIMIZATION
|
AREA PRESERVING TEXTURE OPTIMIZATION
|
||||||
|
|
||||||
as in: Degener, P., Meseth, J., Klein, R.
|
as in: Degener, P., Meseth, J., Klein, R.
|
||||||
"An adaptable surface parameterization method."
|
"An adaptable surface parameterization method."
|
||||||
Proc. of the 12th International Meshing oundtable, 201–213 [2003].
|
Proc. of the 12th International Meshing oundtable, 201-213 [2003].
|
||||||
|
|
||||||
Features:
|
Features:
|
||||||
|
|
||||||
:) - Balances angle and area distortions (best results!).
|
:) - Balances angle and area distortions (best results!).
|
||||||
:) - Can choose how to balance area and angle preservation (see SetTheta)
|
:) - Can choose how to balance area and angle preservation (see SetTheta)
|
||||||
theta=0 -> pure conformal (use MIPS instead!)
|
theta=0 -> pure conformal (use MIPS instead!)
|
||||||
|
@ -144,12 +144,12 @@ Features:
|
||||||
:( - Slowest method.
|
:( - Slowest method.
|
||||||
:( - Requires a fixed boundary, else expands forever in texture space (unless theta=0).
|
:( - Requires a fixed boundary, else expands forever in texture space (unless theta=0).
|
||||||
:( - Diverges in presence of flipped faces (unless theta=0).
|
:( - Diverges in presence of flipped faces (unless theta=0).
|
||||||
:( - Requires a speed parameter to be set.
|
:( - Requires a speed parameter to be set.
|
||||||
Speed too large => when close, bounces back and forth around minimum, w/o getting any closer.
|
Speed too large => when close, bounces back and forth around minimum, w/o getting any closer.
|
||||||
Lower speed => longer convercence times
|
Lower speed => longer convercence times
|
||||||
*/
|
*/
|
||||||
|
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
class AreaPreservingTextureOptimizer:public TextureOptimizer<MESH_TYPE>{
|
class AreaPreservingTextureOptimizer:public TextureOptimizer<MESH_TYPE>{
|
||||||
public:
|
public:
|
||||||
/* Types */
|
/* Types */
|
||||||
|
@ -159,34 +159,34 @@ public:
|
||||||
typedef typename MESH_TYPE::VertexType VertexType;
|
typedef typename MESH_TYPE::VertexType VertexType;
|
||||||
typedef typename MESH_TYPE::FaceType FaceType;
|
typedef typename MESH_TYPE::FaceType FaceType;
|
||||||
typedef typename MESH_TYPE::ScalarType ScalarType;
|
typedef typename MESH_TYPE::ScalarType ScalarType;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef TextureOptimizer<MESH_TYPE> Super; // superclass (commodity)
|
typedef TextureOptimizer<MESH_TYPE> Super; // superclass (commodity)
|
||||||
|
|
||||||
// extra data per face: [0..3] -> cotangents. [4] -> area*2
|
// extra data per face: [0..3] -> cotangents. [4] -> area*2
|
||||||
SimpleTempData<typename MESH_TYPE::FaceContainer, Point4<ScalarType> > data;
|
SimpleTempData<typename MESH_TYPE::FaceContainer, Point4<ScalarType> > data;
|
||||||
SimpleTempData<typename MESH_TYPE::VertContainer, Point2<ScalarType> > sum;
|
SimpleTempData<typename MESH_TYPE::VertContainer, Point2<ScalarType> > sum;
|
||||||
|
|
||||||
ScalarType totArea;
|
ScalarType totArea;
|
||||||
ScalarType speed;
|
ScalarType speed;
|
||||||
|
|
||||||
int theta;
|
int theta;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// constructor and destructor
|
// constructor and destructor
|
||||||
AreaPreservingTextureOptimizer(MeshType &_m):Super(_m),data(_m.face),sum(_m.vert){
|
AreaPreservingTextureOptimizer(MeshType &_m):Super(_m),data(_m.face),sum(_m.vert){
|
||||||
speed=0.001;
|
speed=0.001;
|
||||||
theta=3;
|
theta=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
~AreaPreservingTextureOptimizer(){
|
~AreaPreservingTextureOptimizer(){
|
||||||
data.Stop();
|
data.Stop();
|
||||||
sum.Stop();
|
sum.Stop();
|
||||||
Super::isFixed.Stop();
|
Super::isFixed.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSpeed(ScalarType _speed){
|
void SetSpeed(ScalarType _speed){
|
||||||
speed=_speed;
|
speed=_speed;
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,7 @@ public:
|
||||||
ScalarType GetSpeed(){
|
ScalarType GetSpeed(){
|
||||||
return speed;
|
return speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// sets the parameter theta:
|
// sets the parameter theta:
|
||||||
// good parameters are in 1..3
|
// good parameters are in 1..3
|
||||||
// 0 = converge to pure conformal, ignore area preservation
|
// 0 = converge to pure conformal, ignore area preservation
|
||||||
|
@ -207,16 +207,16 @@ public:
|
||||||
int GetTheta(){
|
int GetTheta(){
|
||||||
return theta;
|
return theta;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IterateBlind(){
|
void IterateBlind(){
|
||||||
/* todo: do as iterate, but without */
|
/* todo: do as iterate, but without */
|
||||||
Iterate();
|
Iterate();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScalarType Iterate(){
|
ScalarType Iterate(){
|
||||||
|
|
||||||
ScalarType max; // max displacement
|
ScalarType max; // max displacement
|
||||||
|
|
||||||
#define v0 (f->V0(i)->T().P())
|
#define v0 (f->V0(i)->T().P())
|
||||||
#define v1 (f->V1(i)->T().P())
|
#define v1 (f->V1(i)->T().P())
|
||||||
#define v2 (f->V2(i)->T().P())
|
#define v2 (f->V2(i)->T().P())
|
||||||
|
@ -236,15 +236,15 @@ public:
|
||||||
for (FaceIterator f=Super::m.face.begin(); f!=Super::m.face.end(); f++) {
|
for (FaceIterator f=Super::m.face.begin(); f!=Super::m.face.end(); f++) {
|
||||||
int i=0; ScalarType area2 = ((v1-v0) ^ (v2-v0));
|
int i=0; ScalarType area2 = ((v1-v0) ^ (v2-v0));
|
||||||
for (i=0; i<3; i++){
|
for (i=0; i<3; i++){
|
||||||
ScalarType
|
ScalarType
|
||||||
a = (v1-v0).Norm(),
|
a = (v1-v0).Norm(),
|
||||||
b = ((v1-v0) * (v2-v0))/a,
|
b = ((v1-v0) * (v2-v0))/a,
|
||||||
c = area2 / a,
|
c = area2 / a,
|
||||||
|
|
||||||
m0= data[f][i] / area2,
|
m0= data[f][i] / area2,
|
||||||
m1= data[f][(i+1)%3] / area2,
|
m1= data[f][(i+1)%3] / area2,
|
||||||
m2= data[f][(i+2)%3] / area2,
|
m2= data[f][(i+2)%3] / area2,
|
||||||
|
|
||||||
mx= (b-a)/area2,
|
mx= (b-a)/area2,
|
||||||
my= c/area2, // 1.0/a
|
my= c/area2, // 1.0/a
|
||||||
mA= data[f][3]/area2 * scale,
|
mA= data[f][3]/area2 * scale,
|
||||||
|
@ -258,35 +258,35 @@ public:
|
||||||
|
|
||||||
/* linear weightings
|
/* linear weightings
|
||||||
|
|
||||||
dx= (OMEGA) * (my * M2) +
|
dx= (OMEGA) * (my * M2) +
|
||||||
(1-OMEGA) * ( px - 2.0*qx),
|
(1-OMEGA) * ( px - 2.0*qx),
|
||||||
dy= (OMEGA) * (-mx * M2) +
|
dy= (OMEGA) * (-mx * M2) +
|
||||||
(1-OMEGA) * ( py - 2.0*qy),*/
|
(1-OMEGA) * ( py - 2.0*qy),*/
|
||||||
|
|
||||||
// exponential weighting
|
// exponential weighting
|
||||||
// 2d gradient
|
// 2d gradient
|
||||||
|
|
||||||
dx=// M1
|
dx=// M1
|
||||||
//*M1 // ^ theta-1
|
//*M1 // ^ theta-1
|
||||||
pow(M1,theta-1)
|
pow(M1,theta-1)
|
||||||
*(px*(M1+ theta*M2) - 2.0*qx*M1),
|
*(px*(M1+ theta*M2) - 2.0*qx*M1),
|
||||||
dy=// M1
|
dy=// M1
|
||||||
//*M1 // ^ theta-1
|
//*M1 // ^ theta-1
|
||||||
pow(M1,theta-1)
|
pow(M1,theta-1)
|
||||||
*(py*(M1+ theta*M2) - 2.0*qy*M1),
|
*(py*(M1+ theta*M2) - 2.0*qy*M1),
|
||||||
|
|
||||||
gy= dy/c,
|
gy= dy/c,
|
||||||
gx= (dx - gy*b) / a;
|
gx= (dx - gy*b) / a;
|
||||||
|
|
||||||
// 3d gradient
|
// 3d gradient
|
||||||
|
|
||||||
sum[f->V(i)]+= ( (v1-v0) * gx + (v2-v0) * gy ) * data[f][3];
|
sum[f->V(i)]+= ( (v1-v0) * gx + (v2-v0) * gy ) * data[f][3];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
max=0; // max displacement
|
max=0; // max displacement
|
||||||
speed=0.001;
|
speed=0.001;
|
||||||
for (VertexIterator v=Super::m.vert.begin(); v!=Super::m.vert.end(); v++)
|
for (VertexIterator v=Super::m.vert.begin(); v!=Super::m.vert.end(); v++)
|
||||||
if ( !Super::isFixed[v] ) //if (!v->IsB())
|
if ( !Super::isFixed[v] ) //if (!v->IsB())
|
||||||
{
|
{
|
||||||
ScalarType n=sum[v].Norm();
|
ScalarType n=sum[v].Norm();
|
||||||
if ( n > 1 ) { sum[v]/=n; n=1.0;}
|
if ( n > 1 ) { sum[v]/=n; n=1.0;}
|
||||||
|
@ -298,17 +298,17 @@ public:
|
||||||
}
|
}
|
||||||
return max;
|
return max;
|
||||||
#undef v0
|
#undef v0
|
||||||
#undef v1
|
#undef v1
|
||||||
#undef v2
|
#undef v2
|
||||||
//printf("rejected %d\n",rejected);
|
//printf("rejected %d\n",rejected);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TargetCurrentGeometry(){
|
void TargetCurrentGeometry(){
|
||||||
|
|
||||||
Super::isFixed.Start();
|
Super::isFixed.Start();
|
||||||
data.Start();
|
data.Start();
|
||||||
sum.Start();
|
sum.Start();
|
||||||
|
|
||||||
totArea=0;
|
totArea=0;
|
||||||
for (FaceIterator f=Super::m.face.begin(); f!=Super::m.face.end(); f++) {
|
for (FaceIterator f=Super::m.face.begin(); f!=Super::m.face.end(); f++) {
|
||||||
double area2 = ((f->V(1)->P() - f->V(0)->P() )^(f->V(2)->P() - f->V(0)->P() )).Norm();
|
double area2 = ((f->V(1)->P() - f->V(0)->P() )^(f->V(2)->P() - f->V(0)->P() )).Norm();
|
||||||
|
@ -322,7 +322,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -333,12 +333,12 @@ public:
|
||||||
// returns false if any fold is present (faster than MarkFolds)
|
// returns false if any fold is present (faster than MarkFolds)
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
bool IsFoldFree(MESH_TYPE &m){
|
bool IsFoldFree(MESH_TYPE &m){
|
||||||
|
|
||||||
assert(m.HasPerVertexTexture());
|
assert(m.HasPerVertexTexture());
|
||||||
|
|
||||||
typedef typename MESH_TYPE::VertexType::TextureType::PointType PointType;
|
typedef typename MESH_TYPE::VertexType::TextureType::PointType PointType;
|
||||||
typedef typename MESH_TYPE::VertexType::TextureType::PointType::ScalarType ScalarType;
|
typedef typename MESH_TYPE::VertexType::TextureType::PointType::ScalarType ScalarType;
|
||||||
|
|
||||||
ScalarType lastsign=0;
|
ScalarType lastsign=0;
|
||||||
for (typename MESH_TYPE::FaceIterator f=m.face.begin(); f!=m.face.end(); f++){
|
for (typename MESH_TYPE::FaceIterator f=m.face.begin(); f!=m.face.end(); f++){
|
||||||
ScalarType sign=((f->V(1)->T().P()-f->V(0)->T().P()) ^ (f->V(2)->T().P()-f->V(0)->T().P()));
|
ScalarType sign=((f->V(1)->T().P()-f->V(0)->T().P()) ^ (f->V(2)->T().P()-f->V(0)->T().P()));
|
||||||
|
@ -354,16 +354,16 @@ bool IsFoldFree(MESH_TYPE &m){
|
||||||
// returns number of folded faces
|
// returns number of folded faces
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
int MarkFolds(MESH_TYPE &m){
|
int MarkFolds(MESH_TYPE &m){
|
||||||
|
|
||||||
assert(m.HasPerVertexTexture());
|
assert(m.HasPerVertexTexture());
|
||||||
assert(m.HasPerFaceQuality());
|
assert(m.HasPerFaceQuality());
|
||||||
|
|
||||||
typedef typename MESH_TYPE::VertexType::TextureType::PointType PointType;
|
typedef typename MESH_TYPE::VertexType::TextureType::PointType PointType;
|
||||||
typedef typename MESH_TYPE::VertexType::TextureType::PointType::ScalarType ScalarType;
|
typedef typename MESH_TYPE::VertexType::TextureType::PointType::ScalarType ScalarType;
|
||||||
|
|
||||||
SimpleTempData<typename MESH_TYPE::FaceContainer, short> sign(m.face);
|
SimpleTempData<typename MESH_TYPE::FaceContainer, short> sign(m.face);
|
||||||
sign.Start(0);
|
sign.Start(0);
|
||||||
|
|
||||||
// first pass, determine predominant sign
|
// first pass, determine predominant sign
|
||||||
int npos=0, nneg=0;
|
int npos=0, nneg=0;
|
||||||
ScalarType lastsign=0;
|
ScalarType lastsign=0;
|
||||||
|
@ -372,7 +372,7 @@ int MarkFolds(MESH_TYPE &m){
|
||||||
if (fsign<0) { sign[f]=-1; nneg++; }
|
if (fsign<0) { sign[f]=-1; nneg++; }
|
||||||
if (fsign>0) { sign[f]=+1; npos++; }
|
if (fsign>0) { sign[f]=+1; npos++; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// second pass, detect folded faces
|
// second pass, detect folded faces
|
||||||
int res=0;
|
int res=0;
|
||||||
short gsign= (nneg>npos)?-1:+1;
|
short gsign= (nneg>npos)?-1:+1;
|
||||||
|
@ -382,28 +382,28 @@ int MarkFolds(MESH_TYPE &m){
|
||||||
f->Q()=0;
|
f->Q()=0;
|
||||||
} else f->Q()=1;
|
} else f->Q()=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sign.Stop();
|
sign.Stop();
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Smooths texture coords.
|
// Smooths texture coords.
|
||||||
// (can be useful to remove folds,
|
// (can be useful to remove folds,
|
||||||
// e.g. these created when obtaining tecture coordinates after projections)
|
// e.g. these created when obtaining tecture coordinates after projections)
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
void SmoothTextureCoords(MESH_TYPE &m){
|
void SmoothTextureCoords(MESH_TYPE &m){
|
||||||
|
|
||||||
assert(m.HasPerVertexTexture());
|
assert(m.HasPerVertexTexture());
|
||||||
|
|
||||||
typedef typename MESH_TYPE::VertexType::TextureType::PointType PointType;
|
typedef typename MESH_TYPE::VertexType::TextureType::PointType PointType;
|
||||||
|
|
||||||
SimpleTempData<typename MESH_TYPE::VertContainer, int> div(m.vert);
|
SimpleTempData<typename MESH_TYPE::VertContainer, int> div(m.vert);
|
||||||
SimpleTempData<typename MESH_TYPE::VertContainer, PointType > sum(m.vert);
|
SimpleTempData<typename MESH_TYPE::VertContainer, PointType > sum(m.vert);
|
||||||
|
|
||||||
div.Start();
|
div.Start();
|
||||||
sum.Start();
|
sum.Start();
|
||||||
|
|
||||||
for (typename MESH_TYPE::VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) {
|
for (typename MESH_TYPE::VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) {
|
||||||
sum[v].SetZero();
|
sum[v].SetZero();
|
||||||
div[v]=0;
|
div[v]=0;
|
||||||
|
@ -415,13 +415,13 @@ void SmoothTextureCoords(MESH_TYPE &m){
|
||||||
div[f->V(2)] +=2; sum[f->V(2)] += f->V(1)->T().P(); sum[f->V(2)] += f->V(0)->T().P();
|
div[f->V(2)] +=2; sum[f->V(2)] += f->V(1)->T().P(); sum[f->V(2)] += f->V(0)->T().P();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (typename MESH_TYPE::VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) // if (!v->IsB())
|
for (typename MESH_TYPE::VertexIterator v=m.vert.begin(); v!=m.vert.end(); v++) // if (!v->IsB())
|
||||||
{
|
{
|
||||||
if (v->div>0) {
|
if (v->div>0) {
|
||||||
v->T().P() = sum[v]/div[v];
|
v->T().P() = sum[v]/div[v];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div.Stop();
|
div.Stop();
|
||||||
sum.Stop();
|
sum.Stop();
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
#ifndef __VCG_TRI_UPDATE_FLAGS
|
#ifndef __VCG_TRI_UPDATE_FLAGS
|
||||||
#define __VCG_TRI_UPDATE_FLAGS
|
#define __VCG_TRI_UPDATE_FLAGS
|
||||||
|
|
||||||
|
#include <vcg/simplex/face/pos.h>
|
||||||
|
#include <vcg/simplex/tetrahedron/pos.h>
|
||||||
|
#include <vcg/simplex/edge/pos.h>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
/// \ingroup trimesh
|
/// \ingroup trimesh
|
||||||
|
|
|
@ -24,8 +24,13 @@
|
||||||
#ifndef __VCG_TRI_UPDATE_NORMALS
|
#ifndef __VCG_TRI_UPDATE_NORMALS
|
||||||
#define __VCG_TRI_UPDATE_NORMALS
|
#define __VCG_TRI_UPDATE_NORMALS
|
||||||
|
|
||||||
|
#include <vcg/space/triangle3.h>
|
||||||
|
#include <vcg/complex/base.h>
|
||||||
|
|
||||||
#include <vcg/complex/algorithms/polygon_support.h>
|
#include <vcg/complex/algorithms/polygon_support.h>
|
||||||
|
|
||||||
|
#include "flag.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,13 @@
|
||||||
#ifndef __VCG_TRI_UPDATE_SELECTION
|
#ifndef __VCG_TRI_UPDATE_SELECTION
|
||||||
#define __VCG_TRI_UPDATE_SELECTION
|
#define __VCG_TRI_UPDATE_SELECTION
|
||||||
|
|
||||||
|
#include <deque>
|
||||||
|
|
||||||
|
#include <vcg/complex/base.h>
|
||||||
|
#include <vcg/simplex/face/topology.h>
|
||||||
|
|
||||||
|
#include "flag.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
/// \ingroup trimesh
|
/// \ingroup trimesh
|
||||||
|
|
|
@ -24,6 +24,12 @@
|
||||||
#ifndef __VCG_TRI_UPDATE_TOPOLOGY
|
#ifndef __VCG_TRI_UPDATE_TOPOLOGY
|
||||||
#define __VCG_TRI_UPDATE_TOPOLOGY
|
#define __VCG_TRI_UPDATE_TOPOLOGY
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
#include <vcg/complex/base.h>
|
||||||
|
#include <vcg/simplex/face/topology.h>
|
||||||
|
#include <vcg/simplex/edge/pos.h>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
/// \ingroup trimesh
|
/// \ingroup trimesh
|
||||||
|
|
|
@ -23,9 +23,12 @@
|
||||||
#ifndef __VCGLIB_TRIALLOCATOR
|
#ifndef __VCGLIB_TRIALLOCATOR
|
||||||
#define __VCGLIB_TRIALLOCATOR
|
#define __VCGLIB_TRIALLOCATOR
|
||||||
|
|
||||||
#ifndef __VCG_MESH
|
#include <vector>
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
#include <set>
|
||||||
#endif
|
|
||||||
|
#include <vcg/container/simple_temporary_data.h>
|
||||||
|
|
||||||
|
#include "used_types.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
|
|
|
@ -23,9 +23,8 @@
|
||||||
#ifndef __VCGLIB_APPEND
|
#ifndef __VCGLIB_APPEND
|
||||||
#define __VCGLIB_APPEND
|
#define __VCGLIB_APPEND
|
||||||
|
|
||||||
#ifndef __VCG_MESH
|
#include <vcg/complex/allocate.h>
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
#include <vcg/complex/algorithms/update/selection.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
|
|
|
@ -20,12 +20,17 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
#ifndef __VCG_COMPLEX_BASE
|
#ifndef __VCG_COMPLEX_BASE
|
||||||
#define __VCG_COMPLEX_BASE
|
#define __VCG_COMPLEX_BASE
|
||||||
|
|
||||||
|
#include <typeindex>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
#include <vcg/container/simple_temporary_data.h>
|
||||||
|
|
||||||
|
#include "used_types.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
|
|
||||||
class PointerToAttribute
|
class PointerToAttribute
|
||||||
|
@ -596,7 +601,7 @@ template <class MeshType> inline bool IsMarked(const MeshType & m,typename MeshT
|
||||||
@param m the mesh containing the element
|
@param m the mesh containing the element
|
||||||
@param t tetra pointer */
|
@param t tetra pointer */
|
||||||
template <class MeshType>
|
template <class MeshType>
|
||||||
inline bool IsMarked(MeshType &m, typename MeshType::ConstTetraPointer t) { return t->cIMark() == m.imark; }
|
inline bool IsMarked(const MeshType &m, typename MeshType::ConstTetraPointer t) { return t->cIMark() == m.imark; }
|
||||||
|
|
||||||
/** \brief Set the vertex incremental mark of the vertex to the one of the mesh.
|
/** \brief Set the vertex incremental mark of the vertex to the one of the mesh.
|
||||||
@param m the mesh containing the element
|
@param m the mesh containing the element
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
#ifndef __VCG_EXCEPTION_H
|
#ifndef __VCG_EXCEPTION_H
|
||||||
#define __VCG_EXCEPTION_H
|
#define __VCG_EXCEPTION_H
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
namespace vcg
|
namespace vcg
|
||||||
{
|
{
|
||||||
class MissingComponentException : public std::runtime_error
|
class MissingComponentException : public std::runtime_error
|
||||||
|
|
|
@ -24,9 +24,7 @@
|
||||||
#ifndef VCG__FOREACH_H
|
#ifndef VCG__FOREACH_H
|
||||||
#define VCG__FOREACH_H
|
#define VCG__FOREACH_H
|
||||||
|
|
||||||
#ifndef __VCG_MESH
|
#include <vcg/simplex/face/pos.h>
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#ifndef VCG_USED_TYPES_H
|
#ifndef VCG_USED_TYPES_H
|
||||||
#define VCG_USED_TYPES_H
|
#define VCG_USED_TYPES_H
|
||||||
|
|
||||||
#include <vcg/space/point3.h>
|
|
||||||
#include <vcg/space/box3.h>
|
#include <vcg/space/box3.h>
|
||||||
#include <vcg/space/color4.h>
|
#include <vcg/space/color4.h>
|
||||||
#include <vcg/math/shot.h>
|
#include <vcg/math/shot.h>
|
||||||
|
|
|
@ -20,11 +20,18 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include <vcg/complex/complex.h>
|
|
||||||
|
|
||||||
#ifndef __VCG_HEDGE_
|
#ifndef __VCG_HEDGE_
|
||||||
#define __VCG_HEDGE_
|
#define __VCG_HEDGE_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <vcg/complex/all_types.h>
|
||||||
|
#include <vcg/container/derivation_chain.h>
|
||||||
|
|
||||||
|
#include "hedge_component.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
|
|
|
@ -20,11 +20,14 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include <vcg/complex/complex.h>
|
|
||||||
|
|
||||||
#ifndef __VCG_HEDGE_COMPONENT
|
#ifndef __VCG_HEDGE_COMPONENT
|
||||||
#define __VCG_HEDGE_COMPONENT
|
#define __VCG_HEDGE_COMPONENT
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace hedge {
|
namespace hedge {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -24,10 +24,11 @@
|
||||||
#ifndef __VCGLIB_SIMPLE__
|
#ifndef __VCGLIB_SIMPLE__
|
||||||
#define __VCGLIB_SIMPLE__
|
#define __VCGLIB_SIMPLE__
|
||||||
|
|
||||||
#include <string.h>
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <assert.h>
|
#include <cassert>
|
||||||
|
|
||||||
namespace vcg
|
namespace vcg
|
||||||
{
|
{
|
||||||
|
|
|
@ -566,7 +566,7 @@ bool Decompose(Matrix44<T> &M, Point3<T> &ScaleV, Point3<T> &ShearV, Point3<T> &
|
||||||
return false;
|
return false;
|
||||||
if(math::Abs(M.Determinant())<1e-10) return false; // matrix should be at least invertible...
|
if(math::Abs(M.Determinant())<1e-10) return false; // matrix should be at least invertible...
|
||||||
|
|
||||||
// First Step recover the traslation
|
// First Step recover the translation
|
||||||
TranV=M.GetColumn3(3);
|
TranV=M.GetColumn3(3);
|
||||||
|
|
||||||
// Second Step Recover Scale and Shearing interleaved
|
// Second Step Recover Scale and Shearing interleaved
|
||||||
|
|
|
@ -207,7 +207,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* multiply the current reference frame for the matrix passed
|
/* multiply the current reference frame for the matrix passed
|
||||||
note: it is up to the caller to check the the matrix passed is a pure rototraslation
|
note: it is up to the caller to check the the matrix passed is a pure rototranslation
|
||||||
*/
|
*/
|
||||||
void MultMatrix( vcg::Matrix44<S> m44)
|
void MultMatrix( vcg::Matrix44<S> m44)
|
||||||
{
|
{
|
||||||
|
@ -218,7 +218,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* multiply the current reference frame for the similarity passed
|
/* multiply the current reference frame for the similarity passed
|
||||||
note: it is up to the caller to check the the matrix passed is a pure rototraslation
|
note: it is up to the caller to check the the matrix passed is a pure rototranslation
|
||||||
*/
|
*/
|
||||||
void MultSimilarity( const Similarity<S> & s){ MultMatrix(s.Matrix());}
|
void MultSimilarity( const Similarity<S> & s){ MultMatrix(s.Matrix());}
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,19 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
#ifndef __VCG_EDGE_PLUS
|
#ifndef __VCG_EDGE_PLUS
|
||||||
#define __VCG_EDGE_PLUS
|
#define __VCG_EDGE_PLUS
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <vcg/complex/all_types.h>
|
||||||
|
#include <vcg/container/derivation_chain.h>
|
||||||
|
|
||||||
|
#include "component.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -20,12 +20,17 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
#ifndef __VCG_EDGE_PLUS_COMPONENT
|
#ifndef __VCG_EDGE_PLUS_COMPONENT
|
||||||
#define __VCG_EDGE_PLUS_COMPONENT
|
#define __VCG_EDGE_PLUS_COMPONENT
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <vcg/space/color4.h>
|
||||||
|
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace edge {
|
namespace edge {
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#ifndef __VCG_EDGE_POS
|
#ifndef __VCG_EDGE_POS
|
||||||
#define __VCG_EDGE_POS
|
#define __VCG_EDGE_POS
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace edge {
|
namespace edge {
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,12 @@
|
||||||
#ifndef _VCG_EDGE_TOPOLOGY
|
#ifndef _VCG_EDGE_TOPOLOGY
|
||||||
#define _VCG_EDGE_TOPOLOGY
|
#define _VCG_EDGE_TOPOLOGY
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <vcg/complex/allocate.h>
|
||||||
|
|
||||||
|
#include "pos.h"
|
||||||
|
#include "component.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace edge {
|
namespace edge {
|
||||||
/** \addtogroup edge */
|
/** \addtogroup edge */
|
||||||
|
|
|
@ -20,12 +20,18 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
#ifndef __VCG_FACE_PLUS
|
#ifndef __VCG_FACE_PLUS
|
||||||
#define __VCG_FACE_PLUS
|
#define __VCG_FACE_PLUS
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <vcg/complex/all_types.h>
|
||||||
|
#include <vcg/container/derivation_chain.h>
|
||||||
|
|
||||||
|
#include "component.h"
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
|
@ -163,16 +169,16 @@ public:
|
||||||
/// select the Face
|
/// select the Face
|
||||||
void SetS() {this->Flags() |=SELECTED;}
|
void SetS() {this->Flags() |=SELECTED;}
|
||||||
/// Un-select a Face
|
/// Un-select a Face
|
||||||
void ClearS() {this->Flags() &= ~SELECTED;}
|
void ClearS() {this->Flags() &= ~SELECTED;}
|
||||||
/// select the Face
|
/// select the Face
|
||||||
void SetV() {this->Flags() |=VISITED;}
|
void SetV() {this->Flags() |=VISITED;}
|
||||||
/// Un-select a Face
|
/// Un-select a Face
|
||||||
void ClearV() {this->Flags() &= ~VISITED;}
|
void ClearV() {this->Flags() &= ~VISITED;}
|
||||||
|
|
||||||
/// This function checks if the face is selected
|
/// This function checks if the face is selected
|
||||||
bool IsB(int i) const {return (this->cFlags() & (BORDER0<<i)) != 0;}
|
bool IsB(int i) const {return (this->cFlags() & (BORDER0<<i)) != 0;}
|
||||||
/// This function select the face
|
/// This function select the face
|
||||||
void SetB(int i) {this->Flags() |=(BORDER0<<i);}
|
void SetB(int i) {this->Flags() |=(BORDER0<<i);}
|
||||||
/// This funcion execute the inverse operation of SetS()
|
/// This funcion execute the inverse operation of SetS()
|
||||||
void ClearB(int i) {this->Flags() &= (~(BORDER0<<i));}
|
void ClearB(int i) {this->Flags() &= (~(BORDER0<<i));}
|
||||||
|
|
||||||
|
|
|
@ -20,12 +20,16 @@
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
#ifndef __VCG_FACE_PLUS_COMPONENT
|
#ifndef __VCG_FACE_PLUS_COMPONENT
|
||||||
#define __VCG_FACE_PLUS_COMPONENT
|
#define __VCG_FACE_PLUS_COMPONENT
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <vcg/space/color4.h>
|
||||||
|
#include <vcg/space/texcoord2.h>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace face {
|
namespace face {
|
||||||
|
@ -36,15 +40,15 @@ namespace face {
|
||||||
|
|
||||||
template <class T> class EmptyCore: public T {
|
template <class T> class EmptyCore: public T {
|
||||||
public:
|
public:
|
||||||
inline typename T::VertexType * &V( const int ) { assert(0); static typename T::VertexType *vp=0; return vp; }
|
inline typename T::VertexType * &V( const int ) { assert(0); static typename T::VertexType *vp=0; return vp; }
|
||||||
inline typename T::VertexType * V( const int ) const { assert(0); static typename T::VertexType *vp=0; return vp; }
|
inline const typename T::VertexType * V( const int ) const { assert(0); static typename T::VertexType *vp=0; return vp; }
|
||||||
inline typename T::VertexType * cV( const int ) const { assert(0); static typename T::VertexType *vp=0; return vp; }
|
inline const typename T::VertexType * cV( const int ) const { assert(0); static typename T::VertexType *vp=0; return vp; }
|
||||||
inline typename T::VertexType * &FVp( const int i ) { return this->V(i); }
|
inline typename T::VertexType * &FVp( const int i ) { return this->V(i); }
|
||||||
inline typename T::VertexType * FVp( const int i ) const { return this->cV(i); }
|
inline const typename T::VertexType * FVp( const int i ) const { return this->cV(i); }
|
||||||
inline typename T::VertexType * cFVp( const int i ) const { return this->cV(i); }
|
inline const typename T::VertexType * cFVp( const int i ) const { return this->cV(i); }
|
||||||
inline typename T::CoordType &P( const int ) { assert(0); static typename T::CoordType coord(0, 0, 0); return coord; }
|
inline typename T::CoordType &P( const int ) { assert(0); static typename T::CoordType coord(0, 0, 0); return coord; }
|
||||||
inline typename T::CoordType P( const int ) const { assert(0); static typename T::CoordType coord(0, 0, 0); return coord; }
|
inline typename T::CoordType P( const int ) const { assert(0); static typename T::CoordType coord(0, 0, 0); return coord; }
|
||||||
inline typename T::CoordType cP( const int ) const { assert(0); static typename T::CoordType coord(0, 0, 0); return coord; }
|
inline typename T::CoordType cP( const int ) const { assert(0); static typename T::CoordType coord(0, 0, 0); return coord; }
|
||||||
|
|
||||||
static bool HasVertexRef() { return false; }
|
static bool HasVertexRef() { return false; }
|
||||||
static bool HasFVAdjacency() { return false; }
|
static bool HasFVAdjacency() { return false; }
|
||||||
|
@ -196,7 +200,7 @@ public:
|
||||||
|
|
||||||
inline typename T::VertexType * &V( const int j ) { assert(j>=0 && j<3); return v[j]; } /// \brief The pointer to the i-th vertex
|
inline typename T::VertexType * &V( const int j ) { assert(j>=0 && j<3); return v[j]; } /// \brief The pointer to the i-th vertex
|
||||||
inline const typename T::VertexType * V (const int j) const { assert(j>=0 && j<3); return v[j]; }
|
inline const typename T::VertexType * V (const int j) const { assert(j>=0 && j<3); return v[j]; }
|
||||||
inline typename T::VertexType * cV( const int j ) const { assert(j>=0 && j<3); return v[j]; }
|
inline const typename T::VertexType * cV( const int j ) const { assert(j>=0 && j<3); return v[j]; }
|
||||||
|
|
||||||
inline CoordType &P( const int j ) { assert(j>=0 && j<3); return v[j]->P(); } /// \brief Shortcut: the position of the i-th vertex (equivalent to \c V(i)->P() )
|
inline CoordType &P( const int j ) { assert(j>=0 && j<3); return v[j]->P(); } /// \brief Shortcut: the position of the i-th vertex (equivalent to \c V(i)->P() )
|
||||||
inline const CoordType &P( const int j ) const { assert(j>=0 && j<3); return v[j]->P(); }
|
inline const CoordType &P( const int j ) const { assert(j>=0 && j<3); return v[j]->P(); }
|
||||||
|
@ -208,9 +212,9 @@ public:
|
||||||
inline const typename T::VertexType * V0( const int j ) const { return V(j);} /** \brief Return the pointer to the j-th vertex of the face. */
|
inline const typename T::VertexType * V0( const int j ) const { return V(j);} /** \brief Return the pointer to the j-th vertex of the face. */
|
||||||
inline const typename T::VertexType * V1( const int j ) const { return V((j+1)%3);} /** \brief Return the pointer to the ((j+1)%3)-th vertex of the face. */
|
inline const typename T::VertexType * V1( const int j ) const { return V((j+1)%3);} /** \brief Return the pointer to the ((j+1)%3)-th vertex of the face. */
|
||||||
inline const typename T::VertexType * V2( const int j ) const { return V((j+2)%3);} /** \brief Return the pointer to the ((j+2)%3)-th vertex of the face. */
|
inline const typename T::VertexType * V2( const int j ) const { return V((j+2)%3);} /** \brief Return the pointer to the ((j+2)%3)-th vertex of the face. */
|
||||||
inline typename T::VertexType * cV0( const int j ) const { return cV(j);}
|
inline const typename T::VertexType * cV0( const int j ) const { return cV(j);}
|
||||||
inline typename T::VertexType * cV1( const int j ) const { return cV((j+1)%3);}
|
inline const typename T::VertexType * cV1( const int j ) const { return cV((j+1)%3);}
|
||||||
inline typename T::VertexType * cV2( const int j ) const { return cV((j+2)%3);}
|
inline const typename T::VertexType * cV2( const int j ) const { return cV((j+2)%3);}
|
||||||
|
|
||||||
inline CoordType & P0( const int j ) { return V(j)->P();}
|
inline CoordType & P0( const int j ) { return V(j)->P();}
|
||||||
inline CoordType & P1( const int j ) { return V((j+1)%3)->P();}
|
inline CoordType & P1( const int j ) { return V((j+1)%3)->P();}
|
||||||
|
|
|
@ -26,9 +26,6 @@ OCC = Optional Component Compact
|
||||||
compare with OCF(Optional Component Fast)
|
compare with OCF(Optional Component Fast)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
|
||||||
#endif
|
|
||||||
#ifndef __VCG_FACE_PLUS_COMPONENT_OCC
|
#ifndef __VCG_FACE_PLUS_COMPONENT_OCC
|
||||||
#define __VCG_FACE_PLUS_COMPONENT_OCC
|
#define __VCG_FACE_PLUS_COMPONENT_OCC
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,12 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCG_FACE_PLUS_COMPONENT_OCF
|
#ifndef __VCG_FACE_PLUS_COMPONENT_OCF
|
||||||
#define __VCG_FACE_PLUS_COMPONENT_OCF
|
#define __VCG_FACE_PLUS_COMPONENT_OCF
|
||||||
#ifndef __VCG_MESH
|
|
||||||
#error "This file should not be included alone. It is automatically included by complex.h"
|
#include <vector>
|
||||||
#endif
|
#include <string>
|
||||||
|
|
||||||
|
#include <vcg/space/color4.h>
|
||||||
|
#include <vcg/space/texcoord2.h>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace face {
|
namespace face {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue