bool process_colour(Ifc2x3::IfcColourOrFactor colour_or_factor, std::tr1::array<double, 3>& rgb) {
	if (colour_or_factor == 0) {
		return false;
	} else if (colour_or_factor->is(Ifc2x3::Type::IfcColourRgb)) {
		return process_colour(static_cast<Ifc2x3::IfcColourRgb*>(colour_or_factor), rgb);
	} else if (colour_or_factor->is(Ifc2x3::Type::IfcNormalisedRatioMeasure)) {
		return process_colour(static_cast<IfcUtil::IfcArgumentSelect*>(colour_or_factor), rgb);
	} else {
		return false;
	}
}
bool process_colour(IfcSchema::IfcColourOrFactor* colour_or_factor, double* rgb) {
	if (colour_or_factor == 0) {
		return false;
	} else if (colour_or_factor->is(IfcSchema::Type::IfcColourRgb)) {
		return process_colour(static_cast<IfcSchema::IfcColourRgb*>(colour_or_factor), rgb);
	} else if (colour_or_factor->is(IfcSchema::Type::IfcNormalisedRatioMeasure)) {
		return process_colour(static_cast<IfcSchema::IfcNormalisedRatioMeasure*>(colour_or_factor), rgb);
	} else {
		return false;
	}
}