Cloning elements on a page. How are transformation matrices applied to elements?

Q: I am reading in a tagged table structure. I am reading in this
structure by reading in the ‘path’ elements. Each path element is
essentially a line of this table. I am writing those path elements
back out to an output file.

Question: I wish to make a copy of some of those elements. For
instance, I have identified which path elements compose the bottom row
of a table, and wish to make a copy of those path elements at a lower
position as to build a new row.

                            Dim lMatrix As New PDFTRON.Common.Matrix2D
()
                            Dim lGstate As GState = gElement.GetGState
()
                            lMatrix = lGstate.GetTransform()
                            lMatrix.m_v -= gRowHeight
                            lGstate.SetTransform(lMatrix)
                            gWriter.WriteElement(gElement)

This works for the 1st row, however, if I try to make another copy
(for another row):

                            lMatrix.m_v -= gRowHeight
                            lGstate.SetTransform(lMatrix)
                            gWriter.WriteElement(gElement)

This 2nd element appears in a completely different location at the top
of the page. So the question is: how do I make copies of path
elements? I need to copy a path element say 100pixels below an
existing one. Do I need to build a completely new path element? Or
can I use the existing element?
-----
A: You can copy the existing element any number of times (no need to
recreate it).

The problem is that matrix transforms in PDF are cumulative (this is
similar in concept to matrix stack in OpenGL) .

So if you specify a matrix on an element (e.g. a path) it will
transform all subsequent elements.
If you specify a matrix on a subsequent element it will be multiplied
with the Current Transformation Matrix (CTM, element.GetCTM()).
What you want to do for the second element is the following:

lGstate.SetTransform(1, 0, 0, 1, 0, -gRowHeight);
gWriter.WriteElement(gElement);

Also you can save and restore the current graphics state (including
CTM) by using e_group_begin/end elements. These elements correspond to
‘q’ and ‘Q’ operators in PDF (or gsave/grestore in PostStript;
SaveTransform/RestoreTrasfrom in .NET etc). For example:

// Assume matrix (CTM) is a,b,c,d,h,v

Element element = builder.CreateGroupBegin();
element.GetGState().SetTransform(1, 0, 0, 1, 0, -glRowHeight);
writer.WriteElement(element); // The CTM is a,b,c,d,h,v-glRowHeight
writer.WriteElement(bld.CreateGroupEnd());
writer.End();

// The current matrix (CTM) is back to a,b,c,d,h,v...