def do(self): cache = context.application.cache # Translate where possible, if necessary translated_nodes = cache.translated_nodes if len(translated_nodes) > 0: if isinstance(cache.last, GLTransformationMixin) and \ isinstance(cache.last.transformation, Translation): absolute_inversion_center = cache.last.get_absolute_frame().t else: absolute_inversion_center = numpy.zeros(3, float) victims_by_parent = list_by_parent(cache.transformed_nodes) for parent, victims in victims_by_parent.iteritems(): local_inversion_center = parent.get_absolute_frame().inv * absolute_inversion_center for victim in victims: translation = Translation(2 * (local_inversion_center - victim.transformation.t)) primitive.Transform(victim, translation) # Apply an inversion rotation where possible inversion = Rotation(-numpy.identity(3, float)) for victim in cache.rotated_nodes: primitive.Transform(victim, inversion, after=False)
def do(self): cache = context.application.cache # Translate where possible, if necessary translated_nodes = cache.translated_nodes if len(translated_nodes) > 0: if isinstance(cache.last, GLTransformationMixin) and \ isinstance(cache.last.transformation, Translation): absolute_inversion_center = cache.last.get_absolute_frame().t else: absolute_inversion_center = numpy.zeros(3, float) victims_by_parent = list_by_parent(cache.transformed_nodes) for parent, victims in victims_by_parent.iteritems(): local_inversion_center = parent.get_absolute_frame( ).inv * absolute_inversion_center for victim in victims: translation = Translation( 2 * (local_inversion_center - victim.transformation.t)) primitive.Transform(victim, translation) # Apply an inversion rotation where possible inversion = Rotation(-numpy.identity(3, float)) for victim in cache.rotated_nodes: primitive.Transform(victim, inversion, after=False)
def get_nodes_by_parent(self): return analysis.list_by_parent(self.nodes)