Zpět na hlavní stránku

Skripty

Následující tabulka obsahuje výběr skriptů použitých v projektu.

Soubor Autor Skript
roundextrusion.wrl Filip
	Script {
		# On initialization, generates a round cross section of `complexity` vertices
		# and radius `radius` and assigns this cross section to Extrusion `ext`.

		field SFNode ext USE Ext
		field SFInt32 complexity IS complexity # number of vertices
		field SFFloat radius IS radius
		directOutput TRUE
		url "javascript:
			function generateCylinderCrossSection(n, r) {
				//console.assert(n >= 1);
				var cs = new MFVec2f();
				var x = 0;
				var y = r;
				var vec0 = new SFVec2f(x, y);
				cs[0] = vec0;
				for (var i = 1; i < n; i++) {
					var angle = i / n * Math.PI * 2;
					var x = r * Math.sin(angle);
					var y = r * Math.cos(angle);
					var vec = new SFVec2f(x, y);
					cs[i] = vec;
				}
				cs[n] = vec0;
				return cs;
			}
			// Generates crossSection
			function initialize() {
				//console.assert(complexity >= 1);
				ext.set_crossSection = generateCylinderCrossSection(complexity, radius);
			}
		"
	}
winding.wrl Filip
DEF	RopeScript Script {
	# This script controls `coil` scale so that its y component runs between
	# `heightMin` and `heightMax` based on rotation `rot` of a CylinderSensor
	# `cylinderSensor`. `cylinderSensor.minAngle` corresponds to `heightMin` and
	# `cylinderSensor.maxAngle` corresponds to `heightMax`.
	# When height surpasses `heightTarget`, `winding_solved` is set to true, indicating
	# a successful solution of the winding puzzle.

	eventIn SFRotation rot # rotation from CylinderSensor
	field SFNode coil USE RopeCoil
	field SFFloat heightMin 0.05
	field SFFloat heightMax 0.3
	field SFFloat heightTarget 0.28 # When height surpasses this value, winding_solved is set to true.
	field SFNode cylinderSensor USE	HingeCS # CylinderSensor
	eventOut SFBool	winding_solved IS winding_solved
	url	"javascript:
		function setCoilHeight(h) {
			var scale = new SFVec3f(1, h, 1);
			coil.scale = scale;
			if (h >= heightTarget) {
				winding_solved = true;
			}
		}
		function initialize() {
			setCoilHeight(heightMin);
		}
		function rot(value) {
			var angle = value[3];
			var angleMin = cylinderSensor.minAngle;
			var angleMax = cylinderSensor.maxAngle;
			var angle01 = (angle - angleMin) / (angleMax - angleMin);
			var height = heightMin + (heightMax - heightMin) * angle01;
			setCoilHeight(height);
		}
	"
	directOutput TRUE
}