Supprimer toutes les entités à l'intérieur d'un rectangle

Comment supprimer toutes les entités à l’intérieur d’un rectangle

Problème : Comment supprimer toutes les entités à l’intérieur d’un rectangle (CADNET-1351).

Conseils : Cela nécessite de récupérer toutes les entités, puis de trouver un rectangle pour elles, puis de vérifier si l’entité se trouve dans le rectangle que vous souhaitez et de la supprimer.

Exemple :

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;
}
}