本文整理汇总了C#中Polyline.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# Polyline.Clone方法的具体用法?C# Polyline.Clone怎么用?C# Polyline.Clone使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Polyline
的用法示例。
在下文中一共展示了Polyline.Clone方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddVertex
private static Polyline AddVertex(Polyline pl1, Polyline pl2, int indexInPl1, int indexInPl2, Point2d ptInPl2, int dir = 1)
{
var plNew = (Polyline)pl1.Clone();
for (int i = 0; i < pl2.NumberOfVertices; i++)
{
plNew.AddVertexAt(indexInPl1++, ptInPl2, 0, 0, 0);
// След вершина на второй линии
indexInPl2 = NextIndex(indexInPl2, pl2, dir);
ptInPl2 = pl2.GetPoint2dAt(indexInPl2);
}
return plNew;
}
示例2: getPolylineBuffer
private static Polygon getPolylineBuffer(Polyline polyline, double distance, int pointsPerCircle, bool allowParallels)
{
polyline = (Polyline)polyline.Clone();
polyline.Weed(distance - distance * Math.Cos(Math.PI / pointsPerCircle));
Polygon temp = new Polygon();
List<Polygon> partialBuffers = new List<Polygon>();
ICollection<IGeometry> gc;
int c = 0;
foreach (LinePath path in polyline.Paths)
{
for (int i = 0; i < path.Vertices.Count - 1; i++)
{
Segment s = new Segment(path.Vertices[i], path.Vertices[i + 1]);
gc = temp.Union(getSegmentPreBuffer(s, Math.Abs(distance), pointsPerCircle, i == 0));
if (gc.Count > 0)
temp = (Polygon)((GeometryCollection)gc)[0];
c++;
if (c == 3)
{
partialBuffers.Add(temp);
temp = new Polygon();
c = 0;
}
}
}
if (temp.CoordinateCount > 0)
partialBuffers.Add(temp);
return mergePartialBuffers(partialBuffers, allowParallels);
}
示例3: simplifyPolylineSDMin
private Polyline simplifyPolylineSDMin(Polyline polyline, double compressionLevel)
{
polyline = (Polyline)polyline.Clone();
polyline.ReduceSegments(PlanimetryAlgorithms.Tolerance);
//are counting vertex weights
List<SDMinVertex> weightedVertices = getWeightedVertices(polyline);
// find the points of intersection
KDTree crossPointIndex = getCrossPointsIndex(polyline);
// building codes
KDTree vertexIndex = buildVertexIndex(weightedVertices, polyline);
List<SDMinVertex> deletedVertices = new List<SDMinVertex>();
int pointCount = polyline.CoordinateCount;
int n = 0;
while (n < weightedVertices.Count &&
(double)(pointCount - deletedVertices.Count) / (double)pointCount > compressionLevel)
{
SDMinVertex currentVertex = weightedVertices[n];
if (currentVertex.Deleted ||
currentVertex.IsCrossSegmentVertex ||
currentVertex.Previous == null ||
currentVertex.Next == null)
{
n++;
continue;
}
if (checkWeightedVertex(polyline, vertexIndex, currentVertex, crossPointIndex))
{
//the top can be removed
currentVertex.Previous.Next = currentVertex.Next;
currentVertex.Next.Previous = currentVertex.Previous;
deletedVertices.Add(currentVertex);
vertexIndex.Remove(currentVertex);
currentVertex.Deleted = true;
n = 0;
}
else
n++;
}
removeVertices(polyline, deletedVertices);
return polyline;
}