<> <> <> <> DIRECTORY SV3d, SVModelTypes, SVSceneTypes; SVTransforms: CEDAR DEFINITIONS = BEGIN Camera: TYPE = SVModelTypes.Camera; CoordSystem: TYPE = SVModelTypes.CoordSystem; Matrix4by4: TYPE = SV3d.Matrix4by4; Point3d: TYPE = SV3d.Point3d; Scene: TYPE = SVSceneTypes.Scene; Slice: TYPE = SVSceneTypes.Slice; Vector3d: TYPE = SV3d.Vector3d; AbsTransfScreen: PROC [c: CoordSystem, n: Matrix4by4]; IncTransfMatrix: PUBLIC PROC [c: CoordSystem, dWorld: Matrix4by4, m: Matrix4by4]; AbsTransfMatrix: PROC [c: CoordSystem, dWorld: Matrix4by4, n: Matrix4by4]; <> Translate: PROC [c: Slice, scene: Scene, vec: Vector3d, d: CoordSystem _ NIL, dFixed: BOOL _ FALSE]; Rotate: PROC [c: Slice, scene: Scene, axis: [1..3], degrees: REAL, d: CoordSystem _ NIL, dFixed: BOOL _ FALSE]; PlaneOriginRotate: PROC [c: CoordSystem, d: CoordSystem, degrees: REAL, plane: NAT]; <> <> <<>> Align: PROC [c: Slice, scene: Scene, d: CoordSystem]; Abut: PROC [c: Slice, scene: Scene, d: CoordSystem]; AbutAxis: PROC [c: Slice, scene: Scene, axis: [1..3], d: CoordSystem]; AbsTranslateOnly: PROC [c: Slice, scene: Scene, d: CoordSystem, vD: Point3d]; <> NormalizeRot: PROC [c: Slice, scene: Scene, d: CoordSystem]; <> Normalize: PROC [c: Slice, scene: Scene, d: CoordSystem]; <> <> <<>> <> NormalizeRotTug: PROC [c: Slice, scene: Scene, tugBoat: Slice, d: CoordSystem]; NormalizeTug: PROC [c: Slice, scene: Scene, tugBoat: Slice, d: CoordSystem]; AlignTug: PROC [c: Slice, scene: Scene, tugBoat: Slice, d: CoordSystem]; AbutTug: PROC [c: Slice, scene: Scene, tugBoat: Slice, d: CoordSystem]; AbutTugAxis: PROC [c: Slice, scene: Scene, axis: [1..3], tugBoat: Slice, d: CoordSystem]; <> DirtyAssembly: PROC [a: Slice]; <> TidyUpCoordSysTree: PROC [root: CoordSystem]; <> <> <> <> <> <<>> <> <<>> <> <<1) (ScalePrimitives) Scale each primitive in place, evenly or differentially.>> <<2) (ScaleEven) If sx = sy = sz. Scale primitives in place and then translate all intermediate assemblies so the cluster assembly scales evenly as a unit>> <<3) (ScaleNoShear) IF sx # sy or sy # sz. Scale the primitives evenly so that their dimension in the direction of scaling increases or decreases to the same quantity it would have reached by method 3. This preserves shape of primitives. Global shape is not preserved (but almost).>> <<4) (ScaleEvenChildren) Perform a ScaleEven on each of the children of the cluster assembly but leave their relative translations fixed. This is equivalent to performing a ScaleEven (child, child's cs, scalar) on each child individually.>> <<5) (ScaleDistancesChildren) Doesn't change the size or shape of any of the children of assembly. Simply translates all of the children as they would be translated by a Scale even of assembly. >> <> ScalePrimitives: PROC [a: Slice, sx, sy, sz: REAL]; ScaleEven: PROC [a: Slice, scene: Scene, scalar: REAL, d: CoordSystem _ NIL]; ScaleEvenChildren: PROC [a: Slice, scene: Scene, scalar: REAL, d: CoordSystem _ NIL]; AssemblyHasNoChildren: ERROR; ScaleDistancesChildren: PROC [c: Slice, scene: Scene, sx, sy, sz: REAL, d: CoordSystem _ NIL]; <> Scale: PROC [c: Slice, scene: Scene, sx, sy, sz: REAL, d: CoordSystem _ NIL]; END.