Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
701dd7bd
Commit
701dd7bd
authored
Aug 08, 2008
by
Mattijs Janssens
Browse files
allow single intersection only
parent
b6c8c1dc
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/meshTools/searchableSurface/triSurfaceMesh.C
View file @
701dd7bd
...
...
@@ -443,7 +443,12 @@ void Foam::triSurfaceMesh::findLineAll
// Work array
DynamicList
<
pointIndexHit
,
1
,
1
>
hits
;
// Tolerances
// Tolerances:
// To find all intersections we add a small vector to the last intersection
// This is chosen such that
// - it is significant (SMALL is smallest representative relative tolerance;
// we need something bigger since we're doing calculations)
// - if the start-end vector is zero we still progress
const
vectorField
dirVec
(
end
-
start
);
const
scalarField
magSqrDirVec
(
magSqr
(
dirVec
));
const
vectorField
smallVec
...
...
@@ -454,34 +459,44 @@ void Foam::triSurfaceMesh::findLineAll
forAll
(
start
,
pointI
)
{
hits
.
clear
();
// See if any intersection between pt and end
pointIndexHit
inter
=
octree
.
findLine
(
start
[
pointI
],
end
[
pointI
]);
// Current starting point of ray.
point
pt
=
start
[
pointI
];
while
(
true
)
if
(
inter
.
hit
())
{
// See if any intersection between pt and end
pointIndexHit
inter
=
octree
.
findLine
(
pt
,
end
[
pointI
]);
if
(
!
inter
.
hit
())
{
break
;
}
hits
.
clear
();
hits
.
append
(
inter
);
pt
=
inter
.
hitPoint
()
+
smallVec
[
pointI
];
point
pt
=
inter
.
hitPoint
()
+
smallVec
[
pointI
];
if
(((
pt
-
start
[
pointI
])
&
dirVec
[
pointI
])
>
magSqrDirVec
[
pointI
])
while
(((
pt
-
start
[
pointI
])
&
dirVec
[
pointI
])
<=
magSqrDirVec
[
pointI
])
{
// Adding smallVec has taken us beyond end
break
;
// See if any intersection between pt and end
pointIndexHit
inter
=
octree
.
findLine
(
pt
,
end
[
pointI
]);
// Check for not hit or hit same triangle as before (can happen
// if vector along surface of triangle)
if
(
!
inter
.
hit
()
||
(
inter
.
index
()
==
hits
[
hits
.
size
()
-
1
].
index
())
)
{
break
;
}
hits
.
append
(
inter
);
pt
=
inter
.
hitPoint
()
+
smallVec
[
pointI
];
}
}
hits
.
shrink
();
info
[
pointI
].
transfer
(
hits
);
hits
.
clear
();
hits
.
shrink
();
info
[
pointI
].
transfer
(
hits
);
hits
.
clear
();
}
else
{
info
[
pointI
].
clear
();
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment