Jump to content


Bronze Supporter
  • Content Count

  • Joined

  • Last visited

Community Reputation

6 Poor

About Eterea

  • Birthday 07/10/1966

Contact Methods

  • Website URL

Profile Information

  • First Name
  • Last Name
  • C4D Ver
    R20.026 Studio
  • Location
    Zaragoza, Spain
  • Interests
    I like many things, some related to my professional career (graphic designer and "3D artisan") and others not: design, art, architecture, photography, science, technology, cinema, music, literature, travelling, nature...

Recent Profile Visitors

1,273 profile views
  1. Thanks for the extra note on that COFFEE script, C4DS! :-)
  2. Wow, you are fast! THANK YOU SO MUCH, C4DS. It works like a charm :-) And looking at you code (and comparing with the original COFFEE) I thing I will be able to translate some other short similar scripts. I'm a complete novice with C4D scripting… Very grateful :-) PD. The Stage object allows to animate which camera is active on each segment of an animation. — Imagine you have 3 cameras, A-B-C, and each one of these cameras is animated — Cam_A will render from 000 to 099 — Cam_B will render from 100 to 199 — Cam_C will render from 200 to 299 With Stage object you can animate the automatic change from Cam_A to Cam_B from 099 to 100. And later, the change from Cam_B to Cam_C from 199 to 200 Once you add a Stage object to a scene and animate the active cameras (no matter you have 1, 2 o 30 cameras) this Stage object takes control of what you see on viewport (and what is rendered) if that Stage is enabled. And with this script you can quickly switch from those Custom Cameras POV to the Regular Default Perspective camera, go and back (you need to rename the Stage object to “CamSwitch” . I use the CMD-0 shortcut for that. Hope this explanation is good enough :-) Best regards.
  3. Hi guys! I’m here trying to convert this small COFFEE script to Python, without luck… :-/ Could you give me a helping hand? It’s an interesting script to toggle between Default Perspective and the linked camera(s) on Stage Object. Specially useful for when you have, say, 10 different animated cameras (linked to a single animated Stage Object) and you need to frequently switch between those cameras view and the Default Perspective. Here is the COFFEE script by B.Horgan: // CamSwitch.CSC // CamSwitch V1 B.Horgan 2010 - works with Stage Object to toggle between editor and and linked cameras in stage object // (just switches the stage on and off and refreshes the view ) // NB - rename the Stage Object to 'CamSwitch' for the script to work var switcher,state; switcher=doc->FindObject("CamSwitch");//Find the Stage object (searching by name) if(switcher)//if the stage object exists - { state = switcher#ID_BASEOBJECT_GENERATOR_FLAG; if (state==0) { switcher#ID_BASEOBJECT_GENERATOR_FLAG=1; CallCommand(12147);//redraw view to activate linked camera in Stage Object } else { switcher#ID_BASEOBJECT_GENERATOR_FLAG=0; CallCommand(12202); // Switch to the editor camera } } } Thank you so much in advance! :-)
  4. @kalugin THANK YOU SO MUCH for sharing these commented lines of code. This is a gold resource to start learning how Python works in C4D. Very grateful for this :-)
  5. I have slightly modified the script to transfer the Relative Position, Scale and Rotation from each selected object to their correspondent instances (to better mimic what the native “Instance” tool does). I'm sure this could be done in a more smart way, but anyway it works pretty well :-) import c4d from c4d import gui # Welcome to the world of Python # Created and shared by Kalugin here: # https://www.c4dcafe.com/ipb/forums/topic/104182-create-instances-from-selected-objects/ def main(): doc.StartUndo() # this generates an UNDO stack, every "AddUndo" between .StartUndo() and .EndUndo() will be "undoable" in a single "Ctrl+Z" objects = doc.GetActiveObjects(0) # this get's currently active objects in a list. The "0" parameter means that we don't want to select the children of the objects and we don't care about the oreder of the returned selection for obj in objects: # this iterates over the list of active objects. So for each object: instance = c4d.BaseObject(c4d.Oinstance) # create a new instance object instance.SetName(obj.GetName() + '_inst') # set it's name to the object's name + "_inst" instance.SetRelPos(obj.GetRelPos()) # set it's Relative Position to the object's Relative Position instance.SetRelScale(obj.GetRelScale()) # set it's Relative Scale to the object's Relative Scale instance.SetRelRot(obj.GetRelRot()) # set it's Relative Rotation to the object's Relative Rotation instance[c4d.INSTANCEOBJECT_LINK] = obj # set the instance's source object instance.InsertAfter(obj) # insert the instance object in the object manager, right before the source object. You can use other options. Like .InsertBefore(obj), if you want it after the source object. doc.AddUndo(c4d.UNDOTYPE_NEW, instance) # this adds the insertion of our new instance to the undo stack. doc.EndUndo() # this ends the undo stack c4d.EventAdd() # we infrom C4D that something has occured, otherwise it will not refresh until you click something or do something else if __name__=='__main__': main()
  6. Just a quick note to confirm that I installed your script, kalugin, and it works fantastically! Your comments will be also very useful, as I said. I'm very grateful :-) Best regards.
  7. Thank you so much for sharing that scripts, Kalugin! And also for commenting: this will be of great help! Away from my computer now. But tomorrow I will install for sure! BIG THANKS :-)
  8. Thanks for your reply, Bezo! That is what I was afraid… Well, is not so hard. And, on the other hand, the customisation capabilities in C4D is fantastic, easy and robust :-) Best regards.
  9. With every new C4D release I adapt my interface layouts and palettes to my taste. And there's a thing that bothers me to suffer every time. I don't know if there is a better way to do it? — First of all I create several custom palettes (up to 7-8) with my preferred tools and save each one of these individual custom palettes on my disk. — And then I create several Layouts: to model, to setup/rig my objects, to animate, to xpresso-ing, to render tests… etc. — The big part of my Custom Palettes are present in ALL my Custom Layouts. THEN: Once I end with all this customization. If I decide to make a change to a given Palette, then I need to re-save that palette, and go to each one of my Custom Layouts to substitute the original outdated palette by the new-updated one. This, for each one of my Layouts and Palettes… Is there some way to store a “Palette A”, then use this “Palette A” in 5 different Layouts, in a way that I could update my “Palette A” for all those 5 layouts automatically? THANKS! :-)
  10. Dear HSrdelic, It works PERFECTLY FINE! :-) Now I feel a complete dumb… So many years using that COFFEE script to quickly create a single instance from an object… And in fact is NOT necessary a script for that simple operation. There is a native tool and you can simply search for “Instance” in the “Customize commands” and assign your prefered keymap to that command. So simple! Now I asked myself WHY I initially got that old script, then? And the response is this: that old script allowed to create individual instances for each selected objects (you select 5 objects and automatically get 5 instances) But that is not really so necesary for my workflows… I can live without that script… Thanks again, HSrdelic :-)
  11. Converting all my old simple (or relatively simple) scripts to work with C4D 20… I'm very accustomed to simply press “i” to create an instance of selected object, thanks to an old COFFEE script (you can see it HERE, I don’t remember where I found it, years ago) Now I have created this Python script to do the same thing (just copying from the Script Log, I have no idea of coding for C4D) import c4d #Welcome to the world of Python def main(): def tool(): return c4d.plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) def object(): return doc.GetActiveObject() def tag(): return doc.GetActiveTag() def renderdata(): return doc.GetActiveRenderData() def prefs(id): return c4d.plugins.FindPlugin(id, c4d.PLUGINTYPE_PREFS) c4d.CallCommand(200000067, 200000067) # Duplicate tool()[c4d.MDATA_DUPLICATE_COPIES] = 1 tool()[c4d.MDATA_DUPLICATE_INSTANCES] = 1 c4d.CallButton(tool(), c4d.MDATA_APPLY) if __name__=='__main__': main() c4d.EventAdd() And it works perfectly except for a small thing: it creates a single instance from my selected object (great) but it places it inside a NULL. And I don’t want that. I would prefer my instance to be created automatically just side by side the original object, without nulls. Can you help me with this? THANKS! :-)
  12. Thank you so much for your detailed reply, Hermen! Just this afternoon I have found this interesting post on CGSociety (which is coincident with what you explain) and I have created several scripts like that. Step by step I'm converting to Python all those lost (simple) COFFEE resources that I have used for years :-) THANKS AGAIN!
  13. Thank you so much for your detailed guide, Bezo! I will try tomorrow. Really appreciate :-) EDIT: just tried it and works fantastically well! Thanks, again, bezo! :-)
  14. Hi guys! I just installed the new r20 and, as you surely know, all COFFEE plugins and scripts doesn't work :-/ Could you give me some clue to convert these really simple 2-3 lines COFFEE snippets from COFFEE to Python? I used them for years as quick shortcuts to enable/disable things. I have certain experience creating Python scripts for Modo. But ZERO experience with Python in Cinema. Snippet 1 // Editor_Renderer_OFF.CSC CallCommand(100004781); // Editor Off CallCommand(100004784); // Renderer Off Snippet 2 // ToggleGrid.CSC var doc = GetActiveDocument(); doc->GetActiveBaseDraw()#BASEDRAW_DISPLAYFILTER_GRID = !doc->GetActiveBaseDraw()#BASEDRAW_DISPLAYFILTER_GRID; If you could give me some orientation with only these two, I would convert ALL THESE GUYS (well, the 2-3 lines ones, not the more complex at bottom…) BIG THANKS!
  15. Eterea

    Problem with CINEVERSITY Support-SOLVED

    Just a quick note to confirm that I finally have been contacted by Cineversity, through Facebook Messenger. I finally got an email to directly contact with a person at MAXON.net and they are in charge on this issue. Thanks for your help, guys! :-)