changeset 590:c81018fbf51e

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 30 Oct 2009 18:41:56 +0900
parents f674ca0fb76d (current diff) d5d8e1cf1899 (diff)
children 7cbffb81e214
files Renderer/Test/xml_file/cube_split.xml
diffstat 14 files changed, 239 insertions(+), 413 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/Makefile.def	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Engine/Makefile.def	Fri Oct 30 18:41:56 2009 +0900
@@ -3,7 +3,7 @@
 CERIUM = ../..
 
 CC      = g++
-CFLAGS  = -O9 -g -Wall -DUSE_MEMLIST=1 -DUSE_MEMHASH=1 # -DDEBUG
+CFLAGS  = -g -Wall -DUSE_MEMLIST=1 -DUSE_MEMHASH=1 # -O9 -DDEBUG
 
 INCLUDE = -I$(CERIUM)/include/TaskManager -I.
 LIBS = -L$(CERIUM)/TaskManager
--- a/Renderer/Engine/SceneGraph.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Engine/SceneGraph.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -403,6 +403,7 @@
  * image を 32bit(RGBA) に変換する
  */
     SDL_Surface *texture_image = IMG_Load(image_name);
+    if (!texture_image) return 0;
     SDL_Surface *tmpImage
         = SDL_CreateRGBSurface(SDL_HWSURFACE, texture_image->w,
                                texture_image->h, 32, redMask,
@@ -477,6 +478,10 @@
     if (!texture_hash.hash_regist(filename, tex_id)) {
 
         SDL_Surface *texture_image = load_decode_image(image_name, cur);
+	if (texture_image==0) {
+	    printf("Can't load image %s\n",filename);
+	    exit(0);
+	}
 
         texture_id = makeTapestries(manager, texture_image, tex_id);
 
--- a/Renderer/Engine/SceneGraphRoot.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Engine/SceneGraphRoot.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -82,10 +82,10 @@
     }
     if (sg_src_id+1> sg_src_size) {
 	sg_src_size *= 2;
-	sg_src = (SceneGraphPtr*)realloc(sg_src, sg_src_size);
+	sg_src = (SceneGraphPtr*)realloc(sg_src, sg_src_size*sizeof(SceneGraphPtr));
     }
-    sg->id = ++sg_src_id;
-    sg_src[sg->id] = sg;
+    sg->sgid = ++sg_src_id;
+    sg_src[sg->sgid] = sg;
 }
 
 void
@@ -130,12 +130,39 @@
 
 	/* ポリゴン(SceneGraph)生成  */
 	tmp = new SceneGraph(manager, cur);	
-
 	registSceneGraph(tmp);
     }
-
     xmlFreeDoc(doc);
+}
 
+void
+SceneGraphRoot::createFromXMLmemory(TaskManager *manager, SceneGraph *node, char *data, int len)
+{
+    xmlDocPtr doc;
+    xmlNodePtr cur;
+    
+    // size は取れるはず、テスト用に mmap したデータを使う
+    /* パース DOM生成 */
+
+    doc = xmlParseMemory(data, len);
+    cur = xmlDocGetRootElement(doc);
+
+    /* ??  */
+    xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D");
+
+    /* XMLのノードを一つずつ解析  */
+    for (cur=cur->children; cur; cur=cur->next) {
+		/* 扱うのはsurfaceオンリー  */
+		if (xmlStrcmp(cur->name,(xmlChar*)"surface") != 0) {
+			continue;
+		}
+		/* ポリゴン(SceneGraph)生成  */
+		SceneGraphPtr original = new SceneGraph(manager, cur);	
+		registSceneGraph(original);
+		SceneGraphPtr clone = createSceneGraph(original->sgid);
+		node->addChild(clone);
+    }
+    xmlFreeDoc(doc);
 }
 
 SceneGraphPtr
@@ -160,36 +187,6 @@
 }
 
 
