IfcNormalise
Definition from ISO/CD 10303-42:1992: This
function returns a vector or direction whose components are normalized
to have a sum of squares of 1.0. The output is of the same type
(Direction or Vector, with the same units) as the input argument. If
the input argument is not defined or of zero length then the output
vector is undefined.
NOTE
Corresponding STEP function: normalise. Please refer
to ISO/IS
10303-42:1994, p.105 for the final definition of the formal
standard.
HISTORY New function in IFC Release 1.5
EXPRESS specification:
|
|
(Arg : IfcVectorOrDirection)
: IfcVectorOrDirection;
LOCAL
Ndim : INTEGER;
V : IfcDirection
:= IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]);
Vec : IfcVector
:= IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (
IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);
Mag : REAL;
Result : IfcVectorOrDirection
:= V;
END_LOCAL;
IF NOT EXISTS (Arg) THEN
RETURN (?);
ELSE
Ndim := Arg.Dim;
IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF(Arg) THEN
BEGIN
V.DirectionRatios := Arg.Orientation.DirectionRatios;
Vec.Magnitude := Arg.Magnitude;
Vec.Orientation := V;
IF Arg.Magnitude = 0.0 THEN
RETURN(?);
ELSE
Vec.Magnitude := 1.0;
END_IF;
END;
ELSE
V.DirectionRatios := Arg.DirectionRatios;
END_IF;
Mag := 0.0;
REPEAT i := 1 TO Ndim;
Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];
END_REPEAT;
IF Mag > 0.0 THEN
Mag := SQRT(Mag);
REPEAT i := 1 TO Ndim;
V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;
END_REPEAT;
IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF(arg) THEN
Vec.Orientation := V;
Result := Vec;
ELSE
Result := V;
END_IF;
ELSE
RETURN(?);
END_IF;
END_IF;
RETURN (Result);
|
|
|