ATLAS Offline Software
Loading...
Searching...
No Matches
PolygonTriangulator::Polygon Class Reference
Collaboration diagram for PolygonTriangulator::Polygon:

Public Member Functions

 Polygon (const std::vector< double > &x, const std::vector< double > &y)
 ~Polygon ()
void partition2Monotone ()
void searchMonotones ()
void triangulation ()
const Trianglestriangles ()
internal_poltrig::PointbaseMappoints ()
internal_poltrig::LineMapedges ()

Private Member Functions

void set_contour (const std::vector< double > &x, const std::vector< double > &y)
void initializate ()
unsigned int prev (const unsigned int &i)
unsigned int next (const unsigned int &i)
void handleStartVertex (const unsigned int &)
void handleEndVertex (const unsigned int &)
void handleSplitVertex (const unsigned int &)
void handleMergeVertex (const unsigned int &)
void handleRegularVertexUp (const unsigned int &)
void handleRegularVertexDown (const unsigned int &)
void addDiagonal (const unsigned int &i, const unsigned int &j)
double angleCosb (double *A, double *B, double *C)
unsigned int selectNextEdge (internal_poltrig::Linebase *edge)
void triangulateMonotone (internal_poltrig::Monopoly &mpoly)
void init_vertices_and_lines ()

Private Attributes

long int m_l_id
internal_poltrig::PQueue m_qpoints
internal_poltrig::EdgeBST m_edgebst
internal_poltrig::Monopolys m_mpolys
Triangles m_triangles
internal_poltrig::AdjEdgeMap m_startAdjEdgeMap
internal_poltrig::LineMap m_diagonals
unsigned int m_ncontours
std::vector< unsigned int > m_nVertices
internal_poltrig::PointbaseMap m_points
internal_poltrig::LineMap m_edges
double m_xmin
double m_xmax
double m_ymin
double m_ymax

Detailed Description

Definition at line 1421 of file PolygonTriangulator.cxx.

Constructor & Destructor Documentation

◆ Polygon()

PolygonTriangulator::Polygon::Polygon ( const std::vector< double > & x,
const std::vector< double > & y )

Definition at line 1555 of file PolygonTriangulator.cxx.

1556{
1557 m_l_id = 0;
1558 m_ncontours=0;
1559
1560 m_xmin = m_ymin = std::numeric_limits<double>::infinity();
1561 m_xmax = m_ymax = - std::numeric_limits<double>::infinity();
1562
1563
1564 set_contour(x,y);
1566 initializate();
1567}
#define y
#define x
void set_contour(const std::vector< double > &x, const std::vector< double > &y)

◆ ~Polygon()

PolygonTriangulator::Polygon::~Polygon ( )

Definition at line 1572 of file PolygonTriangulator.cxx.

1573{
1574 //clear all dynamic allocated memory
1575 internal_poltrig::PointbaseMap::iterator itp=m_points.begin();
1576 for(; itp!=m_points.end(); ++itp)
1577 {
1578 delete itp->second;
1579 }
1580
1581 internal_poltrig::LineMap::iterator itl=m_edges.begin();
1582 for(; itl!=m_edges.end(); ++itl)
1583 {
1584 delete itl->second;
1585 }
1586
1587}
internal_poltrig::PointbaseMap m_points
internal_poltrig::LineMap m_edges

Member Function Documentation

◆ addDiagonal()

void PolygonTriangulator::Polygon::addDiagonal ( const unsigned int & i,
const unsigned int & j )
private

Definition at line 1682 of file PolygonTriangulator.cxx.

1683{
1685 internal_poltrig::Linebase* diag=new internal_poltrig::Linebase(m_points[i], m_points[j], type,m_l_id);
1686 m_edges[diag->id()]=diag;
1687
1688 m_startAdjEdgeMap[i].insert(diag->id());
1689 m_startAdjEdgeMap[j].insert(diag->id());
1690
1691 m_diagonals[diag->id()]=diag;
1692
1693}
internal_poltrig::LineMap m_diagonals
internal_poltrig::AdjEdgeMap m_startAdjEdgeMap

◆ angleCosb()

double PolygonTriangulator::Polygon::angleCosb ( double * A,
double * B,
double * C )
private

Definition at line 1850 of file PolygonTriangulator.cxx.

