-// File: DDocStd_MTM.cxx
-// Created: 26.11.02 10:37:33
-// Author: Vladimir ANIKIN
-// Copyright: Open CASCADE 2002
+// Created on: 2002-11-26
+// Created by: Vladimir ANIKIN
+// Copyright (c) 2002-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
#include <DDocStd.hxx>
#include <TDocStd_MultiTransactionManager.hxx>
#include <TDataStd_Integer.hxx>
#include <TDataStd_Real.hxx>
#include <TDataStd_Name.hxx>
+#include <TDataStd_Comment.hxx>
+#include <TDataStd_AsciiString.hxx>
+#include <TDataStd_IntegerArray.hxx>
#include <TDataStd_RealArray.hxx>
+#include <TDataStd_ByteArray.hxx>
#include <TNaming_NamedShape.hxx>
#include <TDataStd_UAttribute.hxx>
#include <TopoDS_Shape.hxx>
#include <Draw_Interpretor.hxx>
+#include <TDF_Reference.hxx>
//=======================================================================
//function : mtmCreate
sMultiTransactionManager = new TDocStd_MultiTransactionManager();
if(n > 1)
- sMultiTransactionManager->SetUndoLimit(atoi(a[1]));
+ sMultiTransactionManager->SetUndoLimit(Draw::Atoi(a[1]));
return 0;
}
static int mtmAddDocument (Draw_Interpretor& di, int n, const char** a)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
if(n > 1) {
Handle(DDocStd_DrawDocument) aDrawDoc =
Handle(DDocStd_DrawDocument)::DownCast(Draw::Get(a[1]));
if(aDrawDoc.IsNull()) {
- di << "Error : wrong document name" << "\n";
+ di << "Error : wrong document name\n";
return 1;
}
sMultiTransactionManager->AddDocument(aDrawDoc->GetDocument());
}
else {
- di << "Error : document name is not defined" << "\n";
+ di << "Error : document name is not defined\n";
return 1;
}
return 0;
static int mtmOpenTransaction (Draw_Interpretor& di, int /*n*/, const char** /*a*/)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
sMultiTransactionManager->OpenCommand();
static int mtmCommitTransaction (Draw_Interpretor& di, int n, const char** a)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
if(n > 1)
static int mtmAbortTransaction (Draw_Interpretor& di, int /*n*/, const char** /*a*/)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
sMultiTransactionManager->AbortCommand();
static int mtmDump (Draw_Interpretor& di, int /*n*/, const char** /*a*/)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
- di << "*** Dump of MTM ***" << "\n";
- //sMultiTransactionManager->DumpTransaction(cout);
+ di << "*** Dump of MTM ***\n";
+ //sMultiTransactionManager->DumpTransaction(std::cout);
Standard_SStream aStream;
sMultiTransactionManager->DumpTransaction(aStream);
di << aStream;
- di << "\n" << "*** End ***" << "\n";
+ di << "\n*** End ***\n";
return 0;
}
static int mtmUndo (Draw_Interpretor& di, int /*n*/, const char** /*a*/)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
sMultiTransactionManager->Undo();
static int mtmRedo (Draw_Interpretor& di, int /*n*/, const char** /*a*/)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
sMultiTransactionManager->Redo();
static int mtmNestedMode (Draw_Interpretor& di, int n, const char** a)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
Standard_Boolean aMode = Standard_False;
if(n > 1) {
- aMode = atoi(a[1]) ? Standard_True : Standard_False;
+ aMode = Draw::Atoi(a[1]) ? Standard_True : Standard_False;
}
sMultiTransactionManager->SetNestedTransactionMode(aMode);
return 0;
static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
{
- if ( argc <4 ) { di << "ERROR: Too few args" << "\n"; return 0; }
- Handle(DDF_Browser) browser =
- Handle(DDF_Browser)::DownCast (Draw::Get(argv[1], Standard_True));
- if ( browser.IsNull() ) { di << "ERROR: Not a browser: " << argv[1] << "\n"; return 0; }
+ if ( argc < 4 ) { di << "ERROR: Too few args\n"; return 1; }
+ Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (argv[1]));
+ if ( browser.IsNull() ) { std::cout << "Syntax error: Not a browser: " << argv[1] << "\n"; return 1; }
TDF_Label lab;
TDF_Tool::Label(browser->Data(),argv[2],lab);
- if ( lab.IsNull() ) { di << "ERROR: label is Null: " << argv[2] << "\n"; return 0; }
+ if ( lab.IsNull() ) { di << "Syntax error: label is Null: " << argv[2] << "\n"; return 1; }
- Standard_Integer num = atoi ( argv[3] );
+ Standard_Integer num = Draw::Atoi ( argv[3] );
TDF_AttributeIterator itr(lab,Standard_False);
for (Standard_Integer i=1; itr.More() && i < num; i++) itr.Next();
- if ( ! itr.More() ) { di << "ERROR: Attribute #" << num << " not found" << "\n"; return 0; }
+ if ( ! itr.More() ) { di << "Syntax error: Attribute #" << num << " not found\n"; return 1; }
const Handle(TDF_Attribute)& att = itr.Value();
- if ( att->IsKind(STANDARD_TYPE(TDataStd_TreeNode)) )
+ if ( att->IsKind(STANDARD_TYPE(TDataStd_TreeNode)) )
{
- Standard_CString type = "";
-// if ( att->ID() == XCAFDoc::ShapeRefGUID() ) type = "Shape Instance Link";
-// else if ( att->ID() == XCAFDoc::ColorRefGUID(XCAFDoc_ColorGen) ) type = "Generic Color Link";
-// else if ( att->ID() == XCAFDoc::ColorRefGUID(XCAFDoc_ColorSurf) ) type = "Surface Color Link";
-// else if ( att->ID() == XCAFDoc::ColorRefGUID(XCAFDoc_ColorCurv) ) type = "Curve Color Link";
-// else return 0;
Handle(TDataStd_TreeNode) TN = Handle(TDataStd_TreeNode)::DownCast(att);
TCollection_AsciiString ref;
if ( TN->HasFather() )
{
TDF_Tool::Entry ( TN->Father()->Label(), ref );
- di << type << " ==> " << ref.ToCString();
+ di << " ==> " << ref.ToCString();
}
else
{
- di << type << " <== (" << ref.ToCString();
+ di << " <== (" << ref.ToCString();
Handle(TDataStd_TreeNode) child = TN->First();
while ( ! child.IsNull() )
{
di << ")";
}
}
+ else if ( att->IsKind(STANDARD_TYPE(TDF_Reference)) )
+ {
+ Handle(TDF_Reference) val = Handle(TDF_Reference)::DownCast ( att );
+ TCollection_AsciiString ref;
+ TDF_Tool::Entry ( val->Get(), ref );
+ di << "==> " << ref.ToCString();
+ }
else if ( att->IsKind(STANDARD_TYPE(TDataStd_Integer)) )
{
Handle(TDataStd_Integer) val = Handle(TDataStd_Integer)::DownCast ( att );
TCollection_AsciiString str ( val->Get() );
di << str.ToCString();
}
- else if ( att->IsKind(STANDARD_TYPE(TDataStd_Name)) )
+ else if ( att->IsKind(STANDARD_TYPE(TDataStd_Name)) )
{
Handle(TDataStd_Name) val = Handle(TDataStd_Name)::DownCast ( att );
TCollection_AsciiString str ( val->Get(), '?' );
di << str.ToCString();
}
- else if ( att->IsKind(STANDARD_TYPE(TDataStd_RealArray)) )
+ else if ( att->IsKind(STANDARD_TYPE(TDataStd_Comment)) )
+ {
+ Handle(TDataStd_Comment) val = Handle(TDataStd_Comment)::DownCast ( att );
+ TCollection_AsciiString str ( val->Get(), '?' );
+ di << str.ToCString();
+ }
+ else if ( att->IsKind(STANDARD_TYPE(TDataStd_AsciiString)) )
+ {
+ Handle(TDataStd_AsciiString) val = Handle(TDataStd_AsciiString)::DownCast ( att );
+ TCollection_AsciiString str ( val->Get(), '?' );
+ di << str.ToCString();
+ }
+ else if ( att->IsKind(STANDARD_TYPE(TDataStd_IntegerArray)) )
+ {
+ Handle(TDataStd_IntegerArray) val = Handle(TDataStd_IntegerArray)::DownCast ( att );
+ for ( Standard_Integer j=val->Lower(); j <= val->Upper(); j++ )
+ {
+ if ( j > val->Lower() ) di << ", ";
+ TCollection_AsciiString str ( val->Value(j) );
+ di << str.ToCString();
+ }
+ }
+ else if ( att->IsKind(STANDARD_TYPE(TDataStd_RealArray)) )
{
Handle(TDataStd_RealArray) val = Handle(TDataStd_RealArray)::DownCast ( att );
for ( Standard_Integer j=val->Lower(); j <= val->Upper(); j++ )
di << str.ToCString();
}
}
- else if ( att->IsKind(STANDARD_TYPE(TNaming_NamedShape)) )
+ else if ( att->IsKind(STANDARD_TYPE(TDataStd_ByteArray)) )
+ {
+ Handle(TDataStd_ByteArray) val = Handle(TDataStd_ByteArray)::DownCast ( att );
+ for ( Standard_Integer j=val->Lower(); j <= val->Upper(); j++ )
+ {
+ if ( j > val->Lower() ) di << ", ";
+ TCollection_AsciiString str ( val->Value(j) );
+ di << str.ToCString();
+ }
+ }
+ else if ( att->IsKind(STANDARD_TYPE(TNaming_NamedShape)) )
{
Handle(TNaming_NamedShape) val = Handle(TNaming_NamedShape)::DownCast ( att );
TopoDS_Shape S = val->Get();
static int mtmRemoveDocument (Draw_Interpretor& di, int n, const char** a)
{
if(sMultiTransactionManager.IsNull()) {
- di << "Error : manager is not initialised" << "\n";
+ di << "Error : manager is not initialised\n";
return 1;
}
if(n > 1) {
Handle(DDocStd_DrawDocument) aDrawDoc =
Handle(DDocStd_DrawDocument)::DownCast(Draw::Get(a[1]));
if(aDrawDoc.IsNull()) {
- di << "Error : wrong document name" << "\n";
+ di << "Error : wrong document name\n";
return 1;
}
sMultiTransactionManager->RemoveDocument(aDrawDoc->GetDocument());
}
else {
- di << "Error : document name is not defined" << "\n";
+ di << "Error : document name is not defined\n";
return 1;
}
return 0;