diff Renderer/Engine/SceneGraphRoot.cc @ 580:da82a47ece92

add all object in file in dynamic_create
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 24 Oct 2009 16:32:29 +0900
parents cc989924f469
children ea03c178fc30
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc	Sat Oct 24 16:11:08 2009 +0900
+++ b/Renderer/Engine/SceneGraphRoot.cc	Sat Oct 24 16:32:29 2009 +0900
@@ -84,8 +84,8 @@
 	sg_src_size *= 2;
 	sg_src = (SceneGraphPtr*)realloc(sg_src, sg_src_size);
     }
-    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;
 }