public PointIterator <R2Point> RetrievePointIterator()
        {
            DoubleLinkedList <R2Point> linkedList = new DoubleLinkedList <R2Point>();

            for (int index = 0; index < this.linkedList.Size; index++)
            {
                R2NCDirection           nonCircularDirection = this.linkedList.GetAt(index);
                PointIterator <R2Point> iterator             = nonCircularDirection.RetrievePointIterator();

                while (iterator.HasNext())
                {
                    linkedList.Add(iterator.GetNext());
                }
            }

            return(new PointIterator <R2Point>(0, linkedList));
        }
Ejemplo n.º 2
0
    candidatePointInfo getCandidateConvexPoint(zz2DPoint lPointToSolve)
    {
        candidatePointInfo lCandidatePointInfo=new candidatePointInfo();
        PointIterator lConvexIterator = new PointIterator();
        lConvexIterator.addPolygon(mOutSidePoint.getConvexPoints());
        foreach (var lHole in mHolePoint)
        {
            lConvexIterator.addPolygon(lHole.getConvexPoints());
        }

        while (lConvexIterator.moveNext() != null)
        {
            zz2DPoint lNowPoint = lConvexIterator.nowPointDate.point;
            if (canLink(lPointToSolve, lNowPoint))
            {

                var lNewCandidatePointInfo = new candidatePointInfo(lConvexIterator.nowPointDate);
                lNewCandidatePointInfo.scoresUp();

                if (isConcaveCleared(lPointToSolve, lNowPoint))
                {
                    lNewCandidatePointInfo.scoresUp(candidatePointInfo.scoresOfClearSelfConcave);
                }

                if (lNewCandidatePointInfo.scores > lCandidatePointInfo.scores)
                    lCandidatePointInfo = lNewCandidatePointInfo;

                if (lCandidatePointInfo.scores
                    > candidatePointInfo.scoresOfClearSelfConcave)
                    break;

            }
        }
        return lCandidatePointInfo;
    }
Ejemplo n.º 3
0
    candidatePointInfo getCandidateConcavePoint(out PointDate lPointDataToSolve)
    {
        var lCandidatePointInfo = new candidatePointInfo();

        PointIterator lConcaveIterator = new PointIterator();
        lConcaveIterator.addPolygon(mOutSidePoint.getConcavePoints());
        foreach (var lHole in mHolePoint)
        {
            lConcaveIterator.addPolygon(lHole.getConcavePoints());
        }

        lPointDataToSolve = lConcaveIterator.moveNext();
        //if(lPointDataToSolve==null)
        //{
        //    //无凹点,返回自身所有的点
        //    return new zzSimplyPolygon[] { mOutSidePoint };
        //}

        zz2DPoint lPointToSolve = lPointDataToSolve.point;

        //遍历凹点
        while (lConcaveIterator.moveNext() != null)
        {
            zz2DPoint lNowPoint = lConcaveIterator.nowPointDate.point;
            if (canLink(lPointToSolve, lNowPoint))
            {

                var lNewCandidatePointInfo = new candidatePointInfo(lConcaveIterator.nowPointDate);
                lNewCandidatePointInfo.scoresUp();

                //对结果评分
                if (isConcaveCleared(lPointToSolve, lNowPoint))
                {
                    lNewCandidatePointInfo.scoresUp(candidatePointInfo.scoresOfClearSelfConcave);
                }

                if (isConcaveCleared(lNowPoint, lPointToSolve))
                {
                    lNewCandidatePointInfo.scoresUp(candidatePointInfo.scoresOfClearOtherConcave);
                }

                //优于前次结果,则替代之前的
                if (lNewCandidatePointInfo.scores > lCandidatePointInfo.scores)
                    lCandidatePointInfo = lNewCandidatePointInfo;

                //连接获得高分时,则不再遍历
                if (lCandidatePointInfo.scores
                    > candidatePointInfo.scoresOfClearSelfConcave + candidatePointInfo.scoresOfClearOtherConcave)
                    break;

            }
        }
        return lCandidatePointInfo;
    }
