##################################################################
# Modul für Zeichenroutinen
#
# Letzte Aenderung: 06.01.2012
##################################################################
use POSIX qw /floor ceil/;
use Math::Trig;
use strict;
use warnings;

### Funktionen für die Bildbearbeitung

sub bildhoehe {
	my ($bilddatei) = @_;
	$bilddatei =~ s/eps/png/g;
	my ( $dx, $dy ) = imgsize($bilddatei);
	return $dy;
}

sub bildbreite {
	my ($bilddatei) = @_;
	$bilddatei =~ s/eps/png/g;
	my ( $dx, $dy ) = imgsize($bilddatei);
	return $dx;
}

sub bildhoeheberechnet {
	my ( $bilddatei, $breite ) = @_;
	return nachkommastellen(
		bildhoehe($bilddatei) * $breite / bildbreite($bilddatei), 4 );
}

# Ein Bild einfügen

my $graphicx = 0;

sub bild {
	my ( $layer, $x1, $y1, $z1, $breite, $winkel, $bild ) = @_;

	my $pstricksersatz3d = get3dpstricks();
	my $pstricksersatz   = getpstricks();

	my ( $x, $y, $x2, $y2, $x3, $x4, $y3, $y4 );

	setpstricks(0);
	set3dpstricks(0);

	if ( $z1 eq "" ) {
		$x = $x1;
		$y = $y1;
	}
	else {
		if (   ( istzahl($x1) == 1 )
			&& ( istzahl($y1) == 1 )
			&& ( istzahl($z1) == 1 ) )
		{
			$x = x3d( $x1, $y1, $z1 );
			$y = y3d( $x1, $y1, $z1 );
		}

	}

	if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) ) {

		if ( $winkel == 0 ) {
			minmax(
				$x, $y,
				$x + $breite,
				$y + bildhoeheberechnet( $bild, $breite )
			);
		}
		else {
			$x2 =
			  nachkommastellen( $x + cos( degtorad($winkel) ) * $breite, 4 );
			$y2 =
			  nachkommastellen( $y + sin( degtorad($winkel) ) * $breite, 4 );
			$x3 = nachkommastellen(
				$x2 -
				  sin( degtorad($winkel) ) *
				  bildhoeheberechnet( $bild, $breite ),
				4
			);
			$y3 = nachkommastellen(
				$y2 +
				  cos( degtorad($winkel) ) *
				  bildhoeheberechnet( $bild, $breite ),
				4
			);
			$x4 = nachkommastellen(
				$x -
				  sin( degtorad($winkel) ) *
				  bildhoeheberechnet( $bild, $breite ),
				4
			);
			$y4 = nachkommastellen(
				$y +
				  cos( degtorad($winkel) ) *
				  bildhoeheberechnet( $bild, $breite ),
				4
			);
			minmax( $x,  $y,  $x,  $y );
			minmax( $x2, $y2, $x2, $y2 );
			minmax( $x3, $y3, $x3, $y3 );
			minmax( $x4, $y4, $x4, $y4 );
		}
	}

	if ( $graphicx == 0 ) {
		usepackage( "", "graphicx" );
		$graphicx = 1;
	}
	schreibeinarray(
		$layer,
		sprintf(
"\\psrotate(%s,%s){%g}{\\rput[lb](%s,%s){\\includegraphics[width=%gcm]{%s}}}%%",
			$x, $y, $winkel, $x, $y, $breite, $bild
		)
	);
	setpstricks(0);
	set3dpstricks($pstricksersatz3d);
	setpstricks($pstricksersatz);

}

1;

