annotate bin/create_sglist.pl @ 1012:bba03a6843ba

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