1851{
1852 double dxab = pa[0] - pb[0];
1853 double dyab = pa[1] - pb[1];
1854
1855 double dxcb = pc[0] - pb[0];
1856 double dycb = pc[1] - pb[1];
1857
1858 double dxab2 = dxab * dxab;
1859 double dyab2 = dyab * dyab;
1860 double dxcb2 = dxcb * dxcb;
1861 double dycb2 = dycb * dycb;
1862 double ab = dxab2 + dyab2;
1863 double cb = dxcb2 + dycb2;
1864
1865 double cosb = dxab * dxcb + dyab * dycb;
1866 double denom = sqrt( ab * cb);
1867
1868 cosb/=denom;
1869
1870 return cosb;
1871}

◆ edges()

internal_poltrig::LineMap & PolygonTriangulator::Polygon::edges ( )
inline

Definition at line 1437 of file PolygonTriangulator.cxx.

1437{ return m_edges; }

◆ handleEndVertex()

void PolygonTriangulator::Polygon::handleEndVertex ( const unsigned int & i)
private

Definition at line 1712 of file PolygonTriangulator.cxx.

1713{
1714 double y=m_points[i]->y;
1716
1717 unsigned int previ=prev(i);
1718 internal_poltrig::Linebase* edge=m_edges[previ];
1719 unsigned int helper=m_edges[previ]->helper();
1720
1721
1722 if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
1723 m_edgebst.Delete(edge->keyValue());
1724
1725}
unsigned int prev(const unsigned int &i)
void addDiagonal(const unsigned int &i, const unsigned int &j)
internal_poltrig::EdgeBST m_edgebst
void UpdateKey(BTreeNode< Linebase *, double > *node, double y)

◆ handleMergeVertex()

void PolygonTriangulator::Polygon::handleMergeVertex ( const unsigned int & i)
private

Definition at line 1751 of file PolygonTriangulator.cxx.

