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
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Hurstel
CGoGN
Commits
4211c862
Commit
4211c862
authored
Feb 01, 2012
by
untereiner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modif import Obj with Ele regions
parent
a5725bb3
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
142 additions
and
61 deletions
+142
-61
Apps/Examples/viewer.cpp
Apps/Examples/viewer.cpp
+4
-3
Apps/Examples/volumeExplorer.cpp
Apps/Examples/volumeExplorer.cpp
+14
-1
include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp
include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp
+3
-0
include/Algo/Import/importMesh.hpp
include/Algo/Import/importMesh.hpp
+4
-2
include/Algo/Import/importObjEle.hpp
include/Algo/Import/importObjEle.hpp
+45
-38
include/Algo/Modelisation/tetrahedralization.hpp
include/Algo/Modelisation/tetrahedralization.hpp
+12
-9
include/Topology/map/map3.h
include/Topology/map/map3.h
+5
-0
include/Utils/Shaders/shaderFlatColorPerFace.geom
include/Utils/Shaders/shaderFlatColorPerFace.geom
+1
-1
include/Utils/Shaders/shaderFlatColorPerFace.vert
include/Utils/Shaders/shaderFlatColorPerFace.vert
+0
-1
src/Algo/ImplicitHierarchicalMesh/ihm3.cpp
src/Algo/ImplicitHierarchicalMesh/ihm3.cpp
+5
-5
src/Topology/map/embeddedMap3.cpp
src/Topology/map/embeddedMap3.cpp
+2
-1
src/Topology/map/map3.cpp
src/Topology/map/map3.cpp
+47
-0
No files found.
Apps/Examples/viewer.cpp
View file @
4211c862
...
...
@@ -26,11 +26,11 @@
Viewer
::
Viewer
()
:
m_renderStyle
(
FLAT
),
m_drawTopo
(
true
),
m_drawVertices
(
false
),
m_drawEdges
(
false
),
m_drawFaces
(
true
),
m_drawNormals
(
false
),
m_drawTopo
(
false
),
m_render
(
NULL
),
m_renderTopo
(
NULL
),
m_phongShader
(
NULL
),
...
...
@@ -128,7 +128,7 @@ void Viewer::cb_initGL()
void
Viewer
::
cb_redraw
()
{
glClearColor
(
1
,
1
,
1
,
0
);
//
glClearColor(1,1,1,0);
if
(
m_drawVertices
)
{
float
size
=
vertexScaleFactor
;
...
...
@@ -206,7 +206,8 @@ void Viewer::cb_mousePress(int button, int x, int y)
Dart
d
=
m_renderTopo
->
picking
<
PFP
>
(
myMap
,
x
,
y
,
allDarts
);
if
(
d
!=
Dart
::
nil
())
{
statusMsg
(
"dart picked"
);
//statusMsg("dart picked");
myMap
.
mergeFaces
(
d
);
}
else
{
...
...
Apps/Examples/volumeExplorer.cpp
View file @
4211c862
...
...
@@ -190,7 +190,6 @@ void MyQT::cb_redraw()
}
void
MyQT
::
cb_mousePress
(
int
button
,
int
x
,
int
y
)
{
if
(
!
Shift
())
...
...
@@ -311,6 +310,20 @@ int main(int argc, char **argv)
else
position
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
VERTEX
,
attrNames
[
0
])
;
}
if
(
extension
==
std
::
string
(
".off"
))
{
if
(
!
Algo
::
Import
::
importMeshToExtrude
<
PFP
>
(
myMap
,
argv
[
1
],
attrNames
))
{
std
::
cerr
<<
"could not import "
<<
std
::
endl
;
return
1
;
}
else
{
position
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
VERTEX
,
attrNames
[
0
])
;
myMap
.
closeMap
();
}
}
}
else
{
...
...
include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp
View file @
4211c862
...
...
@@ -209,6 +209,9 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, typename PFP::TVEC3&
mf
.
markOrbit
(
FACE
,
old
)
;
// TraversorW<typename PFP::MAP> tw(map);
// for(Dart d = tw.begin(); d != tw.end(); d = tw.next())
for
(
unsigned
int
i
=
0
;
i
<
visitedFaces
.
size
();
++
i
)
{
Dart
e
=
visitedFaces
[
i
]
;
...
...
include/Algo/Import/importMesh.hpp
View file @
4211c862
...
...
@@ -186,13 +186,15 @@ bool importMeshSToV(typename PFP::MAP& map, MeshTablesSurface<PFP>& mts, float d
}
FunctorSetEmb
<
typename
PFP
::
MAP
>
fsetemb
(
map
,
VERTEX
,
em
);
foreach_dart_of_orbit_in_parent
<
typename
PFP
::
MAP
>
(
&
map
,
VERTEX
,
d
,
fsetemb
)
;
//foreach_dart_of_orbit_in_parent<typename PFP::MAP>(&map, VERTEX, d, fsetemb) ;
map
.
foreach_dart_of_orbit
(
PFP
::
MAP
::
ORBIT_IN_PARENT
(
VERTEX
),
d
,
fsetemb
);
//Embed the other base face
Dart
d2
=
map
.
phi1
(
map
.
phi1
(
map
.
phi2
(
d
)));
unsigned
int
em2
=
backEdgesBuffer
[
em
];
FunctorSetEmb
<
typename
PFP
::
MAP
>
fsetemb2
(
map
,
VERTEX
,
em2
);
foreach_dart_of_orbit_in_parent
<
typename
PFP
::
MAP
>
(
&
map
,
VERTEX
,
d2
,
fsetemb2
)
;
//foreach_dart_of_orbit_in_parent<typename PFP::MAP>(&map, VERTEX, d2, fsetemb2) ;
map
.
foreach_dart_of_orbit
(
PFP
::
MAP
::
ORBIT_IN_PARENT
(
VERTEX
),
d2
,
fsetemb2
);
m
.
mark
(
d
)
;
// mark on the fly to unmark on second loop
vecDartsPerVertex
[
em
].
push_back
(
d
);
// store incident darts for fast adjacency reconstruction
...
...
include/Algo/Import/importObjEle.hpp
View file @
4211c862
...
...
@@ -126,14 +126,14 @@ bool importOFFWithELERegions(typename PFP::MAP& map, const std::string& filename
unsigned
int
id
=
container
.
insertLine
();
position
[
id
]
=
pos
;
// CGoGNout << "emb : " << pos << " / id = " << id << CGoGNendl;
verticesID
.
push_back
(
id
);
}
std
::
vector
<
std
::
vector
<
Dart
>
>
vecDartPtrEmb
;
vecDartPtrEmb
.
reserve
(
m_nbVertices
);
DartMarkerNoUnmark
m
(
map
)
;
//Read and embed tetrahedra TODO
for
(
unsigned
i
=
0
;
i
<
m_nbVolumes
;
++
i
)
{
...
...
@@ -144,10 +144,8 @@ bool importOFFWithELERegions(typename PFP::MAP& map, const std::string& filename
std
::
stringstream
oss
(
line
);
oss
>>
nbe
;
// CGoGNout << "tetra number : " << nbe << CGoGNendl;
//Algo::Modelisation::Polyhedron<PFP>::createTetra(map);
Dart
d
=
Algo
::
Modelisation
::
Polyhedron
<
PFP
>::
createPolyhedron
(
map
,
4
);
Dart
d
=
Algo
::
Modelisation
::
createTetrahedron
<
PFP
>
(
map
);
Geom
::
Vec4ui
pt
;
oss
>>
pt
[
0
];
oss
>>
pt
[
1
];
...
...
@@ -157,74 +155,83 @@ bool importOFFWithELERegions(typename PFP::MAP& map, const std::string& filename
//regions ?
oss
>>
nbe
;
// CGoGNout << "\t embedding number : " << pt[0] << " " << pt[1] << " " << pt[2] << " " << pt[3] << CGoGNendl;
// Embed three vertices
for
(
unsigned
int
j
=
0
;
j
<
3
;
++
j
)
{
// CGoGNout << "\t embedding number : " << pt[j];
FunctorSetEmb
<
typename
PFP
::
MAP
>
femb
(
map
,
VERTEX
,
verticesID
[
pt
[
j
]]);
FunctorSetEmb
<
typename
PFP
::
MAP
>
fsetemb
(
map
,
VERTEX
,
verticesID
[
pt
[
2
-
j
]]);
map
.
foreach_dart_of_orbit
(
PFP
::
MAP
::
ORBIT_IN_PARENT
(
VERTEX
),
d
,
fsetemb
);
//store darts per vertices to optimize reconstruction
Dart
dd
=
d
;
do
{
femb
(
dd
);
//vecDartPtrEmb[pt[j]].push_back(dd)
;
vecDartsPerVertex
[
pt
[
j
]].
push_back
(
dd
);
do
{
m
.
mark
(
dd
)
;
vecDartsPerVertex
[
pt
[
2
-
j
]].
push_back
(
dd
);
dd
=
map
.
phi1
(
map
.
phi2
(
dd
));
}
while
(
dd
!=
d
);
}
while
(
dd
!=
d
);
d
=
map
.
phi1
(
d
);
// CGoGNout << " done" << CGoGNendl;
}
//Embed the last vertex
// CGoGNout << "\t embedding number : " << pt[3] << CGoGNendl;
d
=
map
.
phi_1
(
map
.
phi2
(
d
));
FunctorSetEmb
<
typename
PFP
::
MAP
>
femb
(
map
,
VERTEX
,
verticesID
[
pt
[
3
]]);
FunctorSetEmb
<
typename
PFP
::
MAP
>
fsetemb
(
map
,
VERTEX
,
verticesID
[
pt
[
3
]]);
map
.
foreach_dart_of_orbit
(
PFP
::
MAP
::
ORBIT_IN_PARENT
(
VERTEX
),
d
,
fsetemb
);
//store darts per vertices to optimize reconstruction
Dart
dd
=
d
;
do
{
femb
(
dd
);
// CGoGNout << "embed" << CGoGNendl;
//vecDartPtrEmb[pt[3]].push_back(dd);
do
{
m
.
mark
(
dd
)
;
vecDartsPerVertex
[
pt
[
3
]].
push_back
(
dd
);
dd
=
map
.
phi1
(
map
.
phi2
(
dd
));
}
while
(
dd
!=
d
);
// CGoGNout << "end tetra" << CGoGNendl;
}
// CGoGNout << "end 1/2" << CGoGNendl;
foff
.
close
();
fele
.
close
();
//Association des phi3
unsigned
int
nbBoundaryFaces
=
0
;
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
{
std
::
vector
<
Dart
>&
vec
=
vecDartsPerVertex
[
d
];
for
(
typename
std
::
vector
<
Dart
>::
iterator
it
=
vec
.
begin
();
it
!=
vec
.
end
();
++
it
)
if
(
m
.
isMarked
(
d
))
{
if
(
map
.
phi3
(
*
it
)
==*
it
)
std
::
vector
<
Dart
>&
vec
=
vecDartsPerVertex
[
map
.
phi1
(
d
)];
Dart
good_dart
=
NIL
;
for
(
typename
std
::
vector
<
Dart
>::
iterator
it
=
vec
.
begin
();
it
!=
vec
.
end
()
&&
good_dart
==
NIL
;
++
it
)
{
bool
sewn
=
false
;
for
(
typename
std
::
vector
<
Dart
>::
iterator
itnext
=
it
+
1
;
itnext
!=
vec
.
end
()
&&
!
sewn
;
++
itnext
)
if
(
map
.
getEmbedding
(
VERTEX
,
map
.
phi1
(
*
it
))
==
map
.
getEmbedding
(
VERTEX
,
d
)
&&
map
.
getEmbedding
(
VERTEX
,
map
.
phi_1
(
*
it
))
==
map
.
getEmbedding
(
VERTEX
,
map
.
phi_1
(
d
))
/*&&
map.getEmbedding(VERTEX, *it) == map.getEmbedding(VERTEX, map.phi1(d)) */
)
{
if
(
map
.
getDartEmbedding
(
VERTEX
,
map
.
phi1
(
*
it
))
==
map
.
getDartEmbedding
(
VERTEX
,
map
.
phi_1
(
*
itnext
))
&&
map
.
getDartEmbedding
(
VERTEX
,
map
.
phi_1
(
*
it
))
==
map
.
getDartEmbedding
(
VERTEX
,
map
.
phi1
(
*
itnext
)))
{
map
.
sewVolumes
(
*
it
,
map
.
phi_1
(
*
itnext
));
sewn
=
true
;
}
good_dart
=
*
it
;
}
}
if
(
good_dart
!=
NIL
)
{
map
.
sewVolumes
(
d
,
good_dart
,
false
);
m
.
unmarkOrbit
(
FACE
,
d
);
}
else
{
m
.
unmarkOrbit
(
PFP
::
MAP
::
ORBIT_IN_PARENT
(
FACE
),
d
);
++
nbBoundaryFaces
;
}
}
}
// CGoGNout << "end 2/2" << CGoGNendl;
if
(
nbBoundaryFaces
>
0
)
{
std
::
cout
<<
"closing"
<<
std
::
endl
;
map
.
closeMap
();
CGoGNout
<<
"Map closed ("
<<
nbBoundaryFaces
<<
" boundary faces)"
<<
CGoGNendl
;
}
return
true
;
}
...
...
include/Algo/Modelisation/tetrahedralization.hpp
View file @
4211c862
...
...
@@ -37,15 +37,18 @@ namespace Tetrahedralization
template
<
typename
PFP
>
void
hexahedronToTetrahedron
(
typename
PFP
::
MAP
&
map
,
Dart
d
)
{
Dart
d1
=
d
;
Dart
d2
=
map
.
phi1
(
map
.
phi1
(
d
));
Dart
d3
=
map
.
phi_1
(
map
.
phi2
(
d
));
Dart
d4
=
map
.
phi1
(
map
.
phi1
(
map
.
phi2
(
map
.
phi_1
(
d3
))));
cut3Ear
<
PFP
>
(
map
,
d1
);
cut3Ear
<
PFP
>
(
map
,
d2
);
cut3Ear
<
PFP
>
(
map
,
d3
);
cut3Ear
<
PFP
>
(
map
,
d4
);
//Splitting Path
std
::
vector
<
Dart
>
sp
;
sp
.
reserve
(
32
);
Traversor3VE
<
typename
PFP
::
MAP
>
tra
(
map
,
d
);
for
(
Dart
d
=
tra
.
begin
()
;
d
!=
tra
.
end
()
;
d
=
tra
.
next
())
{
map
.
splitFace
(
map
.
phi1
(
d
),
map
.
phi_1
(
d
));
sp
.
push_back
(
map
.
phi1
(
d
));
}
map
.
splitVolume
(
sp
);
}
/************************************************************************************************
...
...
include/Topology/map/map3.h
View file @
4211c862
...
...
@@ -274,6 +274,11 @@ public:
*/
bool
isBoundaryVolume
(
Dart
d
)
;
//! Tell if an edge of the volume is on the boundary
/* @param d a dart
*/
bool
hasBoundaryEdge
(
Dart
d
);
//! Check the map completeness
/*! Test if phi3 and phi2 ares involutions and if phi1 is a permutation
*/
...
...
include/Utils/Shaders/shaderFlatColorPerFace.geom
View file @
4211c862
...
...
@@ -24,7 +24,7 @@ void main(void)
float
lambertTerm
=
dot
(
N
,
L
);
int
i
;
vec
averageColor
(
0
.,
0
.,
0
.);
vec
3
averageColor
=
vec3
(
0
.,
0
.,
0
.);
for
(
i
=
0
;
i
<
NBVERTS_IN
;
i
++
)
{
averageColor
+=
colorVertex
[
i
];
...
...
include/Utils/Shaders/shaderFlatColorPerFace.vert
View file @
4211c862
// ShaderFlatColorPerFace::vertexShaderText
ATTRIBUTE
vec3
VertexPosition
;
ATTRIBUTE
vec3
VertexColor
;
VARYING_VERT
vec3
colorVertex
;
...
...
src/Algo/ImplicitHierarchicalMesh/ihm3.cpp
View file @
4211c862
...
...
@@ -446,7 +446,7 @@ unsigned int ImplicitHierarchicalMap3::volumeLevel(Dart d)
if
(
!
mark
.
isMarked
(
ee
))
// not already marked
{
visitedFaces
.
push_back
(
ee
)
;
mark
.
markOrbit
(
ORIENTED_
FACE
,
ee
)
;
mark
.
markOrbit
(
FACE
,
ee
)
;
}
e
=
phi1
(
e
)
;
}
while
(
e
!=
visitedFaces
[
i
])
;
...
...
@@ -512,7 +512,7 @@ Dart ImplicitHierarchicalMap3::volumeOldestDart(Dart d)
// For every face added to the list
//the oldest dart from a volume is the oldest dart from all faces of this volume
mark
.
markOrbit
(
ORIENTED_
FACE
,
d
)
;
mark
.
markOrbit
(
FACE
,
d
)
;
for
(
unsigned
int
i
=
0
;
i
<
visitedFaces
.
size
();
++
i
)
{
...
...
@@ -529,7 +529,7 @@ Dart ImplicitHierarchicalMap3::volumeOldestDart(Dart d)
if
(
!
mark
.
isMarked
(
ee
))
// not already marked
{
visitedFaces
.
push_back
(
ee
)
;
mark
.
markOrbit
(
ORIENTED_
FACE
,
ee
)
;
mark
.
markOrbit
(
FACE
,
ee
)
;
}
e
=
phi1
(
e
)
;
}
while
(
e
!=
visitedFaces
[
i
])
;
...
...
@@ -607,7 +607,7 @@ bool ImplicitHierarchicalMap3::volumeIsSubdivided(Dart d)
if
(
!
mark
.
isMarked
(
ee
))
// not already marked
{
visitedFaces
.
push_back
(
ee
)
;
mark
.
markOrbit
(
ORIENTED_
FACE
,
ee
)
;
mark
.
markOrbit
(
FACE
,
ee
)
;
}
e
=
phi1
(
e
)
;
}
while
(
e
!=
visitedFaces
[
i
])
;
...
...
@@ -781,7 +781,7 @@ bool ImplicitHierarchicalMap3::neighborhoodLevelDiffersByOne(Dart d)
if
(
!
mf
.
isMarked
(
ee
))
// not already marked
{
visitedFaces
.
push_back
(
ee
)
;
mf
.
markOrbit
(
ORIENTED_
FACE
,
ee
)
;
mf
.
markOrbit
(
FACE
,
ee
)
;
}
e
=
phi1
(
e
)
;
...
...
src/Topology/map/embeddedMap3.cpp
View file @
4211c862
...
...
@@ -64,7 +64,8 @@ Dart EmbeddedMap3::cutEdge(Dart d)
copyDartEmbedding
(
FACE2
,
f1
,
f
);
Dart
e
=
phi3
(
f1
);
// copyDartEmbedding(ORIENTED_FACE, phi1(e), e);
copyDartEmbedding
(
FACE2
,
f1
,
f
);
// copyDartEmbedding(FACE2, f1, f);
copyDartEmbedding
(
FACE2
,
phi1
(
e
),
e
);
f
=
alpha2
(
f
);
}
while
(
f
!=
d
);
}
...
...
src/Topology/map/map3.cpp
View file @
4211c862
...
...
@@ -657,6 +657,15 @@ Dart Map3::findBoundaryFaceOfEdge(Dart d)
bool
Map3
::
isBoundaryVolume
(
Dart
d
)
{
//TraversorCell<Map3, FACE2> (*this);
// Traversor3WF<Map3> tra(*this);
// for(Dart dit = tra.begin() ; dit != tra.end() ; dit = tra.next())
// {
// if(isBoundaryMarked(phi3(dit)))
// return true ;
// }
// return false;
DartMarkerStore
mark
(
*
this
);
// Lock a marker
std
::
vector
<
Dart
>
visitedFaces
;
...
...
@@ -684,6 +693,44 @@ bool Map3::isBoundaryVolume(Dart d)
return
false
;
}
bool
Map3
::
hasBoundaryEdge
(
Dart
d
)
{
// Traversor3WE<Map3> tra(*this);
// for(Dart dit = tra.begin() ; dit != tra.end() ; dit = tra.next())
// {
// if(isBoundaryEdge(dit))
// return true;
// }
//
// return false;
DartMarkerStore
mark
(
*
this
);
// Lock a marker
std
::
vector
<
Dart
>
visitedEdges
;
visitedEdges
.
reserve
(
512
)
;
visitedEdges
.
push_back
(
d
)
;
mark
.
markOrbit
(
EDGE2
,
d
)
;
for
(
unsigned
int
i
=
0
;
i
<
visitedEdges
.
size
();
++
i
)
{
if
(
isBoundaryEdge
(
i
))
return
true
;
Dart
e
=
visitedEdges
[
i
]
;
do
// add all face neighbours to the table
{
//Dart ee = phi2(e) ;
if
(
!
mark
.
isMarked
(
e
))
// not already marked
{
visitedEdges
.
push_back
(
phi2
(
e
))
;
mark
.
markOrbit
(
EDGE2
,
e
)
;
}
e
=
phi1
(
e
)
;
}
while
(
e
!=
visitedEdges
[
i
])
;
}
return
false
;
}
bool
Map3
::
check
()
{
std
::
cout
<<
"Check: topology begin"
<<
std
::
endl
;
...
...
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