On 22/05/2014 at 11:36, xxxxxxxx wrote:
Is it possible to use a c4d.CallCommand() In A thread?
Here is a small snipet of my code:
from c4d import gui
class RB_Client(c4d.threading.C4DThread) :
def Main(self) :
c4d.CallCommand(12099) # Render to Picture Viewer
Cthread = RB_Client()
This should send the current scene to render in the picture viewer, instead it is ignored/nothing happens. Any help on this would be great!
On 22/05/2014 at 14:40, xxxxxxxx wrote:
No, it is not. The command would be executed in that other thread, too. Command plugins are
meant to be executed in the main thread.
Take a look at "Call function from main thread".
On 27/05/2014 at 14:11, xxxxxxxx wrote:
Would you happen to know if there are any example plugins that use the c4d.SpecialEventAdd()? Or if there is an alternate way to tell Cinema to start rendering from within a thread?
On 28/05/2014 at 01:43, xxxxxxxx wrote:
I don't know of examples that do, but you'll get the ID you pass to SpecialEventAdd()
passed to the CoreMessage() method of a GeDialog or MessageData plugin.
I would've told you if there is.
Btw, here's how I do it in the PV Render Queue plugin. I use the GeDialog.Timer()
method to check if the renderer is still running, and if it is not, start a new rendering.
No thread needed therefore.
def Timer(self, msg) :
rendering = c4d.CheckIsRunning(c4d.CHECKISRUNNING_EXTERNALRENDERING)
if self.active_queue and not rendering:
file\_ = None
for file\_ in self.files:
if not file\_.done: break
if file\_ and not file\_.done:
self.active_queue = False
On 28/05/2014 at 06:59, xxxxxxxx wrote:
Thanks for the help Niklas.