How to compute the cumulative transformation of a BlockReference hierarchy tree

Suppose you have a nested BlockReference tree, to compute the cumulative transformation that will be applied to the leaf of the tree you need to multiply in cascade the transformation of each BlockReference.

The transformation of a BlockReference is given by the BlockReference.Transformation multiplied by the inverse translation of its Block.BasePoint.

The code below demonstrates how to compute the cumulative transformation of a tree of BlockReference.

Each node of the tree, meaning each block, contains just another BlockReference except for the leaf which contains the actual entity.

private Transformation GetTransformation(BlockReference br) 
{ 
   Block b = design1.Blocks[br.BlockName]; 

   Transformation innerTransf; 
   if (b.Entities[0] is BlockReference) // Get the transformation of the subtree 

       innerTransf = GetTransformation((BlockReference)b.Entities[0]); 

   else 
   { 
       innerTransf = new Identity(); // I arrived at the leaf 
   } 

   // return the cumulative transformation 
   return br.Transformation * new Translation(-b.BasePoint.X, -b.BasePoint.Y, -b.BasePoint.Z) * innerTransf; 
}
Was this article helpful?
2 out of 2 found this helpful

Comments

0 comments

Please sign in to leave a comment.

Articles in this section

See more