<> <> <> <Documentation>MultiGravity.tioga.>> <> <<>> DIRECTORY GGBasicTypes, GGInterfaceTypes; GGMultiGravity: CEDAR DEFINITIONS = BEGIN Caret: TYPE = GGInterfaceTypes.Caret; FeatureData: TYPE = GGInterfaceTypes.FeatureData; GargoyleData: TYPE = GGInterfaceTypes.GargoyleData; TriggerBag: TYPE = REF TriggerBagObj; TriggerBagObj: TYPE = GGInterfaceTypes.TriggerBagObj; ObjectBag: TYPE = REF ObjectBagObj; ObjectBagObj: TYPE = GGInterfaceTypes.ObjectBagObj; 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, currentObjects: ObjectBag, activeObjects: TriggerBag, gargoyleData: GargoyleData, intersections: BOOL] RETURNS [resultPoint: Point, feature: FeatureData]; <> StrictDistance: PROC [testPoint: Point, criticalR: REAL, objectBag: ObjectBag, sceneBag: TriggerBag, gargoyleData: GargoyleData] RETURNS [resultPoint: Point, feature: FeatureData]; <> InnerCircle: PROC [testPoint: Point, criticalR: REAL, innerR: REAL, currentObjects: ObjectBag, activeObjects: TriggerBag, gargoyleData: GargoyleData, intersections: BOOL] RETURNS [resultPoint: Point, feature: FeatureData]; <> GoodCurve: TYPE = REF GoodCurveObj; GoodCurveObj: TYPE = RECORD [ <> dist: REAL, -- the distance from point to testPoint point: Point, -- the best point on this curve featureData: FeatureData, -- this curve hitData: REF ANY -- a description of this segment ]; GoodPointType: TYPE = {outline, slice, anchor, intersectionPoint, midpoint, none}; GoodPoint: TYPE = REF GoodPointObj; GoodPointObj: TYPE = RECORD [ <> dist: REAL, point: Point, featureData: FeatureData, -- this point hitData: REF ANY, -- a description of this point <> type: GoodPointType _ none ]; NearPointsAndCurves: TYPE = REF NearPointsAndCurvesObj; NearPointsAndCurvesObj: TYPE = RECORD [ things: SEQUENCE len: NAT OF REF ANY]; <> MultiMap: PUBLIC PROC [testPoint: Point, criticalR: REAL, currentObjects: ObjectBag, activeObjects: TriggerBag, gargoyleData: GargoyleData, intersections: BOOL] RETURNS [nearPointsAndCurves: NearPointsAndCurves, count: NAT]; <> <<>> MultiStrictDistance: PROC [testPoint: Point, criticalR: REAL, currentObjects: ObjectBag, activeObjects: TriggerBag, gargoyleData: GargoyleData] RETURNS [nearPointsAndCurves: NearPointsAndCurves, count: NAT]; <> MultiInnerCircle: PROC [testPoint: Point, criticalR: REAL, innerR: REAL, currentObjects: ObjectBag, activeObjects: TriggerBag, gargoyleData: GargoyleData, intersections: BOOL] RETURNS [nearPointsAndCurves: NearPointsAndCurves, count: NAT]; <> NewMultiGravityPool: PROC [] RETURNS [REF]; -- stored in GargoyleData; temporary storage pool used by GGMultiGravityImpl END.