Best posts made by pyr
-
RE: Close any C4D Window
can't test it right now, but this should do the trick.
you'll need to install these packages to your c4d installation to make it work
import win32gui import win32ui import win32co from pynput.keyboard import Key, Controller handle = win32gui.FindWindow(0, "Texture Manager") try: if handle: keyboard = Controller() win32gui.SetForegroundWindow(handle) keyboard.press(Key.ctrl) keyboard.press(w) keyboard.release(Key.ctrl) keyboard.press(w) except: pass
-
RE: Python Generator: Getting polygon data from new generators
The default python generator returns a parametric object (c4d.Ocube). So you have to convert it to a editable poly in the generator itself. So you don't need a cso in your script but in the generator when using parametric objects.
Python Generator
import c4d #Welcome to the world of Python def main(): c = c4d.BaseObject(c4d.Ocube) return c4d.utils.SendModelingCommand(command = c4d.MCOMMAND_CURRENTSTATETOOBJECT,list = [c], bc = c4d.BaseContainer(), mode = c4d.MODELINGCOMMANDMODE_ALL, doc = doc, flags = 0)[0]
script
import c4d doc = c4d.documents.GetActiveDocument() gen =doc.GetActiveObject() print gen.GetCache()
-
RE: How to remove generator childs when converting via "c"
forget about it. i removed the c4d.OBJECT_INPUT flag during development and forgot to add it back.
-
RE: Polygon Islands Convenience Method?
this script breaks an poly object into island, colorized it by random, offset to center of bounding box and some noise. after that i connects all islands again.
its super fast compared to my older "solution"
import c4d from c4d import gui import random def AddVertexColor(s,center,rad): cnt = s.GetPointCount() tag = c4d.VariableTag(c4d.Tvertexcolor, cnt) data = tag.GetDataAddressW() bs = s.GetPointS() bs.SelectAll(cnt) done = [] points = s.GetAllPoints() r = random.random() for i in range(cnt): g = (points[0]-center).GetLength() / rad b = c4d.utils.noise.Noise(points[0]*0.01,rad) c = c4d.Vector(r,g,b) c4d.VertexColorTag.SetColor(data, None, None, i, c) s.InsertTag(tag) def main(): random.seed(666) selection = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_NONE) for s in selection: center = s.GetMp() rad = s.GetRad().GetLength() c4d.CallCommand(12298) c4d.CallCommand(17891) mesh = s.GetDown() while mesh: AddVertexColor(mesh,center,rad) mesh = mesh.GetNext() c4d.CallCommand(100004768) c4d.CallCommand(16768) # Execute main() if __name__=='__main__': main()
Latest posts made by pyr
-
RE: Polygon Islands Convenience Method?
this script breaks an poly object into island, colorized it by random, offset to center of bounding box and some noise. after that i connects all islands again.
its super fast compared to my older "solution"
import c4d from c4d import gui import random def AddVertexColor(s,center,rad): cnt = s.GetPointCount() tag = c4d.VariableTag(c4d.Tvertexcolor, cnt) data = tag.GetDataAddressW() bs = s.GetPointS() bs.SelectAll(cnt) done = [] points = s.GetAllPoints() r = random.random() for i in range(cnt): g = (points[0]-center).GetLength() / rad b = c4d.utils.noise.Noise(points[0]*0.01,rad) c = c4d.Vector(r,g,b) c4d.VertexColorTag.SetColor(data, None, None, i, c) s.InsertTag(tag) def main(): random.seed(666) selection = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_NONE) for s in selection: center = s.GetMp() rad = s.GetRad().GetLength() c4d.CallCommand(12298) c4d.CallCommand(17891) mesh = s.GetDown() while mesh: AddVertexColor(mesh,center,rad) mesh = mesh.GetNext() c4d.CallCommand(100004768) c4d.CallCommand(16768) # Execute main() if __name__=='__main__': main()
-
MergeDocument under a selected Null
Hey,
i use
c4d.documents.MergeDocument(doc , f, c4d.SCENEFILTER_OBJECTS | c4d.SCENEFILTER_MATERIALS | c4d.SCENEFILTER_MERGESCENE)
now i would like to group this new scene under a NULL. if i do the whole thing via obj.InsertUnder(null) i miss the materials.
which is totally logical but unfortunately not what i have in mind.So one idea would be to insert the materials separately into the scene by checking the tags. The problem is that I can't be 100% sure that all the materials that are needed will be migrated.
Another approach would be to check which objects are already in the scene and then simply move the newly loaded ones under the zero.
So what is the best way to extend the functionality of MergeDocument to be able to specify a null object as root?
-
Encouraging evaluation when a document is opened
I have several object plugins and they all have the same problem - my custom caching functions work as expected until the document is saved and reopened. In that case the generator object returns an empty object. is there any kind of event I could use to force an update?
-
CENTER AN OBJECT IN THE VIEW AND MAXIMIZE ITS SIZE
I got a setup with a stationary camera. i need to keep the object centered in my view and maximize its size but i can't change the rotation / position of my camera.
what i have so far is the following:
i calculate the center of the objekt and change the offset accordingly to center the object. now if i want to zoom in my offset calculations are wrong again.
edit:
can someone please move the thread into the right subforum?
-
RE: Polygon Islands Convenience Method?
here is a script i use to color polygon groups. unfortunately a bit slow
import c4d from c4d import gui import random def main(): random.seed(666) c4d.CallCommand(12139) # point mode selection = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_NONE) for s in selection: cnt = s.GetPointCount() tag = c4d.VariableTag(c4d.Tvertexcolor, cnt) data = tag.GetDataAddressW() bs = s.GetPointS() done = [] for i in range(cnt): if i in done: continue r = random.random() g = random.random() b = random.random() c = c4d.Vector4d(r,g,b,1) bs.DeselectAll() bs.Select(i) c4d.CallCommand(12557) sel = bs.GetAll(cnt) for index, selected in enumerate(sel): if not selected: continue done.append(index) c4d.VertexColorTag.SetColor(data, None, None, index, c) done = list(set(done)) s.InsertTag(tag) # Execute main() if __name__=='__main__': main()
-
RE: How to remove generator childs when converting via "c"
forget about it. i removed the c4d.OBJECT_INPUT flag during development and forgot to add it back.
-
RE: How to remove generator childs when converting via "c"
@m_magalhaes said in HOW TO REMOVE GENERATOR CHILDS WHEN CONVERTING VIA "C":
Something you can do is touching the objects either with a dependency list or directly.
Ah - i thought that touch only works with GVO. Never tried it to be honest. This solve at least the visibilty problem.
-
How to remove generator childs when converting via "c"
Hey,
i have built a spline gernerator that modifies a spline, when i convert the object i get my modified spline but also the hirachie remains. however i only need the new spline object.
Since GetContour() unfortunately doesn't support HirachyHelper I don't know how to hide the original objects and how to prevent the original splines from being present after the conversion.
-
RE: How to change the EXR compression method via python
The script change the compression method to zip not to Zips or what i expected: RLE because rle was the given value.