Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
OpenMesh
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
13
Issues
13
List
Boards
Labels
Service Desk
Milestones
Merge Requests
5
Merge Requests
5
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenMesh
OpenMesh
Commits
00101c13
Commit
00101c13
authored
Mar 24, 2016
by
Hans-Christian Ebke
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into performance_tuning
parents
3868b351
7fffd773
Pipeline
#952
passed with stage
Changes
17
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
219 additions
and
110 deletions
+219
-110
Doc/changelog.docu
Doc/changelog.docu
+37
-0
Doc/smoother.docu
Doc/smoother.docu
+2
-2
cmake/FindOpenMesh.cmake
cmake/FindOpenMesh.cmake
+2
-0
src/OpenMesh/Core/Geometry/Vector11T.hh
src/OpenMesh/Core/Geometry/Vector11T.hh
+2
-2
src/OpenMesh/Core/Geometry/VectorDimensionsT.hh
src/OpenMesh/Core/Geometry/VectorDimensionsT.hh
+0
-80
src/OpenMesh/Core/IO/importer/BaseImporter.hh
src/OpenMesh/Core/IO/importer/BaseImporter.hh
+9
-0
src/OpenMesh/Core/IO/importer/ImporterT.hh
src/OpenMesh/Core/IO/importer/ImporterT.hh
+31
-0
src/OpenMesh/Core/IO/reader/OBJReader.cc
src/OpenMesh/Core/IO/reader/OBJReader.cc
+17
-5
src/OpenMesh/Core/IO/reader/PLYReader.cc
src/OpenMesh/Core/IO/reader/PLYReader.cc
+13
-1
src/OpenMesh/Core/IO/writer/OBJWriter.cc
src/OpenMesh/Core/IO/writer/OBJWriter.cc
+3
-3
src/OpenMesh/Core/Mesh/Handles.hh
src/OpenMesh/Core/Mesh/Handles.hh
+1
-1
src/OpenMesh/Core/Mesh/PolyMeshT.cc
src/OpenMesh/Core/Mesh/PolyMeshT.cc
+3
-3
src/OpenMesh/Tools/CMakeLists.txt
src/OpenMesh/Tools/CMakeLists.txt
+1
-1
src/Python/Decimater.hh
src/Python/Decimater.hh
+12
-10
src/Python/PropertyManager.hh
src/Python/PropertyManager.hh
+2
-2
src/Unittests/TestFiles/cube-minimal-texCoords3d.obj
src/Unittests/TestFiles/cube-minimal-texCoords3d.obj
+39
-0
src/Unittests/unittests_read_write_OBJ.cc
src/Unittests/unittests_read_write_OBJ.cc
+45
-0
No files found.
Doc/changelog.docu
View file @
00101c13
...
...
@@ -9,6 +9,10 @@
<tr valign=top><td><b>6.0</b> (?/?/?)</td><td>
<b>IO</b>
<ul>
<li>Obj reader: added texCoord3d functions to objloader</li>
</ul>
<b>VectorT</b>
<ul>
...
...
@@ -28,9 +32,42 @@
<li>Updated c++11 ifdefs to use c++11 (starting with VS1015)</li>
</ul>
<b>Python Interface</b>
<ul>
<li>Fixed segfault in decimater due to a bad pointer</li>
</ul>
</tr>
<tr valign=top><td><b>5.2</b> (?/?/?)</td><td>
<b>Core</b>
<ul>
<li>Fixed ugly typo in __decrement function of Basehandle. Seems to be unused in the rest of the code.</li>
<li>drop VectorDimensionsT metaprogram in favor of vector_traits in normal computation function</li>
</ul>
<b>IO</b>
<ul>
<li>PLY Reader: Fixed CR LF newline handling for binary file headers.</li>
<li>Obj writer: Fix OBJ material files and face color (Thanks to Sven-Kristofer Pilz for the patch) </li>
</ul>
<b>Build System</b>
<ul>
<li>Fixed Typo in cmake install for smoother (Thanks to Takashi Michikawa for the fix).</li>
</ul>
<b>Documentation</b>
<ul>
<li>Fixed order of smoother parameters in the documentation. (Thanks to Takashi Michikawa for the info).</li>
</ul>
</tr>
<tr valign=top><td><b>5.1</b> (2015/17/12)</td><td>
...
...
Doc/smoother.docu
View file @
00101c13
...
...
@@ -20,8 +20,8 @@ The smoothers directly work on an OpenMesh. The following example shows how to u
// Initialize smoother with input mesh
OpenMesh::Smoother::JacobiLaplaceSmootherT<MyMesh> smoother(mesh);
smoother.initialize(
C0, //Continuity
Tangential_and_Normal) //Smooth direction
smoother.initialize(
Tangential_and_Normal, //Smooth direction
C0) //Continuity
// Execute 3 smooth steps
smoother.smooth(3);
...
...
cmake/FindOpenMesh.cmake
View file @
00101c13
...
...
@@ -64,6 +64,7 @@ IF (NOT OPENMESH_FOUND)
"
${
CMAKE_SOURCE_DIR
}
/libs_required/OpenMesh/src/OpenMesh"
"
${
CMAKE_SOURCE_DIR
}
/../OpenMesh/src/OpenMesh"
"C:/Program Files/OpenMesh 6.0"
"C:/Program Files/OpenMesh 5.2"
"C:/Program Files/OpenMesh 5.1"
"C:/Program Files/OpenMesh 5.0"
"C:/Program Files/OpenMesh 4.2"
...
...
@@ -78,6 +79,7 @@ IF (NOT OPENMESH_FOUND)
"C:/Program Files/OpenMesh 2.4"
"C:/Program Files/OpenMesh 2.0/include"
"C:/libs/OpenMesh 6.0"
"C:/libs/OpenMesh 5.2"
"C:/libs/OpenMesh 5.1"
"C:/libs/OpenMesh 5.0"
"C:/libs/OpenMesh 4.2"
...
...
src/OpenMesh/Core/Geometry/Vector11T.hh
View file @
00101c13
...
...
@@ -473,7 +473,7 @@ class VectorT {
/// compute L1 (Manhattan) norm
Scalar
l1_norm
()
const
{
return
std
::
accumulate
(
values_
.
cbegin
()
+
1
,
values_
.
end
(),
values_
[
0
]);
values_
.
cbegin
()
+
1
,
values_
.
c
end
(),
values_
[
0
]);
}
/// compute l8_norm
...
...
@@ -523,7 +523,7 @@ class VectorT {
/// return absolute arithmetic mean
Scalar
mean_abs
()
const
{
return
std
::
accumulate
(
values_
.
cbegin
()
+
1
,
values_
.
end
(),
return
std
::
accumulate
(
values_
.
cbegin
()
+
1
,
values_
.
c
end
(),
std
::
abs
(
values_
[
0
]),
[](
const
Scalar
&
l
,
const
Scalar
&
r
)
{
return
l
+
std
::
abs
(
r
);
...
...
src/OpenMesh/Core/Geometry/VectorDimensionsT.hh
deleted
100644 → 0
View file @
3868b351
/* ========================================================================= *
* *
* OpenMesh *
* Copyright (c) 2001-2015, RWTH-Aachen University *
* Department of Computer Graphics and Multimedia *
* All rights reserved. *
* www.openmesh.org *
* *
*---------------------------------------------------------------------------*
* This file is part of OpenMesh. *
*---------------------------------------------------------------------------*
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* *
* 1. Redistributions of source code must retain the above copyright notice, *
* this list of conditions and the following disclaimer. *
* *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* *
* 3. Neither the name of the copyright holder nor the names of its *
* contributors may be used to endorse or promote products derived from *
* this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
* *
* ========================================================================= */
//=============================================================================
//
// CLASS VectorDimensionsT
//
//=============================================================================
#ifndef DOXYGEN
#ifndef OPENMESH_VECTOR_DIMENSIONS_HH
#define OPENMESH_VECTOR_DIMENSIONS_HH
//== INCLUDES =================================================================
#include <OpenMesh/Core/System/config.h>
#include <OpenMesh/Core/Geometry/VectorT.hh>
//== NAMESPACES ===============================================================
namespace
OpenMesh
{
//== CLASS DEFINITION =========================================================
template
<
typename
Vector
>
struct
VectorDimensionsT
{};
template
<
typename
Scalar
,
int
Dim
>
struct
VectorDimensionsT
<
OpenMesh
::
VectorT
<
Scalar
,
Dim
>
>
{
enum
{
value
=
Dim
};
};
//=============================================================================
}
// namespace OpenMesh
//=============================================================================
#endif // OPENMESH_VECTOR_DIMENSIONS_HH defined
//=============================================================================
#endif // DOXYGEN
src/OpenMesh/Core/IO/importer/BaseImporter.hh
View file @
00101c13
...
...
@@ -106,6 +106,9 @@ public:
// add texture coordinates per face, _vh references the first texcoord
virtual
void
add_face_texcoords
(
FaceHandle
_fh
,
VertexHandle
_vh
,
const
std
::
vector
<
Vec2f
>&
_face_texcoords
)
=
0
;
// add texture 3d coordinates per face, _vh references the first texcoord
virtual
void
add_face_texcoords
(
FaceHandle
_fh
,
VertexHandle
_vh
,
const
std
::
vector
<
Vec3f
>&
_face_texcoords
)
=
0
;
// Set the texture index for a face
virtual
void
set_face_texindex
(
FaceHandle
_fh
,
int
_texId
)
=
0
;
...
...
@@ -133,6 +136,12 @@ public:
// set vertex texture coordinate
virtual
void
set_texcoord
(
HalfedgeHandle
_heh
,
const
Vec2f
&
_texcoord
)
=
0
;
// set 3d vertex texture coordinate
virtual
void
set_texcoord
(
VertexHandle
_vh
,
const
Vec3f
&
_texcoord
)
=
0
;
// set 3d vertex texture coordinate
virtual
void
set_texcoord
(
HalfedgeHandle
_heh
,
const
Vec3f
&
_texcoord
)
=
0
;
// set edge color
virtual
void
set_color
(
EdgeHandle
_eh
,
const
Vec3uc
&
_color
)
=
0
;
...
...
src/OpenMesh/Core/IO/importer/ImporterT.hh
View file @
00101c13
...
...
@@ -90,6 +90,7 @@ public:
typedef
typename
Mesh
::
Normal
Normal
;
typedef
typename
Mesh
::
Color
Color
;
typedef
typename
Mesh
::
TexCoord2D
TexCoord2D
;
typedef
typename
Mesh
::
TexCoord3D
TexCoord3D
;
typedef
std
::
vector
<
VertexHandle
>
VHandles
;
...
...
@@ -217,6 +218,19 @@ public:
mesh_
.
set_texcoord2D
(
_heh
,
vector_cast
<
TexCoord2D
>
(
_texcoord
));
}
virtual
void
set_texcoord
(
VertexHandle
_vh
,
const
Vec3f
&
_texcoord
)
{
if
(
mesh_
.
has_vertex_texcoords3D
())
mesh_
.
set_texcoord3D
(
_vh
,
vector_cast
<
TexCoord3D
>
(
_texcoord
));
}
virtual
void
set_texcoord
(
HalfedgeHandle
_heh
,
const
Vec3f
&
_texcoord
)
{
if
(
mesh_
.
has_halfedge_texcoords3D
())
mesh_
.
set_texcoord3D
(
_heh
,
vector_cast
<
TexCoord3D
>
(
_texcoord
));
}
// edge attributes
virtual
void
set_color
(
EdgeHandle
_eh
,
const
Vec4uc
&
_color
)
...
...
@@ -292,6 +306,23 @@ public:
}
}
virtual
void
add_face_texcoords
(
FaceHandle
_fh
,
VertexHandle
_vh
,
const
std
::
vector
<
Vec3f
>&
_face_texcoords
)
{
// get first halfedge handle
HalfedgeHandle
cur_heh
=
mesh_
.
halfedge_handle
(
_fh
);
HalfedgeHandle
end_heh
=
mesh_
.
prev_halfedge_handle
(
cur_heh
);
// find start heh
while
(
mesh_
.
to_vertex_handle
(
cur_heh
)
!=
_vh
&&
cur_heh
!=
end_heh
)
cur_heh
=
mesh_
.
next_halfedge_handle
(
cur_heh
);
for
(
unsigned
int
i
=
0
;
i
<
_face_texcoords
.
size
();
++
i
)
{
set_texcoord
(
cur_heh
,
_face_texcoords
[
i
]);
cur_heh
=
mesh_
.
next_halfedge_handle
(
cur_heh
);
}
}
virtual
void
set_face_texindex
(
FaceHandle
_fh
,
int
_texId
)
{
if
(
mesh_
.
has_face_texture_index
()
)
{
mesh_
.
set_texture_index
(
_fh
,
_texId
);
...
...
src/OpenMesh/Core/IO/reader/OBJReader.cc
View file @
00101c13
...
...
@@ -290,13 +290,13 @@ read(std::istream& _in, BaseImporter& _bi, Options& _opt)
std
::
string
line
;
std
::
string
keyWrd
;
float
x
,
y
,
z
,
u
,
v
;
float
x
,
y
,
z
,
u
,
v
,
w
;
float
r
,
g
,
b
;
BaseImporter
::
VHandles
vhandles
;
std
::
vector
<
Vec3f
>
normals
;
std
::
vector
<
Vec3f
>
colors
;
std
::
vector
<
Vec
2f
>
texcoords
;
std
::
vector
<
Vec2f
>
face_texcoords
;
std
::
vector
<
Vec
3f
>
texcoords3d
,
face_texcoords3d
;
std
::
vector
<
Vec2f
>
texcoords
,
face_texcoords
;
std
::
vector
<
VertexHandle
>
vertexHandles
;
std
::
string
matname
;
...
...
@@ -413,11 +413,16 @@ read(std::istream& _in, BaseImporter& _bi, Options& _opt)
// Can be used for both!
fileOptions
+=
Options
::
VertexTexCoord
;
fileOptions
+=
Options
::
FaceTexCoord
;
// try to read the w component as it is optional
stream
>>
w
;
if
(
!
stream
.
fail
()
)
texcoords3d
.
push_back
(
OpenMesh
::
Vec3f
(
u
,
v
,
w
));
}
}
else
{
omerr
()
<<
"Only single 2D texture coordinate per vertex"
omerr
()
<<
"Only single 2D or 3D texture coordinate per vertex"
<<
"allowed!"
<<
std
::
endl
;
return
false
;
}
...
...
@@ -553,6 +558,8 @@ read(std::istream& _in, BaseImporter& _bi, Options& _opt)
if
(
!
texcoords
.
empty
()
&&
(
unsigned
int
)
(
value
-
1
)
<
texcoords
.
size
())
{
// Obj counts from 1 and not zero .. array counts from zero therefore -1
_bi
.
set_texcoord
(
vhandles
.
back
(),
texcoords
[
value
-
1
]);
if
(
!
texcoords3d
.
empty
()
&&
(
unsigned
int
)
(
value
-
1
)
<
texcoords3d
.
size
())
_bi
.
set_texcoord
(
vhandles
.
back
(),
texcoords3d
[
value
-
1
]);
}
else
{
omerr
()
<<
"Error setting Texture coordinates"
<<
std
::
endl
;
}
...
...
@@ -563,6 +570,8 @@ read(std::istream& _in, BaseImporter& _bi, Options& _opt)
if
(
!
texcoords
.
empty
()
&&
(
unsigned
int
)
(
value
-
1
)
<
texcoords
.
size
())
{
face_texcoords
.
push_back
(
texcoords
[
value
-
1
]
);
if
(
!
texcoords3d
.
empty
()
&&
(
unsigned
int
)
(
value
-
1
)
<
texcoords3d
.
size
())
face_texcoords3d
.
push_back
(
texcoords3d
[
value
-
1
]
);
}
else
{
omerr
()
<<
"Error setting Texture coordinates"
<<
std
::
endl
;
}
...
...
@@ -609,7 +618,10 @@ read(std::istream& _in, BaseImporter& _bi, Options& _opt)
fh
=
_bi
.
add_face
(
faceVertices
);
if
(
!
vhandles
.
empty
()
&&
fh
.
is_valid
()
)
{
_bi
.
add_face_texcoords
(
fh
,
vhandles
[
0
],
face_texcoords
);
_bi
.
add_face_texcoords
(
fh
,
vhandles
[
0
],
face_texcoords3d
);
}
if
(
!
matname
.
empty
()
)
{
...
...
src/OpenMesh/Core/IO/reader/PLYReader.cc
View file @
00101c13
...
...
@@ -1275,7 +1275,19 @@ bool _PLYReader_::can_u_read(std::istream& _is) const {
// As the binary data is directy after the end_header keyword
// and the stream removes too many bytes, seek back to the right position
if
(
options_
.
is_binary
())
{
_is
.
seekg
(
streamPos
+
12
);
_is
.
seekg
(
streamPos
);
char
c1
=
0
;
char
c2
=
0
;
_is
.
get
(
c1
);
_is
.
get
(
c2
);
if
(
c1
==
0x0D
&&
c2
==
0x0A
)
{
_is
.
seekg
(
streamPos
+
14
);
}
else
{
_is
.
seekg
(
streamPos
+
12
);
}
}
return
true
;
...
...
src/OpenMesh/Core/IO/writer/OBJWriter.cc
View file @
00101c13
...
...
@@ -118,7 +118,7 @@ write(const std::string& _filename, BaseExporter& _be, Options _opt, std::stream
dot
=
_filename
.
find_last_of
(
"."
);
if
(
dot
!=
std
::
string
::
npos
)
objName_
=
objName_
.
substr
(
0
,
dot
-
1
);
objName_
=
objName_
.
substr
(
0
,
dot
);
}
bool
result
=
write
(
out
,
_be
,
_opt
,
_precision
);
...
...
@@ -184,7 +184,7 @@ writeMaterial(std::ostream& _out, BaseExporter& _be, Options _opt) const
for
(
size_t
i
=
0
;
i
<
materialA_
.
size
();
i
++
){
_out
<<
"newmtl "
<<
"mat"
<<
i
<<
'\n'
;
_out
<<
"Ka 0.5000 0.5000 0.5000"
<<
'\n'
;
_out
<<
"Kd "
<<
materialA_
[
i
][
0
]
<<
materialA_
[
i
][
1
]
<<
materialA_
[
i
][
2
]
<<
'\n'
;
;
_out
<<
"Kd "
<<
materialA_
[
i
][
0
]
<<
' '
<<
materialA_
[
i
][
1
]
<<
' '
<<
materialA_
[
i
][
2
]
<<
'\n'
;
_out
<<
"Tr "
<<
materialA_
[
i
][
3
]
<<
'\n'
;
_out
<<
"illum 1"
<<
'\n'
;
}
...
...
@@ -192,7 +192,7 @@ writeMaterial(std::ostream& _out, BaseExporter& _be, Options _opt) const
for
(
size_t
i
=
0
;
i
<
material_
.
size
();
i
++
){
_out
<<
"newmtl "
<<
"mat"
<<
i
<<
'\n'
;
_out
<<
"Ka 0.5000 0.5000 0.5000"
<<
'\n'
;
_out
<<
"Kd "
<<
material_
[
i
][
0
]
<<
material_
[
i
][
1
]
<<
material_
[
i
][
2
]
<<
'\n'
;
;
_out
<<
"Kd "
<<
material_
[
i
][
0
]
<<
' '
<<
material_
[
i
][
1
]
<<
' '
<<
material_
[
i
][
2
]
<<
'\n'
;
_out
<<
"illum 1"
<<
'\n'
;
}
...
...
src/OpenMesh/Core/Mesh/Handles.hh
View file @
00101c13
...
...
@@ -99,7 +99,7 @@ public:
void
__decrement
()
{
--
idx_
;
}
void
__increment
(
int
amount
)
{
idx_
+=
amount
;
}
void
__decrement
(
int
amount
)
{
idx_
+
=
amount
;
}
void
__decrement
(
int
amount
)
{
idx_
-
=
amount
;
}
private:
...
...
src/OpenMesh/Core/Mesh/PolyMeshT.cc
View file @
00101c13
...
...
@@ -61,9 +61,9 @@
#include <OpenMesh/Core/Mesh/PolyMeshT.hh>
#include <OpenMesh/Core/Geometry/LoopSchemeMaskT.hh>
#include <OpenMesh/Core/Geometry/VectorDimensionsT.hh>
#include <OpenMesh/Core/Utils/GenProg.hh>
#include <OpenMesh/Core/Utils/vector_cast.hh>
#include <OpenMesh/Core/Utils/vector_traits.hh>
#include <OpenMesh/Core/System/omstream.hh>
#include <vector>
...
...
@@ -102,7 +102,7 @@ typename PolyMeshT<Kernel>::Normal
PolyMeshT
<
Kernel
>::
calc_face_normal
(
FaceHandle
_fh
)
const
{
return
calc_face_normal_impl
(
_fh
,
typename
GenProg
::
IF
<
VectorDimensionsT
<
PolyMeshT
<
Kernel
>::
Point
>::
value
==
3
,
vector_traits
<
PolyMeshT
<
Kernel
>::
Point
>::
size_
==
3
,
PointIs3DTag
,
PointIsNot3DTag
>::
Result
());
...
...
@@ -169,7 +169,7 @@ calc_face_normal(const Point& _p0,
const
Point
&
_p2
)
const
{
return
calc_face_normal_impl
(
_p0
,
_p1
,
_p2
,
typename
GenProg
::
IF
<
VectorDimensionsT
<
PolyMeshT
<
Kernel
>::
Point
>::
value
==
3
,
vector_traits
<
PolyMeshT
<
Kernel
>::
Point
>::
size_
==
3
,
PointIs3DTag
,
PointIsNot3DTag
>::
Result
());
...
...
src/OpenMesh/Tools/CMakeLists.txt
View file @
00101c13
...
...
@@ -81,7 +81,7 @@ if ( NOT ACG_PROJECT_MACOS_BUNDLE AND APPLE )
FILE
(
GLOB files_install_Decimater
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Decimater/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Decimater/*T.cc"
)
FILE
(
GLOB files_install_Dualizer
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Dualizer/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Dualizer/*T.cc"
)
FILE
(
GLOB files_install_KERNEL_OSG
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Kernel_OSG/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Kernel_OSG/*T.cc"
)
FILE
(
GLOB files_install_Smoother
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Smoother/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
Decimat
er/*T.cc"
)
FILE
(
GLOB files_install_Smoother
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Smoother/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
Smooth
er/*T.cc"
)
FILE
(
GLOB files_install_Subdivider_Adaptive
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Subdivider/Adaptive/Composite/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Subdivider/Adaptive/Composite/*T.cc"
)
FILE
(
GLOB files_install_Subdivider_Uniform
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Subdivider/Uniform/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Subdivider/Uniform/*T.cc"
)
FILE
(
GLOB files_install_Subdivider_Uniform_Composite
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Subdivider/Uniform/Composite/*.hh"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/Subdivider/Uniform/Composite/*T.cc"
)
...
...
src/Python/Decimater.hh
View file @
00101c13
...
...
@@ -19,6 +19,8 @@
namespace
OpenMesh
{
namespace
Python
{
#define INIT_MESH_REF init<Mesh&>()[with_custodian_and_ward<1,2>()]
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS
(
decimate_overloads
,
decimate
,
0
,
1
)
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS
(
decimate_to_faces_overloads
,
decimate_to_faces
,
0
,
2
)
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS
(
set_max_err_overloads
,
set_max_err
,
1
,
2
)
...
...
@@ -108,7 +110,7 @@ void expose_decimater(const char *_name) {
char
buffer
[
64
];
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"Decimater"
);
class_
<
Decimater
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
Decimater
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"decimate"
,
&
Decimater
::
decimate
,
decimate_overloads
())
.
def
(
"decimate_to"
,
&
Decimater
::
decimate_to
)
.
def
(
"decimate_to_faces"
,
&
Decimater
::
decimate_to_faces
,
decimate_to_faces_overloads
())
...
...
@@ -168,7 +170,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModAspectRatio"
);
class_
<
ModAspectRatio
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModAspectRatio
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"aspect_ratio"
,
&
ModAspectRatio
::
aspect_ratio
)
.
def
(
"set_aspect_ratio"
,
&
ModAspectRatio
::
set_aspect_ratio
)
;
...
...
@@ -181,7 +183,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModEdgeLength"
);
class_
<
ModEdgeLength
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModEdgeLength
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"edge_length"
,
&
ModEdgeLength
::
edge_length
)
.
def
(
"set_edge_length"
,
&
ModEdgeLength
::
set_edge_length
)
;
...
...
@@ -194,7 +196,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModHausdorff"
);
class_
<
ModHausdorff
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModHausdorff
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"tolerance"
,
&
ModHausdorff
::
tolerance
)
.
def
(
"set_tolerance"
,
&
ModHausdorff
::
set_tolerance
)
;
...
...
@@ -207,7 +209,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModIndependentSets"
);
class_
<
ModIndependentSets
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
);
class_
<
ModIndependentSets
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
);
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModIndependentSetsHandle"
);
expose_module_handle
<
ModIndependentSetsHandle
>
(
buffer
);
...
...
@@ -217,7 +219,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModNormalDeviation"
);
class_
<
ModNormalDeviation
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModNormalDeviation
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"normal_deviation"
,
&
ModNormalDeviation
::
normal_deviation
)
.
def
(
"set_normal_deviation"
,
&
ModNormalDeviation
::
set_normal_deviation
)
;
...
...
@@ -230,7 +232,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModNormalFlipping"
);
class_
<
ModNormalFlipping
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModNormalFlipping
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"max_normal_deviation"
,
&
ModNormalFlipping
::
max_normal_deviation
)
.
def
(
"set_max_normal_deviation"
,
&
ModNormalFlipping
::
set_max_normal_deviation
)
;
...
...
@@ -250,7 +252,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModProgMesh"
);
class_
<
ModProgMesh
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModProgMesh
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"pmi"
,
&
infolist
<
ModProgMesh
>
)
.
def
(
"infolist"
,
&
infolist
<
ModProgMesh
>
)
.
def
(
"write"
,
&
ModProgMesh
::
write
)
...
...
@@ -264,7 +266,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModQuadric"
);
class_
<
ModQuadric
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModQuadric
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"set_max_err"
,
&
ModQuadric
::
set_max_err
,
set_max_err_overloads
())
.
def
(
"unset_max_err"
,
&
ModQuadric
::
unset_max_err
)
.
def
(
"max_err"
,
&
ModQuadric
::
max_err
)
...
...
@@ -278,7 +280,7 @@ void expose_decimater(const char *_name) {
snprintf
(
buffer
,
sizeof
buffer
,
"%s%s"
,
_name
,
"ModRoundness"
);
class_
<
ModRoundness
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
init
<
Mesh
&>
()
)
class_
<
ModRoundness
,
bases
<
ModBase
>
,
boost
::
noncopyable
>
(
buffer
,
INIT_MESH_REF
)
.
def
(
"set_min_angle"
,
&
ModRoundness
::
set_min_angle
)
.
def
(
"set_min_roundness"
,
&
ModRoundness
::
set_min_roundness
,
set_min_roundness_overloads
())
.
def
(
"unset_min_roundness"
,
&
ModRoundness
::
unset_min_roundness
)
...
...
src/Python/PropertyManager.hh
View file @
00101c13
...
...
@@ -111,8 +111,8 @@ void expose_property_manager(const char *_name) {
// Expose property manager
class_
<
PropertyManager
,
boost
::
noncopyable
>
(
_name
)
.
def
(
init
<
PolyMesh
&
,
const
char
*
,
optional
<
bool
>
>
())
.
def
(
init
<
TriMesh
&
,
const
char
*
,
optional
<
bool
>
>
())
.
def
(
init
<
PolyMesh
&
,
const
char
*
,
optional
<
bool
>
>
()
[
with_custodian_and_ward
<
1
,
2
>
()]
)
.
def
(
init
<
TriMesh
&
,
const
char
*
,
optional
<
bool
>
>
()
[
with_custodian_and_ward
<
1
,
2
>
()]
)
.
def
(
"swap"
,
&
PropertyManager
::
swap
)
.
def
(
"is_valid"
,
&
PropertyManager
::
isValid
)
...
...
src/Unittests/TestFiles/cube-minimal-texCoords3d.obj
0 → 100644
View file @
00101c13
g cube
v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 0.0
v 0.0 1.0 1.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0
vn 0.0 0.0 1.0
vn 0.0 0.0 -1.0
vn 0.0 1.0 0.0
vn 0.0 -1.0 0.0
vn 1.0 0.0 0.0
vn -1.0 0.0 0.0
vt 1.0 1.0 1.0
vt 2.0 2.0 2.0
vt 3.0 3.0 3.0
vt 4.0 4.0 4.0
vt 5.0 5.0 5.0
vt 6.0 6.0 6.0
vt 7.0 7.0 7.0
vt 8.0 8.0 8.0
vt 9.0 9.0 9.0
vt 10.0 10.0 10.0
vt 11.0 11.0 11.0
vt 12.0 12.0 12.0
f 1/1/2 7/1/2 5/1/2
f 1/2/2 3/2/2 7/2/2
f 1/3/6 4/3/6 3/3/6
f 1/4/6 2/4/6 4/4/6
f 3/5/3 8/5/3 7/5/3
f 3/6/3 4/6/3 8/6/3
f 5/7/5 7/7/5 8/7/5
f 5/8/5 8/8/5 6/8/5
f 1/9/4 5/9/4 6/9/4
f 1/10/4 6/10/4 2/10/4
f 2/11/1 6/11/1 8/11/1
f 2/12/1 8/12/1 4/12/1
src/Unittests/unittests_read_write_OBJ.cc
View file @
00101c13
...
...
@@ -202,6 +202,51 @@ TEST_F(OpenMeshReadWriteOBJ, LoadSimpleOBJCheckTexCoords) {
mesh_
.
release_halfedge_texcoords2D
();
}
/*
* Just load a obj file of a cube and checks the 3d halfedge texCoords
*/
TEST_F
(
OpenMeshReadWriteOBJ
,
LoadSimpleOBJCheckTexCoords3d
)
{
mesh_
.
clear
();
mesh_
.
request_halfedge_texcoords3D
();
OpenMesh
::
IO
::
Options
options
;
options
+=
OpenMesh
::
IO
::
Options
::
FaceTexCoord
;
std
::
string
file_name
=
"cube-minimal-texCoords3d.obj"
;
bool
ok
=
OpenMesh
::
IO
::
read_mesh
(
mesh_
,
file_name
,
options
);
EXPECT_TRUE
(
ok
)
<<
file_name
;
EXPECT_EQ
(
1
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
0
))[
0
]
)
<<
"Wrong texCoord at halfedge 0 component 0"
;
EXPECT_EQ
(
1
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
0
))[
1
]
)
<<
"Wrong texCoord at halfedge 0 component 1"
;
EXPECT_EQ
(
1
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
0
))[
2
]
)
<<
"Wrong texCoord at halfedge 0 component 2"
;
EXPECT_EQ
(
3
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
10
))[
0
]
)
<<
"Wrong texCoord at halfedge 1 component 0"
;
EXPECT_EQ
(
3
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
10
))[
1
]
)
<<
"Wrong texCoord at halfedge 1 component 1"
;
EXPECT_EQ
(
3
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
10
))[
2
]
)
<<
"Wrong texCoord at halfedge 1 component 2"
;
EXPECT_EQ
(
6
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
19
))[
0
]
)
<<
"Wrong texCoord at halfedge 4 component 0"
;
EXPECT_EQ
(
6
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
19
))[
1
]
)
<<
"Wrong texCoord at halfedge 4 component 1"
;
EXPECT_EQ
(
6
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
19
))[
2
]
)
<<
"Wrong texCoord at halfedge 4 component 2"
;
EXPECT_EQ
(
7
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
24
))[
0
]
)
<<
"Wrong texCoord at halfedge 7 component 0"
;
EXPECT_EQ
(
7
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
24
))[
1
]
)
<<
"Wrong texCoord at halfedge 7 component 1"
;
EXPECT_EQ
(
7
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
24
))[
2
]
)
<<
"Wrong texCoord at halfedge 7 component 2"
;
EXPECT_EQ
(
9
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
30
))[
0
]
)
<<
"Wrong texCoord at halfedge 9 component 0"
;
EXPECT_EQ
(
9
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
30
))[
1
]
)
<<
"Wrong texCoord at halfedge 9 component 1"
;
EXPECT_EQ
(
9
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
30
))[
2
]
)
<<
"Wrong texCoord at halfedge 9 component 2"
;
EXPECT_EQ
(
12
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
35
))[
0
]
)
<<
"Wrong texCoord at halfedge 11 component 0"
;
EXPECT_EQ
(
12
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
35
))[
1
]
)
<<
"Wrong texCoord at halfedge 11 component 1"
;
EXPECT_EQ
(
12
,
mesh_
.
texcoord3D
(
mesh_
.
halfedge_handle
(
35
))[
2
]
)
<<
"Wrong texCoord at halfedge 11 component 2"
;
mesh_
.
request_halfedge_texcoords3D
();
}
/*
* Just load a obj file of a square with a material
*/
...
...