128 return _VEdges.begin();
133 return _VEdges.end();
138 return _VEdges.size();
145 return _shapeIdToIndex;
159 _VEdges.push_back(iVEdge);
164 _VVertices.push_back(iVVertex);
169 _FEdges.push_back(iFEdge);
174 _SVertices.push_back(iSVertex);
220 virtual void Clean();
222 MEM_CXX_CLASS_ALLOC_FUNCS(
"Freestyle:ViewMap")
298 _Nature = iBrother._Nature;
353 MEM_CXX_CLASS_ALLOC_FUNCS(
"Freestyle:ViewVertex")
385 cerr <<
"Warning: getX() undefined for this point" << endl;
386 return _FrontSVertex->point3D().x();
391 cerr <<
"Warning: getX() undefined for this point" << endl;
392 return _FrontSVertex->point3D().y();
397 cerr <<
"Warning: getX() undefined for this point" << endl;
398 return _FrontSVertex->point3D().z();
404 cerr <<
"Warning: getPoint3D() undefined for this point" << endl;
405 return _FrontSVertex->getPoint3D();
411 return _FrontSVertex->point2D().x();
417 return _FrontSVertex->point2D().y();
422 return _FrontSVertex->point2D().z();
428 return _FrontSVertex->getPoint2D();
470 _FrontSVertex =
nullptr;
471 _BackSVertex =
nullptr;
472 _FrontEdgeA.first = 0;
473 _FrontEdgeB.first = 0;
474 _BackEdgeA.first = 0;
475 _BackEdgeB.first = 0;
480 _FrontSVertex = svFront;
481 _BackSVertex = svBack;
482 _FrontEdgeA.first = 0;
483 _FrontEdgeB.first = 0;
484 _BackEdgeA.first = 0;
485 _BackEdgeB.first = 0;
494 _FrontSVertex = iBrother._FrontSVertex;
495 _BackSVertex = iBrother._BackSVertex;
496 _FrontEdgeA = iBrother._FrontEdgeA;
497 _FrontEdgeB = iBrother._FrontEdgeB;
498 _BackEdgeA = iBrother._BackEdgeA;
499 _BackEdgeB = iBrother._BackEdgeB;
500 _sortedEdges = iBrother._sortedEdges;
515 return _FrontSVertex;
548 _FrontSVertex = iFrontSVertex;
555 _BackSVertex = iBackSVertex;
573 const vector<FEdge *> &vfEdges = _FrontSVertex->
fedges();
574 vector<FEdge *>::const_iterator fe, fend;
575 for (fe = vfEdges.begin(), fend = vfEdges.end(); fe != fend; fe++) {
576 if ((*fe) == iFEdge) {
577 return _FrontSVertex;
581 const vector<FEdge *> &vbEdges = _BackSVertex->fedges();
582 for (fe = vbEdges.begin(), fend = vbEdges.end(); fe != fend; fe++) {
583 if ((*fe) == iFEdge) {
598 if (iEdgeA == _FrontEdgeA.first) {
599 return _FrontEdgeB.first;
601 if (iEdgeA == _FrontEdgeB.first) {
602 return _FrontEdgeA.first;
604 if (iEdgeA == _BackEdgeA.first) {
605 return _BackEdgeB.first;
607 if (iEdgeA == _BackEdgeB.first) {
608 return _BackEdgeA.first;
636 MEM_CXX_CLASS_ALLOC_FUNCS(
"Freestyle:TVertex")
667 return _SVertex->point3D().x();
673 return _SVertex->point3D().y();
679 return _SVertex->point3D().z();
685 return _SVertex->getPoint3D();
691 return _SVertex->point2D().x();
697 return _SVertex->point2D().y();
703 return _SVertex->point2D().z();
709 return _SVertex->getPoint2D();
715 return _SVertex->getId();
758 _SVertex = iBrother._SVertex;
760 _ViewEdges = iBrother._ViewEdges;
796 _ViewEdges = iViewEdges;
815 edges_container::iterator insertedve;
816 for (edges_container::iterator ve = _ViewEdges.begin(), vend = _ViewEdges.end(); ve != vend;
819 if ((ve)->first == iOld) {
820 insertedve = _ViewEdges.insert(
825 _ViewEdges.erase(insertedve);
854 MEM_CXX_CLASS_ALLOC_FUNCS(
"Freestyle:NonTVertex")
928 uint _ChainingTimeStamp;
934 vector<ViewShape *> _Occluders;
953 _ChainingTimeStamp = 0;
957 _splittingId =
nullptr;
968 _ChainingTimeStamp = 0;
972 _splittingId =
nullptr;
983 _ChainingTimeStamp = 0;
987 _splittingId =
nullptr;
999 _ChainingTimeStamp = 0;
1003 _splittingId =
nullptr;
1014 _FEdgeA = iBrother._FEdgeA;
1015 _FEdgeB = iBrother._FEdgeB;
1016 _Nature = iBrother._Nature;
1019 _ChainingTimeStamp = iBrother._ChainingTimeStamp;
1020 _aShape = iBrother._aShape;
1022 _splittingId =
nullptr;
1023 _isInImage = iBrother._isInImage;
1047 if (*_splittingId == _Id) {
1048 delete _splittingId;
1104 return _ChainingTimeStamp;
1124 return _splittingId;
1193 _ChainingTimeStamp = ts;
1198 _Occluders.push_back(iShape);
1215 FEdge *current = _FEdgeA;
1226 }
while ((current != 0) && (current != _FEdgeA));
1234 FEdge *current = _FEdgeA;
1246 }
while ((current != 0) && (current != _FEdgeA));
1259 float viewedge_length()
const;
1279 return _Occluders.begin();
1284 return _Occluders.end();
1289 return _Occluders.size();
1294 return _Occluders.empty();
1299 return (_FEdgeA->aFace());
1316 return _FEdgeA->vertexA()->shape()->getId();
1321 return _FEdgeA->vertexA()->shape();
1326 return _FEdgeA->shape_importance();
1373 MEM_CXX_CLASS_ALLOC_FUNCS(
"Freestyle:ViewEdge")
1388 vector<ViewVertex *> _Vertices;
1389 vector<ViewEdge *> _Edges;
1417 vector<ViewVertex *>::iterator vv, vvend;
1418 vector<ViewEdge *>::iterator ve, veend;
1420 _SShape = iBrother._SShape;
1422 vector<ViewVertex *> &vvertices = iBrother.
vertices();
1424 for (vv = vvertices.begin(), vvend = vvertices.end(); vv != vvend; vv++) {
1429 vector<ViewEdge *> &vvedges = iBrother.
edges();
1431 for (ve = vvedges.begin(), veend = vvedges.end(); ve != veend; ve++) {
1439 for (vv = _Vertices.begin(), vvend = _Vertices.end(); vv != vvend; vv++) {
1440 switch ((*vv)->getNature()) {
1448 v->setFrontEdgeA(veFrontA,
v->frontEdgeA().second);
1449 v->setFrontEdgeB(veFrontB,
v->frontEdgeB().second);
1450 v->setBackEdgeA(veBackA,
v->backEdgeA().second);
1451 v->setBackEdgeB(veBackB,
v->backEdgeB().second);
1456 vector<ViewVertex::directedViewEdge> &vedges = (
v)->viewedges();
1457 vector<ViewVertex::directedViewEdge> newEdges;
1458 for (vector<ViewVertex::directedViewEdge>::iterator ve = vedges.begin(),
1459 veend = vedges.end();
1466 (
v)->setViewEdges(newEdges);
1476 for (ve = _Edges.begin(), veend = _Edges.end(); ve != veend; ve++) {
1477 (*ve)->setA((
ViewVertex *)((*ve)->A()->userdata));
1478 (*ve)->setB((
ViewVertex *)((*ve)->B()->userdata));
1482 (*ve)->UpdateFEdges();
1490 for (vv = vvertices.begin(), vvend = vvertices.end(); vv != vvend; vv++) {
1491 (*vv)->userdata =
nullptr;
1497 for (ve = vvedges.begin(), veend = vvedges.end(); ve != veend; ve++) {
1498 (*ve)->userdata =
nullptr;
1523 const vector<TVertex *> &iViewVertices,
1524 vector<FEdge *> &ioNewEdges,
1525 vector<ViewEdge *> &ioNewViewEdges);
1555 return _SShape->getId();
1561 return _SShape->getName();
1567 return _SShape->getLibraryPath();
1580 _Vertices = iVertices;
1592 _Vertices.push_back(iVertex);
1599 _Edges.push_back(iEdge);
1612 MEM_CXX_CLASS_ALLOC_FUNCS(
"Freestyle:ViewShape")
1629 const vector<TVertex *> &iViewVertices,
1630 vector<FEdge *> &ioNewEdges,
1631 vector<ViewEdge *> &ioNewViewEdges)
1638 vector<TVertex *>::const_iterator vv, vvend;
1639 for (vv = iViewVertices.begin(), vvend = iViewVertices.end(); vv != vvend; vv++) {
1645 sv = (*vv)->frontSVertex();
1646 sv2 = (*vv)->backSVertex();
1649 if (sv->
shape() != _SShape) {
1674 ioNewEdges.push_back(newEdge);
1677 if ((vva == 0) || (vvb == 0)) {
1693 newVEdge =
new ViewEdge((*vv), vvb);
1707 newId =
new Id(vEdge->
getId());
1711 newVEdge->
setId(*newId);
1722 ioNewViewEdges.push_back(newVEdge);
1725 vvb->
Replace((vEdge), newVEdge);
1736 if (sv == (*vv)->frontSVertex()) {
1738 (*vv)->setFrontEdgeA(vEdge,
true);
1739 (*vv)->setFrontEdgeB(newVEdge,
false);
1743 (*vv)->setBackEdgeA(vEdge,
true);
1744 (*vv)->setBackEdgeB(newVEdge,
false);
1758inline Vec3r ViewEdge::orientation2d(
int iCombination)
const
1760 return edge_orientation2d_function<ViewEdge>(*
this, iCombination);
1763inline Vec3r ViewEdge::orientation3d(
int iCombination)
const
1765 return edge_orientation3d_function<ViewEdge>(*
this, iCombination);
1768inline real ViewEdge::z_discontinuity(
int iCombination)
const
1770 return z_discontinuity_edge_function<ViewEdge>(*
this, iCombination);
1773inline float ViewEdge::local_average_depth(
int iCombination)
const
1775 return local_average_depth_edge_function<ViewEdge>(*
this, iCombination);
1778inline float ViewEdge::local_depth_variance(
int iCombination)
const
1780 return local_depth_variance_edge_function<ViewEdge>(*
this, iCombination);
1783inline real ViewEdge::local_average_density(
float sigma,
int iCombination)
const
1785 return density_edge_function<ViewEdge>(*
this, iCombination);
1794 return _aShape->sshape();
1798inline Vec3r ViewEdge::curvature2d_as_vector(
int iCombination)
const
1800 return curvature2d_as_vector_edge_function<ViewEdge>(*
this, iCombination);
1803inline real ViewEdge::curvature2d_as_angle(
int iCombination)
const
1805 return curvature2d_as_angle_edge_function<ViewEdge>(*
this, iCombination);
Classes defining the basic "Iterator" design pattern.
Configuration definitions.
Various tools for geometry.
Interface to 0D elements.
Interface 1D and related tools definitions.
Read Guarded memory(de)allocation.
Classes to define a silhouette structure.
ATTR_WARN_UNUSED_RESULT const BMVert * v
ViewEdge * viewedge() const
void setViewEdge(ViewEdge *iViewEdge)
id_type getSecond() const
void setSecond(id_type second)
virtual void Replace(ViewEdge *iOld, ViewEdge *iNew)
void AddIncomingViewEdge(ViewEdge *iVEdge)
virtual ViewVertex * duplicate()
virtual Vec3r getPoint3D() const
virtual real getProjectedX() const
edges_container & viewedges()
virtual string getExactTypeName() const
vector< directedViewEdge > edges_container
virtual ViewVertex * castToViewVertex()
virtual ViewVertexInternal::orientedViewEdgeIterator edgesBegin()
NonTVertex(NonTVertex &iBrother)
virtual edge_iterator edges_iterator(ViewEdge *iEdge)
virtual real getZ() const
virtual NonTVertex * castToNonTVertex()
virtual edge_iterator edges_begin()
virtual real getProjectedY() const
void AddViewEdge(ViewEdge *iVEdge, bool incoming=true)
void AddOutgoingViewEdge(ViewEdge *iVEdge)
virtual real getProjectedZ() const
virtual ViewVertexInternal::orientedViewEdgeIterator edgesEnd()
void setViewEdges(const vector< directedViewEdge > &iViewEdges)
virtual Vec2r getPoint2D() const
void setSVertex(SVertex *iSVertex)
virtual real getY() const
virtual real getX() const
virtual ViewVertexInternal::orientedViewEdgeIterator edgesIterator(ViewEdge *iEdge)
virtual edge_iterator edges_end()
NonTVertex(SVertex *iSVertex)
virtual SVertex * castToSVertex()
void RemoveEdgeFromChain(FEdge *iEdge)
FEdge * SplitEdgeIn2(FEdge *ioEdge, SVertex *ioNewVertex)
void setViewVertex(ViewVertex *iViewVertex)
const Vec3r & point2D() const
const vector< FEdge * > & fedges()
virtual real getProjectedY() const
void setId(const Id &iId)
void setBackEdgeA(ViewEdge *iBackEdgeA, bool incoming=true)
virtual edge_iterator edges_iterator(ViewEdge *iEdge)
virtual string getExactTypeName() const
virtual Vec2r getPoint2D() const
virtual ViewVertexInternal::orientedViewEdgeIterator edgesIterator(ViewEdge *iEdge)
virtual edge_iterator edges_begin()
virtual ViewVertex * castToViewVertex()
SVertex * getSVertex(FEdge *iFEdge)
virtual ViewVertex * duplicate()
directedViewEdge & backEdgeB()
void setBackEdgeB(ViewEdge *iBackEdgeB, bool incoming=true)
virtual Vec3r getPoint3D() const
virtual real getProjectedZ() const
void setBackSVertex(SVertex *iBackSVertex)
virtual real getX() const
virtual edge_iterator edges_end()
void setFrontEdgeB(ViewEdge *iFrontEdgeB, bool incoming=true)
directedViewEdge & frontEdgeB()
virtual TVertex * castToTVertex()
virtual ViewEdge * mate(ViewEdge *iEdgeA)
virtual real getProjectedX() const
TVertex(TVertex &iBrother)
directedViewEdge & frontEdgeA()
directedViewEdge & backEdgeA()
virtual void Replace(ViewEdge *iOld, ViewEdge *iNew)
virtual real getZ() const
void setFrontSVertex(SVertex *iFrontSVertex)
void setFrontEdgeA(ViewEdge *iFrontEdgeA, bool incoming=true)
TVertex(SVertex *svFront, SVertex *svBack)
virtual real getY() const
virtual ViewVertexInternal::orientedViewEdgeIterator edgesBegin()
virtual ViewVertexInternal::orientedViewEdgeIterator edgesEnd()
vector< directedViewEdge * > edge_pointers_container
const_vertex_iterator vertices_end() const
virtual string getExactTypeName() const
uint getChainingTimeStamp()
void setaShape(ViewShape *iShape)
virtual Nature::EdgeNature getNature() const
ViewEdge(ViewVertex *iA, ViewVertex *iB, FEdge *iFEdgeA, FEdge *iFEdgeB, ViewShape *iShape)
ViewEdge(ViewVertex *iA, ViewVertex *iB)
ViewEdge(ViewVertex *iA, ViewVertex *iB, FEdge *iFEdgeA)
void setFEdgeB(FEdge *iFEdge)
fedge_iterator fedge_iterator_last()
fedge_iterator fedge_iterator_end()
ViewEdgeInternal::edge_iterator_base< Const_traits< ViewEdge * > > const_edge_iterator
void setA(ViewVertex *iA)
occluder_container::const_iterator occluders_begin() const
const ViewShape * bShape() const
bool include_in_2d_area(const Vec2r &iMin, const Vec2r &iMax) const
edge_iterator ViewEdge_iterator()
view edge iterator
float shape_importance() const
bool intersect_2d_area(const Vec2r &iMin, const Vec2r &iMax) const
ViewEdgeInternal::fedge_iterator_base< Const_traits< FEdge * > > const_fedge_iterator
void setFEdgeA(FEdge *iFEdge)
const_vertex_iterator vertices_last() const
void setShape(ViewShape *iVShape)
const SShape * shape() const
virtual Interface0DIterator pointsBegin(float t=0.0f)
virtual ViewEdge * duplicate()
ViewEdgeInternal::vertex_iterator_base< Nonconst_traits< SVertex * > > vertex_iterator
const Polygon3r & occludee() const
virtual Interface0DIterator pointsEnd(float t=0.0f)
bool occluders_empty() const
int occluders_size() const
const ViewShape * aShape() const
vector< ViewShape * > & occluders()
ViewEdgeInternal::edge_iterator_base< Nonconst_traits< ViewEdge * > > edge_iterator
const_vertex_iterator vertices_begin() const
embedding vertex iterator
fedge_iterator fedge_iterator_begin()
feature edge iterator
void setSplittingId(Id *id)
virtual Interface0DIterator verticesBegin()
void AddOccluder(ViewShape *iShape)
void setChainingTimeStamp(uint ts)
ViewEdgeInternal::vertex_iterator_base< Const_traits< SVertex * > > const_vertex_iterator
void setIsInImage(bool iFlag)
virtual Interface0DIterator verticesEnd()
void setNature(Nature::EdgeNature iNature)
const SShape * occluded_shape() const
occluder_container::const_iterator occluders_end() const
ViewEdgeInternal::fedge_iterator_base< Nonconst_traits< FEdge * > > fedge_iterator
ViewEdge(ViewEdge &iBrother)
void setB(ViewVertex *iB)
bool occludee_empty() const
vector< FEdge * > fedges_container
vector< SVertex * > svertices_container
const FEdge * getClosestFEdge(real x, real y) const
ViewShape * viewShape(uint id)
void AddViewShape(ViewShape *iVShape)
viewshapes_container & ViewShapes()
vector< ViewVertex * > viewvertices_container
viewedges_container::iterator viewedges_begin()
vector< ViewShape * > viewshapes_container
const ViewEdge * getClosestViewEdge(real x, real y) const
void AddSVertex(SVertex *iSVertex)
BBox< Vec3r > getScene3dBBox() const
vector< ViewEdge * > viewedges_container
id_to_index_map & shapeIdToIndexMap()
static ViewMap * getInstance()
TVertex * CreateTVertex(const Vec3r &iA3D, const Vec3r &iA2D, FEdge *iFEdgeA, const Vec3r &iB3D, const Vec3r &iB2D, FEdge *iFEdgeB, const Id &id)
viewedges_container::iterator viewedges_end()
viewvertices_container & ViewVertices()
void setScene3dBBox(const BBox< Vec3r > &bbox)
svertices_container & SVertices()
void AddFEdge(FEdge *iFEdge)
ViewVertex * InsertViewVertex(SVertex *iVertex, vector< ViewEdge * > &newViewEdges)
void AddViewVertex(ViewVertex *iVVertex)
void AddViewEdge(ViewEdge *iVEdge)
map< int, int > id_to_index_map
viewedges_container & ViewEdges()
fedges_container & FEdges()
const string & getName() const
void setVertices(const vector< ViewVertex * > &iVertices)
ViewShape(SShape *iSShape)
const SShape * sshape() const
void AddVertex(ViewVertex *iVertex)
void SplitEdge(FEdge *fe, const vector< TVertex * > &iViewVertices, vector< FEdge * > &ioNewEdges, vector< ViewEdge * > &ioNewViewEdges)
vector< ViewEdge * > & edges()
void setSShape(SShape *iSShape)
vector< ViewVertex * > & vertices()
virtual ViewShape * duplicate()
void RemoveVertex(ViewVertex *iViewVertex)
void setEdges(const vector< ViewEdge * > &iEdges)
void RemoveEdge(ViewEdge *iViewEdge)
void AddEdge(ViewEdge *iEdge)
ViewShape(ViewShape &iBrother)
const string & getLibraryPath() const
ViewVertexInternal::edge_iterator_base< ViewVertexInternal::edge_const_traits > const_edge_iterator
pair< ViewEdge *, bool > directedViewEdge
virtual Nature::VertexNature getNature() const
virtual ViewVertexInternal::orientedViewEdgeIterator edgesBegin()=0
virtual const_edge_iterator edges_begin() const =0
virtual const_edge_iterator edges_end() const =0
virtual const_edge_iterator edges_iterator(ViewEdge *iEdge) const =0
ViewVertex(ViewVertex &iBrother)
virtual edge_iterator edges_end()=0
virtual ViewVertexInternal::orientedViewEdgeIterator edgesIterator(ViewEdge *iEdge)=0
virtual string getExactTypeName() const
ViewVertex(Nature::VertexNature nature)
virtual edge_iterator edges_begin()=0
virtual edge_iterator edges_iterator(ViewEdge *iEdge)=0
vector< directedViewEdge > edges_container
virtual ViewVertex * duplicate()=0
virtual void Replace(ViewEdge *, ViewEdge *)
virtual ViewVertexInternal::orientedViewEdgeIterator edgesEnd()=0
ViewVertexInternal::edge_iterator_base< ViewVertexInternal::edge_nonconst_traits > edge_iterator
void setNature(Nature::VertexNature iNature)
bool intersect2dSeg2dArea(const Vec2r &min, const Vec2r &max, const Vec2r &A, const Vec2r &B)
bool include2dSeg2dArea(const Vec2r &min, const Vec2r &max, const Vec2r &A, const Vec2r &B)
VecMat::Vec2< real > Vec2r
VecMat::Vec3< real > Vec3r
static const VertexNature VIEW_VERTEX
static const VertexNature T_VERTEX
static const VertexNature NON_T_VERTEX