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?
Druckbare Version
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.
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 [Only registered and activated users can see links. Click Here To Register...].
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 ;)
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.
[Only registered and activated users can see links. Click Here To Register...]
Wenn was nicht funktionieren sollte, gebt Kund.
Viele Grüße
rownn
Wahnsinn, danke! Ab in den Adventskalender damit, den kann man doch auch noch im Nachhinein auffüllen. ;)