DIRECTORY Feedback, Imager, Rope, SVSceneTypes, ViewerClasses; SVUtility: CEDAR DEFINITIONS = BEGIN FeatureData: TYPE = SVSceneTypes.FeatureData; MasterObject: TYPE = SVSceneTypes.MasterObject; MasterObjectList: TYPE = SVSceneTypes.MasterObjectList; Slice: TYPE = SVSceneTypes.Slice; SliceList: TYPE = SVSceneTypes.SliceList; SliceDescriptor: TYPE = SVSceneTypes.SliceDescriptor; Viewer: TYPE = ViewerClasses.Viewer; plusInfinity: REAL = 1E16; minusInfinity: REAL = -1E16; epsilonInPoints: REAL = 7.2E-4; epsilonInInches: REAL = 1.0E-5; QuadraticFormula: PROC [a, b, c: REAL] RETURNS [roots: ARRAY [1..2] OF REAL, rootCount: NAT]; AppendToMasterObjects: PROC [mo: MasterObject, list: MasterObjectList] RETURNS [MasterObjectList]; AppendToAssemblyList: PROC [assembly: Slice, list: SliceList] RETURNS [SliceList]; StartSliceList: PROC [] RETURNS [entityList, ptr: LIST OF Slice]; AddSlice: PROC [slice: Slice, entityList, ptr: LIST OF Slice] RETURNS [newList, newPtr: LIST OF Slice]; StartList: PROC [] RETURNS [entityList, ptr: LIST OF REF ANY]; AddEntity: PROC [entity: REF ANY, entityList, ptr: LIST OF REF ANY] RETURNS [newList, newPtr: LIST OF REF ANY]; StartSliceDescriptorList: PROC [] RETURNS [entityList, ptr: LIST OF SliceDescriptor]; AddSliceDescriptor: PROC [entity: SliceDescriptor, entityList, ptr: LIST OF SliceDescriptor] RETURNS [newList, newPtr: LIST OF SliceDescriptor]; AppendSliceDescriptorList: PROC [list1, list2: LIST OF SliceDescriptor] RETURNS [result: LIST OF SliceDescriptor]; DeleteSliceDescriptorFromList: PROC [sliceD: SliceDescriptor, sliceDList: LIST OF SliceDescriptor] RETURNS [smallerList: LIST OF SliceDescriptor]; CopyFeatureList: PROC [features: LIST OF FeatureData] RETURNS [copyList: LIST OF FeatureData]; FeatureDataNconc: PROC [l1, l2: LIST OF FeatureData] RETURNS [bigList: LIST OF FeatureData]; GetInterpressFileName: PROC [shortName, workingDir: Rope.ROPE, feedback: Feedback.FeedbackData] RETURNS [fullName: Rope.ROPE _ NIL, success: BOOL _ TRUE]; GetScriptFileName: PROC [scriptName: Rope.ROPE, currentWDir: Rope.ROPE, feedback: Feedback.FeedbackData] RETURNS [fullName: Rope.ROPE _ NIL, success: BOOL _ TRUE]; GetGenericFileName: PROC [shortName, workingDir, defaultExt: Rope.ROPE, illegalExts: LIST OF Rope.ROPE, feedback: Feedback.FeedbackData, emergency: BOOL _ FALSE] RETURNS [fullName: Rope.ROPE _ NIL, success: BOOL _ TRUE, versionSpecified: BOOL _ FALSE]; GetSpecialColor: PROC RETURNS [color: Imager.Color]; END. ΰSVUtility.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Last edited by Bier on February 5, 1987 Contents: Some helpful Solidviews routines that don't fit anywhere in particular. Operations on REAL For algorithms that need a variable initialized to an impossibly large number. Unfortunately, Real.PlusInfinity can't be compared with anything. These sizes were chosen so that they can be scaled by 1000 and squared once without causing overflow. (Many geometric algorithms work with distance squared to keep from doing square roots) Gargoyle guarantees accuracy to within 0.001 inches, or 0.072 screen dots. Allowing two orders of magnitude leeway gives 10-5 inches or 7.2 * 10-4 screen dots. Algebraic Math Operations on LIST OF MasterObject Operations on LIST OF Slice Operations on LIST OF REF ANY (should use List.mesa) Operations on LIST OF SliceDescriptor Operations on LIST OF FeatureData Filename Operations (factor out as GGFiles in GGCore) Colors Κή˜J˜Icodešœ™Kšœ Οmœ1™Kš  œžœ žœžœžœžœžœžœžœžœžœžœžœ˜oK˜Kšœžœžœ™%Kš  œžœžœžœžœ˜UKš œžœ,žœžœžœžœžœ˜Kš œžœžœžœžœ žœžœ˜rKš œžœ'žœžœžœžœžœ˜’K˜Kšœžœžœ ™!Kš œžœ žœžœžœ žœžœ˜^Kš œžœ žœžœžœ žœžœ˜\K˜K˜K™5Kš œžœžœ#žœžœžœ žœžœ˜šKš œžœžœžœ#žœžœžœ žœžœ˜£Kš œžœ*žœžœžœžœ.žœžœžœžœžœ žœžœžœžœ˜όK™K™K™Lš œžœžœ˜4K˜Kšžœ˜K˜—…— ΄r