Déplacement du point d'origine de hachures plus près de la limite de hachure pour améliorer les performances

Comment déplacer le point d’origine de hachure plus près de la limite de hachure pour améliorer les performances

Problème : Comment déplacer le point d’origine de hachure plus près de la limite de hachure pour améliorer les performances (CADNET-1340).

Astuces : Pour ce faire, obtenez les entités CadHatch du dessin, définissez les points requis avec Point2D, calculez la distance et dans CadHatchPatternData définissez LineBasePoint pour X et Y.

Exemple :

foreach (CadBaseEntity entity in cadImage.Entities)
{
if (entity.TypeName == CadEntityTypeName.HATCH)
{
CadHatch hatch = (CadHatch)entity;
if (hatch.PatternDefinitions.Count > 0)
{
Point2D firstPoint = new Point2D(hatch.PatternDefinitions[0].LineBasePoint.X, hatch.PatternDefinitions[0].LineBasePoint.Y);
if (hatch.BoundaryPaths[0].BoundaryPath[0].GetType() == typeof(CadPolylineBoundaryPath))
{
CadPolylineBoundaryPath polyline = (CadPolylineBoundaryPath)(hatch.BoundaryPaths[0].BoundaryPath[0]);
firstPoint = polyline.Vertices[0];
}
else
{
CadEdgeBoundaryPath edgePath = (CadEdgeBoundaryPath)(hatch.BoundaryPaths[0].BoundaryPath[0]);
if (edgePath.Objects[0].GetType() == typeof(CadBoundaryPathLine))
{
CadBoundaryPathLine line = (CadBoundaryPathLine)edgePath.Objects[0];
firstPoint = line.FirstPoint;
}
if (edgePath.Objects[0].GetType() == typeof(CadBoundaryPathCircularArc))
{
// TODO
}
if (edgePath.Objects[0].GetType() == typeof(CadBoundaryPathCircularEllipse))
{
// TODO
}
if (edgePath.Objects[0].GetType() == typeof(CadBoundaryPathSpline))
{
// TODO
}
}
bool requiresShift = false;
double distanceX = 0, distanceY = 0;
if (Math.Abs(hatch.PatternDefinitions[0].LineBasePoint.X - firstPoint.X) > 20000
|| Math.Abs(hatch.PatternDefinitions[0].LineBasePoint.Y - firstPoint.Y) > 20000)
{
requiresShift = true;
distanceX = hatch.PatternDefinitions[0].LineBasePoint.X - firstPoint.X;
distanceY = hatch.PatternDefinitions[0].LineBasePoint.Y - firstPoint.Y;
}
if (requiresShift)
{
foreach (CadHatchPatternData d in hatch.PatternDefinitions)
{
d.LineBasePoint.X -= distanceX;
d.LineBasePoint.Y -= distanceY;
}
}
}
}
}