-void
-SceneGraphRoot::createFromXMLmemory(TaskManager *manager, char *data, int len)
-{
-    xmlDocPtr doc;
-    xmlNodePtr cur;
-    
-    // size は取れるはず、テスト用に mmap したデータを使う
-    /* パース DOM生成 */
-
-    doc = xmlParseMemory(data, len);
-    cur = xmlDocGetRootElement(doc);
-
-    /* ??  */
-    xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D");
-
-    /* XMLのノードを一つずつ解析  */
-    for (cur=cur->children; cur; cur=cur->next) {
-	/* 扱うのはsurfaceオンリー  */
-	if (xmlStrcmp(cur->name,(xmlChar*)"surface") != 0) {
-	    continue;
-	}
-
-	/* ポリゴン(SceneGraph)生成  */
-	SceneGraphPtr tmp = new SceneGraph(manager, cur);	
-	
-	registSceneGraph(tmp);
-    }
-    
-    xmlFreeDoc(doc);
-}
 
 
 SceneGraphPtr
@@ -228,7 +225,7 @@
 SceneGraphRoot::getLast()
 {
     if (sg_src_id>=0)
-	return sg_src[sg_src_id]->id;
+	return sg_src[sg_src_id]->sgid;
     return -1;
 }
 
--- a/Renderer/Engine/SceneGraphRoot.h	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Engine/SceneGraphRoot.h	Fri Oct 30 18:41:56 2009 +0900
@@ -59,9 +59,7 @@
      */
     /* User API */
     void createFromXMLfile(TaskManager *manager, const char *);
-    //void createFromXMLmemory(TaskManager *manager, const char *xml);
-    //void createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t);
-    void createFromXMLmemory(TaskManager *manager, char *data, int len);
+    void createFromXMLmemory(TaskManager *manager, SceneGraph * node, char *data, int len);
     SceneGraphPtr createSceneGraph(int id);
     SceneGraphPtr createSceneGraph();
     SceneGraphPtr createSceneGraph(const char *name);
--- a/Renderer/Engine/spe/Load_Texture.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Engine/spe/Load_Texture.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -5,9 +5,6 @@
 #include <string.h>
 #include "Load_Texture.h"
 #include "texture.h"
-#if !USE_MEMHASH
-#include "TileHash.h"
-#endif
 #include "Func.h"
 #include "global_alloc.h"
 
--- a/Renderer/Engine/task/Load_Texture.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Engine/task/Load_Texture.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -2,9 +2,6 @@
 #include <string.h>
 #include "Load_Texture.h"
 #include "texture.h"
-#if !USE_MEMHASH
-#include "TileHash.h"
-#endif
 #include "Func.h"
 #include "global_alloc.h"
 #include "Tapestry.h"
--- a/Renderer/Test/Makefile	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Test/Makefile	Fri Oct 30 18:41:56 2009 +0900
@@ -1,6 +1,6 @@
 
-all:  cell
-	#make -f Makefile.macosx
+all:  
+	make -f Makefile.macosx
 
 cell:
 	make -f Makefile.cell
--- a/Renderer/Test/Makefile.def	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Test/Makefile.def	Fri Oct 30 18:41:56 2009 +0900
@@ -2,7 +2,7 @@
 CERIUM = ../..
 
 CC      = g++
-CFLAGS  = -g -Wall -DUSE_MEMLIST=1 -DUSE_MEMHASH=1 # -DDEBUG
+CFLAGS  = -g -Wall  # -O -DDEBUG
 
 INCLUDE = -I$(CERIUM)/include/TaskManager -I. -I$(CERIUM)/include/Cerium
 LIBS = -L$(CERIUM)/TaskManager -L$(CERIUM)/Renderer/Engine
--- a/Renderer/Test/Makefile.macosx	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Test/Makefile.macosx	Fri Oct 30 18:41:56 2009 +0900
@@ -2,15 +2,15 @@
 
 LIBS += -lFifoManager -lCerium
 
-CFLAGS += `sdl-config --cflags` `xml2-config --cflags`
+CFLAGS += `sdl-config --cflags` `xml2-config --cflags` $(INCLUDE)
 LIBS   += `sdl-config --libs` `xml2-config --libs` -lSDL_image -Wl,-framework,OpenGL
 
 .SUFFIXES: .cc .o  .xml .xml.h .xml.cc
 
 .cc.o:
