1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-03 17:56:21 +03:00

0032622: Draw Harness - writebrep "-version 3" is unrecognized

Fixed version range check.
Added description of -normals argument.
This commit is contained in:
kgv 2021-10-13 21:53:32 +03:00 committed by smoskvin
parent 0c9c466e9d
commit c1638a8db8
2 changed files with 66 additions and 59 deletions

View File

@ -1456,12 +1456,7 @@ static Standard_Integer writebrep (Draw_Interpretor& theDI,
aParam.LowerCase();
if (aParam == "-binary")
{
isBinaryFormat = Standard_True;
if (anArgIter + 1 < theNbArgs
&& Draw::ParseOnOff (theArgVec[anArgIter + 1], isBinaryFormat))
{
++anArgIter;
}
isBinaryFormat = Draw::ParseOnOffNoIterator (theNbArgs, theArgVec, anArgIter);
}
else if (aParam == "-version"
&& anArgIter + 1 < theNbArgs)
@ -1476,26 +1471,12 @@ static Standard_Integer writebrep (Draw_Interpretor& theDI,
else if (aParam == "-notriangles"
|| aParam == "-triangles")
{
isWithTriangles = Standard_True;
if (anArgIter + 1 < theNbArgs
&& Draw::ParseOnOff (theArgVec[anArgIter + 1], isWithTriangles))
{
++anArgIter;
}
if (aParam == "-notriangles")
{
isWithTriangles = !isWithTriangles;
}
isWithTriangles = Draw::ParseOnOffNoIterator (theNbArgs, theArgVec, anArgIter);
}
else if (aParam == "-nonormals"
|| aParam == "-normals")
{
isWithNormals = Standard_True;
if (anArgIter + 1 < theNbArgs
&& Draw::ParseOnOff (theArgVec[anArgIter + 1], isWithNormals))
{
++anArgIter;
}
isWithNormals = Draw::ParseOnOffIterator (theNbArgs, theArgVec, anArgIter);
if (aParam == "-nonormals")
{
isWithNormals = !isWithNormals;
@ -1530,11 +1511,18 @@ static Standard_Integer writebrep (Draw_Interpretor& theDI,
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (theDI);
if (isBinaryFormat)
{
if (aVersion > BinTools_FormatVersion_VERSION_3)
if (aVersion > BinTools_FormatVersion_UPPER)
{
theDI << "Syntax error: unknown format version";
return 1;
}
if (isWithNormals
&& aVersion > 0
&& aVersion < BinTools_FormatVersion_VERSION_4)
{
theDI << "Error: vertex normals require binary format version 4 or later";
return 1;
}
BinTools_FormatVersion aBinToolsVersion = aVersion > 0
? static_cast<BinTools_FormatVersion> (aVersion)
@ -1547,11 +1535,18 @@ static Standard_Integer writebrep (Draw_Interpretor& theDI,
}
else
{
if (aVersion > TopTools_FormatVersion_VERSION_2)
if (aVersion > TopTools_FormatVersion_UPPER)
{
theDI << "Syntax error: unknown format version";
return 1;
}
if (isWithNormals
&& aVersion > 0
&& aVersion < TopTools_FormatVersion_VERSION_3)
{
theDI << "Error: vertex normals require ascii format version 3 or later";
return 1;
}
TopTools_FormatVersion aTopToolsVersion = aVersion > 0
? static_cast<TopTools_FormatVersion> (aVersion)
@ -1729,14 +1724,16 @@ void DBRep::BasicCommands(Draw_Interpretor& theCommands)
"\n\t\t +|-g : switch on/off graphical mode of Progress Indicator",
XProgress,"DE: General");
theCommands.Add("writebrep",
"writebrep shape filename [-binary=off] [-version Version=4] [-noTriangles=off]"
"writebrep shape filename [-binary {0|1}]=0 [-version Version]=4"
"\n\t\t: [-triangles {0|1}]=1 [-normals {0|1}]=0"
"\n\t\t: Save the shape in the ASCII (default) or binary format file."
"\n\t\t: -binary write into the binary format (ASCII when unspecified)"
"\n\t\t: -version a number of format version to save;"
"\n\t\t: ASCII versions: 1, 2 and 3 (3 for ASCII when unspecified);"
"\n\t\t: Binary versions: 1, 2, 3 and 4 (4 for Binary when unspecified)."
"\n\t\t: -noTriangles skip triangulation data (OFF when unspecified)."
"\n\t\t: Ignored (always written) if face defines only triangulation (no surface).",
"\n\t\t: -triangles write triangulation data (TRUE when unspecified)."
"\n\t\t: Ignored (always written) if face defines only triangulation (no surface)."
"\n\t\t: -normals include vertex normals while writing triangulation data (FALSE when unspecified).",
__FILE__, writebrep, g);
theCommands.Add("readbrep",
"readbrep filename shape"

View File

@ -551,39 +551,44 @@ static Standard_Integer DDocStd_PrintComments (Draw_Interpretor& di,
}
//=======================================================================
//function : SetStorageFormatVersion
//purpose :
//function : DDocStd_StorageFormatVersion
//purpose :
//=======================================================================
static Standard_Integer DDocStd_SetStorageFormatVersion (Draw_Interpretor& ,
Standard_Integer nb,
const char** a)
static Standard_Integer DDocStd_StorageFormatVersion (Draw_Interpretor& theDI,
Standard_Integer theNbArgs,
const char** theArgVec)
{
if (nb == 3)
if (theNbArgs != 2
&& theNbArgs != 3)
{
Handle(TDocStd_Document) D;
if (!DDocStd::GetDocument(a[1], D)) return 1;
const int version = atoi(a[2]);
D->ChangeStorageFormatVersion((TDocStd_FormatVersion) version);
return 0;
theDI << "Syntax error: wrong number of arguments";
return 1;
}
return 1;
}
//=======================================================================
//function : GetStorageFormatVersion
//purpose :
//=======================================================================
static Standard_Integer DDocStd_GetStorageFormatVersion (Draw_Interpretor& di,
Standard_Integer nb,
const char** a)
{
if (nb == 2) {
Handle(TDocStd_Document) D;
if (!DDocStd::GetDocument(a[1], D)) return 1;
di << D->StorageFormatVersion() << "\n";
Handle(TDocStd_Document) aDoc;
if (!DDocStd::GetDocument (theArgVec[1], aDoc))
{
theDI << "Syntax error: " << theArgVec[1] << " is not a document";
return 1;
}
if (theNbArgs == 2)
{
theDI << aDoc->StorageFormatVersion() << "\n";
return 0;
}
return 1;
Standard_Integer aVerInt = 0;
if (!Draw::ParseInteger (theArgVec[2], aVerInt)
|| aVerInt < TDocStd_FormatVersion_LOWER
|| aVerInt > TDocStd_FormatVersion_UPPER)
{
theDI << "Syntax error: unknown version '" << theArgVec[2] << "' (valid range is " << TDocStd_FormatVersion_LOWER << ".." << TDocStd_FormatVersion_UPPER << ")";
return 1;
}
aDoc->ChangeStorageFormatVersion ((TDocStd_FormatVersion )aVerInt);
return 0;
}
//=======================================================================
@ -656,12 +661,17 @@ void DDocStd::ApplicationCommands(Draw_Interpretor& theCommands)
"PrintComments Doc",
__FILE__, DDocStd_PrintComments, g);
static const TCollection_AsciiString THE_SET_VER_HELP = TCollection_AsciiString() +
"StorageFormatVersion Doc [Version]"
"\n\t\t: Print or set storage format version within range " + int(TDocStd_FormatVersion_LOWER) + ".." + int(TDocStd_FormatVersion_UPPER) +
"\n\t\t: defined by TDocStd_FormatVersion enumeration.";
theCommands.Add("StorageFormatVersion", THE_SET_VER_HELP.ToCString(),
__FILE__, DDocStd_StorageFormatVersion, g);
theCommands.Add("GetStorageFormatVersion",
"GetStorageFormatVersion Doc"
"\nStorage format versions are defined in TDocStd_FormatVersion.hxx file by an enumeration",
__FILE__, DDocStd_GetStorageFormatVersion, g);
"GetStorageFormatVersion Doc"
"\n\t\t: Alias to StorageFormatVersion",
__FILE__, DDocStd_StorageFormatVersion, g);
theCommands.Add("SetStorageFormatVersion",
"SetStorageFormatVersion Doc Version"
"\nStorage format versions are defined in TDocStd_FormatVersion.hxx file by an enumeration",
__FILE__, DDocStd_SetStorageFormatVersion, g);
"\n\t\t: Alias to StorageFormatVersion",
__FILE__, DDocStd_StorageFormatVersion, g);
}