Based on OGraphic objects, AGraphic objects, and container objects (see section Container objects), the GOMLib allows many various modellings of graphical objects. So, it is possible to define many knowledge structuring for a given problem. We present here a various possible modellings with the GOMLib for the linked squares problem.
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); //modelling based on point follow-up { 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(); } //modelling based on line follow-up { 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(); } //modelling based on OHL line structuring { 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(); } //modelling based on OHL line structuring with attributes { 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(); } //modelling based on OGraph line structuring { OGraph* o = new OGraph(false); //the graph is undirected 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(); } //modelling based on OGraph line structuring with attributes { OGraph* o = new OGraph(false); //the graph is undirected 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(); } //modelling based on OGraph/OHL line structuring with attribute { OGraph* o = new OGraph(false); //the graph is undirected 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(); } //modelling based on OGraph/OHL line/junction structuring { OGraph* o = new OGraph(false); //the graph is undirected 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(); } //to be continues, there are may possible modelling ... } //de