annotate Renderer/test_render/tools/create_sglist.pl @ 283:15bfacccde99 draft

fix test_render
author e065746@localhost.localdomain
date Fri, 05 Jun 2009 16:49:12 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
283
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
1 #!/usr/bin/perl
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
2
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
3 # TODO
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
4 # 同じ名前の SceneGraph が来た時の処理
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
5 # まあ Blender の時点でそうならないように書くべきなんだが
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
6
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
7 ####################################
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
8 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
9 # Create SceneGraph List
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
10 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
11 # SceneGraph が記載された xml ファイルを読み込み、
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
12 # 名前に対応するID列が記述された SGList.h を生成する。
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
13 # また、名前から ID を取得するために sglist_table を生成しておく。
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
14 # sglist_table は SGList.cpp に記述する
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
15 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
16 # xml に ID を入れれば table は要らないんだが、
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
17 # xml の読み込む順番、その時々に応じて使うものと使わないもので
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
18 # ID にズレが出てくるので、Blender からの出力時点では決定できない。
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
19 # このスクリプトで xml に上書きするって手もあるけど、微妙じゃない?
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
20 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
21 # xml ファイルは複数指定可能。
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
22 # 実際に使うやつ全て指定する感じでおk
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
23 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
24 # (例)
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
25 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
26 # % cat ../xml_file/universe.xml
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
27 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
28 # <?xml version="1.0"?>
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
29 # <OBJECT-3D>
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
30 # <surface name="Earth" size="5952" prim="Triangle" parent="NULL">
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
31 # (省略)
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
32 # </surface>
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
33 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
34 # <surface name="Moon" size="3312" prim="Triangle" parent="Earth">
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
35 # (省略)
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
36 # </surface>
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
37 # <OBJECT-3D>
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
38 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
39 # % ./create_sglist.pl ../xml_file/universe.xml
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
40 # % cat SGList.h
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
41 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
42 # /* ../xml_file/universe.xml */
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
43 # #define Earth 0
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
44 # #define Moon 1
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
45 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
46 # /* Number of Scene */
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
47 # #define SGLIST_LENGTH 2
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
48 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
49 # /* Scene Table */
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
50 # const char *sglist_table[SGLIST_LENGTH] = {
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
51 # "Earth", "Moon"
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
52 # };
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
53 #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
54 ####################################
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
55
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
56 use strict;
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
57 use XML::LibXML;
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
58
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
59 my $outfile_h = "../SGList.h";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
60 my $outfile_c = "../SGList.cpp";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
61 my $id = 0;
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
62 my @table;
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
63
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
64 ###################
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
65 # cretae SGList.h #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
66 ###################
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
67 open(FH, ">$outfile_h") || die "Error: Can't open file : $outfile_h\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
68
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
69 print FH "#ifndef INCLUDED_SGLIST\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
70 print FH "#define INCLUDED_SGLIST\n\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
71
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
72 foreach (@ARGV) {
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
73 my $parser = XML::LibXML->new();
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
74 my $doc = $parser->parse_file($_);
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
75 my @nodes = $doc->findnodes('//surface');
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
76
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
77 print FH "/* $_ */\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
78
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
79 foreach my $surface (@nodes) {
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
80 my $name = $surface->findvalue('@name');
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
81
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
82 $table[$id] = $name;
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
83
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
84 print FH "#define $name\t $id\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
85 $id++;
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
86 }
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
87
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
88 print FH "\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
89 }
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
90
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
91 print FH "/* Number of Scene */\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
92 print FH "#define SGLIST_LENGTH $id\n\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
93
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
94 print FH "/* Scene Table */\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
95 print FH "extern const char *sglist_table[SGLIST_LENGTH];\n\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
96 print FH "#endif\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
97
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
98 close(FH);
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
99
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
100 #####################
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
101 # cretae SGList.cpp #
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
102 #####################
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
103 open(FH, ">$outfile_c") || die "Error: Can't open file : $outfile_c\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
104
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
105 print FH "#include \"SGList.h\"\n\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
106 print FH "const char *sglist_table[SGLIST_LENGTH] = {\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
107 print FH " \"";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
108 print FH join("\", \"", @table);
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
109 print FH "\"\n};\n";
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
110
15bfacccde99 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
111 close(FH);