Sat, 03/26/2011 - 11:59
Forums:
Hello,
i want to add Undo/Redo functionality to my OCAF-based project. Functiondrivers etc. are working correctly, but it seems i cannot start new commands. TDocSTd_Document->NewCommand never returns (but also dosn't give an error). Shouldn't this minimal code work?
Handle_TDocStd_Document doc;
Handle(OcafApp) app = new OcafApp();
app->NewDocument ( "Standard", doc );
doc->NewCommand();
//execute the command
As I'm quite new to OCC it's possible that I miss something funtamental about the initialising, but couldn't find any hint in the docs and papers.
Any help would be appreciated.
Thanks,
Stefan
Mon, 03/28/2011 - 10:27
Hello Stefan,
By default Undo is disabled.
Enabling it will take effect with the next call to NewCommand.
See documentation of TDocStd_Document class.
Regards
Sergey
Mon, 03/28/2011 - 11:20
Hello Sregey,
thanks for your answer. I enabled undo by setting the undolimit and calling new command, but still no progress, it never returns from the newcommand() function. here my code and it's behaviour as comments:
Handle_TDocStd_Document doc;
Handle(OcafApp) app = new OcafApp();
app->NewDocument ( "MDTV-Standard", doc );
//this code gets executet, no problems here
doc->SetUndoLimit(100);
//calling this function should activate the undo mechanism
doc->NewCommand();
//it never get here. doc->NewCommand() never returns, no error's or exeptions. Only killing the application helps
Any further ideas?
Greedings,
Stefan
Mon, 03/28/2011 - 17:49
Hello Stefan,
I checked your code with few modifications:
Handle(TDocStd_Document) doc;
Handle(AppStd_Application) app = new AppStd_Application();
app->NewDocument ( "MDTV-Standard", doc );
//this code gets executet, no problems here
if(doc.IsNull()) return 1;
doc->SetUndoLimit(100);
//calling this function should activate the undo mechanism
doc->NewCommand();
cout << "New Command1 is opened" <Main(), 171);
doc->NewCommand();
cout << "New Command2 is opened: val = " << att->Get() <
Mon, 03/28/2011 - 18:48
Hello Sergey,
your code works, thanks for posting. Seems that the problem lies within my overloaded TDocStd_Application. I thought it is necesarry to create one's one class to overrite the Formats() and ResourceName() functions, never before read about AppStd_Application(). If I intend to use only the standart format, can i use this application or are there any limitations?
Again, thank you for your help, you safed me hours and hours of frustrating testing.
Greetings,
Stefan
Mon, 03/28/2011 - 19:03
Hello Stefan,
You can use it (AppStdL_Application or AppStd_Application if you need geometry ) or you may create your own inheriting from TDocStd_Application (consider AppStdL_Application as prototype).
Regards