Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F91281080
QhullPoints.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Nov 9, 15:26
Size
5 KB
Mime Type
text/x-c
Expires
Mon, Nov 11, 15:26 (2 d)
Engine
blob
Format
Raw Data
Handle
22235579
Attached To
rCADDMESH CADD_mesher
QhullPoints.cpp
View Options
/****************************************************************************
**
** Copyright (c) 2009-2015 C.B. Barber. All rights reserved.
** $Id: //main/2011/qhull/src/libqhullpcpp/QhullPoints.cpp#3 $$Change: 1810 $
** $DateTime: 2015/01/17 18:28:15 $$Author: bbarber $
**
****************************************************************************/
#include "QhullPoints.h"
#include <iostream>
#include <algorithm>
#ifdef _MSC_VER
// Microsoft Visual C++ -- warning level 4
#endif
namespace
orgQhull
{
#
//Conversion
// See qt-qhull.cpp for QList conversion
#ifndef QHULL_NO_STL
std
::
vector
<
QhullPoint
>
QhullPoints
::
toStdVector
()
const
{
QhullPointsIterator
i
(
*
this
);
std
::
vector
<
QhullPoint
>
vs
;
while
(
i
.
hasNext
()){
vs
.
push_back
(
i
.
next
());
}
return
vs
;
}
//toStdVector
#endif
//QHULL_NO_STL
#
//Read-only
int
QhullPoints
::
extraCoordinatesCount
()
const
{
if
(
point_dimension
>
0
){
return
(
int
)((
point_end
-
point_first
)
%
(
size_t
)
point_dimension
);
}
return
0
;
}
//extraCoordinatesCount
bool
QhullPoints
::
operator
==
(
const
QhullPoints
&
other
)
const
{
if
(
point_dimension
!=
other
.
point_dimension
||
(
point_end
-
point_first
)
!=
(
other
.
point_end
-
other
.
point_first
)){
return
false
;
}
const
coordT
*
c
=
point_first
;
const
coordT
*
c2
=
other
.
point_first
;
while
(
c
<
point_end
){
if
(
*
c
++!=*
c2
++
){
return
false
;
}
}
return
true
;
}
//operator==
#
//ElementAccess
QhullPoints
QhullPoints
::
mid
(
int
idx
,
int
length
)
const
{
int
n
=
count
();
if
(
idx
<
0
||
idx
>=
n
){
n
=
0
;
}
else
if
(
length
<
0
||
idx
+
length
>=
n
){
n
-=
idx
;
}
else
{
n
-=
idx
+
length
;
}
return
QhullPoints
(
point_dimension
,
n
*
point_dimension
,
point_first
+
idx
*
point_dimension
);
}
//mid
QhullPoint
QhullPoints
::
value
(
int
idx
)
const
{
QhullPoint
p
;
if
(
idx
>=
0
&&
idx
<
count
()){
p
.
defineAs
(
point_dimension
,
point_first
+
idx
*
point_dimension
);
}
return
p
;
}
//value
QhullPoint
QhullPoints
::
value
(
int
idx
,
QhullPoint
&
defaultValue
)
const
{
QhullPoint
p
;
if
(
idx
>=
0
&&
idx
<
count
()){
p
.
defineAs
(
point_dimension
,
point_first
+
idx
*
point_dimension
);
}
else
{
p
.
defineAs
(
defaultValue
);
}
return
p
;
}
//value
#
//Search
bool
QhullPoints
::
contains
(
const
QhullPoint
&
t
)
const
{
const_iterator
i
=
begin
();
while
(
i
!=
end
()){
if
(
*
i
==
t
){
return
true
;
}
i
++
;
}
return
false
;
}
//contains
int
QhullPoints
::
count
(
const
QhullPoint
&
t
)
const
{
int
n
=
0
;
const_iterator
i
=
begin
();
while
(
i
!=
end
()){
if
(
*
i
==
t
){
++
n
;
}
i
++
;
}
return
n
;
}
//count
int
QhullPoints
::
indexOf
(
const
coordT
*
pointCoordinates
)
const
{
if
(
!
includesCoordinates
(
pointCoordinates
)
||
dimension
()
==
0
){
return
-
1
;
}
size_t
offset
=
pointCoordinates
-
point_first
;
int
idx
=
(
int
)(
offset
/
(
size_t
)
dimension
());
// int for error reporting
int
extra
=
(
int
)(
offset
%
(
size_t
)
dimension
());
if
(
extra
!=
0
){
throw
QhullError
(
10066
,
"Qhull error: coordinates %x are not at point boundary (extra %d at index %d)"
,
extra
,
idx
,
0.0
,
pointCoordinates
);
}
return
idx
;
}
//indexOf coordT
int
QhullPoints
::
indexOf
(
const
coordT
*
pointCoordinates
,
int
noThrow
)
const
{
size_t
extra
=
0
;
if
(
noThrow
){
if
(
!
includesCoordinates
(
pointCoordinates
)
||
dimension
()
==
0
){
return
-
1
;
}
extra
=
(
pointCoordinates
-
point_first
)
%
(
size_t
)
dimension
();
}
return
indexOf
(
pointCoordinates
-
extra
);
}
//indexOf coordT noThrow
int
QhullPoints
::
indexOf
(
const
QhullPoint
&
t
)
const
{
int
j
=
0
;
const_iterator
i
=
begin
();
while
(
i
!=
end
()){
if
(
*
i
==
t
){
return
j
;
}
++
i
;
++
j
;
}
return
-
1
;
}
//indexOf
int
QhullPoints
::
lastIndexOf
(
const
QhullPoint
&
t
)
const
{
int
j
=
count
();
const_iterator
i
=
end
();
while
(
i
!=
begin
()){
--
i
;
--
j
;
if
(
*
i
==
t
){
return
j
;
}
}
return
-
1
;
}
//lastIndexOf
#
//QhullPointsIterator
bool
QhullPointsIterator
::
findNext
(
const
QhullPoint
&
p
)
{
while
(
i
!=
ps
->
constEnd
()){
if
(
*
i
++
==
p
){
return
true
;
}
}
return
false
;
}
//findNext
bool
QhullPointsIterator
::
findPrevious
(
const
QhullPoint
&
p
)
{
while
(
i
!=
ps
->
constBegin
()){
if
(
*--
i
==
p
){
return
true
;
}
}
return
false
;
}
//findPrevious
}
//namespace orgQhull
#
//Global functions
using
std
::
ostream
;
using
orgQhull
::
QhullPoint
;
using
orgQhull
::
QhullPoints
;
using
orgQhull
::
QhullPointsIterator
;
ostream
&
operator
<<
(
ostream
&
os
,
const
QhullPoints
&
p
)
{
QhullPointsIterator
i
(
p
);
while
(
i
.
hasNext
()){
os
<<
i
.
next
();
}
return
os
;
}
//operator<<QhullPoints
ostream
&
operator
<<
(
ostream
&
os
,
const
QhullPoints
::
PrintPoints
&
pr
)
{
os
<<
pr
.
point_message
;
QhullPoints
ps
=
*
pr
.
points
;
for
(
QhullPoints
::
iterator
i
=
ps
.
begin
();
i
!=
ps
.
end
();
++
i
){
QhullPoint
p
=
*
i
;
if
(
pr
.
with_identifier
){
os
<<
p
.
printWithIdentifier
(
pr
.
run_id
,
""
);
}
else
{
os
<<
p
.
print
(
pr
.
run_id
,
""
);
}
}
return
os
;
}
//<<PrintPoints
Event Timeline
Log In to Comment