c#CAD开发中列表如何同时存入Line和Polyline属性元素,再在此列表的基础上如何让判断列表内任意属性的两元素是否存在重合点,如果有则删除此两个元素输出新列表
时间: 2024-10-23 20:21:42 浏览: 18
在C# CAD开发中,你可以创建一个自定义的数据结构来存储Line和Polyline属性元素,比如创建一个类`CustomShape`,它包含`Line`和`Polyline`属性。假设我们已经有一个`Line`类和`Polyline`类。
```csharp
public class Line
{
public double[] Points;
}
public class Polyline
{
public List<MyPoint> Vertices;
}
```
接着,在`CustomShape`中添加这些类型的属性:
```csharp
public class CustomShape
{
public Line LineElement;
public Polyline PolylineElement;
}
```
要判断列表内的任意两个元素是否有重合点,我们可以遍历列表并比较它们的顶点。这里可以使用`Do`方法(示例来自[2])作为辅助函数,计算两点之间的距离并判断是否小于阈值D。这里仅展示核心部分的逻辑:
```csharp
List<CustomShape> shapesWithOverlappingPoints = new List<CustomShape>();
// 假设你已经有了一个名为shapes的列表
foreach (var shape1 in shapes)
{
foreach (var shape2 in shapes)
{
if (shape1 != shape2) // 防止重复比较
{
// 判断线与线,线与polyline,polyline与polyline之间的重叠
bool overlapDetected = CheckOverlap(shape1.LineElement, shape2.LineElement);
overlapDetected |= CheckOverlap(shape1.PolylineElement.Vertices, shape2.PolylineElement.Vertices);
if (overlapDetected)
{
shapesWithOverlappingPoints.Add(shape1); // 添加可能冲突的形状到结果列表
shapes.Remove(shape2); // 删除已发现冲突的形状
}
}
}
}
private bool CheckOverlap(Line line1, Line line2) => ComparePoints(line1.Points, line2.Points);
private bool CheckOverlap(List<MyPoint> poly1, List<MyPoint> poly2) => ...; // 实现点集间的重叠检测
// 比较点的方法
private static bool ComparePoints(double[] points1, double[] points2)
{
// 使用你的算法,如计算欧几里得距离或向量交叉等
// 如果找到重合点,则返回true
return false;
}
```
现在,`shapesWithOverlappingPoints`就是不含有重合点的新列表。
阅读全文