Alle Entitäten innerhalb eines Rechtecks löschen

Wie man alle Entitäten innerhalb eines Rechtecks löscht

Problem: Wie löscht man alle Entitäten innerhalb eines Rechtecks (CADNET-1351).

Tipps: Dies erfordert das Abrufen aller Entitäten, dann das Finden eines Rechtecks für sie, das Überprüfen, ob die Entität im gewünschten Rechteck ist, und das Löschen.

Beispiel:

cadImage.GetBounds();
foreach (CadBaseEntity entity in cadImage.Entities)
{
if (entity.TypeName == CadEntityTypeName.TEXT)
{
System.Console.WriteLine(entity.Bounds[0].X + " " + entity.Bounds[0].Y + " " + entity.Bounds[0].Z + " " + entity.Bounds[1].X + " " + entity.Bounds[1].Y + " " + entity.Bounds[1].Z);
}
}
DeleteAllEntities(cadImage, new Rect(new PointF(77, 29), new PointF(128, 49)));
private static void DeleteAllEntities(CadImage cadImage, Rect rectangle)
{
foreach (CadBaseEntity baseEntity in cadImage.Entities)
{
if (baseEntity.LayerName != "0")
{
continue;
}
if (baseEntity.SpaceMode != CadEntitySpaceMode.ModelSpace)
{
continue;
}
List<Cad3DPoint> entityBounds = baseEntity.Bounds;
PointF minPoint = new PointF((float)entityBounds[0].X, (float)entityBounds[0].Y);
PointF maxPoint = new PointF((float)entityBounds[1].X, (float)entityBounds[1].Y);
Rect entityRect = new Rect(minPoint, maxPoint);
if (rectangle.Contains(entityRect))
{
cadImage.RemoveEntity(baseEntity);
}
}
}
private class Rect
{
public PointF Min;
public PointF Max;
public Rect(PointF min, PointF max)
{
this.Min = min;
this.Max = max;
}
public bool Contains(Rect rect)
{
return this.Min.X <= rect.Min.X && this.Max.X >= rect.Max.X && this.Min.Y <= rect.Min.Y
&& this.Max.Y >= rect.Max.Y;
}
}