annotate Renderer/test_render/tools/create_sglist.pl @ 283:55ea4465b1a2

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