Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 26/01/2014 at 07:33, xxxxxxxx wrote:
User Information: 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) { BaseBitmap *ptr=nullptr; op->Message(MSG_SCRIPT_EXECUTE,&ptr); //annotations = op->GetDataInstance()->GetString(PYTHONSCRIPT_TEXT); } break; }
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:
Hi,
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"; AutoAlloc<BaseFile> file; // Allocate a Python script node BaseList2D* op = (BaseList2D* )AllocListNode(ID_PYTHONSCRIPT); if (op!=nullptr && file->Open(fname)) { BaseContainer* data = op->GetDataInstance(); if (data==nullptr) return false; // Allocate a memory buffer to hold the Python script file Int64 length = file->GetLength(); Char* text = NewMem(Char, length+1); if (text==nullptr) return false; // Read the Python script Char ch; while (file->ReadChar(&ch)) text[file->GetPosition()-1]= ch; text[length] = '\0'; // Set the Python script text in the Python script node container data->SetString(PYTHONSCRIPT_TEXT, text); // Do not forget to delete the memory buffer for the script text DeleteMem(text); // Execute the script op->Message(MSG_SCRIPT_EXECUTE, nullptr); } // Delete the Python script node blDelete(op);
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__': # main() #