Tool plugin - AM dialog update
-
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,
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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.
Thanks,
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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.