Strange Crashing
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 08:18, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 11
Platform: Windows ;
Language(s) : C++ ;---------
Hello,I am trying to get a command button to call a certain function. This is Tool plugin.
Here's the code in the message() which looks for the command button to be clicked.
> `
\> Bool SculptTool::Message(BaseDocument* doc, BaseContainer& data, LONG type, void* t_data) \> { \> \> switch (type) \> { \> case MSG_DESCRIPTION_COMMAND: \> { \> DescriptionCommand *dc = (DescriptionCommand* ) t_data; \> if (dc->id[0].id==COMMAND_SUBDIVIDE) \> { \> GePrint("Subdivide Button Clicked"); \> ModelingCommandData mdat; \> BaseContainer bc; \> mdat.bc = &bc; \> DoCommand(mdat); \> } \> } \> } \> return TRUE; \> } \>`
Here's the code in the DoCommand()
> `
\> Bool SculptTool::DoCommand(ModelingCommandData &mdat;) \> { \> GePrint("In DoCommand"); \> //CODE RELATED TO THE SUBDIVISION OPTIONS///////////////////////////////// \> \> //Define Variables \> \> PolygonObject *objPoly = ToPoly(mdat.doc->GetActiveObject()); \> if (!objPoly) return FALSE; \> \> \> //Determine Attributes \> \> if (mdat.bc->GetBool(HYPERNURBS_SUBDIVISION, TRUE)) //If HyperNURBS is checked \> { \> mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, TRUE); //Set HyperNURBS subdivision \> } \> else \> { \> mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, FALSE); //Disable HyperNURBS subdivision \> } \> mdat.bc->SetLong(MDATA_SUBDIVIDE_SUB, mdat.bc->GetLong(NUM_SUBDIVISIONS)); //Set Number of Subdivisions \> mdat.bc->SetReal(MDATA_SUBDIVIDE_ANGLE, mdat.bc->GetReal(MAX_ANGLE)); //Set Maxiumum Angle \> \> //Subdivision Command \> SendModelingCommand(MCOMMAND_SUBDIVIDE, mdat); \> mdat.bc->SetLong(POLYGON_COUNT, objPoly->GetPolygonCount()); \> \> return TRUE; \> \> //END SUBDIVISION OPTIONS///////////////////////////////////////////////// \> \> \> } \>`
For some reason, C4D crashes whenever I click the command button. I get the "GePrint" message that says "InCommand" so I know the problem is happening in the DoCommand(). Or at least I think that's where it's happening.
Does anyone have any ideas as to what would be causing C4D to crash?
Thanks,
~Shawn
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 09:09, xxxxxxxx wrote:
This line probably points to an empty document pointer.
PolygonObject *objPoly = ToPoly(mdat.doc- >GetActiveObject());
Always check for valid pointers!
Fill the ModelingCommandData with the current document.
cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 09:18, xxxxxxxx wrote:
would I do that with something like this?
BaseDocument* doc;
mdat.doc = doc; -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 09:27, xxxxxxxx wrote:
No, in this case you would simply pass the doc from the Message function.
>
\> Bool SculptTool::Message(BaseDocument\* doc, BaseContainer & data, LONG type, void\* t_data) \> { \> ... \> \> mdat.doc = doc; \> \> ... \> } \>cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 09:32, xxxxxxxx wrote:
Awesome. Okay now it doesn't crash, but the problem now is.. it doesn't do anything. . LOL I still get the "In DoCOmmand" message, so it is doing the command. but none of the code in DoCommand() is executing?
Any thoughts there?
Thanks a lot Matthias.
~Shawn
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 10:36, xxxxxxxx wrote:
Any thoughts on why it's not doing anything?
Thanks,
~Shawn
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 11:45, xxxxxxxx wrote:
Since SendModelingCommand() works on objects, you MUST specify the object in ModelingCommandData:
mdat->op = objPoly;
Otherwise it doesn't do anything, yes.

