

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?
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.
GrüßeCode: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()
rownn
Edit: Code in ScriptManager kopieren und 'Execute' klicken.
Geändert von rownn (11.01.2017 um 16:41 Uhr)
Ich glaube ich bin zu doof das richtig einzustellen. Könntest du es mal in einer Testszene zeigen bitte? Vielen Dank schonmal.
Hier ein kleiner Film.
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)
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.
Ä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
![]()
Wahnsinn, danke! Ab in den Adventskalender damit, den kann man doch auch noch im Nachhinein auffüllen.![]()
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen