#include <GOMLib\GOMLib.hpp>
#include <GOMLib\PExample.hpp>
void init1()
{
OGraphic *o1,*o2;
o1 = new OPoint(1,1);
o1->print();
o2 = new OLine(1,1,8,8);
o2->print();
o1->~OGraphic();
o2->~OGraphic();
}
void copy()
{
OGraphic *o1 = new OPoint(1,2);
o1->print();
OGraphic *o2 = o1->clone();
o1->~OGraphic();
o2->print();
o2->~OGraphic();
}
void init2()
{
OPoint *o1 = new OPoint(5,1);
cout << o1->getX() << endl;
OLine *o2 = new OLine(1,1,8,8);
cout << o2->getLength() << endl;
o1->~OPoint();
o2->~OLine();
}
void init3()
{
OPoint o1(5,1);
cout << o1.getX() << endl;
OLine o2(1,1,8,8);
cout << o2.getLength() << endl;
}
void rw()
{
OGraphic* p;
OPoint ptb(50,50),ptc(100,50),pte(100,100);
p = new OArc(ptb,ptc,pte,false);
gomWrite(p,"es.gom");
xmlWrite(p,"es.xml");
svgWrite(p,"es.svg");
p->~OGraphic();
p = gomRead("es.gom");
p->print();
}
void dynamic()
{
OGraphic* p;
OPoint ptb(50,50),ptc(100,50),pte(100,100);
p = new OArc(ptb,ptc,pte,false);
gomWrite(p,"es.gom");
p->~OGraphic();
p = gomRead("es.gom");
if(p->getName()=="OArc")
{
OArc *a = castOArc(p);
cout << a->getRadius() << endl;
a->~OArc();
}
else
p->~OGraphic();
}
void ohlArc()
{
OGraphic* p;
OHL *my = new OHL();
OPoint ptb(50,50),ptc(100,50),pte(100,100);
p = new OLine(ptb,ptc);
my->newObject(p);
p = new OLine(ptc,pte);
my->newObject(p);
p = new OPoint(ptc.getX(),ptc.getY());
my->newObject(p);
p = new OArc(ptb,ptc,pte,false);
my->newObject(p);
my->print();
gomWrite(my,"es.gom");
xmlWrite(my,"es.xml");
svgWrite(my,"es.svg");
my->~OHL();
}
void ohlCopy()
{
OGraphic *p;
OHL *h1 = new OHL();
p = new OPoint(1,2);
h1->newObject(p);
p = new OPoint(3,4);
h1->newObject(p);
OGraphic *h2 = h1->clone();
h1->~OHL();
h2->print();
h2->~OGraphic();
}
void ohlWrite()
{
{
OHL *h1 = new OHL();
OHL *h2 = new OHL();
OGraphic* p;
p = new OPoint(1,2);
h1->newObject(p);
h2->newObject(p);
p = new OPoint(3,4);
h1->newObject(p);
h2->newObject(p);
h1->~OHL();
}
{
OHL *h1 = new OHL();
OHL *h2 = new OHL();
OGraphic* p;
p = new OPoint(1,2);
h1->newObject(p);
h2->newObject(p->clone());
p = new OPoint(3,4);
h1->newObject(p);
h2->newObject(p->clone());
h1->~OHL();
h2->~OHL();
}
}
void ohlPush()
{
{
OHL *h = new OHL();
OGraphic* p;
p = new OPoint(1,2);
h->newObject(p);
p = new OPoint(3,4);
h->objectWrite(p,0);
h->~OHL();
}
{
OHL *h = new OHL();
OGraphic* p;
p = new OPoint(1,2);
h->newObject(p);
p = new OPoint(3,4);
h->objectRead(0)->~OGraphic();
h->objectWrite(p,0);
h->~OHL();
}
{
OHL *h = new OHL();
OGraphic* p;
p = new OPoint(1,2);
h->newObject(p);
p = new OPoint(3,4);
h->objectPush(p,0);
h->~OHL();
}
}
void graphArc()
{
OGraph *o = new OGraph();
OPoint ptb(50,50),ptc(100,50),pte(100,100);
o->newNode(new OPoint(ptc.getX(),ptc.getY()));
o->newNode(new OLine(ptb,ptc));
o->newNode(new OLine(ptc,pte));
o->newNode(new OArc(ptb,ptc,pte,false));
o->newEdge(0,1);
o->newEdge(0,2);
o->newEdge(1,3);
o->newEdge(1,3);
o->print();
gomWrite(o,"es.gom");
xmlWrite(o,"es.xml");
svgWrite(o,"es.svg");
o->~OGraph();
}
void graphCopy()
{
OGraph *o = new OGraph();
o->newNode(new OPoint(1,1));
o->newNode(new OPoint(5,5));
o->newEdge(0,1);
OGraphic *oc = o->clone();
o->~OGraph();
oc->print();
oc->~OGraphic();
}
void graphWrite()
{
{
OGraph *o1 = new OGraph();
OGraph *o2 = new OGraph();
OGraphic* p;
p = new OPoint(1,1);
o1->newNode(p);
o2->newNode(p);
p = new OPoint(5,5);
o1->newNode(p);
o2->newNode(p);
o1->newEdge(0,1);
o2->newEdge(0,1);
o1->~OGraph();
}
{
OGraph *o1 = new OGraph();
OGraph *o2 = new OGraph();
OGraphic* p;
p = new OPoint(1,1);
o1->newNode(p);
o2->newNode(p->clone());
p = new OPoint(5,5);
o1->newNode(p);
o2->newNode(p->clone());
o1->newEdge(0,1);
o2->newEdge(0,1);
o1->~OGraph();
o2->~OGraph();
}
}
void graphPush()
{
{
OGraph *o = new OGraph();
o->newNode(new OPoint(1,1));
o->newNode(new OPoint(5,5));
o->newEdge(0,1);
o->objectWrite(new OPoint(6,6),0);
o->~OGraph();
}
{
OGraph *o = new OGraph();
o->newNode(new OPoint(1,1));
o->newNode(new OPoint(5,5));
o->newEdge(0,1);
o->objectRead(0)->~OGraphic();
o->objectWrite(new OPoint(6,6),0);
o->~OGraph();
}
{
OGraph *o = new OGraph();
o->newNode(new OPoint(1,1));
o->newNode(new OPoint(5,5));
o->newEdge(0,1);
o->objectPush(new OPoint(6,6),0);
o->~OGraph();
}
}
void ohlAttribute()
{
OLine *l1,*l2;
OHL *h1 = new OHL();
l1 = new OLine(1,1,6,6);
h1->newObject(l1);
l2 = new OLine(6,6,6,20);
h1->newObject(l2);
AGraphic* a = new AAngle(l1->getAngle(*l2));
h1->newAttribute(a);
h1->print();
h1->~OHL();
}
void graphAttribute()
{
OLine *l1,*l2;
OGraph *o1 = new OGraph();
l1 = new OLine(1,1,6,6);
o1->newNode(l1);
l2 = new OLine(6,6,6,20);
o1->newNode(l2);
AGraphic* a = new AAngle(l1->getAngle(*l2));
o1->newEdge(0,1,a);
o1->print();
o1->~OGraph();
}
void modelling()
{
OPoint p1(10,10),p2(20,10),p3(20,20),p4(10,20);
OPoint p5(30,30),p6(40,30),p7(40,40),p8(30,40);
{
OHL* o = new OHL();
o->newObject(p3.clone());
o->newObject(p2.clone());
o->newObject(p1.clone());
o->newObject(p4.clone());
o->newObject(p3.clone());
o->newObject(p5.clone());
o->newObject(p6.clone());
o->newObject(p7.clone());
o->newObject(p8.clone());
o->newObject(p5.clone());
gomWrite(o,"m1.gom");
xmlWrite(o,"m1.xml");
svgWrite(o,"m1.svg");
o->~OHL();
}
{
OHL* o = new OHL();
o->newObject(new OLine(p3,p2));
o->newObject(new OLine(p2,p1));
o->newObject(new OLine(p1,p4));
o->newObject(new OLine(p4,p3));
o->newObject(new OLine(p3,p5));
o->newObject(new OLine(p5,p6));
o->newObject(new OLine(p6,p7));
o->newObject(new OLine(p7,p8));
o->newObject(new OLine(p8,p5));
gomWrite(o,"m2.gom");
xmlWrite(o,"m2.xml");
svgWrite(o,"m2.svg");
o->~OHL();
}
{
OHL* o = new OHL();
OHL* o1 = new OHL();
o1->newObject(new OLine(p3,p2));
o1->newObject(new OLine(p2,p1));
o1->newObject(new OLine(p1,p4));
o1->newObject(new OLine(p4,p3));
o->newObject(o1);
o->newObject(new OJunction(p3));
o->newObject(new OLine(p3,p5));
o->newObject(new OJunction(p5));
OHL* o2 = new OHL();
o2->newObject(new OLine(p5,p6));
o2->newObject(new OLine(p6,p7));
o2->newObject(new OLine(p7,p8));
o2->newObject(new OLine(p8,p5));
o->newObject(o2);
gomWrite(o,"m3.gom");
xmlWrite(o,"m3.xml");
svgWrite(o,"m3.svg");
o->~OHL();
}
{
OHL* o = new OHL();
OHL* o1 = new OHL();
o1->newObject(new OLine(p3,p2));
o1->newObject(new OLine(p2,p1));
o1->newObject(new OLine(p1,p4));
o1->newObject(new OLine(p4,p3));
o->newObject(o1);
o->newObject(new OJunction(p3));
o->newObject(new OLine(p3,p5));
o->newObject(new OJunction(p5));
OHL* o2 = new OHL();
o2->newObject(new OLine(p5,p6));
o2->newObject(new OLine(p6,p7));
o2->newObject(new OLine(p7,p8));
o2->newObject(new OLine(p8,p5));
o->newObject(o2);
o->newAttribute(new ALabel("close"));
o->newAttribute(new ALabel("connect"));
o->newAttribute(new ALabel("connect"));
o->newAttribute(new ALabel("close"));
gomWrite(o,"m3.gom");
xmlWrite(o,"m3.xml");
svgWrite(o,"m3.svg");
o->~OHL();
}
{
OGraph* o = new OGraph(false);
o->newNode(new OLine(p3,p2));
o->newNode(new OLine(p2,p1));
o->newNode(new OLine(p1,p4));
o->newNode(new OLine(p4,p3));
o->newNode(new OLine(p3,p5));
o->newNode(new OLine(p5,p6));
o->newNode(new OLine(p6,p7));
o->newNode(new OLine(p7,p8));
o->newNode(new OLine(p8,p5));
o->newEdge(0,1);
o->newEdge(1,2);
o->newEdge(2,3);
o->newEdge(0,4);
o->newEdge(3,4);
o->newEdge(4,5);
o->newEdge(4,8);
o->newEdge(5,6);
o->newEdge(6,7);
o->newEdge(7,8);
gomWrite(o,"m4.gom");
xmlWrite(o,"m4.xml");
svgWrite(o,"m4.svg");
o->~OGraph();
}
{
OGraph* o = new OGraph(false);
OLine *l1,*l2,*l3,*l4,*l5,*l6,*l7,*l8,*l9;
o->newNode(l1 = new OLine(p3,p2));
o->newNode(l2 = new OLine(p2,p1));
o->newNode(l3 = new OLine(p1,p4));
o->newNode(l4 = new OLine(p4,p3));
o->newNode(l5 = new OLine(p3,p5));
o->newNode(l6 = new OLine(p5,p6));
o->newNode(l7 = new OLine(p6,p7));
o->newNode(l8 = new OLine(p7,p8));
o->newNode(l9 = new OLine(p8,p5));
o->newEdge(0,1,new AAngle(l1->getAngle(*l2)));
o->newEdge(1,2,new AAngle(l2->getAngle(*l3)));
o->newEdge(2,3,new AAngle(l3->getAngle(*l4)));
o->newEdge(0,4,new AAngle(l5->getAngle(*l1)));
o->newEdge(3,4,new AAngle(l4->getAngle(*l5)));
o->newEdge(4,5,new AAngle(l5->getAngle(*l6)));
o->newEdge(4,8,new AAngle(l5->getAngle(*l9)));
o->newEdge(5,6,new AAngle(l6->getAngle(*l7)));
o->newEdge(6,7,new AAngle(l7->getAngle(*l8)));
o->newEdge(7,8,new AAngle(l8->getAngle(*l9)));
gomWrite(o,"m4.gom");
xmlWrite(o,"m4.xml");
svgWrite(o,"m4.svg");
o->~OGraph();
}
{
OGraph* o = new OGraph(false);
OHL* o1 = new OHL();
o1->newObject(new OLine(p3,p2));
o1->newObject(new OLine(p2,p1));
o1->newObject(new OLine(p1,p4));
o1->newObject(new OLine(p4,p3));
o->newNode(o1);
o->newNode(new OLine(p3,p5));
OHL* o2 = new OHL();
o2->newObject(new OLine(p5,p6));
o2->newObject(new OLine(p6,p7));
o2->newObject(new OLine(p7,p8));
o2->newObject(new OLine(p8,p5));
o->newNode(o2);
o->newEdge(0,1,new ALink(ALink.begin,ALink.begin));
o->newEdge(0,1,new ALink(ALink.end,ALink.begin));
o->newEdge(1,2,new ALink(ALink.end,ALink.begin));
o->newEdge(1,2,new ALink(ALink.end,ALink.end));
gomWrite(o,"m4.gom");
xmlWrite(o,"m4.xml");
svgWrite(o,"m4.svg");
o->~OGraph();
}
{
OGraph* o = new OGraph(false);
OHL* o1 = new OHL();
o1->newObject(new OLine(p3,p2));
o1->newObject(new OLine(p2,p1));
o1->newObject(new OLine(p1,p4));
o1->newObject(new OLine(p4,p3));
o->newNode(o1);
o->newNode(new OJunction(p3));
o->newNode(new OLine(p3,p5));
o->newNode(new OJunction(p5));
OHL* o2 = new OHL();
o2->newObject(new OLine(p5,p6));
o2->newObject(new OLine(p6,p7));
o2->newObject(new OLine(p7,p8));
o2->newObject(new OLine(p8,p5));
o->newNode(o2);
o->newEdge(0,1,new ALink(ALink.begin,ALink.center));
o->newEdge(0,1,new ALink(ALink.end,ALink.center));
o->newEdge(1,2,new ALink(ALink.center,ALink.begin));
o->newEdge(2,3,new ALink(ALink.end,ALink.center));
o->newEdge(3,4,new ALink(ALink.center,ALink.begin));
o->newEdge(3,4,new ALink(ALink.center,ALink.end));
gomWrite(o,"m4.gom");
xmlWrite(o,"m4.xml");
svgWrite(o,"m4.svg");
o->~OGraph();
}
}
void ohlRequest1()
{
OHL *my1,*my2;
my1 = new OHL();
my1->newObject(new OPoint(1,1));
my1->newObject(new OPoint(2,2));
my1->newObject(new OPoint(3,3));
my2 = new OHL();
my2->newObject(new OPoint(4,4));
my2->newObject(new OPoint(5,5));
my2->newObject(new OPoint(6,6));
my2->newObject(new OHL());
my1->newObject(my2);
deque<OGraphic*> ha = my1->readOGraphicArray((string)"OPoint");
for(int i=0;i<ha.size();i++)
ha[i]->print();
ha.clear();
ha = my1->readOGraphicArray((string)"OHL");
for(int j=0;j<ha.size();j++)
cout << ha[j]->getName() << endl ;
ha.clear();
my1->~OHL();
}
void ohlRequest2()
{
OHL *my1,*my2;
my1 = new OHL();
my1->newObject(new OPoint(1,1));
my1->newObject(new ODPoint(2,2));
my1->newObject(new OPoint(3,3));
my2 = new OHL();
my2->newObject(new ODPoint(4,4));
my2->newObject(new OPoint(5,5));
my2->newObject(new OPoint(6,6));
my1->newObject(my2);
my1->print(); cout << endl;
deque<OGraphic*> ha1 = my1->readOGraphicArray((string)"OPoint");
deque<OGraphic*> ha2;
for(int i=0;i<ha1.size();i++)
ha2.push_back(new OVPoint(i*0.1,i*0.1));
my1->writeOGraphicArray((string)"OPoint",ha2);
my1->print(); cout << endl;
ha1.clear();
ha2.clear();
my1->~OHL();
}
void graphRequest1()
{
node n1,n2; edge e;
OGraph *o1 = new OGraph();
n1 = o1->newNode(new OPoint(1,1));
n2 = o1->newNode(new OLine(2,2,3,3));
e = o1->newEdge(n1,n2,new ALabel("near"));
o1->print();
OGraph *o2 = new OGraph();
n1 = o2->newNode(new OPoint(4,4));
n2 = o2->newNode(new OLine(5,5,6,6));
e = o2->newEdge(n1,n2,new ALabel("near"));
o2->print();
o1->newNode(o2);
o1->print(); cout << endl;
deque<OGraphic*> a = o1->readOGraphicArray((string)"OPoint");
printOGraphicArray(a);
o1->~OGraph();
a.clear();
}
void graphRequest2()
{
node n1,n2; edge e;
OGraph *o1 = new OGraph();
n1 = o1->newNode(new OPoint(1,1));
n2 = o1->newNode(new OLine(2,2,3,3));
e = o1->newEdge(n1,n2,new ALabel("near"));
OGraph *o2 = new OGraph();
n1 = o2->newNode(new OPoint(4,4));
n2 = o2->newNode(new OLine(5,5,6,6));
e = o2->newEdge(n1,n2,new ALabel("near"));
o1->newNode(o2);
o1->print(); cout << endl;
deque<OGraphic*> a1 = o1->readOGraphicArray((string)"OPoint");
printOGraphicArray(a1);
deque<OGraphic*> a2;
for(int i=0;i<a1.size();i++)
a2.push_back(new OVPoint(i*0.1,i*0.1));
o1->writeOGraphicArray((string)"OPoint",a2);
o1->print(); cout << endl;
o1->~OGraph();
a1.clear();
a2.clear();
}
void ohlDynamic()
{
OHL *my = new OHL(); OGraphic* p;
OPoint ptb(50,50),ptc(100,50),pte(100,100);
p = new OLine(ptb,ptc);
my->newObject(p);
p = new OLine(ptc,pte);
my->newObject(p);
p = new OPoint(ptc.getX(),ptc.getY());
my->newObject(p);
p = new OArc(ptb,ptc,pte,false);
my->newObject(p);
deque<OGraphic*> ha = my->readOGraphicArray((string)"OLine");
deque<OLine*> la = castOLineArray(ha);
for(int i=0;i<la.size();i++)
cout << la[i]->getLength() << endl;
ha.clear();
la.clear();
my->~OHL();
}
void fileTest()
{
OHL *o = new OHL();
OHL *o1 = new OHL();
o1->newObject(new OGraphicImpl());
o1->newObject(new OPoint());
o1->newObject(new ODPoint());
o1->newObject(new OLPoint());
o1->newObject(new OVPoint());
o1->newObject(new OLine());
o1->newObject(new OArc());
o1->newObject(new OCurve());
o1->newObject(new OGraph());
o1->newObject(new OIPoint());
o1->newObject(new OExtremity());
o1->newObject(new OJunction());
o1->newAttribute(new AGraphicImpl());
o1->newAttribute(new AAngle());
o1->newAttribute(new ADistance());
o1->newAttribute(new ALabel());
o1->newAttribute(new ALink());
o->newObject(o1);
OGraph *o2 = new OGraph();
o2->newNode(new OGraphicImpl());
o2->newNode(new OPoint());
o2->newNode(new ODPoint());
o2->newNode(new OLPoint());
o2->newNode(new OVPoint());
o2->newNode(new OLine());
o2->newNode(new OArc());
o2->newNode(new OCurve());
o2->newNode(new OGraph());
o2->newNode(new OIPoint());
o2->newNode(new OExtremity());
o2->newNode(new OJunction());
o2->newEdge(0,1,new AGraphicImpl());
o2->newEdge(0,1,new AAngle());
o2->newEdge(0,1,new ADistance());
o2->newEdge(0,1,new ALabel());
o2->newEdge(0,1,new ALink());
o->newObject(o2);
o->print();
gomWrite(o,"res.gom");
xmlWrite(o,"res.xml");
o->~OHL();
OGraphic* r = gomRead("res.gom");
cout << endl; cout << endl; r->print();
r->~OGraphic();
}