Spostare il punto di origine dell'area di riempimento più vicino al confine dell'area di riempimento per migliorare le prestazioni
Come spostare il punto di origine dell’area di riempimento più vicino al confine dell’area di riempimento per migliorare le prestazioni
Problema: Come spostare il punto di origine dell’area di riempimento più vicino al confine dell’area di riempimento per migliorare le prestazioni (CADNET-1340).
Suggerimenti: Per fare questo, ottenere le entità CadHatch dal disegno, impostare i punti richiesti con Point2D, calcolare la distanza e in CadHatchPatternData impostare LineBasePoint per X e Y.
Esempio:
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; | |
} | |
} | |
} | |
} | |
} |