Q: Can I use the scaling operation of Matrix2D, in order to dilate (or
shrink) path elements my PDF? How do i use this function correctly.
The elements should stay on their primary position. What happens to
holes in a path element? Are the holes getting bigger or smaller?
-----
A: Using PDFNet you can implement path dilation/shrinking however it
is a bit more involved than setting the scaling transformation on a
path element. Essentially you could need to obtain all path points
using GetPathPoints/GetPathTypes() methods [you may want to take a
look at ElementReaderAdv sample project for sample code of how to
extract path points]. Then you would adjust path vertices using a
given scaling factor. Something along these lines:
m_pPoints is vertex array of type POINT
m_numpoints is number of vertices in the vertex array
m_rect is the bounding rectangle for the polygon of type RECT
void MyPath.Resize(double xfactor, double yfactor) {
if(xfactor < 0 || yfactor < 0) return;
if(xfactor < 1) xfactor = 1 - xfactor;
if(yfactor < 1) yfactor = 1 - yfactor;
// Find center of polygon
POINT center;
center.x = (long)(m_rect.left + ((m_rect.right - m_rect.left) /
2.0));
center.y = (long)(m_rect.top + ((m_rect.bottom - m_rect.top) /
2.0));
for(int i=0; i<m_numpoints; i++) {
long x, y;
x = (long)((m_pPoints[i].x - center.x) * xfactor);
y = (long)((m_pPoints[i].y - center.y) * yfactor);
if(xfactor > 1) m_pPoints[i].x += x;
else m_pPoints[i].x -= x;
if(yfactor > 1) m_pPoints[i].y += y;
else m_pPoints[i].y -= y;
}
}
Finally you would update the path points using element.SetPathPoints()
and write the element using ElementWriter..