Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenMesh
OpenMesh
Commits
00101c13
Commit
00101c13
authored
Mar 24, 2016
by
Hans-Christian Ebke
Browse files
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
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
2
f
>
texcoords
;
std
::
vector
<
Vec2f
>
face_texcoords
;
std
::
vector
<
Vec
3
f
>
texcoords
3d
,
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
<
V
ector
DimensionsT
<
PolyMeshT
<
Kernel
>::
Point
>::
value
==
3
,
v
ector
_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
<
V
ector
DimensionsT
<
PolyMeshT
<
Kernel
>::
Point
>::
value
==
3
,
v
ector
_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"
;