physical renderer switch on problem
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 09/03/2012 at 03:35, xxxxxxxx wrote:
Hi there,
once again the render settings
I have a new scene. and I try to switch on the physical renderer with python. with a script like this:
import c4d from c4d import gui, documents def main() : doc = documents.GetActiveDocument() rd = doc.GetActiveRenderData() def SetREN_physical(rd) : rd[c4d.RDATA_RENDERENGINE] = c4d.RDATA_RENDERENGINE_PHYSICAL c4d.EventAdd() SetREN_physical(rd) if __name__=='__main__': main()
the renderengine in the dropdown (rendersettings) is named Physical,
but there is no "posteffect" Physical in the posteffect list, and if you hit render still the standard renderer is rendering.If you have a new Dokument and you switch to physical renderer by hand and then back to standard by hand. and after that execute the script. the "posteffect" Physical will be there and the physical renderer will be the one to render.
the Question:
Is there a right/better way to switch to physical. so that it works even if the user did not switch physical and back before by hand?thanks a lot
Jops -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 09/03/2012 at 09:05, xxxxxxxx wrote:
Hello, Jops!
As the Physical video post is not inserted automatically, we have to do it on our own. We can use c4d.BaseList2D with the appropriate constant to instantiate a new video post. However, finding constants is not always easy. To find out that the type-identifier of the Physical video post is c4d.VPxmbsampler, I did the following:
- Printed the type of the Physical video post to the console, using c4d.C4DAtom.GetType()
- Iterated through the contents of the Cinema 4D module and print out the names whose values are equal to the id
def main() : for k, v in c4d.\__dict\_\_.iteritems() : if v == 1023342: print k main()
This reveals 2 items, c4d.RDATA_RENDERENGINE_PHYSICAL and c4d.VPxmbsampler. Since all Video-Post type-constants start with VP we're not going to use c4d.RDATA_RENDERENGINE_PHYSICAL as the values of the constants could differ in the next release of Cinema 4D.
# Set's the Cinema 4D's renderer to the Physical Sampler import c4d def main() : rdata = doc.GetActiveRenderData() vpost = rdata.GetFirstVideoPost() rdata[c4d.RDATA_RENDERENGINE] = c4d.RDATA_RENDERENGINE_PHYSICAL while vpost: if vpost.CheckType(c4d.VPxmbsampler) : break vpost = vpost.GetNext() if not vpost: vpost = c4d.BaseList2D(c4d.VPxmbsampler) rdata.InsertVideoPost(vpost) c4d.EventAdd() main()
Cheers!
-Niklas -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 12/03/2012 at 06:57, xxxxxxxx wrote:
Hi Niklas,
once again thanks for your helpI am not shure if I understand the "if not" completely
So I changed the code to my Pidgin-Python. It works as far as I can see.
Is there any reason I shoudnt do this?thanks
Jopsimport c4d def main() : rdata = doc.GetActiveRenderData() vpost = rdata.GetFirstVideoPost() rdata[c4d.RDATA_RENDERENGINE] = c4d.RDATA_RENDERENGINE_PHYSICAL physical_on = False while vpost: if vpost.CheckType(c4d.VPxmbsampler) : physical_on = True vpost = vpost.GetNext() if physical_on == False: vpost = c4d.BaseList2D(c4d.VPxmbsampler) rdata.InsertVideoPost(vpost) c4d.EventAdd() main()
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 12/03/2012 at 10:54, xxxxxxxx wrote:
Hi Jops,
if not vpost:
# ...equals your physical_on. When a Physical VP was found while iterating over the video-posts, the while loop will stop immediately because of the break keyword. In the other case, vpost will equal None because the last video-post in the list will return None on ~.GetNext() or rdata.GetFirstVideoPost() returns None (i.e. no video-posts are available)and no iteration will take place at all .
Cheers,
niklas -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 13/03/2012 at 05:22, xxxxxxxx wrote:
Hi Niklas,
so :
if not vpost:is the same as:
if vpost == None:?
best regards
Jops -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 13/03/2012 at 05:42, xxxxxxxx wrote:
Hi Jops,
well, not exactly. This has nothing to do with Cinema 4D but with Python itself.
if obj:
# ...Checks an object for it's truth value. It is equal to
if bool(obj) == True:
# ...This implicit checking is necessary because Python is a type-less language.
if obj == True:
# ...requires obj to be exactly True. If obj is a string, an integer or any other object, the if condition will evaluate to False. Never check for truth-value explicit.
Cheers,
Niklas -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 13/03/2012 at 06:47, xxxxxxxx wrote:
Hi Niklas,
I guess I will need some time to get my head around this. but I think I got the direction
again and again, Thanks a lott
Jops