Python: How to find all groups?


#1

Hi…,

how to find and traverse all groups with Python?

group = sc.doc.Objects.FindByGroup(number)

I play with FindByGroup(number), but what is number? 0,1,2,3 or 0, 2, 4,5, when groups where deleted?

Thanks

Michael
www.flexiCAD.com


#2

Hi…,

now I try this:

groupNames = rs.GroupNames()
for groupName in groupNames:
    objects = rs.ObjectsByGroup( groupName )
    if ( objects ):
        print( groupName )
        for object in objects:
            if ( rs.IsPolyCurve( object ) ):
                print( object )

rs.IsPolyCurve( object ) gives me the error “unable to convert c015cf83-ccbc-40b5-a1b9-5bae6e2ffc8e into Curve geometry”.

Why rs.IsPolyCurve( object ) isn’t working?

Thanks

Michael
www.flexiCAD.com


#3

Looks like you need to ensure your only calling IsPolyCurve with curve objects, or wrap the call in a try/except block. You’ll probably also want to check for the no-group situation, and the empty/deleted group case.

Pre-filter version:

groupNames = rs.GroupNames()
for groupName in groupNames:
    objects = rs.ObjectsByGroup( groupName )
    if ( objects ):
        print( groupName )
        for object in objects:
            if rs.ObjectType(object) != rs.filter.curve:
                print "Skipping non curve object"
                continue
            if ( rs.IsPolyCurve( object ) ):
                print( object )

Try/except version:

groupNames = rs.GroupNames()
for groupName in groupNames:
    objects = rs.ObjectsByGroup( groupName )
    if ( objects ):
        print( groupName )
        for object in objects:
            try:
                if ( rs.IsPolyCurve( object ) ):
                    print( object )
            except:
                print "Skipped unusable object."          

#4

Hi mgi,

I didn’t know that I have to precheck an object for geometry, I thought rs.IsPolyCurve() does this too.

With your code it works here very nicely.

Thank you very much

Michael
www.flexiCAD.com