mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0031856: Draw Harness - ReadStep should propagate progress indicator
Added progress indication to commands ReadStep, WriteStep, ReadIges, WriteIges, XOpen, XSave. Draw_ProgressIndicator::Reset() now backups Tcl result string before evaluating command, so that Draw_ProgressIndicator destructor will not eat error/result message in main command.
This commit is contained in:
parent
3e98579a83
commit
1877dc98c9
@ -11,10 +11,10 @@
|
|||||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||||
// commercial license or contractual agreement.
|
// commercial license or contractual agreement.
|
||||||
|
|
||||||
|
#include <Draw_ProgressIndicator.hxx>
|
||||||
|
|
||||||
#include <Draw.hxx>
|
#include <Draw.hxx>
|
||||||
#include <Draw_Interpretor.hxx>
|
#include <Draw_Interpretor.hxx>
|
||||||
#include <Draw_ProgressIndicator.hxx>
|
|
||||||
#include <Message.hxx>
|
#include <Message.hxx>
|
||||||
#include <Message_Messenger.hxx>
|
#include <Message_Messenger.hxx>
|
||||||
#include <Message_ProgressScope.hxx>
|
#include <Message_ProgressScope.hxx>
|
||||||
@ -64,8 +64,12 @@ Draw_ProgressIndicator::~Draw_ProgressIndicator()
|
|||||||
void Draw_ProgressIndicator::Reset()
|
void Draw_ProgressIndicator::Reset()
|
||||||
{
|
{
|
||||||
Message_ProgressIndicator::Reset();
|
Message_ProgressIndicator::Reset();
|
||||||
if ( myShown ) {
|
if (myShown)
|
||||||
|
{
|
||||||
|
// eval will reset current string result - backup it beforehand
|
||||||
|
const TCollection_AsciiString aTclResStr (myDraw->Result());
|
||||||
myDraw->Eval ( "destroy .xprogress" );
|
myDraw->Eval ( "destroy .xprogress" );
|
||||||
|
*myDraw << aTclResStr;
|
||||||
myShown = Standard_False;
|
myShown = Standard_False;
|
||||||
}
|
}
|
||||||
myBreak = Standard_False;
|
myBreak = Standard_False;
|
||||||
@ -147,6 +151,8 @@ void Draw_ProgressIndicator::Show (const Message_ProgressScope& theScope, const
|
|||||||
"/" << ( aTime - myStartTime ) / GetPosition() << " sec";
|
"/" << ( aTime - myStartTime ) / GetPosition() << " sec";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eval will reset current string result - backup it beforehand
|
||||||
|
const TCollection_AsciiString aTclResStr (myDraw->Result());
|
||||||
if ( ! myShown ) {
|
if ( ! myShown ) {
|
||||||
char command[1024];
|
char command[1024];
|
||||||
Sprintf ( command, "toplevel .xprogress -height 100 -width 410;"
|
Sprintf ( command, "toplevel .xprogress -height 100 -width 410;"
|
||||||
@ -168,7 +174,9 @@ void Draw_ProgressIndicator::Show (const Message_ProgressScope& theScope, const
|
|||||||
aCommand << ".xprogress.bar coords progress_next 2 2 " << (1 + 400 * theScope.GetPortion()) << " 21;";
|
aCommand << ".xprogress.bar coords progress_next 2 2 " << (1 + 400 * theScope.GetPortion()) << " 21;";
|
||||||
aCommand << ".xprogress.text configure -text \"" << aText.str() << "\";";
|
aCommand << ".xprogress.text configure -text \"" << aText.str() << "\";";
|
||||||
aCommand << "update";
|
aCommand << "update";
|
||||||
|
|
||||||
myDraw->Eval (aCommand.str().c_str());
|
myDraw->Eval (aCommand.str().c_str());
|
||||||
|
*myDraw << aTclResStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print textual progress info
|
// Print textual progress info
|
||||||
@ -313,5 +321,3 @@ Standard_Address &Draw_ProgressIndicator::StopIndicator()
|
|||||||
static Standard_Address stopIndicator = 0;
|
static Standard_Address stopIndicator = 0;
|
||||||
return stopIndicator;
|
return stopIndicator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <DDocStd_DrawDocument.hxx>
|
#include <DDocStd_DrawDocument.hxx>
|
||||||
#include <Draw.hxx>
|
#include <Draw.hxx>
|
||||||
#include <Draw_PluginMacro.hxx>
|
#include <Draw_PluginMacro.hxx>
|
||||||
|
#include <Draw_ProgressIndicator.hxx>
|
||||||
#include <Geom_Axis2Placement.hxx>
|
#include <Geom_Axis2Placement.hxx>
|
||||||
#include <Prs3d_Drawer.hxx>
|
#include <Prs3d_Drawer.hxx>
|
||||||
#include <Prs3d_LineAspect.hxx>
|
#include <Prs3d_LineAspect.hxx>
|
||||||
@ -147,11 +148,13 @@ static Standard_Integer saveDoc (Draw_Interpretor& di, Standard_Integer argc, co
|
|||||||
if (!DDocStd::GetDocument(argv[1],D)) return 1;
|
if (!DDocStd::GetDocument(argv[1],D)) return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (di);
|
||||||
|
|
||||||
PCDM_StoreStatus aStatus = PCDM_SS_Doc_IsNull;
|
PCDM_StoreStatus aStatus = PCDM_SS_Doc_IsNull;
|
||||||
if (argc == 3)
|
if (argc == 3)
|
||||||
{
|
{
|
||||||
TCollection_ExtendedString path (argv[2]);
|
TCollection_ExtendedString path (argv[2]);
|
||||||
aStatus = A->SaveAs (D, path);
|
aStatus = A->SaveAs (D, path, aProgress->Start());
|
||||||
}
|
}
|
||||||
else if (!D->IsSaved())
|
else if (!D->IsSaved())
|
||||||
{
|
{
|
||||||
@ -160,7 +163,7 @@ static Standard_Integer saveDoc (Draw_Interpretor& di, Standard_Integer argc, co
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aStatus = A->Save(D);
|
aStatus = A->Save (D, aProgress->Start());
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (aStatus)
|
switch (aStatus)
|
||||||
@ -218,7 +221,8 @@ static Standard_Integer openDoc (Draw_Interpretor& di, Standard_Integer argc, co
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( A->Open(Filename, D) != PCDM_RS_OK )
|
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (di);
|
||||||
|
if ( A->Open(Filename, D, aProgress->Start()) != PCDM_RS_OK )
|
||||||
{
|
{
|
||||||
di << "cannot open XDE document\n";
|
di << "cannot open XDE document\n";
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include <DDocStd_DrawDocument.hxx>
|
#include <DDocStd_DrawDocument.hxx>
|
||||||
#include <Draw.hxx>
|
#include <Draw.hxx>
|
||||||
#include <Draw_Interpretor.hxx>
|
#include <Draw_Interpretor.hxx>
|
||||||
|
#include <Draw_ProgressIndicator.hxx>
|
||||||
#include <Message.hxx>
|
#include <Message.hxx>
|
||||||
#include <IFSelect_SessionPilot.hxx>
|
#include <IFSelect_SessionPilot.hxx>
|
||||||
#include <IGESCAFControl_Reader.hxx>
|
#include <IGESCAFControl_Reader.hxx>
|
||||||
@ -218,12 +219,31 @@ static Standard_Integer ReadIges (Draw_Interpretor& di, Standard_Integer argc, c
|
|||||||
case 'l' : reader.SetLayerMode (mode); break;
|
case 'l' : reader.SetLayerMode (mode); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (di);
|
||||||
|
Message_ProgressScope aRootScope (aProgress->Start(), "IGES import", modfic ? 2 : 1);
|
||||||
|
|
||||||
IFSelect_ReturnStatus readstat = IFSelect_RetVoid;
|
IFSelect_ReturnStatus readstat = IFSelect_RetVoid;
|
||||||
if (modfic) readstat = reader.ReadFile (fnom.ToCString());
|
if (modfic)
|
||||||
else if (XSDRAW::Session()->NbStartingEntities() > 0) readstat = IFSelect_RetDone;
|
{
|
||||||
if (readstat != IFSelect_RetDone) {
|
Message_ProgressScope aReadScope (aRootScope.Next(), "File reading", 1);
|
||||||
if (modfic) di<<"Could not read file "<<fnom.ToCString()<<" , abandon\n";
|
aReadScope.Show();
|
||||||
else di<<"No model loaded\n";
|
readstat = reader.ReadFile (fnom.ToCString());
|
||||||
|
}
|
||||||
|
else if (XSDRAW::Session()->NbStartingEntities() > 0)
|
||||||
|
{
|
||||||
|
readstat = IFSelect_RetDone;
|
||||||
|
}
|
||||||
|
if (readstat != IFSelect_RetDone)
|
||||||
|
{
|
||||||
|
if (modfic)
|
||||||
|
{
|
||||||
|
di<<"Could not read file "<<fnom.ToCString()<<" , abandon\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
di<<"No model loaded\n";
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,7 +256,8 @@ static Standard_Integer ReadIges (Draw_Interpretor& di, Standard_Integer argc, c
|
|||||||
Draw::Set(argv[1],DD);
|
Draw::Set(argv[1],DD);
|
||||||
// di << "Document saved with name " << argv[1];
|
// di << "Document saved with name " << argv[1];
|
||||||
}
|
}
|
||||||
if ( ! reader.Transfer ( doc ) ) {
|
if (!reader.Transfer (doc, aRootScope.Next()))
|
||||||
|
{
|
||||||
di << "Cannot read any relevant data from the IGES file\n";
|
di << "Cannot read any relevant data from the IGES file\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -268,10 +289,16 @@ static Standard_Integer WriteIges (Draw_Interpretor& di, Standard_Integer argc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
XSDRAW::SetNorm ("IGES");
|
XSDRAW::SetNorm ("IGES");
|
||||||
|
|
||||||
|
TCollection_AsciiString fnom, rnom;
|
||||||
|
const Standard_Boolean modfic = XSDRAW::FileAndVar(argv[2], argv[1], "IGES", fnom, rnom);
|
||||||
|
|
||||||
// IGESControl_Writer ICW (Interface_Static::CVal("write.iges.unit"),
|
// IGESControl_Writer ICW (Interface_Static::CVal("write.iges.unit"),
|
||||||
// Interface_Static::IVal("write.iges.brep.mode"));
|
// Interface_Static::IVal("write.iges.brep.mode"));
|
||||||
|
|
||||||
|
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (di);
|
||||||
|
Message_ProgressScope aRootScope (aProgress->Start(), "IGES export", modfic ? 2 : 1);
|
||||||
|
|
||||||
IGESCAFControl_Writer writer ( XSDRAW::Session(), Standard_True );
|
IGESCAFControl_Writer writer ( XSDRAW::Session(), Standard_True );
|
||||||
if (argc == 4) {
|
if (argc == 4) {
|
||||||
Standard_Boolean mode = Standard_True;
|
Standard_Boolean mode = Standard_True;
|
||||||
@ -284,15 +311,21 @@ static Standard_Integer WriteIges (Draw_Interpretor& di, Standard_Integer argc,
|
|||||||
case 'l' : writer.SetLayerMode (mode); break;
|
case 'l' : writer.SetLayerMode (mode); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writer.Transfer ( Doc );
|
writer.Transfer (Doc, aRootScope.Next());
|
||||||
|
|
||||||
TCollection_AsciiString fnom, rnom;
|
|
||||||
Standard_Boolean modfic = XSDRAW::FileAndVar(argv[2], argv[1], "IGES", fnom, rnom);
|
|
||||||
if (modfic)
|
if (modfic)
|
||||||
{
|
{
|
||||||
di << "Writig IGES model to file " << argv[2] << "\n";
|
Message_ProgressScope aWriteScope (aRootScope.Next(), "File writing", 1);
|
||||||
if ( writer.Write ( argv[2] ) ) di<<" Write OK\n";
|
aWriteScope.Show();
|
||||||
else di<<" Write failed\n";
|
di << "Writing IGES model to file " << argv[2] << "\n";
|
||||||
|
if (writer.Write (argv[2]))
|
||||||
|
{
|
||||||
|
di << " Write OK\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
di << " Write failed\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -365,12 +398,30 @@ static Standard_Integer ReadStep (Draw_Interpretor& di, Standard_Integer argc, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (di);
|
||||||
|
Message_ProgressScope aRootScope (aProgress->Start(), "STEP import", modfic ? 2 : 1);
|
||||||
|
|
||||||
IFSelect_ReturnStatus readstat = IFSelect_RetVoid;
|
IFSelect_ReturnStatus readstat = IFSelect_RetVoid;
|
||||||
if (modfic) readstat = reader.ReadFile (fnom.ToCString());
|
if (modfic)
|
||||||
else if (XSDRAW::Session()->NbStartingEntities() > 0) readstat = IFSelect_RetDone;
|
{
|
||||||
if (readstat != IFSelect_RetDone) {
|
Message_ProgressScope aReadScope (aRootScope.Next(), "File reading", 1);
|
||||||
if (modfic) di<<"Could not read file "<<fnom.ToCString()<<" , abandon\n";
|
aReadScope.Show();
|
||||||
else di<<"No model loaded\n";
|
readstat = reader.ReadFile (fnom.ToCString());
|
||||||
|
}
|
||||||
|
else if (XSDRAW::Session()->NbStartingEntities() > 0)
|
||||||
|
{
|
||||||
|
readstat = IFSelect_RetDone;
|
||||||
|
}
|
||||||
|
if (readstat != IFSelect_RetDone)
|
||||||
|
{
|
||||||
|
if (modfic)
|
||||||
|
{
|
||||||
|
di << "Could not read file " << fnom << " , abandon\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
di << "No model loaded\n";
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,7 +435,8 @@ static Standard_Integer ReadStep (Draw_Interpretor& di, Standard_Integer argc, c
|
|||||||
Draw::Set (aDocName, DD);
|
Draw::Set (aDocName, DD);
|
||||||
// di << "Document saved with name " << aDocName;
|
// di << "Document saved with name " << aDocName;
|
||||||
}
|
}
|
||||||
if ( ! reader.Transfer ( doc ) ) {
|
if (!reader.Transfer (doc, aRootScope.Next()))
|
||||||
|
{
|
||||||
di << "Cannot read any relevant data from the STEP file\n";
|
di << "Cannot read any relevant data from the STEP file\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -476,28 +528,34 @@ static Standard_Integer WriteStep (Draw_Interpretor& di, Standard_Integer argc,
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !label.IsNull())
|
|
||||||
|
TCollection_AsciiString fnom, rnom;
|
||||||
|
const Standard_Boolean modfic = XSDRAW::FileAndVar(argv[2], argv[1], "STEP", fnom, rnom);
|
||||||
|
|
||||||
|
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (di);
|
||||||
|
Message_ProgressScope aRootScope (aProgress->Start(), "STEP export", modfic ? 2 : 1);
|
||||||
|
if (!label.IsNull())
|
||||||
{
|
{
|
||||||
di << "Translating label "<< argv[k]<<" of document " << argv[1] << " to STEP\n";
|
di << "Translating label "<< argv[k]<<" of document " << argv[1] << " to STEP\n";
|
||||||
if(!writer.Transfer ( label, mode, multifile ))
|
if (!writer.Transfer (label, mode, multifile, aRootScope.Next()))
|
||||||
{
|
{
|
||||||
di << "The label of document cannot be translated or gives no result\n";
|
di << "The label of document cannot be translated or gives no result\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
di << "Translating document " << argv[1] << " to STEP\n";
|
di << "Translating document " << argv[1] << " to STEP\n";
|
||||||
if ( ! writer.Transfer ( Doc, mode, multifile ) ) {
|
if (!writer.Transfer (Doc, mode, multifile, aRootScope.Next()))
|
||||||
|
{
|
||||||
di << "The document cannot be translated or gives no result\n";
|
di << "The document cannot be translated or gives no result\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TCollection_AsciiString fnom, rnom;
|
|
||||||
Standard_Boolean modfic = XSDRAW::FileAndVar(argv[2], argv[1], "STEP", fnom, rnom);
|
|
||||||
if (modfic)
|
if (modfic)
|
||||||
{
|
{
|
||||||
|
Message_ProgressScope aWriteScope (aRootScope.Next(), "File writing", 1);
|
||||||
|
aWriteScope.Show();
|
||||||
di << "Writing STEP file " << argv[2] << "\n";
|
di << "Writing STEP file " << argv[2] << "\n";
|
||||||
IFSelect_ReturnStatus stat = writer.Write(argv[2]);
|
IFSelect_ReturnStatus stat = writer.Write(argv[2]);
|
||||||
switch (stat) {
|
switch (stat) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user