On 26/01/2014 at 07:33, xxxxxxxx wrote:
Cinema 4D Version: R15
Platform: Windows ;
Language(s) : C++ ;
I trying to load and run a python script using the example given.
It keeps coming up with FILEERROR = -100 = [FILEERROR_WRONG_VALUE](file:///D:/Users/pgrooff/Documents/pim/c4d/c++%20R15%20sdk/help/pages/ge_prepass/enum_FILEERROR560.html#fileerror_wrong_value9); ???
What am I doing wrong?
case 1000: //do command
Filename fn = "test.py";
BaseList2D *op=(BaseList2D* )AllocListNode(ID_PYTHONSCRIPT);
//BaseDocument *doc = GetActiveDocument();
//Int32 error = ReadHyperFile(doc,op,fn,'scrp',nullptr);
Int32 error = ReadHyperFile(nullptr,op,fn,'scrp',nullptr);
GePrint ("error: " + String::IntToString(error)); // always FILEERROR_WRONG_VALUE?
if (op && ReadHyperFile(nullptr,op,fn,'scrp',nullptr)==FILEERROR_NONE)
//annotations = op->GetDataInstance()->GetString(PYTHONSCRIPT_TEXT);
Note: I am doing the ReadHyperFile twice to get the FILEERROR more clear.
The script is found, if else a -1 would be given.
Also, I do not know how to define "annotations", String?
On 28/01/2014 at 07:44, xxxxxxxx wrote:
I can confirm this issue with ReadHyperFile().
I've got the same FILEERROR_WRONG_VALUE returned with a valid script filename.
I've asked the developers on this issue.
On 29/01/2014 at 05:07, xxxxxxxx wrote:
The documentation is wrong.
The example code for ID_PYTHONSCRIPT only works with ID_COFFEESCRIPT because a Python script isn't a hyper file (a COFFEE script is).
This is why ReadHyperFile() is always returning FILEERROR_WRONG_VALUE.
The Python script content has to be put manually into PYTHONSCRIPT_TEXT.
On 29/01/2014 at 06:30, xxxxxxxx wrote:
Thanks for the quick reply.
Could you please provide an example?
On 29/01/2014 at 08:26, xxxxxxxx wrote:
Here's how to execute a Python script with the C++ API:
Filename fname = "path/to/script.py";
// Allocate a Python script node
BaseList2D* op = (BaseList2D* )AllocListNode(ID_PYTHONSCRIPT);
if (op!=nullptr && file->Open(fname))
BaseContainer* data = op->GetDataInstance();
// Allocate a memory buffer to hold the Python script file
Int64 length = file->GetLength();
Char* text = NewMem(Char, length+1);
// Read the Python script
text[length] = '\0';
// Set the Python script text in the Python script node container
// Do not forget to delete the memory buffer for the script text
// Execute the script
// Delete the Python script node
On 30/01/2014 at 05:15, xxxxxxxx wrote:
Great, it works, thanks.
One addition. Apparently there is some mismatch wit the end -of-line handling, because I have to add a remark (#) at the end of every line. But it works!
import c4d #
from c4d import gui #
#Welcome to the world of Python
def main() : #
gui.MessageDialog('Hello World!') #
if __name__=='__main__': #