Ejemplo n.º 4
0
 PointIterator createConcaveIterator()
 {
     PointIterator lOut = new PointIterator();
     lOut.addPolygon(mOutSidePoint.getConcavePoints());
     foreach (var lHolePolygon in mHolePoint)
     {
         lOut.addPolygon(lHolePolygon.getConcavePoints());
     }
     return lOut;
 }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            foreach (string path in args)
            {
                PointReader ps = load(path);
                output(String.Format("   Number of Points:   {0}\n", ps.getNumPoints()));

                {
                    Bounds b = ps.getBounds();
                    output(String.Format("   Bounds Min:         {0} {1} {2}\n", b.x.min, b.y.min, b.z.min));
                    output(String.Format("   Bounds Max:         {0} {1} {2}\n", b.x.max, b.y.max, b.z.max));
                }
                output(String.Format("   Scale:              {0} {1} {2}\n", ps.getScale()[0], ps.getScale()[2], ps.getScale()[2]));
                output(String.Format("   Offset:             {0} {1} {2}\n", ps.getOffset()[0], ps.getOffset()[2], ps.getOffset()[2]));

                {
                    PointInfo pi = ps.getPointInfo();
                    output(String.Format("   Number of Channels: {0}\n", ps.getNumChannels()));
                    output("   Supported Fields:  ");
                    for (uint i = 0; i < pi.getNumChannels(); i += 1)
                    {
                        output(" " + pi.getChannel(i).getName());
                    }
                    output("\n");
                }
                output(String.Format("   Spatial Reference:  {0}\n", ps.getWKT()));

                if (true /*options.metadata*/)
                {
                    Metadata meta = new Metadata();
                    ps.loadMetadata(meta, false);
                    if (meta.getNumRecords() != 0)
                    {
                        output(String.Format("   Metadata:           {0}\n", meta.getNumRecords()));
                        for (uint i = 0; i < meta.getNumRecords(); i += 1)
                        {
                            output(String.Format("      {0} ({1}):\n", meta.getKey(i), meta.getDescription(i)));
                            switch (meta.getDataType(i))
                            {
                            case MetadataDataType.METADATA_DATATYPE_STRING:
                                output(String.Format("         '{0}'\n", meta.getValue(i)));
                                break;

                            case MetadataDataType.METADATA_DATATYPE_BLOB:
                                output(String.Format("         (blob of {0} bytes)\n", meta.getValueLength(i)));
                                break;

                            case MetadataDataType.METADATA_DATATYPE_REAL_ARRAY:
                                output(String.Format("         {{"));
                                double[] values = (double [])meta.getValue(i);
                                for (uint j = 0; j < meta.getValueLength(i); j += 1)
                                {
                                    output(String.Format(" {0}", values[j]));
                                }
                                output(String.Format(" }}\n"));
                                break;
                            }
                        }
                    }
                    else
                    {
                        output("   Metadata:           None\n");
                    }

                    if (ps.getNumClassIdNames() != 0)
                    {
                        output(String.Format("   ClassId Names:      {0}\n", ps.getNumClassIdNames()));
                        foreach (string name in ps.getClassIdNames())
                        {
                            output(String.Format("      {0}\n", name));
                        }
                    }
                    else
                    {
                        output("   ClassId Names:      None\n");
                    }
                }

                if (true /*options.bounds*/)
                {
                    PointInfo pi = new PointInfo();
                    pi.init(3);
                    pi.getChannel(0).init(ps.getChannel(LidarDSDK.CHANNEL_NAME_X));
                    pi.getChannel(1).init(ps.getChannel(LidarDSDK.CHANNEL_NAME_Y));
                    pi.getChannel(2).init(ps.getChannel(LidarDSDK.CHANNEL_NAME_Z));

                    PointData buffer = new PointData();
                    buffer.init(pi, 4096);

                    ChannelData x = buffer.getChannel(0);
                    ChannelData y = buffer.getChannel(1);
                    ChannelData z = buffer.getChannel(2);

                    UInt64 numPoints = 0;

                    PointIterator iter   = ps.createIterator(Bounds.Huge(), 1.0, pi, null);
                    Bounds        bounds = new Bounds();
                    uint          count  = iter.getNextPoints(buffer);
                    while (count != 0)
                    {
                        numPoints += count;
                        for (uint i = 0; i < count; i += 1)
                        {
                            bounds.grow(x.getValue(i), y.getValue(i), z.getValue(i));
                        }
                        count = iter.getNextPoints(buffer);
                    }

                    Bounds b = bounds;
                    output(String.Format("   # of Points Read:   {0}\n", numPoints));
                    output("Real Bounds:\n");
                    output(String.Format("   Bounds Min:         {0} {1} {2}\n", b.x.min, b.y.min, b.z.min));
                    output(String.Format("   Bounds Max:         {0} {1} {2}\n", b.x.max, b.y.max, b.z.max));
                }
            }
        }