###############################################################
# VRMLで磁力線を描画する
# S. Hirota and M. Aizawa
###############################################################

### パラメータ
$fn_line_data = 'Fieldline.dat';  # 入力ファイル名($ARGV[0]があれば$ARGV[0]が使用される)
$fn_vrml = 'fieldline.wrl';	      # 出力ファイル名($ARGV[1]があれば$ARGV[1]が使用される)
$PI = 3.141592653589793;		

&main;

###############################################################
# main
###############################################################
sub main {

	$fn_line_data = $ARGV[0] if($ARGV[0]);
	$fn_vrml = $ARGV[1] if($ARGV[1]);

	open(FH, ">$fn_vrml") || die("Open Error!! $fn_vrml");
	
	### VRMLヘッダ出力
	&put_vrml_header;
	
	### 磁力線出力
	&put_vrml_field_line('1.0 0.0 0.0');

}

###############################################################
# VRMLファイル ヘッダ出力
###############################################################
sub put_vrml_header {

	print FH "#VRML V2.0 utf8\n";
	print FH "#$fn_vrml\n\n";

}

###############################################################
# VRMLファイル 磁力線データ 出力
###############################################################
sub put_vrml_field_line {
	my $color = "color [ $_[0] ]" if($_[0]);

	# 外部ファイルからデータを読み込む
	open IN, "<$fn_line_data" or die("Open Error!! $fn_line_data\n");
	my @lines = <IN>;
	chomp(@lines);
	my $points = join(",\n", @lines);
	
	# 通し番号作成
	my $indexes = '';
	for(my $i = 0; $i < @lines; $i++) { $indexes .= "$i\n"; }
	

	print FH <<HD;		#----- <start of Here Document>
### 磁力線データ
Shape {
	appearance Appearance {
		material Material {
			diffuseColor 1 1 1 
		}
	}
	geometry IndexedLineSet {
		coord Coordinate {
			point [
$points
			]
		}
		coordIndex [
$indexes
			]
		color Color {
$color
		}
		colorIndex [ 0 0 0 ]
		colorPerVertex FALSE
	}
}
HD
						#----- <end of Here Document>
}
