internal static bool INTYPEOF(IVectorOrDirection obj, string typeString) { if (obj is Vector && typeString.ToLowerInvariant().Contains("vector")) { return(true); } if (obj is Direction && typeString.ToLowerInvariant().Contains("direction")) { return(true); } return(false); }
static IVectorOrDirection IfcNormalise(IVectorOrDirection Arg) { // local variables int Ndim; Direction V = new Direction(1.0, 0.0); Vector Vec = new Vector(new Direction(1.0, 0.0), 1.0); double Mag; IVectorOrDirection Result = V; if (!EXISTS(Arg)) { return(null); } else { if (Arg is Vector) { Ndim = Arg.Dim; var vArg = Arg as Vector; V.DirectionRatios = vArg.Orientation.DirectionRatios; Vec.Magnitude = vArg.Magnitude; Vec.Orientation = V; if (vArg.Magnitude == 0.0) { return(null); } else { Vec.Magnitude = 1.0; } } else { var dArg = Arg as Direction; Ndim = dArg.Dim; V.DirectionRatios = dArg.DirectionRatios; } Mag = 0.0; for (var i = 0; i < Ndim; i++) { Mag = Mag + V.DirectionRatios[i] * V.DirectionRatios[i]; } if (Mag > 0.0) { Mag = SQRT(Mag); for (var i = 0; i < Ndim; i++) { V.DirectionRatios[i] = V.DirectionRatios[i] / Mag; } if (Arg is Vector) { Vec.Orientation = V; Result = Vec; } else { Result = V; } } else { return(null); } } return(Result); }