1752{
1753 double x=m_points[i]->x, y=m_points[i]->y;
1755
1756 unsigned int previ=prev(i);
1757 unsigned int helper=m_edges[previ]->helper();
1758 if (m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
1759 m_edgebst.Delete(m_edges[previ]->keyValue());
1760
1761 internal_poltrig::BTreeNode<internal_poltrig::Linebase*, double>* leftnode = nullptr;
1762 m_edgebst.FindMaxSmallerThan(x, leftnode);
1763 internal_poltrig::Linebase* leftedge=leftnode->data();
1764
1765 helper=leftedge->helper();
1766 if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
1767
1768 leftedge->setHelper(i);
1769}
void setHelper(const unsigned int &i)

◆ handleRegularVertexDown()

void PolygonTriangulator::Polygon::handleRegularVertexDown ( const unsigned int & i)
private

Definition at line 1774 of file PolygonTriangulator.cxx.

1775{
1776 double y=m_points[i]->y;
1778
1779 unsigned int previ=prev(i);
1780 unsigned int helper=m_edges[previ]->helper();
1781 if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
1782
1783 m_edgebst.Delete(m_edges[previ]->keyValue());
1784 m_edges[i]->setHelper(i);
1785 m_edges[i]->setKeyValue(y);
1786 m_edgebst.Insert(m_edges[i]);
1787
1788}

◆ handleRegularVertexUp()

void PolygonTriangulator::Polygon::handleRegularVertexUp ( const unsigned int & i)
private

Definition at line 1793 of file PolygonTriangulator.cxx.

1794{
1795 double x=m_points[i]->x, y=m_points[i]->y;
1797
1798 internal_poltrig::BTreeNode<internal_poltrig::Linebase*, double>* leftnode = nullptr;
1799 m_edgebst.FindMaxSmallerThan(x, leftnode);
1800
1801 internal_poltrig::Linebase* leftedge=leftnode->data();
1802
1803 unsigned int helper=leftedge->helper();
1804 if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
1805 leftedge->setHelper(i);
1806
1807}

◆ handleSplitVertex()

void PolygonTriangulator::Polygon::handleSplitVertex ( const unsigned int & i)
private

Definition at line 1730 of file PolygonTriangulator.cxx.

1731{
1732 double x=m_points[i]->x, y=m_points[i]->y;
1734
1735 internal_poltrig::BTreeNode<internal_poltrig::Linebase*, double>* leftnode = nullptr;
1736 m_edgebst.FindMaxSmallerThan(x, leftnode);
1737 internal_poltrig::Linebase* leftedge=leftnode->data();
1738
1739 unsigned int helper=leftedge->helper();
1740 addDiagonal(i, helper);
1741
1742 leftedge->setHelper(i);
1743 m_edges[i]->setHelper(i);
1744 m_edges[i]->setKeyValue(y);
1745 m_edgebst.Insert(m_edges[i]);
1746}

◆ handleStartVertex()

void PolygonTriangulator::Polygon::handleStartVertex ( const unsigned int & i)
private

Definition at line 1698 of file PolygonTriangulator.cxx.

1699{
1700 double y=m_points[i]->y;
1702
1703 m_edges[i]->setHelper(i);
1704 m_edges[i]->setKeyValue(y);
1705 m_edgebst.Insert(m_edges[i]);
1706
1707}

◆ init_vertices_and_lines()

void PolygonTriangulator::Polygon::init_vertices_and_lines ( )
private

Definition at line 1491 of file PolygonTriangulator.cxx.

1492{
1493 int sid,eid;
1494 int num=0;
1495
1497
1498 for(unsigned j=0; j<m_ncontours; ++j)
1499 {
1500 for(unsigned i=1; i<=m_nVertices[j]; ++i)//fixme: 0-based?
1501 {
1502 sid=num+i;
1503 eid=(i==m_nVertices[j])?num+1:num+i+1;
1505 internal_poltrig::Linebase* line=new internal_poltrig::Linebase(m_points[sid], m_points[eid], type,m_l_id);
1507 }
1508 num+=m_nVertices[j];
1509 }
1510
1511 int sum=0;
1512 for(unsigned int i=0; i<m_ncontours; ++i)
1513 {
1514 sum+= m_nVertices[i];
1515 m_nVertices[i]=sum;
1516 }
1517
1518}
std::vector< unsigned int > m_nVertices

◆ initializate()

void PolygonTriangulator::Polygon::initializate ( )
private

Definition at line 1638 of file PolygonTriangulator.cxx.

1639{
1640 internal_poltrig::PointbaseMap::iterator it=m_points.begin();
1641 for(; it!=m_points.end(); ++it)
1642 {
1643 int id=it->first;
1644 int idp=prev(id);
1645 int idn=next(id);
1646 internal_poltrig::Pointbase p=*m_points[id], pnext=*m_points[idn], pprev=*m_points[idp];
1647
1648 if( p > pnext && pprev > p )
1650 else if (p > pprev && pnext > p)
1652 else
1653 {
1654 double pa[2], pb[2], pc[2];
1655
1656 pa[0]=m_points[idp]->x;
1657 pa[1]=m_points[idp]->y;
1658
1659 pb[0]=m_points[id]->x;
1660 pb[1]=m_points[id]->y;
1661
1662 pc[0]=m_points[idn]->x;
1663 pc[1]=m_points[idn]->y;
1664
1665 double area=internal_poltrig::orient2d(pa,pb,pc);
1666
1667 if( pprev > p && pnext > p ) m_points[id]->type=(area >0) ? internal_poltrig::END: internal_poltrig::MERGE ;
1668 if( pprev < p && pnext < p ) m_points[id]->type=(area >0) ? internal_poltrig::START : internal_poltrig::SPLIT;
1669
1670 }
1671
1672 m_qpoints.push(*(it->second));
1673
1674 m_startAdjEdgeMap[id].insert(id);
1675
1676 }
1677}
double area(double R)
internal_poltrig::PQueue m_qpoints
unsigned int next(const unsigned int &i)
REAL orient2d(REAL *pa, REAL *pb, REAL *pc)

◆ next()

unsigned int PolygonTriangulator::Polygon::next ( const unsigned int & i)
private

Definition at line 1611 of file PolygonTriangulator.cxx.

1612{
1613 unsigned int j(0),prevLoop(0),currentLoop(0);
1614
1615 while ( i > m_nVertices[currentLoop] )
1616 {
1617 prevLoop=currentLoop;
1618 ++currentLoop;
1619 }
1620
1621 if( i < m_nVertices[currentLoop] ) j=i+1;
1622 else if ( i==m_nVertices[currentLoop] )
1623 {
1624 if( currentLoop==0) j=1;
1625 else j=m_nVertices[prevLoop]+1;
1626 }
1627
1628 return j;
1629}

◆ partition2Monotone()

void PolygonTriangulator::Polygon::partition2Monotone ( )

Definition at line 1812 of file PolygonTriangulator.cxx.

1813{
1814
1815 if(m_qpoints.top().type!=internal_poltrig::START)
1816 {
1817 std::cout<<"Please check your input polygon:\n1)orientations?\n2)duplicated points?\n";
1818 exit(1);
1819 }
1820
1821 while(!m_qpoints.empty())
1822 {
1823 internal_poltrig::Pointbase vertex=m_qpoints.top();
1824 m_qpoints.pop();
1825 unsigned int id=vertex.id;
1826
1827 switch(vertex.type)
1828 {
1830 case internal_poltrig::END: handleEndVertex(id); break;
1835 default:
1836 std::cout<<"No duplicated points please!\n";
1837 exit(1); break;
1838 }
1839 }
1840}
void handleEndVertex(const unsigned int &)
void handleRegularVertexUp(const unsigned int &)
void handleSplitVertex(const unsigned int &)
void handleStartVertex(const unsigned int &)
void handleRegularVertexDown(const unsigned int &)
void handleMergeVertex(const unsigned int &)

◆ points()

internal_poltrig::PointbaseMap & PolygonTriangulator::Polygon::points ( )
inline

Definition at line 1436 of file PolygonTriangulator.cxx.

1436{ return m_points; }

◆ prev()

unsigned int PolygonTriangulator::Polygon::prev ( const unsigned int & i)
private

Definition at line 1592 of file PolygonTriangulator.cxx.

1593{
1594 unsigned int j(0),prevLoop(0),currentLoop(0);
1595
1596 while ( i > m_nVertices[currentLoop] )
1597 {
1598 prevLoop=currentLoop;
1599 ++currentLoop;
1600 }
1601
1602 if( i==1 || (i==m_nVertices[prevLoop]+1) ) j=m_nVertices[currentLoop];
1603 else if( i <= m_nVertices[currentLoop] ) j=i-1;
1604
1605 return j;
1606}

◆ searchMonotones()

void PolygonTriangulator::Polygon::searchMonotones ( )

Definition at line 1919 of file PolygonTriangulator.cxx.

1920{
1922
1923 while( edges.size() > m_diagonals.size() )
1924 {
1926 internal_poltrig::LineMap::iterator it=edges.begin();
1927 internal_poltrig::Pointbase* startp=it->second->endPoint(0);
1928 internal_poltrig::Pointbase* endp=0;
1929 internal_poltrig::Linebase* next=it->second;
1930
1931 poly.push_back(startp->id);
1932
1933 for(;;)
1934 {
1935 endp=next->endPoint(1);
1936 if(next->type()!=internal_poltrig::INSERT)
1937 {
1938 edges.erase(next->id());
1939 m_startAdjEdgeMap[next->endPoint(0)->id].erase(next->id());
1940 }
1941 if(endp==startp) break;
1942 poly.push_back(endp->id);
1943
1944 unsigned int nexte=selectNextEdge(next);
1945
1946 if(nexte==0)
1947 {
1948 std::cout<<"Please check your input polygon:\n";
1949 std::cout<<"1)orientations?\n2)with duplicated points?\n3)is a simple one?\n";
1950 exit(1);
1951 }
1952 //assert( nexte > 0);
1953 next=edges[nexte];
1954 if(next->endPoint(0) !=endp ) next->reverse();
1955 }
1956
1957 m_mpolys.push_back(std::move(poly));
1958 }
1959}
internal_poltrig::LineMap & edges()
internal_poltrig::Monopolys m_mpolys
unsigned int selectNextEdge(internal_poltrig::Linebase *edge)
std::map< unsigned int, Linebase * > LineMap
std::list< unsigned int > Monopoly

◆ selectNextEdge()

unsigned int PolygonTriangulator::Polygon::selectNextEdge ( internal_poltrig::Linebase * edge)
private

Definition at line 1877 of file PolygonTriangulator.cxx.

1878{
1879
1880 unsigned int eid= edge->endPoint(1)->id;
1881 std::set<unsigned int> edges=m_startAdjEdgeMap[eid];
1882 assert(!edges.empty());
1883
1884 unsigned int nexte=0;
1885 if( edges.size() == 1 ) nexte=*(edges.begin());
1886 else if( edges.size() > 1 )
1887 {
1888 unsigned int nexte_ccw(0), nexte_cw(0);
1889 double max=-2.0,min=2.0;
1890
1891
1892 std::set<unsigned int>::iterator it=edges.begin();
1893 for(; it!=edges.end(); ++it)
1894 {
1895 if(*it==edge->id()) continue;
1896 double A[2], B[2], C[2];
1897 A[0]=edge->endPoint(0)->x; A[1]=edge->endPoint(0)->y;
1898 B[0]=edge->endPoint(1)->x; B[1]=edge->endPoint(1)->y;
1899
1900 if(edge->endPoint(1)!=m_edges[*it]->endPoint(0)) m_edges[*it]->reverse();
1901 C[0]=m_edges[*it]->endPoint(1)->x; C[1]=m_edges[*it]->endPoint(1)->y;
1902
1903 double area=internal_poltrig::orient2d(A, B, C);
1904 double cosb=angleCosb(A, B, C);
1905
1906 if( area > 0 && max < cosb ) { nexte_ccw=*it; max=cosb; }
1907 else if( min > cosb ) { nexte_cw=*it; min=cosb; }
1908 }
1909
1910 nexte = (nexte_ccw!=0) ? nexte_ccw : nexte_cw;
1911 }
1912
1913 return nexte;
1914}
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
double angleCosb(double *A, double *B, double *C)
Pointbase * endPoint(const int &i) const
struct color C

◆ set_contour()

void PolygonTriangulator::Polygon::set_contour ( const std::vector< double > & x,
const std::vector< double > & y )
private

Definition at line 1524 of file PolygonTriangulator.cxx.

1525{
1526 assert(x.size()==y.size());
1527
1528 m_nVertices.push_back( x.size() );
1529 unsigned int i = m_points.size()+1/*1*/;//fixme: get rid of the +1 ?
1530 double xx,yy;
1532 for (unsigned int j = 0; j < m_nVertices[m_ncontours]; ++j, ++i)
1533 {
1534 xx=x.at(j);
1535 yy=y.at(j);
1537 internal_poltrig::Pointbase* point=new internal_poltrig::Pointbase(i,xx,yy,type);
1538 if(xx > m_xmax ) m_xmax=xx;
1539 if(xx < m_xmin ) m_xmin=xx;
1540 if(yy > m_ymax ) m_ymax=yy;
1541 if(yy < m_ymin ) m_ymin=yy;
1542 m_points[i]=point;
1543 }
1544
1545 ++m_ncontours;
1546
1547}

◆ triangles()

const Triangles * PolygonTriangulator::Polygon::triangles ( )
inline

Definition at line 1434 of file PolygonTriangulator.cxx.

◆ triangulateMonotone()

void PolygonTriangulator::Polygon::triangulateMonotone ( internal_poltrig::Monopoly & mpoly)
private

Definition at line 1965 of file PolygonTriangulator.cxx.

1966{
1968 internal_poltrig::Monopoly::iterator it=mpoly.begin(), itnext;
1969 for(; itnext=it, it!=mpoly.end(); ++it)
1970 {
1971 ++itnext;
1972 if(itnext==mpoly.end()) itnext=mpoly.begin();
1973 internal_poltrig::Pointbase point=*m_points[*it], pointnext=*m_points[*itnext];
1974 point.left=(point > pointnext)? true:false;
1975 qvertex.push(point);
1976 }
1977
1978 std::stack<internal_poltrig::Pointbase> spoint;
1979 for(int i=0; i<2; ++i) { spoint.push(qvertex.top()); qvertex.pop(); }
1980
1981 while ( qvertex.size() > 1 )
1982 {
1983 internal_poltrig::Pointbase topQueuePoint=qvertex.top();
1984 internal_poltrig::Pointbase topStackPoint=spoint.top();
1985
1986 if(topQueuePoint.left!=topStackPoint.left)
1987 {
1988 while ( spoint.size() > 1 )
1989 {
1990 internal_poltrig::Pointbase p1=spoint.top();
1991 spoint.pop();
1992 internal_poltrig::Pointbase p2=spoint.top();
1993 Triangle v(3);
1994 v[0]=topQueuePoint.id;
1995 v[1]=p1.id;
1996 v[2]=p2.id;
1997 sort(v.begin(),v.end());//TK
1998 m_triangles.push_back(std::move(v));
1999
2000 }
2001 spoint.pop();
2002 spoint.push(topStackPoint);
2003 spoint.push(topQueuePoint);
2004 }
2005 else
2006 {
2007 while( spoint.size() > 1 )
2008 {
2009 internal_poltrig::Pointbase stack1Point=spoint.top();
2010 spoint.pop();
2011 internal_poltrig::Pointbase stack2Point=spoint.top();
2012 spoint.push(stack1Point);
2013 double pa[2], pb[2], pc[2];
2014 pa[0]=topQueuePoint.x; pa[1]=topQueuePoint.y;
2015 pb[0]=stack2Point.x; pb[1]=stack2Point.y;
2016 pc[0]=stack1Point.x; pc[1]=stack1Point.y;
2017
2018 double area=internal_poltrig::orient2d(pa,pb,pc);
2019 bool left=stack1Point.left;
2020 if( (area > 0 && left) || (area < 0 && !left ) )
2021 {
2022 Triangle v(3);
2023 v[0]=topQueuePoint.id;
2024 v[1]=stack2Point.id;
2025 v[2]=stack1Point.id;
2026 sort(v.begin(),v.end());//TK
2027 m_triangles.push_back(std::move(v));
2028 spoint.pop();
2029 } else break;
2030 }
2031
2032 spoint.push(topQueuePoint);
2033
2034 }
2035
2036 qvertex.pop();
2037
2038 }
2039
2040 internal_poltrig::Pointbase lastQueuePoint=qvertex.top();
2041 while( spoint.size() !=1 )
2042 {
2043 internal_poltrig::Pointbase topPoint=spoint.top();
2044 spoint.pop();
2045 internal_poltrig::Pointbase top2Point=spoint.top();
2046
2047 Triangle v(3);
2048 v[0]=lastQueuePoint.id;
2049 v[1]=topPoint.id;
2050 v[2]=top2Point.id;
2051 sort(v.begin(),v.end());//TK
2052 m_triangles.push_back(std::move(v));
2053 }
2054}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
std::vector< unsigned > Triangle
std::priority_queue< Pointbase > PQueue

◆ triangulation()

void PolygonTriangulator::Polygon::triangulation ( )

Definition at line 2059 of file PolygonTriangulator.cxx.

2060{
2063 internal_poltrig::Monopolys::iterator it=m_mpolys.begin();
2064 for(; it!=m_mpolys.end(); ++it)
2066}
void triangulateMonotone(internal_poltrig::Monopoly &mpoly)

Member Data Documentation

◆ m_diagonals

internal_poltrig::LineMap PolygonTriangulator::Polygon::m_diagonals
private

Definition at line 1478 of file PolygonTriangulator.cxx.

◆ m_edgebst

internal_poltrig::EdgeBST PolygonTriangulator::Polygon::m_edgebst
private

Definition at line 1472 of file PolygonTriangulator.cxx.

◆ m_edges

internal_poltrig::LineMap PolygonTriangulator::Polygon::m_edges
private

Definition at line 1485 of file PolygonTriangulator.cxx.

◆ m_l_id

long int PolygonTriangulator::Polygon::m_l_id
private

Definition at line 1441 of file PolygonTriangulator.cxx.

◆ m_mpolys

internal_poltrig::Monopolys PolygonTriangulator::Polygon::m_mpolys
private

Definition at line 1473 of file PolygonTriangulator.cxx.

◆ m_ncontours

unsigned int PolygonTriangulator::Polygon::m_ncontours
private

Definition at line 1482 of file PolygonTriangulator.cxx.

◆ m_nVertices

std::vector<unsigned int> PolygonTriangulator::Polygon::m_nVertices
private

Definition at line 1483 of file PolygonTriangulator.cxx.

◆ m_points

internal_poltrig::PointbaseMap PolygonTriangulator::Polygon::m_points
private

Definition at line 1484 of file PolygonTriangulator.cxx.

◆ m_qpoints

internal_poltrig::PQueue PolygonTriangulator::Polygon::m_qpoints
private

Definition at line 1471 of file PolygonTriangulator.cxx.

◆ m_startAdjEdgeMap

internal_poltrig::AdjEdgeMap PolygonTriangulator::Polygon::m_startAdjEdgeMap
private

Definition at line 1477 of file PolygonTriangulator.cxx.

◆ m_triangles

Triangles PolygonTriangulator::Polygon::m_triangles
private

Definition at line 1474 of file PolygonTriangulator.cxx.

◆ m_xmax

double PolygonTriangulator::Polygon::m_xmax
private

Definition at line 1486 of file PolygonTriangulator.cxx.

◆ m_xmin

double PolygonTriangulator::Polygon::m_xmin
private

Definition at line 1486 of file PolygonTriangulator.cxx.

◆ m_ymax

double PolygonTriangulator::Polygon::m_ymax
private

Definition at line 1486 of file PolygonTriangulator.cxx.

◆ m_ymin

double PolygonTriangulator::Polygon::m_ymin
private

Definition at line 1486 of file PolygonTriangulator.cxx.


The documentation for this class was generated from the following file: