Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
OpenMesh
OpenMesh
Commits
a1ccdd69
Commit
a1ccdd69
authored
Nov 23, 2015
by
Jan Möbius
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'vec2_issues' into 'master'
Vec2 issues See merge request
!25
parents
0e8ab17b
8488f4ac
Pipeline
#77
passed with stage
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
304 additions
and
4 deletions
+304
-4
src/OpenMesh/Core/Geometry/VectorDimensionsT.hh
src/OpenMesh/Core/Geometry/VectorDimensionsT.hh
+80
-0
src/OpenMesh/Core/Mesh/PolyMeshT.cc
src/OpenMesh/Core/Mesh/PolyMeshT.cc
+45
-4
src/OpenMesh/Core/Mesh/PolyMeshT.hh
src/OpenMesh/Core/Mesh/PolyMeshT.hh
+7
-0
src/Unittests/unittests_polymesh_vec2i.cc
src/Unittests/unittests_polymesh_vec2i.cc
+88
-0
src/Unittests/unittests_trimesh_vec2i.cc
src/Unittests/unittests_trimesh_vec2i.cc
+84
-0
No files found.
src/OpenMesh/Core/Geometry/VectorDimensionsT.hh
0 → 100644
View file @
a1ccdd69
/* ========================================================================= *
* *
* 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/Mesh/PolyMeshT.cc
View file @
a1ccdd69
...
...
@@ -61,6 +61,8 @@
#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/System/omstream.hh>
#include <vector>
...
...
@@ -97,8 +99,18 @@ uint PolyMeshT<Kernel>::find_feature_edges(Scalar _angle_tresh)
template
<
class
Kernel
>
typename
PolyMeshT
<
Kernel
>::
Normal
PolyMeshT
<
Kernel
>::
calc_face_normal
(
FaceHandle
_fh
)
const
PolyMeshT
<
Kernel
>::
calc_face_normal
(
FaceHandle
_fh
)
const
{
return
calc_face_normal_impl
(
_fh
,
typename
GenProg
::
IF
<
VectorDimensionsT
<
PolyMeshT
<
Kernel
>::
Point
>::
value
==
3
,
PointIs3DTag
,
PointIsNot3DTag
>::
Result
());
}
template
<
class
Kernel
>
typename
PolyMeshT
<
Kernel
>::
Normal
PolyMeshT
<
Kernel
>::
calc_face_normal_impl
(
FaceHandle
_fh
,
PointIs3DTag
)
const
{
assert
(
this
->
halfedge_handle
(
_fh
).
is_valid
());
ConstFaceVertexIter
fv_it
(
this
->
cfv_iter
(
_fh
));
...
...
@@ -139,8 +151,15 @@ calc_face_normal(FaceHandle _fh) const
:
Normal
(
0
,
0
,
0
);
}
//-----------------------------------------------------------------------------
template
<
class
Kernel
>
typename
PolyMeshT
<
Kernel
>::
Normal
PolyMeshT
<
Kernel
>::
calc_face_normal_impl
(
FaceHandle
,
PointIsNot3DTag
)
const
{
// Dummy fallback implementation
return
Normal
(
typename
Normal
::
value_type
(
0
));
}
//-----------------------------------------------------------------------------
template
<
class
Kernel
>
typename
PolyMeshT
<
Kernel
>::
Normal
...
...
@@ -148,6 +167,21 @@ PolyMeshT<Kernel>::
calc_face_normal
(
const
Point
&
_p0
,
const
Point
&
_p1
,
const
Point
&
_p2
)
const
{
return
calc_face_normal_impl
(
_p0
,
_p1
,
_p2
,
typename
GenProg
::
IF
<
VectorDimensionsT
<
PolyMeshT
<
Kernel
>::
Point
>::
value
==
3
,
PointIs3DTag
,
PointIsNot3DTag
>::
Result
());
}
template
<
class
Kernel
>
typename
PolyMeshT
<
Kernel
>::
Normal
PolyMeshT
<
Kernel
>::
calc_face_normal_impl
(
const
Point
&
_p0
,
const
Point
&
_p1
,
const
Point
&
_p2
,
PointIs3DTag
)
const
{
#if 1
// The OpenSG <Vector>::operator -= () does not support the type Point
...
...
@@ -174,6 +208,13 @@ calc_face_normal(const Point& _p0,
#endif
}
template
<
class
Kernel
>
typename
PolyMeshT
<
Kernel
>::
Normal
PolyMeshT
<
Kernel
>::
calc_face_normal_impl
(
const
Point
&
,
const
Point
&
,
const
Point
&
,
PointIsNot3DTag
)
const
{
return
Normal
(
typename
Normal
::
value_type
(
0
));
}
//-----------------------------------------------------------------------------
template
<
class
Kernel
>
...
...
@@ -200,7 +241,7 @@ PolyMeshT<Kernel>::
update_normals
()
{
// Face normals are required to compute the vertex and the halfedge normals
if
(
Kernel
::
has_face_normals
()
)
{
if
(
Kernel
::
has_face_normals
()
)
{
update_face_normals
();
if
(
Kernel
::
has_vertex_normals
()
)
update_vertex_normals
();
...
...
src/OpenMesh/Core/Mesh/PolyMeshT.hh
View file @
a1ccdd69
...
...
@@ -520,6 +520,13 @@ public:
inline
void
split
(
EdgeHandle
_eh
,
VertexHandle
_vh
)
{
Kernel
::
split_edge
(
_eh
,
_vh
);
}
private:
struct
PointIs3DTag
{};
struct
PointIsNot3DTag
{};
Normal
calc_face_normal_impl
(
FaceHandle
,
PointIs3DTag
)
const
;
Normal
calc_face_normal_impl
(
FaceHandle
,
PointIsNot3DTag
)
const
;
Normal
calc_face_normal_impl
(
const
Point
&
,
const
Point
&
,
const
Point
&
,
PointIs3DTag
)
const
;
Normal
calc_face_normal_impl
(
const
Point
&
,
const
Point
&
,
const
Point
&
,
PointIsNot3DTag
)
const
;
};
/**
...
...
src/Unittests/unittests_polymesh_vec2i.cc
0 → 100644
View file @
a1ccdd69
#include <gtest/gtest.h>
#include <Unittests/unittests_common.hh>
#include <iostream>
struct
CustomTraitsVec2i
:
OpenMesh
::
DefaultTraits
{
typedef
OpenMesh
::
Vec2i
Point
;
};
typedef
OpenMesh
::
PolyMesh_ArrayKernelT
<
CustomTraitsVec2i
>
PolyMeshVec2i
;
/*
* OpenMesh Poly with Vec2i
*/
class
OpenMeshBasePolyVec2i
:
public
testing
::
Test
{
protected:
// This function is called before each test is run
virtual
void
SetUp
()
{
// Do some initial stuff with the member data here...
}
// This function is called after all tests are through
virtual
void
TearDown
()
{
// Do some final stuff with the member data here...
}
// This member will be accessible in all tests
PolyMeshVec2i
mesh_
;
};
namespace
{
/*
* ====================================================================
* Define tests below
* ====================================================================
*/
/*
* Checking for feature edges based on angle
*/
TEST_F
(
OpenMeshBasePolyVec2i
,
Instance_Vec2i_Mesh
)
{
mesh_
.
clear
();
// Add some vertices
PolyMeshVec2i
::
VertexHandle
vhandle
[
4
];
vhandle
[
0
]
=
mesh_
.
add_vertex
(
PolyMeshVec2i
::
Point
(
0
,
0
));
vhandle
[
1
]
=
mesh_
.
add_vertex
(
PolyMeshVec2i
::
Point
(
0
,
1
));
vhandle
[
2
]
=
mesh_
.
add_vertex
(
PolyMeshVec2i
::
Point
(
1
,
1
));
// Add face
std
::
vector
<
PolyMeshVec2i
::
VertexHandle
>
face_vhandles
;
face_vhandles
.
push_back
(
vhandle
[
0
]);
face_vhandles
.
push_back
(
vhandle
[
1
]);
face_vhandles
.
push_back
(
vhandle
[
2
]);
mesh_
.
add_face
(
face_vhandles
);
// ===============================================
// Setup complete
// ===============================================
// Check one Request only vertex normals
// Face normals are required for vertex and halfedge normals, so
// that prevent access to non existing properties are in place
mesh_
.
request_vertex_normals
();
mesh_
.
request_halfedge_normals
();
mesh_
.
request_face_normals
();
}
}
src/Unittests/unittests_trimesh_vec2i.cc
0 → 100644
View file @
a1ccdd69
#include <gtest/gtest.h>
#include <Unittests/unittests_common.hh>
#include <iostream>
struct
CustomTraitsVec2i
:
OpenMesh
::
DefaultTraits
{
typedef
OpenMesh
::
Vec2i
Point
;
};
typedef
OpenMesh
::
TriMesh_ArrayKernelT
<
CustomTraitsVec2i
>
TriMeshVec2i
;
/*
* OpenMesh Triangular with Vec2i
*/
class
OpenMeshBaseTriVec2i
:
public
testing
::
Test
{
protected:
// This function is called before each test is run
virtual
void
SetUp
()
{
// Do some initial stuff with the member data here...
}
// This function is called after all tests are through
virtual
void
TearDown
()
{
// Do some final stuff with the member data here...
}
// This member will be accessible in all tests
TriMeshVec2i
mesh_
;
};
namespace
{
/*
* ====================================================================
* Define tests below
* ====================================================================
*/
/*
* Checking for feature edges based on angle
*/
TEST_F
(
OpenMeshBaseTriVec2i
,
Instance_Vec2i_Mesh
)
{
mesh_
.
clear
();
// Add some vertices
TriMeshVec2i
::
VertexHandle
vhandle
[
4
];
vhandle
[
0
]
=
mesh_
.
add_vertex
(
TriMeshVec2i
::
Point
(
0
,
0
));
vhandle
[
1
]
=
mesh_
.
add_vertex
(
TriMeshVec2i
::
Point
(
0
,
1
));
vhandle
[
2
]
=
mesh_
.
add_vertex
(
TriMeshVec2i
::
Point
(
1
,
1
));
// Add face
std
::
vector
<
TriMeshVec2i
::
VertexHandle
>
face_vhandles
;
face_vhandles
.
push_back
(
vhandle
[
0
]);
face_vhandles
.
push_back
(
vhandle
[
1
]);
face_vhandles
.
push_back
(
vhandle
[
2
]);
mesh_
.
add_face
(
face_vhandles
);
// ===============================================
// Setup complete
// ===============================================
// Check one Request only vertex normals
// Face normals are required for vertex and halfedge normals, so
// that prevent access to non existing properties are in place
mesh_
.
request_vertex_normals
();
mesh_
.
request_halfedge_normals
();
mesh_
.
request_face_normals
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment