Is SendModelingCommand allowed in Message?[SOLVED]
-
On 12/05/2015 at 05:18, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R16
Platform: Mac OSX ;
Language(s) : C++ ;---------
Hi,I want to call MCOMMAND_CURRENTSTATETOOBJECT when a button is pressed.
I should do this inside Message()'s MSG_DESCRIPTION_COMMAND, I guess, but if I try it my program crashes.
Is this not possible inside Message?Here is my code:
if (type == MSG_DESCRIPTION_COMMAND) { DescriptionCommand* dc = (DescriptionCommand* )data; if (dc->id[0].id == MY_BUTTON) { BaseDocument* doc = static_cast<BaseDocument*>(data); if (!doc) return false; BaseObject* myObject = doc->GetFirstObject(); if (!myObject) return false; ModelingCommandData cd; cd.doc = doc; cd.op = myObject; SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT, cd); } }
Thanks in advance for your help and time!
Greetings,
Casimir Smets -
On 12/05/2015 at 06:03, xxxxxxxx wrote:
It is valid and safe. But you cannot simply cast data (which is a DescriptionCommand) into a basedocument coz it does not hold a basedocument pointer.
You should use node->GetDocument() instead (or GetActiveDocument() which should be valid due to a button click most of the time only being triggered interactively..though this is no guarantee so node->GetDocument() is the better alternative).
Also you might need to do this on a copy of the scene.
-
On 12/05/2015 at 06:22, xxxxxxxx wrote:
Hi,
If I change that, I get no error, and my program doesn't quit.
The only problem is, it is not making it editable..Greetings,
Casimir Smets -
On 12/05/2015 at 06:32, xxxxxxxx wrote:
Hi,
Ignore my previous post
I forgot to cast it and add it to the scene, feeling stupid now yeeeuyGreetings,
Casimir Smets -
On 12/05/2015 at 07:50, xxxxxxxx wrote:
Hi Casimir,
Katachi is right with his answer.
I sense some problems with the concept of casting datatypes here. It is certainly one of the more advanced concepts of C and C++ and probably one which is cause for many (if not most) bugs. As casts are needed in several places in the C4D SDK, I'd recommend to have a read on this topic.
For example here or here or here. Especially the parts about casting pointers are crucial. -
On 13/05/2015 at 08:17, xxxxxxxx wrote:
Hi Andreas,
Thanks for your answer!
I shall definately look more into casting!Greetings,
Casimir Smets