extract separat objects from Polgon-selction-tags



  • On 27/05/2014 at 05:19, xxxxxxxx wrote:

    Hi There,

    I'm looking for a script like that:
    Is there still a possibility to extract separat objects from Polgon-selction-tags of
    a imported Object, witch contains many of those Polygon-selection-tags?
    It have been a multi-hierarchy-object but this structure is collapsed in to one object.

    Any one an idea? :)

    It would be very nice to get a script or any thing else for those issues.

    Thx



  • On 28/05/2014 at 03:06, xxxxxxxx wrote:

    Try this in the Script Manager (select your Polygon Object) :

    import c4d
      
    is_polyselection = lambda x: x.CheckType(c4d.Tpolygonselection)
      
    def main() :
        if not op or not op.CheckType(c4d.Opolygon) :
            c4d.gui.MessageDialog('Please select a Polygon Object')
            
        selections = filter(is_polyselection, op.GetTags())
        if not selections:
            return
      
        result = []
        points = op.GetAllPoints()
        polys = op.GetAllPolygons()
      
        for tag in selections:
            sel = tag.GetBaseSelect()
            new_polys = []
            for i, v in enumerate(sel.GetAll(len(polys))) :
                if not v:
                    continue
                new_polys.append(polys[i])
            obj = c4d.PolygonObject(len(points), len(new_polys))
            obj.SetAllPoints(points)
            for i, p in enumerate(new_polys) :
                obj.SetPolygon(i, p)
            obj.SetName('%s - %s' % (op.GetName(), tag.GetName()))
            c4d.utils.SendModelingCommand(c4d.MCOMMAND_OPTIMIZE, [obj])
            result.append(obj)
      
        root = None
        if len(result) == 1:
            root = result[0]
        else:
            root = c4d.BaseObject(c4d.Onull)
            root.SetName(op.GetName())
            for obj in result:
                obj.InsertUnderLast(root)
      
        doc.StartUndo()
        doc.InsertObject(root)
        doc.AddUndo(c4d.UNDOTYPE_NEW, root)
        doc.EndUndo()
        c4d.EventAdd()
      
    if __name__ == '__main__':
        main()
    

    Note that it uses the Optimize Command to remove the points it will not need.

    -Niklas



  • On 29/05/2014 at 04:57, xxxxxxxx wrote:

    Jihaaaaaa!!!! It works!
    I put in your Code in to the Pythonconsole and the result was fine.
    Thanks for that amazing script.

    (Is there still a chance to tune it up with a extra feature to center axis of all the new Objects?)

    PS: von wo aus aus BRD kommst du? Die Brücke kommt mir bekannt vor. :) **** **** ****



  • On 29/05/2014 at 06:01, xxxxxxxx wrote:

    Ahh sorry, now I see...

    it have to be necessary to optimize/kill all the needless points before.
    After that I can center the axes. This I can make in one shot for multible objects.

    (I have to think before I write) :)

    regards from Cologne



  • On 30/05/2014 at 09:40, xxxxxxxx wrote:

    You're welcome.

    I'm from Bavaria :) But the Sidney Harbour Bridge is surely anything but near your location ;)

    Cheers,
    -Niklas


Log in to reply