Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gmsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Larry Price
gmsh
Commits
63d7ff18
Commit
63d7ff18
authored
14 years ago
by
Emilie Marchandise
Browse files
Options
Downloads
Patches
Plain Diff
CreateTopology for volumes now!
parent
9917c50c
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
Geo/GFace.h
+1
-0
1 addition, 0 deletions
Geo/GFace.h
Geo/GModel.cpp
+91
-58
91 additions, 58 deletions
Geo/GModel.cpp
Geo/discreteEdge.cpp
+20
-1
20 additions, 1 deletion
Geo/discreteEdge.cpp
Geo/discreteEdge.h
+2
-1
2 additions, 1 deletion
Geo/discreteEdge.h
with
114 additions
and
60 deletions
Geo/GFace.h
+
1
−
0
View file @
63d7ff18
...
@@ -68,6 +68,7 @@ class GFace : public GEntity
...
@@ -68,6 +68,7 @@ class GFace : public GEntity
// add/delete regions that are bounded by the face
// add/delete regions that are bounded by the face
void
addRegion
(
GRegion
*
r
){
r1
?
r2
=
r
:
r1
=
r
;
}
void
addRegion
(
GRegion
*
r
){
r1
?
r2
=
r
:
r1
=
r
;
}
void
delRegion
(
GRegion
*
r
){
if
(
r1
==
r
)
r1
=
r2
;
r2
=
0
;
}
void
delRegion
(
GRegion
*
r
){
if
(
r1
==
r
)
r1
=
r2
;
r2
=
0
;
}
GRegion
*
getRegion
(
int
num
)
const
{
if
(
num
==
0
)
return
r1
;
else
return
r2
;
};
// get number of regions
// get number of regions
int
numRegions
()
const
{
int
num
=
0
;
if
(
r1
)
num
++
;
if
(
r2
)
num
++
;
return
num
;
}
int
numRegions
()
const
{
int
num
=
0
;
if
(
r1
)
num
++
;
if
(
r2
)
num
++
;
return
num
;
}
...
...
This diff is collapsed.
Click to expand it.
Geo/GModel.cpp
+
91
−
58
View file @
63d7ff18
...
@@ -934,9 +934,8 @@ static void _associateEntityWithElementVertices(GEntity *ge, std::vector<T*> &el
...
@@ -934,9 +934,8 @@ static void _associateEntityWithElementVertices(GEntity *ge, std::vector<T*> &el
for
(
unsigned
int
i
=
0
;
i
<
elements
.
size
();
i
++
){
for
(
unsigned
int
i
=
0
;
i
<
elements
.
size
();
i
++
){
for
(
int
j
=
0
;
j
<
elements
[
i
]
->
getNumVertices
();
j
++
){
for
(
int
j
=
0
;
j
<
elements
[
i
]
->
getNumVertices
();
j
++
){
if
(
!
elements
[
i
]
->
getVertex
(
j
)
->
onWhat
()
||
if
(
!
elements
[
i
]
->
getVertex
(
j
)
->
onWhat
()
||
elements
[
i
]
->
getVertex
(
j
)
->
onWhat
()
->
dim
()
>
ge
->
dim
()){
elements
[
i
]
->
getVertex
(
j
)
->
onWhat
()
->
dim
()
>
ge
->
dim
())
elements
[
i
]
->
getVertex
(
j
)
->
setEntity
(
ge
);
elements
[
i
]
->
getVertex
(
j
)
->
setEntity
(
ge
);
}
}
}
}
}
}
}
...
@@ -1162,11 +1161,13 @@ void GModel::createTopologyFromMesh()
...
@@ -1162,11 +1161,13 @@ void GModel::createTopologyFromMesh()
if
((
*
it
)
->
geomType
()
==
GEntity
::
DiscreteVolume
)
if
((
*
it
)
->
geomType
()
==
GEntity
::
DiscreteVolume
)
discRegions
.
push_back
((
discreteRegion
*
)
*
it
);
discRegions
.
push_back
((
discreteRegion
*
)
*
it
);
//EMI-FIX in case of createTopology for Volumes
//add mesh vertices
//all faces are set to each volume
for
(
std
::
vector
<
discreteRegion
*>::
iterator
it
=
discRegions
.
begin
();
for
(
std
::
vector
<
discreteRegion
*>::
iterator
it
=
discRegions
.
begin
();
it
!=
discRegions
.
end
();
it
++
)
it
!=
discRegions
.
end
();
it
++
){
(
*
it
)
->
setBoundFaces
();
for
(
std
::
vector
<
MVertex
*>::
const_iterator
itv
=
(
*
it
)
->
mesh_vertices
.
begin
();
itv
!=
(
*
it
)
->
mesh_vertices
.
end
();
itv
++
)
(
*
itv
)
->
setEntity
(
*
it
);
}
//for each discreteFace, createTopology
//for each discreteFace, createTopology
std
::
vector
<
discreteFace
*>
discFaces
;
std
::
vector
<
discreteFace
*>
discFaces
;
...
@@ -1175,10 +1176,7 @@ void GModel::createTopologyFromMesh()
...
@@ -1175,10 +1176,7 @@ void GModel::createTopologyFromMesh()
discFaces
.
push_back
((
discreteFace
*
)
*
it
);
discFaces
.
push_back
((
discreteFace
*
)
*
it
);
//--------
//--------
//EMI TODO
//for each discrete face, compute if it is made of connected faces
//check for closed faces
printf
(
"discr faces size=%d
\n
"
,
discFaces
.
size
());
std
::
vector
<
discreteFace
*>
newDiscFaces
;
std
::
vector
<
discreteFace
*>
newDiscFaces
;
for
(
std
::
vector
<
discreteFace
*>::
iterator
itF
=
discFaces
.
begin
();
for
(
std
::
vector
<
discreteFace
*>::
iterator
itF
=
discFaces
.
begin
();
itF
!=
discFaces
.
end
();
itF
++
){
itF
!=
discFaces
.
end
();
itF
++
){
...
@@ -1203,26 +1201,42 @@ void GModel::createTopologyFromMesh()
...
@@ -1203,26 +1201,42 @@ void GModel::createTopologyFromMesh()
//fill new face with mesh vertices
//fill new face with mesh vertices
std
::
set
<
MVertex
*>
allV
;
std
::
set
<
MVertex
*>
allV
;
for
(
unsigned
int
i
=
0
;
i
<
myElements
.
size
();
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
myElements
.
size
();
i
++
)
{
MVertex
*
v0
=
myElements
[
i
]
->
getVertex
(
0
);
MVertex
*
v0
=
myElements
[
i
]
->
getVertex
(
0
);
MVertex
*
v1
=
myElements
[
i
]
->
getVertex
(
1
);
MVertex
*
v1
=
myElements
[
i
]
->
getVertex
(
1
);
MVertex
*
v2
=
myElements
[
i
]
->
getVertex
(
2
);
MVertex
*
v2
=
myElements
[
i
]
->
getVertex
(
2
);
f
->
triangles
.
push_back
(
new
MTriangle
(
v0
,
v1
,
v2
));
f
->
triangles
.
push_back
(
new
MTriangle
(
v0
,
v1
,
v2
));
allV
.
insert
(
v0
);
allV
.
insert
(
v1
);
allV
.
insert
(
v2
);
allV
.
insert
(
v0
);
allV
.
insert
(
v1
);
allV
.
insert
(
v2
);
v0
->
setEntity
(
f
);
v1
->
setEntity
(
f
);
v2
->
setEntity
(
f
);
v0
->
setEntity
(
f
);
v1
->
setEntity
(
f
);
v2
->
setEntity
(
f
);
}
}
f
->
mesh_vertices
.
insert
(
f
->
mesh_vertices
.
begin
(),
allV
.
begin
(),
allV
.
end
());
f
->
mesh_vertices
.
insert
(
f
->
mesh_vertices
.
begin
(),
allV
.
begin
(),
allV
.
end
());
//delete new mesh vertices of face from adjacent regions
for
(
std
::
vector
<
discreteRegion
*>::
iterator
itR
=
discRegions
.
begin
();
itR
!=
discRegions
.
end
();
itR
++
){
for
(
std
::
set
<
MVertex
*>::
iterator
itv
=
allV
.
begin
();
itv
!=
allV
.
end
();
itv
++
)
{
std
::
vector
<
MVertex
*>::
iterator
itve
=
std
::
find
((
*
itR
)
->
mesh_vertices
.
begin
(),
(
*
itR
)
->
mesh_vertices
.
end
(),
*
itv
);
if
(
itve
!=
(
*
itR
)
->
mesh_vertices
.
end
())
(
*
itR
)
->
mesh_vertices
.
erase
(
itve
);
}
}
}
}
}
}
discFaces
=
newDiscFaces
;
discFaces
=
newDiscFaces
;
//------
//------
//EMI-FIX in case of createTopology for Volumes
//all faces are set to each volume
for
(
std
::
vector
<
discreteRegion
*>::
iterator
it
=
discRegions
.
begin
();
it
!=
discRegions
.
end
();
it
++
)
(
*
it
)
->
setBoundFaces
();
createTopologyFromFaces
(
discFaces
);
createTopologyFromFaces
(
discFaces
);
double
t2
=
Cpu
();
double
t2
=
Cpu
();
Msg
::
Info
(
"Creating topology from mesh done (%g s)"
,
t2
-
t1
);
Msg
::
Info
(
"Creating topology from mesh done (%g s)"
,
t2
-
t1
);
//create old format (necessar
a
y for boundary layers)
//create old format (necessary for boundary layers)
exportDiscreteGEOInternals
();
exportDiscreteGEOInternals
();
}
}
...
@@ -1295,7 +1309,7 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
...
@@ -1295,7 +1309,7 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
std
::
set
<
MEdge
,
Less_Edge
>::
iterator
itset
=
myEdges
.
find
(
me
);
std
::
set
<
MEdge
,
Less_Edge
>::
iterator
itset
=
myEdges
.
find
(
me
);
myEdges
.
erase
(
itset
);
myEdges
.
erase
(
itset
);
}
}
for
(
std
::
vector
<
int
>::
iterator
itFace
=
tagFaces
.
begin
();
for
(
std
::
vector
<
int
>::
iterator
itFace
=
tagFaces
.
begin
();
itFace
!=
tagFaces
.
end
();
itFace
++
)
{
itFace
!=
tagFaces
.
end
();
itFace
++
)
{
std
::
map
<
int
,
std
::
vector
<
int
>
>::
iterator
it
=
face2Edges
.
find
(
*
itFace
);
std
::
map
<
int
,
std
::
vector
<
int
>
>::
iterator
it
=
face2Edges
.
find
(
*
itFace
);
...
@@ -1305,7 +1319,22 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
...
@@ -1305,7 +1319,22 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
allEdges
.
insert
(
allEdges
.
begin
(),
tagEdges
.
begin
(),
tagEdges
.
end
());
allEdges
.
insert
(
allEdges
.
begin
(),
tagEdges
.
begin
(),
tagEdges
.
end
());
it
->
second
=
allEdges
;
it
->
second
=
allEdges
;
}
}
//delete new mesh vertices of edge from adjacent faces
GFace
*
gf
=
getFaceByTag
(
*
itFace
);
for
(
std
::
vector
<
int
>::
iterator
itEdge
=
tagEdges
.
begin
();
itEdge
!=
tagEdges
.
end
();
itEdge
++
)
{
int
count
=
0
;
GEdge
*
ge
=
getEdgeByTag
(
*
itEdge
);
for
(
std
::
vector
<
MVertex
*>::
const_iterator
itv
=
ge
->
mesh_vertices
.
begin
();
itv
!=
ge
->
mesh_vertices
.
end
();
itv
++
){
std
::
vector
<
MVertex
*>::
iterator
itve
=
std
::
find
(
gf
->
mesh_vertices
.
begin
(),
gf
->
mesh_vertices
.
end
(),
*
itv
);
if
(
itve
!=
gf
->
mesh_vertices
.
end
()){
count
++
;
gf
->
mesh_vertices
.
erase
(
itve
);}
}
}
}
}
}
}
}
}
...
@@ -1322,13 +1351,13 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
...
@@ -1322,13 +1351,13 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
discEdges
.
push_back
(
e
);
discEdges
.
push_back
(
e
);
//fill new edge with mesh vertices
//fill new edge with mesh vertices
std
::
vector
<
MVertex
*>
allV
;
std
::
set
<
MVertex
*>
allV
;
for
(
unsigned
int
i
=
0
;
i
<
myLines
.
size
();
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
myLines
.
size
();
i
++
)
{
MVertex
*
v0
=
myLines
[
i
].
getVertex
(
0
);
MVertex
*
v0
=
myLines
[
i
].
getVertex
(
0
);
MVertex
*
v1
=
myLines
[
i
].
getVertex
(
1
);
MVertex
*
v1
=
myLines
[
i
].
getVertex
(
1
);
e
->
lines
.
push_back
(
new
MLine
(
v0
,
v1
));
e
->
lines
.
push_back
(
new
MLine
(
v0
,
v1
));
if
(
std
::
find
(
allV
.
begin
(),
allV
.
end
(),
v0
)
==
allV
.
end
())
allV
.
push_back
(
v0
);
allV
.
insert
(
v0
);
//before it was std::vector with find ??
if
(
std
::
find
(
allV
.
begin
(),
allV
.
end
(),
v1
)
==
allV
.
end
())
allV
.
push_back
(
v1
);
allV
.
insert
(
v1
);
v0
->
setEntity
(
e
);
v0
->
setEntity
(
e
);
v1
->
setEntity
(
e
);
v1
->
setEntity
(
e
);
}
}
...
@@ -1339,7 +1368,7 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
...
@@ -1339,7 +1368,7 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
//delete new mesh vertices of edge from adjacent faces
//delete new mesh vertices of edge from adjacent faces
GFace
*
dFace
=
getFaceByTag
(
*
itFace
);
GFace
*
dFace
=
getFaceByTag
(
*
itFace
);
for
(
std
::
vector
<
MVertex
*>::
iterator
itv
=
allV
.
begin
();
itv
!=
allV
.
end
();
itv
++
)
{
for
(
std
::
set
<
MVertex
*>::
iterator
itv
=
allV
.
begin
();
itv
!=
allV
.
end
();
itv
++
)
{
std
::
vector
<
MVertex
*>::
iterator
itve
=
std
::
vector
<
MVertex
*>::
iterator
itve
=
std
::
find
(
dFace
->
mesh_vertices
.
begin
(),
dFace
->
mesh_vertices
.
end
(),
*
itv
);
std
::
find
(
dFace
->
mesh_vertices
.
begin
(),
dFace
->
mesh_vertices
.
end
(),
*
itv
);
if
(
itve
!=
dFace
->
mesh_vertices
.
end
())
dFace
->
mesh_vertices
.
erase
(
itve
);
if
(
itve
!=
dFace
->
mesh_vertices
.
end
())
dFace
->
mesh_vertices
.
erase
(
itve
);
...
@@ -1376,15 +1405,16 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
...
@@ -1376,15 +1405,16 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
// for each discreteEdge, create Topology
// for each discreteEdge, create Topology
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
face2Vert
;
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
face2Vert
;
std
::
map
<
GRegion
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
region2Vert
;
face2Vert
.
clear
();
face2Vert
.
clear
();
region2Vert
.
clear
();
for
(
std
::
vector
<
discreteEdge
*>::
iterator
it
=
discEdges
.
begin
();
it
!=
discEdges
.
end
();
it
++
){
for
(
std
::
vector
<
discreteEdge
*>::
iterator
it
=
discEdges
.
begin
();
it
!=
discEdges
.
end
();
it
++
){
(
*
it
)
->
createTopo
();
(
*
it
)
->
createTopo
();
(
*
it
)
->
parametrize
(
face2Vert
);
//
region2Vert
(
*
it
)
->
parametrize
(
face2Vert
,
region2Vert
);
}
}
//we need to recreate lines, triangles and tets
//we need to recreate lines, triangles and tets
//that contain those new MEdgeVertices
//that contain those new MEdgeVertices
//for (std::list<GFace*>::iterator iFace = lFaces.begin(); iFace != lFaces.end(); iFace++){
for
(
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>::
iterator
for
(
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>::
iterator
iFace
=
face2Vert
.
begin
();
iFace
!=
face2Vert
.
end
();
iFace
++
){
iFace
=
face2Vert
.
begin
();
iFace
!=
face2Vert
.
end
();
iFace
++
){
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
old2new
=
iFace
->
second
;
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
old2new
=
iFace
->
second
;
...
@@ -1415,40 +1445,43 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
...
@@ -1415,40 +1445,43 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces)
gf
->
quadrangles
=
newQuadrangles
;
gf
->
quadrangles
=
newQuadrangles
;
}
}
// for(GModel::riter iRegion = firstRegion(); iRegion != lastRegion(); iRegion++){
for
(
std
::
map
<
GRegion
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>::
iterator
// std::vector<MTetrahedron*> newTetrahedra;
iRegion
=
region2Vert
.
begin
();
iRegion
!=
region2Vert
.
end
();
iRegion
++
){
// std::vector<MHexahedron*> newHexahedra;
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
old2new
=
iRegion
->
second
;
// std::vector<MPrism*> newPrisms;
GRegion
*
gr
=
iRegion
->
first
;
// std::vector<MPyramid*> newPyramids;
std
::
vector
<
MTetrahedron
*>
newTetrahedra
;
// for (unsigned int i = 0; i < (*iRegion)->getNumMeshElements(); ++i){
std
::
vector
<
MHexahedron
*>
newHexahedra
;
// MElement *e = (*iRegion)->getMeshElement(i);
std
::
vector
<
MPrism
*>
newPrisms
;
// int N = e->getNumVertices();
std
::
vector
<
MPyramid
*>
newPyramids
;
// std::vector<MVertex *> v(N);
for
(
unsigned
int
i
=
0
;
i
<
gr
->
getNumMeshElements
();
++
i
){
// for(int j = 0; j < N; j++) v[j] = e->getVertex(j);
MElement
*
e
=
gr
->
getMeshElement
(
i
);
// for (int j = 0; j < N; j++){
int
N
=
e
->
getNumVertices
();
// std::map<MVertex*, MVertex*, std::less<MVertex*> >::iterator itmap = old2new.find(v[j]);
std
::
vector
<
MVertex
*>
v
(
N
);
// MVertex *vNEW;
for
(
int
j
=
0
;
j
<
N
;
j
++
)
v
[
j
]
=
e
->
getVertex
(
j
);
// if (itmap != old2new.end()) {
for
(
int
j
=
0
;
j
<
N
;
j
++
){
// vNEW = itmap->second;
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>::
iterator
itmap
=
old2new
.
find
(
v
[
j
]);
// v[j]=vNEW;
MVertex
*
vNEW
;
// }
if
(
itmap
!=
old2new
.
end
())
{
// }
vNEW
=
itmap
->
second
;
// if (N == 4) newTetrahedra.push_back(new MTetrahedron(v[0], v[1], v[2], v[3]));
v
[
j
]
=
vNEW
;
// else if (N == 5) newPyramids.push_back(new MPyramid(v[0], v[1], v[2], v[3], v[4]));
}
// else if (N == 6) newPrisms.push_back(new MPrism(v[0], v[1], v[2], v[3], v[4], v[5]));
}
// else if (N == 8) newHexahedra.push_back(new MHexahedron(v[0], v[1], v[2], v[3],
if
(
N
==
4
)
newTetrahedra
.
push_back
(
new
MTetrahedron
(
v
[
0
],
v
[
1
],
v
[
2
],
v
[
3
]));
// v[4], v[5], v[6], v[7]));
else
if
(
N
==
5
)
newPyramids
.
push_back
(
new
MPyramid
(
v
[
0
],
v
[
1
],
v
[
2
],
v
[
3
],
v
[
4
]));
// }
else
if
(
N
==
6
)
newPrisms
.
push_back
(
new
MPrism
(
v
[
0
],
v
[
1
],
v
[
2
],
v
[
3
],
v
[
4
],
v
[
5
]));
// (*iRegion)->deleteVertexArrays();
else
if
(
N
==
8
)
newHexahedra
.
push_back
(
new
MHexahedron
(
v
[
0
],
v
[
1
],
v
[
2
],
v
[
3
],
// (*iRegion)->tetrahedra.clear();
v
[
4
],
v
[
5
],
v
[
6
],
v
[
7
]));
// (*iRegion)->tetrahedra = newTetrahedra;
}
// (*iRegion)->pyramids.clear();
gr
->
deleteVertexArrays
();
// (*iRegion)->pyramids = newPyramids;
gr
->
tetrahedra
.
clear
();
// (*iRegion)->prisms.clear();
gr
->
tetrahedra
=
newTetrahedra
;
// (*iRegion)->prisms = newPrisms;
gr
->
pyramids
.
clear
();
// (*iRegion)->hexahedra.clear();
gr
->
pyramids
=
newPyramids
;
// (*iRegion)->hexahedra = newHexahedra;
gr
->
prisms
.
clear
();
// }
gr
->
prisms
=
newPrisms
;
gr
->
hexahedra
.
clear
();
gr
->
hexahedra
=
newHexahedra
;
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Geo/discreteEdge.cpp
+
20
−
1
View file @
63d7ff18
...
@@ -242,7 +242,8 @@ void discreteEdge::setBoundVertices()
...
@@ -242,7 +242,8 @@ void discreteEdge::setBoundVertices()
+---------------+--------------+----------- ... ----------+
+---------------+--------------+----------- ... ----------+
_pars[0]=0 _pars[1]=1 _pars[2]=2 _pars[N+1]=N+1
_pars[0]=0 _pars[1]=1 _pars[2]=2 _pars[N+1]=N+1
*/
*/
void
discreteEdge
::
parametrize
(
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
&
face2Vert
)
void
discreteEdge
::
parametrize
(
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
&
face2Vert
,
std
::
map
<
GRegion
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
&
region2Vert
)
{
{
for
(
unsigned
int
i
=
0
;
i
<
lines
.
size
()
+
1
;
i
++
){
for
(
unsigned
int
i
=
0
;
i
<
lines
.
size
()
+
1
;
i
++
){
_pars
.
push_back
(
i
);
_pars
.
push_back
(
i
);
...
@@ -283,6 +284,8 @@ void discreteEdge::parametrize( std::map<GFace*, std::map<MVertex*, MVertex*, s
...
@@ -283,6 +284,8 @@ void discreteEdge::parametrize( std::map<GFace*, std::map<MVertex*, MVertex*, s
// that contain those new MEdgeVertices
// that contain those new MEdgeVertices
for
(
std
::
list
<
GFace
*>::
iterator
iFace
=
l_faces
.
begin
();
iFace
!=
l_faces
.
end
();
++
iFace
){
for
(
std
::
list
<
GFace
*>::
iterator
iFace
=
l_faces
.
begin
();
iFace
!=
l_faces
.
end
();
++
iFace
){
//for each face find correspondane face2Vertex
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>::
iterator
itmap
=
face2Vert
.
find
(
*
iFace
);
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>::
iterator
itmap
=
face2Vert
.
find
(
*
iFace
);
if
(
itmap
==
face2Vert
.
end
())
{
if
(
itmap
==
face2Vert
.
end
())
{
face2Vert
.
insert
(
std
::
make_pair
(
*
iFace
,
old2new
));
face2Vert
.
insert
(
std
::
make_pair
(
*
iFace
,
old2new
));
...
@@ -293,6 +296,22 @@ void discreteEdge::parametrize( std::map<GFace*, std::map<MVertex*, MVertex*, s
...
@@ -293,6 +296,22 @@ void discreteEdge::parametrize( std::map<GFace*, std::map<MVertex*, MVertex*, s
mapVert
.
insert
(
*
it
);
mapVert
.
insert
(
*
it
);
itmap
->
second
=
mapVert
;
itmap
->
second
=
mapVert
;
}
}
//do the same for regions
for
(
int
j
=
0
;
j
<
(
*
iFace
)
->
numRegions
();
j
++
){
GRegion
*
r
=
(
*
iFace
)
->
getRegion
(
j
);
std
::
map
<
GRegion
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>::
iterator
itmap
=
region2Vert
.
find
(
r
);
if
(
itmap
==
region2Vert
.
end
())
{
region2Vert
.
insert
(
std
::
make_pair
(
r
,
old2new
));
}
else
{
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
mapVert
=
itmap
->
second
;
for
(
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>::
iterator
it
=
old2new
.
begin
();
it
!=
old2new
.
end
();
it
++
)
mapVert
.
insert
(
*
it
);
itmap
->
second
=
mapVert
;
}
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Geo/discreteEdge.h
+
2
−
1
View file @
63d7ff18
...
@@ -25,7 +25,8 @@ class discreteEdge : public GEdge {
...
@@ -25,7 +25,8 @@ class discreteEdge : public GEdge {
virtual
GPoint
point
(
double
p
)
const
;
virtual
GPoint
point
(
double
p
)
const
;
virtual
SVector3
firstDer
(
double
par
)
const
;
virtual
SVector3
firstDer
(
double
par
)
const
;
virtual
Range
<
double
>
parBounds
(
int
)
const
;
virtual
Range
<
double
>
parBounds
(
int
)
const
;
void
parametrize
(
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
&
face2Verts
);
void
parametrize
(
std
::
map
<
GFace
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
&
face2Verts
,
std
::
map
<
GRegion
*
,
std
::
map
<
MVertex
*
,
MVertex
*
,
std
::
less
<
MVertex
*>
>
>
&
region2Vert
);
void
orderMLines
();
void
orderMLines
();
void
setBoundVertices
();
void
setBoundVertices
();
void
createTopo
();
void
createTopo
();
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment