Ergebnis 1 bis 9 von 9

Thema: Kleine Polygonkörper aus gesamten Körper herausfiltern

Hybrid-Darstellung

  1. #1
    C4Dnetwork-Supporter Avatar von fLuppster
    Registriert seit
    20.05.2013
    Ort
    Erfurt
    Beiträge
    1.054
    Software
    CINEMA 4D R15

    Standard Kleine Polygonkörper aus gesamten Körper herausfiltern

    Gibt es irgendein Skript/Workflow/sonstwas um aus einem Mesh (besteht aus vielen verschiedenen, zusammengesetzten Körpern) z. B. alle Körper die aus weniger als 10 Polys bestehen auszuwählen bzw. zu löschen?

    Nicht möglich! 0 Nicht möglich!
    C4D R15 / Vectorworks 2014 / Win7
    i7 4790K / 32GB RAM / Titan X (Pascal)

  2. #2
    Benutser Avatar von rownn
    Registriert seit
    17.12.2011
    Ort
    DDB
    Beiträge
    534
    Software
    MSA

    Standard

    Hey,

    schnell und schmutzig.
    Probier das mal. Im Dialog kannst du die Polygonanzahl einstellen und selektiert werden dann die Punkte. Habs nicht krass getestet und es ist kein Undo drin.

    Ansonsten könnte man das ganze beliebig erweitern.

    Code:
    import c4d
    from c4d import gui
    #Welcome to the world of Python
    GROUP = 1000
    NUMBER = 1001
    DO = 1002
    
    class Dlg(gui.GeDialog):
        
        num = 0
    
        def CreateLayout(self):
            self.GroupBegin(GROUP, c4d.BFH_SCALEFIT, cols=5)
            self.AddEditNumberArrows(NUMBER, c4d.BFH_LEFT)  
            self.AddButton(DO, c4d.BFH_LEFT, name="Select")
            self.GroupEnd()
            return True
        
        def InitValues(self):
            self.SetLong(NUMBER, 0, min = 0, max = 1000000000)
            return True
    
        def Command(self, id, msg):    
            if id==DO:
                self.num = self.GetLong(NUMBER)
                self.Close()    
            return True
    
    def main():
        if not op: return
        if not op.CheckType(c4d.Opolygon): return
        
        dlg = Dlg()
        dlg.Open(c4d.DLG_TYPE_MODAL, xpos=100, ypos=100, defaultw=350, defaulth=10)
        
        res = op.GetClone()
        
        c4d.utils.SendModelingCommand(command = c4d.MCOMMAND_EXPLODESEGMENTS,
                                        list = [res],
                                        mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                        bc = c4d.BaseContainer(),
                                        doc = doc)
                                        
        children = res.GetChildren()
        pnts = []
        for child in children:
            if child.GetPolygonCount() < dlg.num: pnts += child.GetAllPoints()
            
        bs = op.GetPointS()
        bs.DeselectAll()
        
        opPoints = op.GetAllPoints()
        for i in xrange(len(opPoints)):
            if opPoints[i] in pnts: bs.Select(i)
            
        c4d.EventAdd()
    
    if __name__=='__main__':
        main()
    Grüße
    rownn

    Edit: Code in ScriptManager kopieren und 'Execute' klicken.

    Nicht möglich! +2 Nicht möglich!
    Geändert von rownn (11.01.2017 um 17:41 Uhr)

  3. #3
    C4Dnetwork-Supporter Avatar von fLuppster
    Registriert seit
    20.05.2013
    Ort
    Erfurt
    Beiträge
    1.054
    Software
    CINEMA 4D R15

    Standard

    Ich glaube ich bin zu doof das richtig einzustellen. Könntest du es mal in einer Testszene zeigen bitte? Vielen Dank schonmal.

    Nicht möglich! 0 Nicht möglich!
    C4D R15 / Vectorworks 2014 / Win7
    i7 4790K / 32GB RAM / Titan X (Pascal)

  4. #4
    Benutser Avatar von rownn
    Registriert seit
    17.12.2011
    Ort
    DDB
    Beiträge
    534
    Software
    MSA

    Standard

    Hier ein kleiner Film.

    Nicht möglich! +2 Nicht möglich!

  5. #5
    C4Dnetwork-Supporter Avatar von fLuppster
    Registriert seit
    20.05.2013
    Ort
    Erfurt
    Beiträge
    1.054
    Software
    CINEMA 4D R15

    Standard

    Aaah, danke! Bei mir ging es die ganze Zeit nicht, weil ich Werte über 100 eingesetzt habe. Gibts da ne Möglichkeit da mehr auszuwählen? (Habe es zwar auf amateurhafte Art und Weise versucht im Code zu suchen, aber nichts gefunden)

    Nicht möglich! 0 Nicht möglich!
    C4D R15 / Vectorworks 2014 / Win7
    i7 4790K / 32GB RAM / Titan X (Pascal)

  6. #6
    Benutser Avatar von rownn
    Registriert seit
    17.12.2011
    Ort
    DDB
    Beiträge
    534
    Software
    MSA

    Standard

    Ja, is mir auch gefallen dass es diese Obergrenze gibt... hab ich aber ignoriert, da es ja um Objekte mit kleiner Polygonanzahl geht
    Ich schau mal.

    Edit: Hab den Code oben aktualisiert.

    Nicht möglich! +1 Nicht möglich!

  7. #7
    Erfahrener Benutzer Avatar von LennO
    Registriert seit
    27.06.2006
    Beiträge
    1.715
    Software
    KEINE

    Standard

    Äh. Ja, läuft aber unter Python 3 sicherlich nicht.

    Hier versagst aber so oder so, sys.maxint (existiert nichtmehr ) und sys.maxsize sorgen dafür dass das Feld garkeinen Wert mehr zurückliefert. Tatsächlich funktioniert es auch mit dem tatsächlichen Maximum eines Int64 als Zahl ausgeschrieben nicht. Ein hoher Wert als Maximum wie 100000000000000 funktioniert

    Nicht möglich! +1 Nicht möglich!

  8. #8
    Benutser Avatar von rownn
    Registriert seit
    17.12.2011
    Ort
    DDB
    Beiträge
    534
    Software
    MSA

    Standard

    Hab ma ein CommandData-Plugin draus gemacht, damit man nicht jedes mal das Script neu aufrufen muss um Veränderungen zu sehen. Undo und noch ein bissl was anderes is jetzt drin.



    Wenn was nicht funktionieren sollte, gebt Kund.

    Viele Grüße
    rownn
    Angehängte Dateien Angehängte Dateien

    Nicht möglich! +9 Nicht möglich!

  9. #9
    C4Dnetwork-Supporter Avatar von fLuppster
    Registriert seit
    20.05.2013
    Ort
    Erfurt
    Beiträge
    1.054
    Software
    CINEMA 4D R15

    Standard

    Wahnsinn, danke! Ab in den Adventskalender damit, den kann man doch auch noch im Nachhinein auffüllen.

    Nicht möglich! +2 Nicht möglich!
    C4D R15 / Vectorworks 2014 / Win7
    i7 4790K / 32GB RAM / Titan X (Pascal)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •