public virtual Element GetChainElement( int chainIndex, int elementIndex )
{
if ( chainIndex >= this.chainCount )
{
throw new IndexOutOfRangeException();
}
ChainSegment segment = this.chainSegmentList[ chainIndex ];
int index = segment.head + elementIndex;
// adjust for the edge and start
index = ( index % this.maxElementsPerChain ) + segment.start;
return this.chainElementList[ index ];
}