static void TryToIncreaseRank(LgEdgeInfo edgeInfo, double edgeRank) { if (edgeInfo.Rank < edgeRank) { edgeInfo.Rank = edgeRank; } }
void TryToDecreaseZoomLevel(LgEdgeInfo edgeInfo) { if (edgeInfo.ZoomLevel > zoomLevel) { edgeInfo.ZoomLevel = zoomLevel; } }
internal Rail(ICurve curveSegment, LgEdgeInfo topRankedEdgeInfoOfTheRail, int zoomLevel) #if DEBUG : this() #endif { TopRankedEdgeInfoOfTheRail = topRankedEdgeInfoOfTheRail; this.ZoomLevel = zoomLevel; Geometry = curveSegment; }
public void UpdateTopEdgeInfo(LgEdgeInfo ei) { if (TopRankedEdgeInfoOfTheRail == null || TopRankedEdgeInfoOfTheRail.Rank < ei.Rank) { TopRankedEdgeInfoOfTheRail = ei; } MinPassingEdgeZoomLevel = 1 + Math.Min(MinPassingEdgeZoomLevel, ei.ZoomLevel); }
internal Rail(Arrowhead arrowhead, Point curveAttachmentPoint, LgEdgeInfo topRankedEdgeInfoOfTheRail, int zoomLevel) #if DEBUG : this() #endif { TopRankedEdgeInfoOfTheRail = topRankedEdgeInfoOfTheRail; Geometry = arrowhead.Clone(); CurveAttachmentPoint = curveAttachmentPoint; ZoomLevel = zoomLevel; }
public void AssembleEdgeAtLevel(LgEdgeInfo lgEi, int iLevel, Set <Rail> rails) { var edge = lgEi.Edge; var level = Levels[iLevel]; level._railsOfEdges[edge] = rails; foreach (Rail rail in rails) { level.AddRail(rail); rail.UpdateTopEdgeInfo(lgEi); } }
internal void RegisterRailsOfEdge(LgEdgeInfo edgeInfo) { var curve = edgeInfo.Edge.Curve as Curve; if (curve != null) { foreach (var seg in curve.Segments) { RegisterElementaryRail(edgeInfo, seg); } } else { RegisterElementaryRail(edgeInfo, edgeInfo.Edge.Curve); } RegisterRailsForArrowheads(edgeInfo); }
void RegisterElementaryRail(LgEdgeInfo edgeInfo, ICurve seg) { Rail rail; var tuple = new Tuple <Point, Point>(seg.Start, seg.End); //was the seg registered before? if (_railDictionary.TryGetValue(tuple, out rail)) { if (rail.TopRankedEdgeInfoOfTheRail.Rank < edgeInfo.Rank) //newcoming edgeInfo is more important { rail.TopRankedEdgeInfoOfTheRail = edgeInfo; } } else { _railDictionary[tuple] = new Rail(seg, edgeInfo, ZoomLevel); } }
void RegisterRailsForArrowheads(LgEdgeInfo edgeInfo) { var edgeGeom = edgeInfo.Edge.EdgeGeometry; if (edgeGeom.SourceArrowhead != null) { var tuple = new Tuple <Point, Point>(edgeGeom.SourceArrowhead.TipPosition, edgeGeom.Curve.Start); Rail rail; if (_railDictionary.TryGetValue(tuple, out rail)) { if (rail.TopRankedEdgeInfoOfTheRail.Rank < edgeInfo.Rank) //the newcoming edgeInfo is more important { rail.TopRankedEdgeInfoOfTheRail = edgeInfo; } } else { _railDictionary[tuple] = new Rail(edgeGeom.SourceArrowhead, edgeGeom.Curve.Start, edgeInfo, ZoomLevel); } } if (edgeGeom.TargetArrowhead != null) { var tuple = new Tuple <Point, Point>(edgeGeom.TargetArrowhead.TipPosition, edgeGeom.Curve.End); Rail rail; if (_railDictionary.TryGetValue(tuple, out rail)) { if (rail.TopRankedEdgeInfoOfTheRail.Rank < edgeInfo.Rank) //the newcoming edgeInfo is more important { _railDictionary[tuple] = new Rail(edgeGeom.TargetArrowhead, edgeGeom.Curve.End, edgeInfo, ZoomLevel); } } else { _railDictionary[tuple] = new Rail(edgeGeom.TargetArrowhead, edgeGeom.Curve.End, edgeInfo, ZoomLevel); } } }
static bool AddLevel(LgData lgData, IZoomLevelCalculator nodeZoomLevelCalculator, int nodeCountOnLevel, LgEdgeInfo[] edgeInfos) { var zoomLevel = (int) nodeZoomLevelCalculator.SortedLgNodeInfos[nodeCountOnLevel - 1].ZoomLevel; var edgeInfosOfLevel = edgeInfos.TakeWhile(ei => ei.ZoomLevel <= zoomLevel).ToList(); lgData.AddLevel(); return edgeInfosOfLevel.Count() == lgData.GeometryEdgesToLgEdgeInfos.Count; }
static void TryToIncreaseRank(LgEdgeInfo edgeInfo, double edgeRank) { if (edgeInfo.Rank < edgeRank) edgeInfo.Rank = edgeRank; }
void WriteLgEdgeInfo(Edge edge, LgEdgeInfo ei) { WriteStartElement(GeometryToken.LgEdgeInfo); WriteAttribute(GeometryToken.EdgeId, edgeIds[edge]); WriteAttribute(GeometryToken.Rank, ei.Rank); WriteAttribute(GeometryToken.Zoomlevel, ei.ZoomLevel); WriteEndElement(); }
void UpdateToRankedEdgeInfoForRail(string railId, LgEdgeInfo edgeInfo) { LgEdgeInfo topRankeEdgeInfo; if (railIdsToTopRankedEdgeInfo.TryGetValue(railId, out topRankeEdgeInfo)) { if (topRankeEdgeInfo.Rank < edgeInfo.Rank) railIdsToTopRankedEdgeInfo[railId] = edgeInfo; } else railIdsToTopRankedEdgeInfo[railId] = edgeInfo; }
Rail ContinueReadingRail(LgEdgeInfo topRankedEdgoInfo, int zoomLevel, LgLevel level) { XmlRead(); string pointString; if (TokenIs(GeometryToken.Arrowhead)) { Point arrowheadPosition = TryGetPointAttribute(GeometryToken.ArrowheadPosition); Point attachmentPoint = TryGetPointAttribute(GeometryToken.CurveAttachmentPoint); Arrowhead ah = new Arrowhead { TipPosition = arrowheadPosition, Length = (attachmentPoint - arrowheadPosition).Length }; XmlRead(); ReadEndElement(); var rail = new Rail(ah, attachmentPoint, topRankedEdgoInfo, zoomLevel); var tuple = new SymmetricSegment(arrowheadPosition, attachmentPoint); level._railDictionary[tuple] = rail; return rail; } if (TokenIs(GeometryToken.LineSegment)) { pointString = GetAttribute(GeometryToken.Points); var linePoints = ParsePoints(pointString); Debug.Assert(linePoints.Length == 2); LineSegment ls = new LineSegment(linePoints[0], linePoints[1]); XmlRead(); ReadEndElement(); var rail = new Rail(ls, topRankedEdgoInfo, zoomLevel); var tuple = new SymmetricSegment(ls.Start, ls.End); level._railDictionary[tuple] = rail; level._railTree.Add(ls.BoundingBox, rail); return rail; } if (TokenIs(GeometryToken.CubicBezierSegment)) { pointString = GetAttribute(GeometryToken.Points); var controlPoints = ParsePoints(pointString); Debug.Assert(controlPoints.Length == 4); var bs = new CubicBezierSegment(controlPoints[0], controlPoints[1], controlPoints[2], controlPoints[3]); XmlRead(); ReadEndElement(); var rail = new Rail(bs, topRankedEdgoInfo, zoomLevel); var tuple = new SymmetricSegment(bs.Start, bs.End); level._railDictionary[tuple] = rail; return rail; } throw new Exception(); }
public void UpdateTopEdgeInfo(LgEdgeInfo ei) { if (TopRankedEdgeInfoOfTheRail == null || TopRankedEdgeInfoOfTheRail.Rank < ei.Rank) TopRankedEdgeInfoOfTheRail = ei; MinPassingEdgeZoomLevel = Math.Min(MinPassingEdgeZoomLevel, ei.ZoomLevel); }
public void AssembleEdgeAtLevel(LgEdgeInfo lgEi, int iLevel, Set<Rail> rails) { var edge = lgEi.Edge; var level = Levels[iLevel]; level._railsOfEdges[edge] = rails; foreach (Rail rail in rails) { level.AddRail(rail); rail.UpdateTopEdgeInfo(lgEi); } }
void TryToDecreaseZoomLevel(LgEdgeInfo edgeInfo) { if (edgeInfo.ZoomLevel > zoomLevel) edgeInfo.ZoomLevel = zoomLevel; }