The program output is : std::vector(0x55f164f79450) instead of Childs[one]: What am i doing wrong here?
Any help would be appreciated !
The online example : http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/PolyTree/_Body.htm
My test code :
#include <clipper/include/clipper.hpp>
#include <iterator>
#include <algorithm>
using namespace ClipperLib;
using namespace std;
area_partition::area_partition()
{
//Paths
Path one = {{10,10},{100,10},{100,100},{10,100}};
Path two = {{20,20},{20,90},{90,90},{90,20}};
Path three = {{30,30},{50,30},{50,50},{30,50}};
Path four = {{60,60},{80,60},{80,80},{60,80}};
PolyTree array;
//Setup output..
ClipperLib::Clipper c;
c.AddPath(one, ptSubject, true);
c.AddPath(two, ptSubject, true);
c.AddPath(three, ptSubject, true);
c.AddPath(four, ptSubject, true);
c.Execute(ctDifference,array);
c.Clear();
//call to Clipper.Execute method here which fills 'polytree'
PolyNode *polynode = array.GetFirst();
while (polynode)
{
//do stuff with polynode here
qDebug()<< "parent : " << polynode->Parent;
qDebug()<< "childs : " << polynode->Childs;
qDebug()<< "isHole : " << polynode->IsHole();
qDebug()<< "childcount : " << polynode->ChildCount();
qDebug()<< " ";
qDebug()<< " ";
polynode = polynode->GetNext();
}
}
My terminal output :
parent : 0x7ffc246b6730
childs : std::vector(0x55f164f79450)
isHole : false
childcount : 1
parent : 0x55f164f793f0
childs : std::vector(0x55f165763b40, 0x55f165763bf0)
isHole : true
childcount : 2
parent : 0x55f164f79450
childs : std::vector()
isHole : false
childcount : 0
parent : 0x55f164f79450
childs : std::vector()
isHole : false
childcount : 0
The output of the online example :
ChildCount = 1
Childs[0]:
Contour = ((10,10),(100,10),(100,100),(10,100))
IsHole = False
ChildCount = 1
Childs[0]:
Contour = ((20,20),(20,90),(90,90),(90,20))
IsHole = True
ChildCount = 2
Childs[0]:
Contour = ((30,30),(50,30),(50,50),(30,50))
IsHole = False
ChildCount = 0
Childs[1]:
Contour = ((60,60),(80,60),(80,80),(60,80))
IsHole = False
ChildCount = 0

You are iterating over a
PolyNode. According to the Clipper library documentation:Parentis a pointer to aPolyNodeChildsis astd::vectorof pointers toPolyNodesWhen you try to output a pointer,
operator<<usually displays the value of the pointer and not the object pointed to. This is why you have 0x... for the parent.The
QDebugclass has an overload foroperator<<forstd::vector, which outputs the content of the vector, which is pointers, so this is why you get 0x... for the children as well.If you want to get the output that you expect, you need to not to output the parent. And you need to iterate through the children with an index to output them one after the other, (so that you can output
"Child["<<i<<"]:"<<std::endl;), outputing not the pointer to the content, but the content itself with"<< *polynode->Childs[i]"