-	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
+	$(CC) $(CFLAGS)  -c $< -o $@
 
-ALL =  ball_bound boss1_action direction gaplant ieshoot node panel universe untitled vacuum send_linda dynamic
+ALL =  ball_bound boss1_action direction gaplant ieshoot node panel universe untitled vacuum send_linda dynamic writer chain_old
 all: $(ALL)
 
 BALL_BOUND_OBJ = ball_bound.o
@@ -61,6 +61,14 @@
 send_linda : $(SENDLINDA_OBJ) 
 	$(CC) -o $@ $?    $(LIBS)
 
+WRITER_OBJ = writer.o
+writer : $(WRITER_OBJ) 
+	$(CC) -o $@ $?    $(LIBS)
+
+CHAIN_OBJ = chain_old.o
+chain_old : $(CHAIN_OBJ) 
+	$(CC) -o $@ $?    $(LIBS)
+
 run: $(TARGET)
 	sudo ./$(TARGET) -width 576 -height 384 -bpp 32
 
--- a/Renderer/Test/chain_old.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Test/chain_old.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -1,9 +1,9 @@
 #include <iostream>
 #include <math.h>
 #include "SceneGraphRoot.h"
-#include "SGList.h"
 #include "SceneGraph.h"
 #include "TaskManager.h"
+#include "Chain.h"
 #include "Func.h"
 
 
@@ -127,14 +127,14 @@
 }
 
 MainLoopPtr
