/*
Trappen script
Sander Mulders
(c)2006
XXL-Workshop

gebaseerd op het script van Mark Wieringa.

Start met Stairs();
*/


global proc Stairs() {

	if ( `window -exists stairsUI` ) {
    deleteUI stairsUI; // window verwijderen als deze al bestaat
	}

	window -t "Stairs creator" -widthHeight 400 300 stairsUI;

	columnLayout -rowSpacing 6 -columnWidth 400;
	
	rowLayout -numberOfColumns 1;
	separator -w 400;
	setParent ..;
	
	rowLayout -numberOfColumns 1;
	text -l "Global Dimensions";
	setParent ..;

	rowLayout -numberOfColumns 1;
	floatSliderGrp -l "Height" -field true -minValue 0.1 -fieldMinValue 0.1 -value 2.8 -cc "calculateAngle()" hoogte;
	setParent ..;
	
	rowLayout -numberOfColumns 1;
	floatSliderGrp -l "Width" -field true -minValue 0.8 -fieldMinValue -0 -value 1.2 breedte;
	setParent ..;

		rowLayout -numberOfColumns 1;
	floatSliderGrp -l "Maximale optrede" -field true -pre 2 -minValue 0.01 -maxValue 1.0 -fieldMinValue 0.01 -value 0.18 -cc "calculateAngle()" maxOptrede;
	setParent ..;
	
	rowLayout -numberOfColumns 1;
	floatSliderGrp -l "Aantrede" -field true -pre 2 -minValue 0.01 -maxValue 1.0 -fieldMinValue -0 -value 0.25 -cc "calculateAngle()" aantrede;
	setParent ..;


	
	rowLayout -numberOfColumns 6 -columnWidth6 70 70 70 70 70 70;
		text -label "Angle: " -align "right";
		floatField -pre 1 -ed false stairsAngle;
		text -label "Optrede: " -align "right";
		floatField -pre 3 -ed false optrede;
		text -label "Aantal: " -align "right";
		intField  -ed false aantal;
		setParent ..;

	rowLayout -numberOfColumns 1;
		button -label "reCalculate" -w 200 -command "calculateAngle()";
	setParent ..;

	
	rowLayout -numberOfColumns 1 -columnAlign1 "center";
		button -label "Create" -w 400 -align "center" -command "createStairs()";
		setParent ..; 
		

showWindow stairsUI;
	
}


global proc calculateAngle() {
	float $aantrede = `floatSliderGrp -q -value aantrede`; // Aantrede
	float $maxOptrede = `floatSliderGrp -q -value maxOptrede`; // Maximale Optrede
	float $hoogtetrap = `floatSliderGrp -q -value hoogte`; // hoogte van de trap in meters

	int $temp1 = $hoogtetrap/$maxOptrede; // aantal treden INT
	float $temp2 = $hoogtetrap/$maxOptrede; // aantal treden FLOAT
	
	int $aantalTreden;
	
	if (($temp2 - $temp1) == 0) {
		$aantalTreden = $temp1;
	} else {
		$aantalTreden = $temp2+1;
	}
	
	float $optrede = ($hoogtetrap/$aantalTreden);	

	$angle = atand ($maxOptrede/$aantrede);
	
	floatField  -edit -v $angle stairsAngle;
	floatField  -edit -v $optrede optrede;
	intField  -edit -v $aantalTreden aantal;

}


// procedure voor het maken van een steektrap
global proc createStairs(){
	
	float $hoogtetrap = `floatSliderGrp -q -value hoogte`; // hoogte van de trap in meters
	float $breedte = `floatSliderGrp -q -value breedte`; // breedte trap in meters
	float $aantrede = `floatSliderGrp -q -value aantrede`; // Aantrede
	float $maxOptrede = `floatSliderGrp -q -value maxOptrede`; // Maximale Optrede

	// aantal treden berekenen en de bijbehorde optrede
	int $temp1 = $hoogtetrap/$maxOptrede; // aantal treden INT
	float $temp2 = $hoogtetrap/$maxOptrede; // aantal treden FLOAT
	
	int $aantalTreden;
	
	if (($temp2 - $temp1) == 0) {
		$aantalTreden = $temp1;
	} else {
		$aantalTreden = $temp2+1;
	}
	
	float $optrede = ($hoogtetrap/$aantalTreden);
	
	//trap aanmaken
		
	$traplijn1 = `curve -d 1 -p 0 0 0` ;// start van de curve voor het onderste deel
	
	// tekenen van de outline van het onderste deel van de trap
	for ( $i = 1 ; $i <= $aantalTreden ; $i++){
			curve -a -p ($aantrede*($i-1)) ($optrede*$i) 0 $traplijn1;
			curve -a -p ($aantrede*$i) ($optrede*$i) 0 $traplijn1;
	}	
	// aftekenen van de curve
	curve -a -p (($aantrede * $aantalTreden)) ($optrede * ($aantalTreden-1)) 0 $traplijn1;
	curve -a -p $aantrede 0 0 $traplijn1;
	closeCurve -ch 0 -ps 1 -rpo 1 $traplijn1;
	
	//tesselation settings
	nurbsToPolygonsPref -f 0 -pt 1 -pc 1;
	
	// creeren van de trap door middel van een planar
	string $naam[];
	$naam = `planarSrf  -ch 0 -d 1 -po 1 -n ("Trap_" + ($hoogtetrap*1000) + "x" + ($breedte *1000)  + "_nr") $traplijn1`;
	$trap1 = $naam[0];
	delete $traplijn1;
	select $trap1;
	
	// extruderen van de planar
	polyExtrudeFacet -ch 0 -ltz $breedte;
	select -cl;
	

}

