/*
 * pipes.def.ray
 *
 * Various defines to make up pipe sections
 *
 * Stuart Warmink, February 1993
 * sw@groucho.att.com
 *
 * Feel free to use and/or distribute for non-commercial purposes as long
 * as this header remains with the file.
 *
 */

#define	PL	36	/* pipe length */
#define	FL	 7	/* flange length (PL + FL = UL = 5)*/

#define	RO	3	/* outside radius of pipe */
#define	RI	2.5	/* inside radius of pipe */

#define	TF	1.2	/* flange thickness */
#define FRO	(RO+TF)	/* flange outside radius */
#define	RF	6	/* flange joiner radius */
#define	BL	2.5	/* length of straight bits on bend */

#define	TR	0.9*FL	/* radius of sphere at Tee */

#define	RS	1	/* radius of valve screw */
#define RH	8	/* major radius of valve handle */
#define RT	1	/* minor radius of valve handle */
#define	SW	0.8	/* half-width of valve spokes */
#define ST	0.3	/* half-thickness of valve spokes */
#define SH	2.5	/* radius of spoke hub */
#define VH	1.6*FL	/* height of valve wheel above center of pipe */

#define TEXTURE	texture bump 0.2 scale 0.2 0.2 0.2

surface pipe_grey
	ambient 0.4 0.4 0.4
	diffuse 0.4 0.4 0.4
#ifdef SHINY
	reflect 0.3
	specular 1 1 1
	specpow	100
#endif

surface fitting_grey
	ambient 0.3 0.3 0.3
	diffuse 0.3 0.3 0.3
#ifdef SHINY
	reflect 0.1
	specular 1 1 1
	specpow	60
#endif

surface	valve_red
	ambient	0.4 0 0
	diffuse	0.4 0 0
	reflect	0.2
	specular 1 1 1
	specpow	60

surface	screw_grey
	ambient	0.2 0.2 0.2
	diffuse	0.2 0.2 0.2

name	Unit_cylinder
list
	disc		1	0 0 0	-1 0 0
	cylinder	1	0 0 0	1 0 0
	disc		1	1 0 0	1 0 0
end

name	Pipe
	object	pipe_grey	Unit_cylinder
	scale		(PL) (RO) (RO)
	translate	(FL) 0 0

name	Pipe_joint
	object	pipe_grey	Unit_cylinder
	scale		(2*(FL)) (RO) (RO)
	translate	(-FL) 0 0

name	Flange_plate
	object	Unit_cylinder
		scale	(TF) (RF) (RF)

name	Flange
difference
	union
		object	Flange_plate
		object	Unit_cylinder
			scale	(FL) (FRO) (FRO)
#ifdef BUMP
			TEXTURE
#endif
	end
	object	Unit_cylinder
		scale		(FL) (RI) (RI)
		translate	(-TF) 0 0
end

name	Flange_closed
list
	object	Flange
	object	Flange_plate
		rotate 0 0 1	180
end

name	Tee
union
	list
		object	Unit_cylinder
			scale		(FL) (FRO) (FRO)
		object	Unit_cylinder
			scale		(FL) (FRO) (FRO)
			rotate		0 0 1	90
		object	Unit_cylinder
			scale		(FL) (FRO) (FRO)
			rotate		0 0 1	180
	end
	sphere	(TR)	0 0 0
end
#ifdef BUMP
	TEXTURE
#endif

name	Valve_handle
union
	object	screw_grey	Unit_cylinder
		scale	((VH)-(FL)) (RS) (RS)
		rotate	0 1 0	90
	union
		list
			box	valve_red
				(RH) (SW) (ST)	(-RH) (-SW) (-ST)
				rotate	0 0 1	45
			box	valve_red
				(RH) (SW) (ST)	(-RH) (-SW) (-ST)
				rotate	0 0 1	135
		end
		list
			torus	valve_red
				(RH) (RT)	0 0 0	0 0 1
			sphere	valve_red	(SH)	0 0 0
		end
	end
end

name	Valve
	list
		object	Tee
		object	Valve_handle
			rotate	1 0 0	-90
			translate	0 (VH) 0
	end

name	Bend
union
	intersect
		torus	(FL) (RO)	(FL) (FL) 0	0 0 1
		box	(FL) (FL) (FL)	(-FL) (-FL) (-FL)
	end
	list
		object	Unit_cylinder
			scale	(BL) (FRO) (FRO)
			translate	((FL)-(BL)) 0 0
		object	Unit_cylinder
			scale	(BL) (FRO) (FRO)
			translate	((FL)-(BL)) 0 0
			rotate	0 0 1	90
	end
end
#ifdef BUMP
	TEXTURE
#endif