-chain_old::init(Viewer *sgroot, int w, int h)
+Chain::init(Viewer *sgroot, int w, int h)
 {
     SceneGraphPtr root_old_chain, chain;
     CHAIN_VARS rcv;
 
-    sgroot->createFromXMLfile(manager,"xml_file/chain.xml");
+    sgroot->createFromXMLfile("xml_file/chain.xml");
 
-    root_old_chain = sgroot->createSceneGraph(CHAIN);
+    root_old_chain = sgroot->createSceneGraph("CHAIN");
     root_old_chain->set_move_collision(chain_old_move_ope, chain_old_collision);
     init_chainold_vars(&rcv);
     rcv.next_x = w / 2;
@@ -142,7 +142,7 @@
     set_old_vector(&rcv, root_old_chain);
 
     for(int i = 0; i < CHAIN_LEN; i++) {
-        chain = sgroot->createSceneGraph(CHAIN);
+        chain = sgroot->createSceneGraph("CHAIN");
         chain->id = i;
         init_chainold_vars(&cv[i]);
         cv[i].x = 0;
@@ -161,7 +161,7 @@
 
 extern Application *
 application() {
-    return new ball_bound();
+    return new Chain();
 }
 
 const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n";
--- a/Renderer/Test/dynamic_create.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Test/dynamic_create.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -48,18 +48,6 @@
 void
 client_list_update(TaskManager *manager, client_t *clist, int id, SceneGraphPtr sgp)
 {
-    //client_t *c;
-    // for (c = clist->next; c != clist; c = c->next) {
-    // 	if (c->id == id) {
-    // 		c->sgp = sgp;
-    // 		return;
-    // 	}
-    // }
-	
-    // c->next = (client_t *)manager->allocate(sizeof(client_t));
-    // c->next->id = id;
-    // c->next->sgp = sgp;
-    // c->next->next = clist;
 }
 
 void
@@ -107,30 +95,16 @@
 }
 
 SceneGraphPtr
-create_sg(TaskManager *manager, SceneGraphPtr node, unsigned char *data, int len, int serial_id)
+create_sg(TaskManager *manager, SceneGraphPtr parent, unsigned char *data, int len, int serial_id)
 {
-    SceneGraphPtr object;
-
-    sgroot->createFromXMLmemory(sgroot->tmanager, (char *)data, len);
-    object = sgroot->createSceneGraph(sgroot->getLast());
-    object->id = serial_id;
-    object->set_move_collision(moon_move, moon_collision);
-    node->addChild(object);
-
-    return object;
+    SceneGraphPtr child = sgroot->createSceneGraph();
+    parent->addChild(child);
+    // 読み込んだオブジェクトは、すべて、child の child になる。
+    sgroot->createFromXMLmemory(sgroot->tmanager, child, (char *)data, len);
+    child->set_move_collision(moon_move, moon_collision);
+    return child;
 }
 
-// void
-// del_callback(unsigned char *data, void *arg)
-// {
-//     free(data);
-// }
-
-// void
-// psx_del(int t, int id)
-// {
-//     psx_callback_in(t, id, del_callback, NULL);
-// }
 
 static void
 callback_get_xml(unsigned char *xml_tuple, void *arg) {
@@ -139,8 +113,10 @@
     unsigned char *xml_data = xml_tuple+LINDA_HEADER_SIZE;
     SceneGraphPtr sgp;
     // ここで create
-	fwrite(xml_data, 1, 10, stdout);
+    //	fwrite(xml_data, 1, 10, stdout);
+	printf((char *)xml_data);
     sgp = create_sg(carg->manager, carg->node, xml_data, xml_len, carg->sid);
+    printf("%s size %d loaded\n", sgp->children->name, xml_len);
     client_list_update(carg->manager, carg->clist, carg->sid, sgp);
     free(arg);
     free(xml_tuple);
@@ -157,7 +133,7 @@
     data = tuple+LINDA_HEADER_SIZE;
     // clientのSerialIDを取得
     serial_id = ntohl(*(int *)data);
-
+//    serial_id = *(int *)data;
 	printf("serial id = %d\n", serial_id);
     // タプルを解放
     //psx_del(carg->tid, SERIAL_REGIST_TUPLE_NO);
--- a/Renderer/Test/send_linda.cc	Fri Oct 30 18:39:12 2009 +0900
+++ b/Renderer/Test/send_linda.cc	Fri Oct 30 18:41:56 2009 +0900
@@ -15,32 +15,63 @@
 #define PORT_NUM 10000
 #define LISTEN_PORT 1
 #define MULTI_NUM 10
+#define SEND_DATA_SIZE 24  //sizeof(float) * 6;
+void
+send_position(SceneGraphPtr node)
+{
+	char *data;
+	char send_data[SEND_DATA_SIZE]; // xyz[3] and angle[3]
+	int tapleid = node->id * 10 + 1;
+	int fd = *(int*)node->propertyptr;
+    int seq;
+	int i;
+	
+	for (i = 0; i < 3; i ++) {
+		((float *)send_data)[i] = htonl(node->xyz[i]);
+		((float *)send_data)[i+3] = htonl(node->angle[i]);
+	}
+    seq = psx_in(fd, tapleid);
+	do {
+		psx_sync_n();
+		data = (char *)psx_reply(seq);
+	} while (data == NULL);
+	psx_out(fd, tapleid, (unsigned char *)send_data, SEND_DATA_SIZE);
+	psx_sync_n();
+    psx_free(data);
+}
 
 void
 root_move(SceneGraphPtr node, int w, int h)
 {
     Pad *pad = sgroot->getController();
-
+	int flag = 0;
     if (pad->right.isHold() || pad->left.isHold()) {
-	if (pad->right.isHold()) {
-	    node->xyz[0] += 5.0f;
-	} else if (pad->left.isHold()) {
-	    node->xyz[0] -= 5.0f;
-	}
+		if (pad->right.isHold()) {
+			node->xyz[0] += 5.0f;
+			flag = 1;
+		} else if (pad->left.isHold()) {
+			node->xyz[0] -= 5.0f;
+			flag = 1;
+		}
     }
     
     if (pad->down.isHold() || pad->up.isHold() ) {
-	if (pad->down.isHold()) {
-	    node->xyz[1] += 5.0f;
-	} else if (pad->up.isHold()) {
-	    node->xyz[1] -= 5.0f;
-	}
+		if (pad->down.isHold()) {
+			node->xyz[1] += 5.0f;
+			flag = 1;
+		} else if (pad->up.isHold()) {
+			node->xyz[1] -= 5.0f;
+			flag = 1;
+		}
     }
 
-    /*
+	/*
       ここでキー入力を向こうに送る
-     */
-    
+	*/
+
+	if (flag) {
+		send_position(node);
+	}
 }
 
 void
@@ -65,18 +96,18 @@
     struct stat sb;
 
     if ((fd = open(filename, O_RDONLY)) == -1) {
-	fprintf(stderr, "Can't open %s\n", filename);
-	perror(NULL);
+		fprintf(stderr, "Can't open %s\n", filename);
+		perror(NULL);
     }
     if (fstat(fd, &sb) == -1) {
-	fprintf(stderr, "Can't fstat %s\n", filename);
-	perror(NULL);
+		fprintf(stderr, "Can't fstat %s\n", filename);
+		perror(NULL);
     }
     *size = sb.st_size;
     addr = mmap(NULL, *size, PROT_READ, MAP_PRIVATE, fd, 0);
     if (addr == MAP_FAILED) {
-	perror("mmap error\n");
-	exit(EXIT_FAILURE);
+		perror("mmap error\n");
+		exit(EXIT_FAILURE);
     }
     close(fd);
 
@@ -91,8 +122,10 @@
     int seq;
     
     seq = psx_in(fd, 65535);
-    psx_sync_n();
-    data = (char *)psx_reply(seq);
+	do {
+		psx_sync_n();
+		data = (char *)psx_reply(seq);
+	} while (data == 0);
     serial = atoi(data + LINDA_HEADER_SIZE);
     psx_free(data);
     
@@ -136,7 +169,7 @@
 static char *linda = HOSTNAME;
 
 MainLoopPtr 
-send_linda::init(Viewer *sgroot, int screen_w, int screen_h)
+send_linda::init(Viewer *sgr, int screen_w, int screen_h)
 {
     void *addr;
     int size;
@@ -146,28 +179,40 @@
 
     SceneGraphPtr sgp;
     SceneGraphPtr root;
+
     root = sgroot->createSceneGraph();
     root->set_move_collision(root_move, root_collision);
-
-    // createFromXMLfile で object name のリストを生成して返したい
-    sgroot->createFromXMLfile( xml);
-    // 今だけは決め打ち、本当はリストを回して object 数 create したい
-    sgp = sgroot->createSceneGraph("Ball");
+    
+    addr = file_map(xml, &size);
+	sgp = sgroot->createSceneGraph();
+    sgroot->createFromXMLmemory(sgroot->tmanager, sgp, (char *)addr, size);
     sgp->set_move_collision(move, collision);
     
     root->addChild(sgp);
-    
-    addr = file_map(xml, &size);
-    tspace = open_linda_java(linda, PORT_NUM);    
+
+	tspace = open_linda_java(linda, PORT_NUM);
+	root->propertyptr = sgroot->tmanager->allocate(sizeof(int));
+	root->property_size = sizeof(int);
+	*(int *)root->propertyptr = tspace;
+	
     serial = get_serial_id(tspace);
+	root->id = serial;
     xml_id = serial * 10;
-    send_xml(tspace, xml_id, addr, size);   	    
-    
-    int client_id = htonl(serial);
-    send_xml(tspace, LISTEN_PORT, (void *)client_id, sizeof(int));
+    send_xml(tspace, xml_id, addr, size);    
 
+	int client_id = htonl(serial);
+	printf("serial id = %d\n", client_id);
+    send_xml(tspace, LISTEN_PORT, (unsigned char *)&client_id, sizeof(int));
+	
+	int pos_id = serial * 10 + 1;
+	char pos_data[SEND_DATA_SIZE];
+	for (int i = 0; i < 6; i++) {
+		((float *)pos_data)[i] = htonl(0.0f);
+	}
+	send_xml(tspace, pos_id, (unsigned char *)pos_data, SEND_DATA_SIZE);
+	
     sgroot->setSceneData(root);
-    return sgroot;
+    return sgr;
 }
 
 extern Application *
@@ -189,11 +234,11 @@
     manager->set_TMend(TMend);
 
     for(int i=0;i<argc;i++) {
-	if (strcmp(argv[i],"-xml") == 0 && i+1<=argc) {
-	    xml = argv[i+1];
-	} else if (strcmp(argv[i],"-linda") == 0 && i+1<=argc) {
-	    linda = argv[i+1];
-	}
+		if (strcmp(argv[i],"-xml") == 0 && i+1<=argc) {
+			xml = argv[i+1];
+		} else if (strcmp(argv[i],"-linda") == 0 && i+1<=argc) {
+			linda = argv[i+1];
+		}
     }
 
     if (xml==0) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Renderer/Test/writer.c	Fri Oct 30 18:41:56 2009 +0900
@@ -0,0 +1,82 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include "lindaapi.h"
+
+#define PORT 10000
+
+#define SERIAL_REGIST_TUPLE_NO 1
+
+void
+mainLoop(int tid, int write_id, int fd)
+{
+	void *addr;
+	struct stat sb;
+
+	if (fstat(fd, &sb) == -1) {
+		perror("fstat");
+		exit(1);
+	}
+	addr = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+	if (addr==NULL) {
+		perror("mmap");
+		exit(1);
+	}
+
+	printf("file size=%lld\n", sb.st_size);
+
+	psx_out(tid, write_id, (unsigned char *)addr, sb.st_size);
+	psx_sync_n();
+
+	return;
+}
+
+int get_serial_id(int tid) {
+	char *data;
+	int serial;
+	int seq;
+
+	seq = psx_in(tid, 65535);
+	do {
+	    psx_sync_n();
+	    data = (char *)psx_reply(seq);
+	} while(data==0);
+	serial = atoi(data + LINDA_HEADER_SIZE);
+	psx_free(data);
+
+	return serial;
+}
+
+void send_serial_id(int tid, int serial_id) {
+	int safe_id = htonl(serial_id);
+
+	psx_out(tid, SERIAL_REGIST_TUPLE_NO, (unsigned char *)&safe_id, sizeof(safe_id));
+	psx_sync_n();
+}
+
+int
+main(int argc, char *argv[]) {
+	int tspace;
+	int serial;
+	int xml_id;
+	char *linda_serv = "localhost";
+	if (argc > 1)
+		linda_serv = argv[1];
+	init_linda();
+	tspace = open_linda_java(linda_serv, PORT);
+	printf("open socket (tupple space id) = %d\n", tspace);
+	serial = get_serial_id(tspace);
+	xml_id = serial * 10;
+	mainLoop(tspace, xml_id, fileno(stdin));
+	sleep(1);
+	send_serial_id(tspace, serial);
+	printf("send xml_id = %d, seciral = %d\n",xml_id, serial);
+	exit(EXIT_SUCCESS);
+}
+
+/* end */
--- a/Renderer/Test/xml_file/cube_split.xml	Fri Oct 30 18:39:12 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,279 +0,0 @@
-<?xml version="1.0"?>
-<OBJECT-3D>
-  <surface name="Plane" size="6" prim="Triangle" parent="NULL">
-    <coordinate>
-      38.655231 38.973322 -1.031601
-      -42.648190 38.973337 -1.031601
-      -42.648209 -42.330103 -1.031601
-      -42.648209 -42.330103 -1.031601
-      38.655231 -42.330107 -1.031601
-      38.655231 38.973322 -1.031601
-    </coordinate>
-    <normal>
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-    </normal>
-    <model>
-      -1.996483 -1.678389 -1.031601
-    </model>
-    <texture>
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-    </texture>
-    <image name="cubetex.png">
-      iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK
-      TWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQ
-      WaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec
-      5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28A
-      AgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0
-      ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaO
-      WJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHi
-      wmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryM
-      AgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0l
-      YqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHi
-      NLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYA
-      QH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6c
-      wR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBie
-      whi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1c
-      QPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqO
-      Y4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hM
-      WEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgoh
-      JZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSU
-      Eko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/p
-      dLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Y
-      b1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7O
-      UndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsb
-      di97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W
-      7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83
-      MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxr
-      PGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW
-      2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1
-      U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd
-      8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H0
-      8PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+H
-      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
-      rkJggg==
-    </image>
-  </surface>
-  <surface name="SmallCube" size="36" prim="Triangle" parent="Plane">
-    <coordinate>
-      1.789587 1.361652 11.458147
-      1.789587 -1.898860 11.458147
-      -1.470925 -1.898860 11.458147
-      -1.470925 -1.898860 11.458147
-      -1.470925 1.361653 11.458147
-      1.789587 1.361652 11.458147
-      1.789588 1.361652 14.718660
-      -1.470925 1.361652 14.718660
-      -1.470926 -1.898860 14.718660
-      -1.470926 -1.898860 14.718660
-      1.789587 -1.898861 14.718660
-      1.789588 1.361652 14.718660
-      1.789587 1.361652 11.458147
-      1.789588 1.361652 14.718660
-      1.789587 -1.898861 14.718660
-      1.789587 -1.898861 14.718660
-      1.789587 -1.898860 11.458147
-      1.789587 1.361652 11.458147
-      1.789587 -1.898860 11.458147
-      1.789587 -1.898861 14.718660
-      -1.470926 -1.898860 14.718660
-      -1.470926 -1.898860 14.718660
-      -1.470925 -1.898860 11.458147
-      1.789587 -1.898860 11.458147
-      -1.470925 -1.898860 11.458147
-      -1.470926 -1.898860 14.718660
-      -1.470925 1.361652 14.718660
-      -1.470925 1.361652 14.718660
-      -1.470925 1.361653 11.458147
-      -1.470925 -1.898860 11.458147
-      1.789588 1.361652 14.718660
-      1.789587 1.361652 11.458147
-      -1.470925 1.361653 11.458147
-      -1.470925 1.361653 11.458147
-      -1.470925 1.361652 14.718660
-      1.789588 1.361652 14.718660
-    </coordinate>
-    <normal>
-      0.000000 0.000000 -1.000000
-      0.000000 0.000000 -1.000000
-      0.000000 0.000000 -1.000000
-      0.000000 0.000000 -1.000000
-      0.000000 0.000000 -1.000000
-      0.000000 0.000000 -1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      0.000000 -0.000000 1.000000
-      1.000000 -0.000000 0.000000
-      1.000000 -0.000000 0.000000
-      1.000000 -0.000000 0.000000
-      1.000000 -0.000000 0.000000
-      1.000000 -0.000000 0.000000
-      1.000000 -0.000000 0.000000
-      -0.000000 -1.000000 -0.000000
-      -0.000000 -1.000000 -0.000000
-      -0.000000 -1.000000 -0.000000
-      -0.000000 -1.000000 -0.000000
-      -0.000000 -1.000000 -0.000000
-      -0.000000 -1.000000 -0.000000
-      -1.000000 0.000000 -0.000000
-      -1.000000 0.000000 -0.000000
-      -1.000000 0.000000 -0.000000
-      -1.000000 0.000000 -0.000000
-      -1.000000 0.000000 -0.000000
-      -1.000000 0.000000 -0.000000
-      0.000000 1.000000 0.000000
-      0.000000 1.000000 0.000000
-      0.000000 1.000000 0.000000
-      0.000000 1.000000 0.000000
-      0.000000 1.000000 0.000000
-      0.000000 1.000000 0.000000
-    </normal>
-    <model>
-      0.159331 -0.268604 13.088404
-    </model>
-    <texture>
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-      0.000000 0.000000
-      1.000000 0.000000
-      1.000000 1.000000
-      1.000000 1.000000
-      0.000000 1.000000
-      0.000000 0.000000
-    </texture>
-    <image name="cubetex.png">
-      iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK
-      TWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQ
-      WaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec
-      5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28A
-      AgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0
-      ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaO
-      WJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHi
-      wmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryM
-      AgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0l
-      YqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHi
-      NLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYA
-      QH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6c
-      wR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBie
-      whi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1c
-      QPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqO
-      Y4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hM
-      WEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgoh
-      JZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSU
-      Eko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/p
-      dLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Y
-      b1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7O
-      UndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsb
-      di97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W
-      7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83
-      MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxr
-      PGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW
-      2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1
-      U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd
-      8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H0
-      8PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+H
-      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
-      rkJggg==
-    </image>
-  </surface>
-</OBJECT-3D>