Set annotations layers according to style

To automatically put annotations, leaders and texts to a layer according to their style

import rhinoscriptsyntax as rs
import scriptcontext as sc

def arrange_texts_in_layers(annotation_style_name, target_layer):
    rs.EnableRedraw(False)
    all_objs = rs.AllObjects()
    if all_objs:
        for obj in all_objs:
            if rs.IsDimension(obj) or rs.IsLeader(obj) or rs.IsText(obj):
                if rs.DimensionStyle(obj) == annotation_style_name:
                    rs.ObjectLayer(obj, target_layer)
    idefs = sc.doc.InstanceDefinitions
    for idef in idefs:
        if idef.Name:
            idef_objects = idef.GetObjects()
            for obj in idef_objects:
                if rs.IsDimension(obj) or rs.IsLeader(obj) or rs.IsText(obj):
                    if rs.DimensionStyle(obj) == annotation_style_name:
                        rs.ObjectLayer(obj.Id, target_layer)
    rs.EnableRedraw(True)

if( __name__ == "__main__" ):
    arrange_texts_in_layers("R-100", "00-2D::03-Dimensions::02-100eme")
    arrange_texts_in_layers("R-50", "00-2D::03-Dimensions::03-50eme")
    arrange_texts_in_layers("R-20", "00-2D::03-Dimensions::04-20eme")
    arrange_texts_in_layers("R-Layout-Annotation", "00-2D::03-Dimensions::05-Layout")
    print("All annotations have been placed in their relevant layer :)")

Last updated