<> <> <> <> <<>> DIRECTORY GList, SVAssembly, SVScene, SVSceneTypes, SVSelect; SVSelectImpl: CEDAR PROGRAM IMPORTS GList, SVAssembly, SVScene EXPORTS SVSelect = BEGIN Slice: TYPE = SVSceneTypes.Slice; AssemblyGenerator: TYPE = SVScene.AssemblyGenerator; Scene: TYPE = SVSceneTypes.Scene; <> SliceDescriptor: TYPE = SVSceneTypes.SliceDescriptor; SliceParts: TYPE = SVSceneTypes.SliceParts; SelectionClass: TYPE = SVSelect.SelectionClass; SliceDescriptorGenerator: TYPE = SVSceneTypes.SliceDescriptorGenerator; SliceDescriptorGeneratorObj: TYPE = SVSceneTypes.SliceDescriptorGeneratorObj; <<>> SelectSlice: PUBLIC PROC [sliceD: SliceDescriptor, scene: Scene, selectClass: SelectionClass] = { oldSliceD, union: SliceDescriptor; slice: Slice _ sliceD.slice; IF SVAssembly.EmptyParts[sliceD] THEN RETURN; oldSliceD _ FindSelectedSlice[slice, scene, selectClass]; IF oldSliceD#NIL THEN { union _ SVAssembly.UnionParts[oldSliceD, sliceD]; DeselectSlice[slice, oldSliceD.parts, scene, selectClass]; -- throw away old selection } ELSE union _ sliceD; IF selectClass = normal THEN union _ SVAssembly.AugmentParts[union, selectClass]; AppendSelection[scene, union, selectClass]; ChangeDonkeyTail[union, selectClass]; }; SelectEntireSlice: PUBLIC PROC [slice: Slice, scene: Scene, selectClass: SelectionClass] = { allParts: SliceDescriptor _ SVAssembly.NewParts[slice, NIL, [0,0,0], slice]; SelectSlice[allParts, scene, selectClass]; }; <<>> <> <> <