-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 12:55, xxxxxxxx wrote:
okay I did that and it still does nothing.
Any thoughts? I added
mdat->op = objPoly;Here's new code for DoCommand()
> `
\> Bool SculptTool::DoCommand(ModelingCommandData &mdat;) \> { \> GePrint("In DoCommand"); \> //CODE RELATED TO THE SUBDIVISION OPTIONS///////////////////////////////// \> \> //Define Variables \> \> PolygonObject *objPoly = ToPoly(mdat.doc->GetActiveObject()); \> if (!objPoly) return FALSE; \> mdat.op = objPoly; \> \> //Determine Attributes \> \> if (mdat.bc->GetBool(HYPERNURBS_SUBDIVISION, TRUE)) //If HyperNURBS is checked \> { \> mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, TRUE); //Set HyperNURBS subdivision \> } \> else \> { \> mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, FALSE); //Disable HyperNURBS subdivision \> } \> mdat.bc->SetLong(MDATA_SUBDIVIDE_SUB, mdat.bc->GetLong(NUM_SUBDIVISIONS)); //Set Number of Subdivisions \> mdat.bc->SetReal(MDATA_SUBDIVIDE_ANGLE, mdat.bc->GetReal(MAX_ANGLE)); //Set Maxiumum Angle \> \> //Subdivision Command \> SendModelingCommand(MCOMMAND_SUBDIVIDE, mdat); \> mdat.bc->SetLong(POLYGON_COUNT, objPoly->GetPolygonCount());//Shows the current polygon count \> \> \> return TRUE; \> \> //END SUBDIVISION OPTIONS///////////////////////////////////////////////// \> GePrint("End Of DoCommand"); \> \> } \>`
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 13:57, xxxxxxxx wrote:
Have you checked the values being set in mdat, especially MDATA_SUBDIVIDE_SUB? This must be >0. mdat.mode should be MODIFY_ALL.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 14:36, xxxxxxxx wrote:
okay nothing happens when I click the button. But something very weird happens when I click the button and then resize the viewport frame. I click the button, nothing happens, then I resize the viewport frame and suddenly the cube in my viewport subdivides. But not by the number that is in the LONG NUM_SUBDIVISIONS. I am not sure where it is getting this number from ..
Here's the code I have in DoCommand().
Thanks for your help.
> `
\> Bool SculptTool::DoCommand(ModelingCommandData &mdat;) \> { \> GePrint("In DoCommand"); \> //CODE RELATED TO THE SUBDIVISION OPTIONS///////////////////////////////// \> \> //Define Variables \> \> PolygonObject *objPoly = ToPoly(mdat.doc->GetActiveObject()); \> if (!objPoly) return FALSE; \> mdat.op = objPoly; \> mdat.mode = MODIFY_ALL; \> \> //Determine Attributes \> \> if (mdat.bc->GetBool(HYPERNURBS_SUBDIVISION, TRUE)) //If HyperNURBS is checked \> { \> mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, TRUE); //Set HyperNURBS subdivision \> } \> else \> { \> mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, FALSE); //Disable HyperNURBS subdivision \> } \> mdat.bc->SetLong(MDATA_SUBDIVIDE_SUB, mdat.bc->GetLong(NUM_SUBDIVISIONS); //Set Number of Subdivisions \> mdat.bc->SetReal(MDATA_SUBDIVIDE_ANGLE, mdat.bc->GetReal(MAX_ANGLE)); //Set Maxiumum Angle \> \> //Subdivision Command \> SendModelingCommand(MCOMMAND_SUBDIVIDE, mdat); \> mdat.bc->SetLong(POLYGON_COUNT, objPoly->GetPolygonCount());//Shows the current polygon count \> \> \> return TRUE; \> \> //END SUBDIVISION OPTIONS///////////////////////////////////////////////// \> GePrint("End Of DoCommand"); \> \> } \>`
Weird huh?