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).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 31/08/2006 at 21:34, xxxxxxxx wrote:
User Information: Cinema 4D Version: 9.102 Platform: Windows ; Mac OSX ; Language(s) :
--------- In ToolData::MouseInput(), I have this qualifier key check:
// Left Mouse Button + CTRL to Set Operation else if (qualifier == QCTRL) { operation++; if (operation > IPTOP_ROTATE) operation = IPTOP_SELECT; data.SetLong(MDATA_IPPTOOL_OPERATION, operation); return DrawViews(DA_ONLY_ACTIVE_VIEW|DA_NO_THREAD|DA_NO_ANIMATION); }
I can set the operation without crashing or other problems, but the Attribute Manager subdialog does not update. Now, if I update with the Tool's AM showing - yay. If it is not showing, crash-boom-bye. So, should I send a message to the subdialog or what? I tried a check such as:
if (AMDialog && AMDialog->IsOpen()) ...
Still crashes. Hello???
Thanks,
On 01/09/2006 at 00:08, xxxxxxxx wrote:
I would try one of the "global" message functions. GeSyncMessage look like a good candiate. SpecialEventAdd and EventAdd messages are processed after MouseInput returns. Try sending EVMSG_ASYNCEDITORMOVE, or EVMSG_DOCUMENTRECALCULATED, and handle them in the dialog.
On 01/09/2006 at 06:40, xxxxxxxx wrote:
I tried calling GeSyncMessage(EVMSG_ASYNCEDITORMOVE), but did not handle it in the dialog. Lemme give that a try and see if the results are better.
On 01/09/2006 at 12:04, xxxxxxxx wrote:
Okay, instead of EVMSG_ASYNCEDITORMOVE (which may cause confusion with drag operations) I am using EVMSG_TOOLCHANGED (seems appropriate). So, from MouseInput(), I do this:
// Left Mouse Button + CTRL to Set Operation else if (qualifier == QCTRL) { operation++; if (operation > IPTOP_ROTATE) operation = IPTOP_SELECT; data.SetLong(MDATA_IPPTOOL_OPERATION, operation); GeSyncMessage(EVMSG_TOOLCHANGED); return DrawViews(DA_ONLY_ACTIVE_VIEW|DA_NO_THREAD|DA_NO_ANIMATION); }
and in the tool subdialog, I do this:
//*---------------------------------------------------------------------------* Bool CoreMessage(LONG id, const BaseContainer& msg) //*---------------------------------------------------------------------------* { if (id == EVMSG_TOOLCHANGED) { LONG operation = tooldata->GetLong(MDATA_IPPTOOL_OPERATION); bSelect->SetToggleState((operation == IPTOP_SELECT)); bTranslate->SetToggleState((operation == IPTOP_TRANSLATE)); bScale->SetToggleState((operation == IPTOP_SCALE)); bRotate->SetToggleState((operation == IPTOP_ROTATE)); } return TRUE; }
That does the trick.