<?php

/**
 * @author Martijn Klijnstra - www.de-icter.nl
 * @copyright 2008
 */
error_reporting(E_ALL);


class 
Huis {
    public 
$breedte;
    public 
$etages;
    public 
$hoogtePerEtage;
    public 
$im;
    public 
$dakHoogte;
    
    public 
$totaleHoogte;
    public 
$hoogteWoonruimte;
    
    protected 
$baksteenHoogte;
    protected 
$baksteenBreedte;
    protected 
$baksteenTussenruimte;
    
    protected 
$raamTussenruimte;
    
    public 
$kleuren = array();

    function 
__construct($breedte$etages$hoogtePerEtage$dakHoogte$baksteenBreedte$baksteenHoogte$baksteenTussenruimte$raamTussenruimte)
    {
        
$this->breedte $this->meters2pixels($breedte);
        
$this->etages $etages;
        
$this->hoogtePerEtage $this->meters2pixels($hoogtePerEtage);
        
$this->dakHoogte $this->meters2pixels($dakHoogte);
        
        
$this->baksteenBreedte $this->meters2pixels($baksteenBreedte);
        
$this->baksteenHoogte $this->meters2pixels($baksteenHoogte);
        
$this->baksteenTussenruimte $this->meters2pixels($baksteenTussenruimte);
        
        
$this->raamTussenruimte $this->meters2pixels($raamTussenruimte);
        
        
// Maten berekenen
        
$this->hoogteWoonruimte = ($this->etages $this->hoogtePerEtage);
        
$this->totaleHoogte $this->hoogteWoonruimte $this->dakHoogte;
        
        
    }
    
    function 
meters2pixels($meters)
    {
        return (
$meters*100);
    }
    
    protected function 
tekenBuitenkant()
    {
        
        
// Teken buitenkant
        
imagefilledpolygon($this->im, array     (
                            
1$this->dakHoogte,
                            (
$this->breedte 1), $this->dakHoogte,
                            (
$this->breedte 1), ($this->totaleHoogte 1),
                            
1, ($this->totaleHoogte 1)
                        ),
            
4,
            
$this->kleuren['spacey']);
        
imagepolygon($this->im, array     (
                            
1$this->dakHoogte,
                            (
$this->breedte 1), $this->dakHoogte,
                            (
$this->breedte 1), ($this->totaleHoogte 1),
                            
1, ($this->totaleHoogte 1)
                        ),
            
4,
            
$this->kleuren['black']);
            
        
// Dak    
        
imagefilledpolygon($this->im, array    (
                            
1$this->dakHoogte,
                            
ceil($this->breedte 2), 1,
                            (
$this->breedte 1), $this->dakHoogte
                        
),
            
3,
            
$this->kleuren['red']);
        
imagepolygon($this->im, array    (
                            
1$this->dakHoogte,
                            
ceil($this->breedte 2), 1,
                            (
$this->breedte 1), $this->dakHoogte
                        
),
            
3,
            
$this->kleuren['black']);
         
    }
    
    protected function 
tekenVerdiepingen()
    {
        for(
$i 1$i $this->etages$i++)
        {
            
imageline($this->im0, (($i $this->hoogtePerEtage) + $this->dakHoogte)-1$this->breedte, (($i $this->hoogtePerEtage) + $this->dakHoogte) -1$this->kleuren['black']);
            
imageline($this->im0, (($i $this->hoogtePerEtage) + $this->dakHoogte), $this->breedte, (($i $this->hoogtePerEtage) + $this->dakHoogte), $this->kleuren['brickred']);
            
imageline($this->im0, (($i $this->hoogtePerEtage) + $this->dakHoogte)+1$this->breedte, (($i $this->hoogtePerEtage) + $this->dakHoogte) + 1$this->kleuren['brickred']);
        }
    }
    
    protected function 
tekenRamen()
    {
        
$o_size getimagesize("resources/window.jpg");
        
        
$n_size[1] = $this->hoogtePerEtage 0.68// Hoogte
        
$n_size[0] = $n_size[1] * 0.88// breedte
        
        // Bereken aantal ramen
        
$fRuimtePerRaamX     $this->raamTussenruimte $n_size['0'];
        
$fAantalRamenX         $this->breedte $fRuimtePerRaamX;
        
        for(
$i 0$i $this->etages$i++)
        {
            
$y $this->dakHoogte + ($i $this->hoogtePerEtage) + ($this->hoogtePerEtage 0.08);
            for(
$j 0$j < ($fAantalRamenX-1); $j++)
            {
                
$x = ($j $fRuimtePerRaamX) + ($this->raamTussenruimte 2);
                
$this->tekenRaam($x$y$n_size[1], $n_size[0], $o_size[0], $o_size[1]);
            }
            
        }
    }
    
    protected function 
tekenRaam($x$y$n_w$n_h$o_w$o_h)
    {
        
$raam imagecreatefromjpeg("resources/window.jpg");
        
        
imagecopyresized($this->im$raam$x$y 200,0$n_w$n_h$o_w$o_h);  
    }
    
    protected function 
tekenBakstenen()
    {
        
// Bereken aantal bakstenen
        
$fRuimtePerBaksteenX     $this->baksteenBreedte $this->baksteenTussenruimte;
        
$fRuimtePerBaksteenY     $this->baksteenHoogte $this->baksteenTussenruimte;
        
$fAantalBakstenenX         $this->breedte $fRuimtePerBaksteenX;
        
$fAantalBakstenenY         $this->hoogteWoonruimte $fRuimtePerBaksteenY;
        
        for(
$i 0$i $fAantalBakstenenY$i++)
        {
            for(
$j = -1$j $fAantalBakstenenX$j++)
            {
                if(
$i%== 0)
                    
$this->tekenBaksteen((($j*$fRuimtePerBaksteenX) + 0.5 $this->baksteenBreedte),($this->dakHoogte + ($i*$fRuimtePerBaksteenY)), $this->kleuren['brickred']);
                else
                    
$this->tekenBaksteen(($j*$fRuimtePerBaksteenX),($this->dakHoogte + ($i*$fRuimtePerBaksteenY)), $this->kleuren['brickred']);
            }
        }
    }
    
    protected function 
tekenBaksteen($x$y$kleur)
    {
        
imagefilledpolygon($this->im, array(
                                            
$x+1$y,
                                            (
$x+$this->baksteenBreedte), $y,
                                            (
$x+$this->baksteenBreedte), ($y $this->baksteenHoogte),
                                            
$x+1, ($y $this->baksteenHoogte)),
                                        
4,
                                        
$kleur
                        
);
        
imagepolygon($this->im, array(
                                            
$x+1$y,
                                            (
$x+$this->baksteenBreedte), $y,
                                            (
$x+$this->baksteenBreedte), ($y $this->baksteenHoogte),
                                            
$x+1, ($y $this->baksteenHoogte)),
                                        
4
                                        
$this->kleuren['black']
                        );
    }
    
    public function 
tekenHuis()
    {
        
$this->im imagecreate($this->breedte$this->totaleHoogte);
        
        
$this->kleuren['white']     = imagecolorallocate($this->im255255255);
        
$this->kleuren['black']     = imagecolorallocate($this->im000);
        
$this->kleuren['red']         = imagecolorallocate($this->im15000);
        
$this->kleuren['skyblue']     = imagecolorallocate($this->im135206235);
        
$this->kleuren['brickred']     = imagecolorallocate($this->im1783434);
        
$this->kleuren['dimgrey']     = imagecolorallocate($this->im105105105);
        
$this->kleuren['spacey']     = imagecolorallocate($this->im105105105);
        
        
imagefilledrectangle($this->im0,0$this->breedte$this->totaleHoogte$this->kleuren['skyblue']);
        
        
$this->tekenBuitenkant();
        
$this->tekenBakstenen();
        
$this->tekenVerdiepingen();
        
$this->tekenRamen();
        
header("Content-Type: image/png");
        
imagepng($this->im);
    }
// class Huis

$huis = new Huis(    $_GET['breedte'], 
                    
$_GET['verdiepingen'], 
                    
$_GET['hoogtePVerdieping'], 
                    
$_GET['dakhoogte'], 
                    
$_GET['baksteen_breedte'], 
                    
$_GET['baksteen_hoogte'], 
                    
$_GET['baksteen_tussenruimte'],
                    
$_GET['raamTussenruimte']
                );
$huis->tekenHuis();

?>