def draw_evaluated_transform(self, context: Context) -> None: depsgraph = context.evaluated_depsgraph_get() ob_eval = context.object.evaluated_get(depsgraph) if ob_eval.mode == "OBJECT": self.draw_decomposed_matrix("Evaluated Transform:", ob_eval.matrix_world) self.draw_decomposed_matrix("Parent Inverse:", ob_eval.matrix_parent_inverse) if context.active_pose_bone: bone = context.active_pose_bone self.draw_decomposed_matrix(f"{bone.name} matrix:", bone.matrix) self.draw_decomposed_matrix(f"{bone.name} matrix_basis:", bone.matrix_basis)
def detect_overlap(context: Context, obs: Iterable[Object], merge_distance: float): depsgraph = context.evaluated_depsgraph_get() bm = bmesh.new() for ob in obs: ob_eval = ob.evaluated_get(depsgraph) me = ob_eval.to_mesh() me.transform(ob.matrix_world) bm.from_mesh(me) ob_eval.to_mesh_clear() bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=merge_distance) tree = bvhtree.BVHTree.FromBMesh(bm, epsilon=0.00001) overlap = tree.overlap(tree) bm.free() return bool(overlap)