DIRECTORY GGBasicTypes, GGInterfaceTypes; GGMultiGravity: CEDAR DEFINITIONS = BEGIN Caret: TYPE = GGInterfaceTypes.Caret; FeatureData: TYPE = GGInterfaceTypes.FeatureData; GGData: TYPE = GGInterfaceTypes.GGData; TriggerBag: TYPE = REF TriggerBagObj; TriggerBagObj: TYPE = GGInterfaceTypes.TriggerBagObj; AlignBag: TYPE = REF AlignBagObj; AlignBagObj: TYPE = GGInterfaceTypes.AlignBagObj; NearFeatures: TYPE = REF NearFeaturesObj; NearFeaturesObj: TYPE = RECORD [ features: SEQUENCE len: NAT OF FeatureData]; NearPoints: TYPE = REF NearPointsObj; NearPointsObj: TYPE = RECORD [ points: SEQUENCE len: NAT OF Point]; NearDistances: TYPE = REF NearDistancesObj; NearDistancesObj: TYPE = RECORD [ distances: SEQUENCE len: NAT OF REAL]; Point: TYPE = GGBasicTypes.Point; Map: PROC [testPoint: Point, criticalR: REAL, alignBag: AlignBag, sceneBag: TriggerBag, ggData: GGData, useAlignBag: BOOL] RETURNS [resultPoint: Point, feature: FeatureData, hitData: REF ANY]; StrictDistance: PROC [testPoint: Point, criticalR: REAL, alignBag: AlignBag, sceneBag: TriggerBag, ggData: GGData] RETURNS [resultPoint: Point, feature: FeatureData, hitData: REF ANY]; PointsPreferred: PROC [testPoint: Point, criticalR: REAL, innerR: REAL, alignBag: AlignBag, sceneBag: TriggerBag, ggData: GGData, useAlignBag: BOOL] RETURNS [resultPoint: Point, feature: FeatureData, hitData: REF ANY]; GoodPoint: TYPE = REF GoodPointObj; GoodPointObj: TYPE = RECORD [ dist: REAL, point: Point, featureData: FeatureData, -- this point hitData: REF ANY -- a description of this point ]; NearPointsAndCurves: TYPE = REF NearPointsAndCurvesObj; NearPointsAndCurvesObj: TYPE = RECORD [ things: SEQUENCE len: NAT OF GoodPoint]; MultiMap: PUBLIC PROC [testPoint: Point, criticalR: REAL, alignBag: AlignBag, sceneBag: TriggerBag, ggData: GGData, useAlignBag: BOOL] RETURNS [nearPointsAndCurves: NearPointsAndCurves, count: NAT]; MultiStrictDistance: PROC [testPoint: Point, criticalR: REAL, alignBag: AlignBag, sceneBag: TriggerBag, ggData: GGData] RETURNS [nearPointsAndCurves: NearPointsAndCurves, count: NAT]; MultiPointsPreferred: PROC [testPoint: Point, criticalR: REAL, innerR: REAL, alignBag: AlignBag, sceneBag: TriggerBag, ggData: GGData, useAlignBag: BOOL] RETURNS [nearPointsAndCurves: NearPointsAndCurves, count: NAT]; NewMultiGravityPool: PROC [] RETURNS [REF]; -- stored in GGData; temporary storage pool used by GGMultiGravityImpl END. €GGMultiGravity.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Bier, April 27, 1987 2:30:33 pm PDT Contents: Performs hit testing similar to GGGravity. Instead of returning a single nearest feature, we return the N (or fewer) nearest features which are within a given tolerance distance from the test point. The algorithm used is described in [Cyan]Documentation>MultiGravity.tioga. Pier, November 21, 1986 10:40:42 am PST Dispatches to StrictDistance or InnerCircle as appropriate. Calls MultiStrictDistance and picks a single "best" feature. Calls MultiPointsPreferred and picks a single "best" feature. The REF ANY is either a GoodCurve or a GoodPoint Dispatches to MultiStrictDistance or MultiInnerCircle depending on the Gargoyle Gravity Type button in the user interface. Returns up to n closest features, their closest points, and their distances from the testpoint. Features outside of the critical radius, criticalR, may or may not be included. The results will be located in features[0] .. features[count-1], points[0] .. points[count-1], and distances[0] .. distances[count-1]. Returns up to n closest features, their closest points, and their distances from the testpoint. Features outside of the critical radius, criticalR, may or may not be included. The results will be located in features[0] .. features[count-1], points[0] .. points[count-1], and distances[0] .. distances[count-1]. If any points are within the critical radius criticalR, then only points (e.g. vertices, control points, and intersection points) will be mentioned. Otherwise, "features" will consist of a mixture of points and curves. Κ+˜šœ™Icodešœ Οmœ1™