Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F74495919
QhullFacet.h
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
Sun, Jul 28, 03:12
Size
6 KB
Mime Type
text/x-c++
Expires
Tue, Jul 30, 03:12 (2 d)
Engine
blob
Format
Raw Data
Handle
19397708
Attached To
rCADDMESH CADD_mesher
QhullFacet.h
View Options
/****************************************************************************
**
** Copyright (c) 2008-2015 C.B. Barber. All rights reserved.
** $Id: //main/2011/qhull/src/libqhullpcpp/QhullFacet.h#3 $$Change: 1810 $
** $DateTime: 2015/01/17 18:28:15 $$Author: bbarber $
**
****************************************************************************/
#ifndef QHULLFACET_H
#define QHULLFACET_H
#include "Coordinates.h"
#include "QhullHyperplane.h"
#include "QhullPoint.h"
#include "QhullSet.h"
#include "QhullPointSet.h"
extern
"C"
{
#include "libqhull/qhull_a.h"
}
#include <string>
#include <vector>
#include <ostream>
namespace
orgQhull
{
#
//!\name ClassRef
class
QhullFacetSet
;
class
QhullRidge
;
typedef
QhullSet
<
QhullRidge
>
QhullRidgeSet
;
class
QhullVertex
;
class
QhullVertexSet
;
#
//!\name Types
//! QhullFacet -- Qhull's facet structure, facetT [libqhull.h], as a C++ class
class
QhullFacet
;
//! A QhullFacet is the C++ equivalent to Qhull's facetT*
class
QhullFacet
{
private:
#
//!\name Fields -- no additions (QhullFacetSet of facetT*)
facetT
*
qh_facet
;
//! May be 0 (!isDefined) for corner cases (e.g., *facetSet.end()==0) and tricoplanarOwner()
#
//!\name Class objects
static
facetT
s_empty_facet
;
// needed for shallow copy
public:
#
//!\name Constants
#
//!\name Constructors
QhullFacet
()
:
qh_facet
(
&
s_empty_facet
)
{}
// Creates an alias. Does not copy QhullFacet. Needed for return by value and parameter passing
QhullFacet
(
const
QhullFacet
&
o
)
:
qh_facet
(
o
.
qh_facet
?
o
.
qh_facet
:
&
s_empty_facet
)
{}
// Creates an alias. Does not copy QhullFacet. Needed for vector<QhullFacet>
QhullFacet
&
operator
=
(
const
QhullFacet
&
o
)
{
qh_facet
=
o
.
qh_facet
?
o
.
qh_facet
:
&
s_empty_facet
;
return
*
this
;
}
~
QhullFacet
()
{}
#
//!\name Conversion
//Implicit conversion from facetT
QhullFacet
(
facetT
*
f
)
:
qh_facet
(
f
?
f
:
&
s_empty_facet
)
{}
// Do not define facetT(). It conflicts with return type facetT*
facetT
*
getFacetT
()
const
{
return
qh_facet
;
}
#
//!\name QhullSet<QhullFacet>
facetT
*
getBaseT
()
const
{
return
getFacetT
();
}
#
//!\name getSet
int
dimension
()
const
;
QhullPoint
getCenter
(
int
qhRunId
)
{
return
getCenter
(
qhRunId
,
qh_PRINTpoints
);
}
QhullPoint
getCenter
(
int
qhRunId
,
qh_PRINT
printFormat
);
QhullHyperplane
hyperplane
()
const
{
return
QhullHyperplane
(
dimension
(),
qh_facet
->
normal
,
qh_facet
->
offset
);
}
int
id
()
const
{
return
qh_facet
?
qh_facet
->
id
:
-
1
;
}
QhullHyperplane
innerplane
(
int
qhRunId
)
const
;
bool
isDefined
()
const
{
return
qh_facet
&&
qh_facet
!=
&
s_empty_facet
;
}
bool
isGood
()
const
{
return
qh_facet
&&
qh_facet
->
good
;
}
bool
isSimplicial
()
const
{
return
qh_facet
->
simplicial
;
}
bool
isTopOrient
()
const
{
return
qh_facet
->
toporient
;
}
bool
isTriCoplanar
()
const
{
return
qh_facet
->
tricoplanar
;
}
bool
isUpperDelaunay
()
const
{
return
qh_facet
->
upperdelaunay
;
}
QhullFacet
next
()
const
{
return
qh_facet
->
next
;
}
bool
operator
==
(
const
QhullFacet
&
o
)
const
{
return
qh_facet
==
o
.
qh_facet
;
}
bool
operator
!=
(
const
QhullFacet
&
o
)
const
{
return
!
operator
==
(
o
);
}
QhullHyperplane
outerplane
(
int
qhRunId
)
const
;
QhullFacet
previous
()
const
{
return
qh_facet
->
previous
;
}
QhullFacet
tricoplanarOwner
()
const
;
QhullPoint
voronoiVertex
(
int
qhRunId
);
#
//!\name value
//! Undefined if c.size() != dimension()
double
distance
(
const
Coordinates
&
c
)
const
{
return
distance
(
c
.
data
());
}
double
distance
(
const
pointT
*
p
)
const
{
return
distance
(
QhullPoint
(
dimension
(),
const_cast
<
coordT
*>
(
p
)));
}
double
distance
(
const
QhullPoint
&
p
)
const
{
return
hyperplane
().
distance
(
p
);
}
double
facetArea
(
int
qhRunId
);
#
//!\name foreach
// Can not inline. Otherwise circular reference
QhullPointSet
coplanarPoints
()
const
;
QhullFacetSet
neighborFacets
()
const
;
QhullPointSet
outsidePoints
()
const
;
QhullRidgeSet
ridges
()
const
;
QhullVertexSet
vertices
()
const
;
#
//!\name IO
struct
PrintCenter
{
QhullFacet
*
facet
;
// non-const due to facet.center()
const
char
*
message
;
int
run_id
;
qh_PRINT
print_format
;
PrintCenter
(
int
qhRunId
,
QhullFacet
&
f
,
qh_PRINT
printFormat
,
const
char
*
s
)
:
facet
(
&
f
),
message
(
s
),
run_id
(
qhRunId
),
print_format
(
printFormat
){}
};
//PrintCenter
PrintCenter
printCenter
(
int
qhRunId
,
qh_PRINT
printFormat
,
const
char
*
message
)
{
return
PrintCenter
(
qhRunId
,
*
this
,
printFormat
,
message
);
}
struct
PrintFacet
{
QhullFacet
*
facet
;
// non-const due to f->center()
int
run_id
;
PrintFacet
(
int
qhRunId
,
QhullFacet
&
f
)
:
facet
(
&
f
),
run_id
(
qhRunId
)
{}
};
//PrintFacet
PrintFacet
print
(
int
qhRunId
)
{
return
PrintFacet
(
qhRunId
,
*
this
);
}
struct
PrintFlags
{
const
QhullFacet
*
facet
;
const
char
*
message
;
PrintFlags
(
const
QhullFacet
&
f
,
const
char
*
s
)
:
facet
(
&
f
),
message
(
s
)
{}
};
//PrintFlags
PrintFlags
printFlags
(
const
char
*
message
)
const
{
return
PrintFlags
(
*
this
,
message
);
}
struct
PrintHeader
{
QhullFacet
*
facet
;
// non-const due to f->center()
int
run_id
;
PrintHeader
(
int
qhRunId
,
QhullFacet
&
f
)
:
facet
(
&
f
),
run_id
(
qhRunId
)
{}
};
//PrintHeader
PrintHeader
printHeader
(
int
qhRunId
)
{
return
PrintHeader
(
qhRunId
,
*
this
);
}
struct
PrintRidges
{
const
QhullFacet
*
facet
;
int
run_id
;
PrintRidges
(
int
qhRunId
,
QhullFacet
&
f
)
:
facet
(
&
f
),
run_id
(
qhRunId
)
{}
};
//PrintRidges
PrintRidges
printRidges
(
int
qhRunId
)
{
return
PrintRidges
(
qhRunId
,
*
this
);
}
};
//class QhullFacet
}
//namespace orgQhull
#
//!\name Global
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
orgQhull
::
QhullFacet
::
PrintCenter
&
pr
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
orgQhull
::
QhullFacet
::
PrintFlags
&
pr
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
orgQhull
::
QhullFacet
::
PrintHeader
&
pr
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
orgQhull
::
QhullFacet
::
PrintRidges
&
pr
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
orgQhull
::
QhullFacet
::
PrintFacet
&
pr
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
orgQhull
::
QhullFacet
&
f
);
// non-const due to qh_getcenter()
#endif
// QHULLFACET_H
Event Timeline
Log In to Comment