当前位置: 首页>>代码示例>>C#>>正文


C# Polyline.RemoveStartPoint方法代码示例

本文整理汇总了C#中Polyline.RemoveStartPoint方法的典型用法代码示例。如果您正苦于以下问题:C# Polyline.RemoveStartPoint方法的具体用法?C# Polyline.RemoveStartPoint怎么用?C# Polyline.RemoveStartPoint使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Polyline的用法示例。


在下文中一共展示了Polyline.RemoveStartPoint方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CreateLoosePolylineOnBisectors

        //private Polyline CutCorners(Polyline loosePolyline, Polyline tightPolyline) {
        //    Polyline ret = new Polyline();
        //    ret.Closed = true;
        //    PolylinePoint pp = loosePolyline.StartPoint;
        //    PolylinePoint tpp=tightPolyline.StartPoint;

        //    do {
        //        PolylinePoint furthestVisible = GetFurthestVisible(pp, ref tpp);
        //        ret.AddPoint(furthestVisible.Point);
        //        pp = furthestVisible;
        //    }
        //    while (pp != loosePolyline.StartPoint);

        //    System.Diagnostics.Debug.Assert(pp == loosePolyline.StartPoint);
        //    //distangle ret.StartPoint and ret.LastPoint
        //    return ret;
        //}

        //static PolylinePoint GetFurthestVisible(PolylinePoint pp, ref PolylinePoint tpp) {
        //    Point pivot = pp.Point;
        //    Point blockingPoint = tpp.NextOnPolyline.Point;
        //    while (Point.GetTriangleOrientation(pivot, blockingPoint, pp.NextOnPolyline.Point) == TriangleOrientation.Counterclockwise) {
        //        pp = pp.NextOnPolyline;
        //        tpp = tpp.NextOnPolyline;
        //    }
        //    return pp;
        //}

        static Polyline CreateLoosePolylineOnBisectors(Polyline tightPolyline, double p) {
            var ret = new Polyline();

            ret.AddPoint(GetStickingVertexOnBisector(tightPolyline.StartPoint, p));
            var blockingPoint = new Point(); //to silence the compiler
            var candidate = new Point();
            bool justAdded = true;

            for (PolylinePoint pp = tightPolyline.StartPoint.Next; pp != null; pp = pp.Next) {
                Point currentSticking = GetStickingVertexOnBisector(pp, p);
                if (justAdded) {
                    blockingPoint = pp.Point;
                    candidate = currentSticking;
                    justAdded = false;
                } else {
                    if (ret.Count > 1) {
                        // SugiyamaLayoutSettings.Show(tightPolyline, ret, new LineSegment(ret.StartPoint.Point, currentSticking));
                    }

                    //SugiyamaLayoutSettings.Show(new LineSegment(ret.EndPoint.Point, blockingPoint), tightPolyline, new LineSegment(ret.EndPoint.Point, currentSticking));
                    if (Point.GetTriangleOrientation(ret.EndPoint.Point, blockingPoint, currentSticking) !=
                        TriangleOrientation.Counterclockwise) {
                        ret.AddPoint(candidate);
                        // SugiyamaLayoutSettings.Show(ret, tightPolyline);
                        justAdded = true;
                        pp = pp.Prev;
                    } else {
                        candidate = currentSticking;
                        if (Point.GetTriangleOrientation(ret.EndPoint.Point, blockingPoint, pp.Point) ==
                            TriangleOrientation.Counterclockwise)
                            blockingPoint = pp.Point;
                    }
                }
            }

            //process the last point
            if (!justAdded) {
                if (Point.GetTriangleOrientation(ret.EndPoint.Point, blockingPoint, ret.StartPoint.Point) ==
                    TriangleOrientation.Counterclockwise) {
                    //the first point is visible, but now can we cut it
                    if (Point.GetTriangleOrientation(ret.EndPoint.Point, blockingPoint, ret.StartPoint.Next.Point) ==
                        TriangleOrientation.Counterclockwise)
                        ret.RemoveStartPoint();
                } else {
                    ret.AddPoint(candidate);
                }
            } else {
                //trying to cut away the first point
                if (
                    Point.GetTriangleOrientation(ret.EndPoint.Point, tightPolyline.StartPoint.Point,
                                                 ret.StartPoint.Next.Point) == TriangleOrientation.Counterclockwise)
                    ret.RemoveStartPoint();
                else { }
            }

            ret.Closed = true;
            // SugiyamaLayoutSettings.Show(tightPolyline, ret);
            return ret;
        }
开发者ID:danielskowronski,项目名称:network-max-flow-demo,代码行数:87,代码来源:ObstacleCalculator.cs

示例2: RemoveCloseAndCollinearVerticesInPlace

        internal static Polyline RemoveCloseAndCollinearVerticesInPlace(Polyline polyline) {
            var epsilon = ApproximateComparer.IntersectionEpsilon * 10;
            for (PolylinePoint pp = polyline.StartPoint.Next; pp != null; pp = pp.Next) {
                if (ApproximateComparer.Close(pp.Prev.Point, pp.Point, epsilon)) {
                    if (pp.Next == null) {
                        polyline.RemoveEndPoint();
                    } else {
                        pp.Prev.Next = pp.Next;
                        pp.Next.Prev = pp.Prev;
                    }
                }
            }

            if (ApproximateComparer.Close(polyline.Start, polyline.End, epsilon)) {
                polyline.RemoveStartPoint();
            }

            InteractiveEdgeRouter.RemoveCollinearVertices(polyline);
            if ((polyline.EndPoint.Prev != null) && 
                    (Point.GetTriangleOrientation(polyline.EndPoint.Prev.Point, polyline.End, polyline.Start) == TriangleOrientation.Collinear)) {
                polyline.RemoveEndPoint();
            }
            if ((polyline.StartPoint.Next != null) && 
                    (Point.GetTriangleOrientation(polyline.End, polyline.Start, polyline.StartPoint.Next.Point) == TriangleOrientation.Collinear)) {
                polyline.RemoveStartPoint();
            }
            return polyline;
        }
开发者ID:danielskowronski,项目名称:network-max-flow-demo,代码行数:28,代码来源:Obstacle.cs


注:本文中的Polyline.RemoveStartPoint方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。