mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0031136: Modeling Data - BinXCAF persistence loses normals from triangulation-only Faces
* Information about normals are stored in BinOCAF, XmlOCAF, BRep and BBRep (in case of triangulation-only Faces). * Versions of formats have been changed (11 for BinOCAF, 10 for XmlOCAF, 4 for BRep Shape and 3 for Binary BRep Shape) * Add new optional -version parameter for save/binsave draw commands
This commit is contained in:
@@ -54,6 +54,7 @@ The following sample code reads a shape from ASCII file and writes it to a binar
|
|||||||
* \<flag\>: = "0" | "1";
|
* \<flag\>: = "0" | "1";
|
||||||
* \<int\>: It is an integer number from -2<sup>31</sup> to 2<sup>31</sup>-1 which is written in denary system;
|
* \<int\>: It is an integer number from -2<sup>31</sup> to 2<sup>31</sup>-1 which is written in denary system;
|
||||||
* \<real\>: It is a real from -1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> to 1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and fractional parts;
|
* \<real\>: It is a real from -1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> to 1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and fractional parts;
|
||||||
|
* \<short real\>: It is a real from -3.402823 @f$\cdot@f$ 10<sup>38</sup> to 3.402823 @f$\cdot@f$ 10<sup>38</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and fractional parts;
|
||||||
* \<2D point\>: = \<real\>\<_\>\<real\>;
|
* \<2D point\>: = \<real\>\<_\>\<real\>;
|
||||||
* \<3D point\>: = \<real\>(\<_\>\<real)\><sup>2</sup>;
|
* \<3D point\>: = \<real\>(\<_\>\<real)\><sup>2</sup>;
|
||||||
* \<2D direction\>: It is a \<2D point\> *x y* so that *x<sup>2</sup> + y<sup>2</sup>* = 1;
|
* \<2D direction\>: It is a \<2D point\> *x y* so that *x<sup>2</sup> + y<sup>2</sup>* = 1;
|
||||||
@@ -71,7 +72,7 @@ The following sample code reads a shape from ASCII file and writes it to a binar
|
|||||||
\<content type\> = "DBRep_DrawableShape" \<_\\n\>\<_\\n\>;
|
\<content type\> = "DBRep_DrawableShape" \<_\\n\>\<_\\n\>;
|
||||||
\<content type\> have other values [1].
|
\<content type\> have other values [1].
|
||||||
|
|
||||||
\<version\> = ("CASCADE Topology V1, (c) Matra-Datavision" | "CASCADE Topology V2, (c) Matra-Datavision")\<_\\n\>;
|
\<version\> = ("CASCADE Topology V1, (c) Matra-Datavision" | "CASCADE Topology V2, (c) Matra-Datavision" | "Open CASCADE Topology V3 (c)")\<_\\n\>;
|
||||||
The difference of the versions is described in the document.
|
The difference of the versions is described in the document.
|
||||||
|
|
||||||
Sections \<locations\>, \<geometry\> and \<shapes\> are described below in separate chapters of the document.
|
Sections \<locations\>, \<geometry\> and \<shapes\> are described below in separate chapters of the document.
|
||||||
@@ -1436,14 +1437,16 @@ The example record describes a polyline from *m*=2 nodes with a parameter prese
|
|||||||
|
|
||||||
<triangulation records> = <triangulation record> ^ <triangulation count>;
|
<triangulation records> = <triangulation record> ^ <triangulation count>;
|
||||||
|
|
||||||
<triangulation record> = <triangulation node count> <_> <triangulation triangle count> <_> <triangulation parameter presence flag> <_> <triangulation deflection> <_\n>
|
<triangulation record> = <triangulation node count> <_> <triangulation triangle count> <_> <triangulation parameter presence flag> [<_> <need to write normals flag>] <_> <triangulation deflection> <_\n>
|
||||||
<triangulation nodes> [<_> <triangulation u v parameters>] <_> <triangulation triangles> <_\n>;
|
<triangulation nodes> [<_> <triangulation u v parameters>] <_> <triangulation triangles> [<_> <triangulation normals>] <_\n>;
|
||||||
|
|
||||||
<triangulation node count> = <int>;
|
<triangulation node count> = <int>;
|
||||||
|
|
||||||
<triangulation triangle count> = <int>;
|
<triangulation triangle count> = <int>;
|
||||||
|
|
||||||
<triangulation parameter presence flag> = <flag>;
|
<triangulation parameter presence flag> = <flag>;
|
||||||
|
|
||||||
|
<need to write normals flag> = <flag>;
|
||||||
|
|
||||||
<triangulation deflection> = <real>;
|
<triangulation deflection> = <real>;
|
||||||
|
|
||||||
@@ -1458,10 +1461,17 @@ The example record describes a polyline from *m*=2 nodes with a parameter prese
|
|||||||
|
|
||||||
<triangulation triangles> = (<triangulation triangle> <_>) ^ <triangulation triangle count>;
|
<triangulation triangles> = (<triangulation triangle> <_>) ^ <triangulation triangle count>;
|
||||||
|
|
||||||
<triangulation triangle> = <int> <_> <int> <_> <int>.
|
<triangulation triangle> = <int> <_> <int> <_> <int>;
|
||||||
|
|
||||||
|
<triangulation normals> = (<triangulation normal> <_>) ^ <triangulation node count> ^ 3;
|
||||||
|
|
||||||
|
<triangulation normal> = <short real>.
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
**Description**
|
**Description**
|
||||||
|
|
||||||
|
\<triangulation u v parameters\> are used in version 2 or later.
|
||||||
|
\<need to write normals flag\> and \<triangulation normals\> are used in version 3.
|
||||||
|
|
||||||
\<triangulation record\> describes a triangulation *T* which approximates a surface *S*. The triangulation data consist of a node count @f$ m \geq 3 @f$, a triangle count @f$ k \geq 1 @f$, a parameter presence flag *p*, a deflection @f$ d \geq 0 @f$, nodes @f$ N_{i}\; (1\leq i \leq m) @f$, parameter pairs @f$ u_{i}\; v_{i}\; (1\leq i \leq m) @f$, triangles @f$ n_{j,1}\; n_{j,2}\; n_{j,3}\; (1\leq j \leq k,\; n_{j,l} \in \left \{1,...,m \right \}\; (1\leq l\leq 3)) @f$. The parameters are present only if *p*=1. The deflection describes the triangulation deflection from the surface:
|
\<triangulation record\> describes a triangulation *T* which approximates a surface *S*. The triangulation data consist of a node count @f$ m \geq 3 @f$, a triangle count @f$ k \geq 1 @f$, a parameter presence flag *p*, a deflection @f$ d \geq 0 @f$, nodes @f$ N_{i}\; (1\leq i \leq m) @f$, parameter pairs @f$ u_{i}\; v_{i}\; (1\leq i \leq m) @f$, triangles @f$ n_{j,1}\; n_{j,2}\; n_{j,3}\; (1\leq j \leq k,\; n_{j,l} \in \left \{1,...,m \right \}\; (1\leq l\leq 3)) @f$. The parameters are present only if *p*=1. The deflection describes the triangulation deflection from the surface:
|
||||||
|
|
||||||
@@ -1640,7 +1650,7 @@ An example of section shapes and a whole *.brep file are given in chapter 7 @re
|
|||||||
|
|
||||||
* @f$ f_{1} @f$ -- free;
|
* @f$ f_{1} @f$ -- free;
|
||||||
* @f$ f_{2} @f$ -- modified;
|
* @f$ f_{2} @f$ -- modified;
|
||||||
* @f$ f_{3} @f$ -- IGNORED(version 1) \\ checked (version 2);
|
* @f$ f_{3} @f$ -- IGNORED(version 1 only) \\ checked (version 2 or later);
|
||||||
* @f$ f_{4} @f$ -- orientable;
|
* @f$ f_{4} @f$ -- orientable;
|
||||||
* @f$ f_{5} @f$ -- closed;
|
* @f$ f_{5} @f$ -- closed;
|
||||||
* @f$ f_{6} @f$ -- infinite;
|
* @f$ f_{6} @f$ -- infinite;
|
||||||
@@ -1827,10 +1837,10 @@ Flags \<edge data same parameter flag\>, \<edge data same range flag\> and \<edg
|
|||||||
\<edge data representation data 1\> describes a 3D curve.
|
\<edge data representation data 1\> describes a 3D curve.
|
||||||
|
|
||||||
\<edge data representation data 2\> describes a 2D curve on a surface.
|
\<edge data representation data 2\> describes a 2D curve on a surface.
|
||||||
\<curve values for parameter minimal and maximal values\> are used only in version 2.
|
\<curve values for parameter minimal and maximal values\> are used in version 2 or later.
|
||||||
|
|
||||||
\<edge data representation data 3\> describes a 2D curve on a closed surface.
|
\<edge data representation data 3\> describes a 2D curve on a closed surface.
|
||||||
\<curve values for parameter minimal and maximal values\> are used only in version 2.
|
\<curve values for parameter minimal and maximal values\> are used in version 2 or later.
|
||||||
|
|
||||||
\<edge data representation data 5\> describes a 3D polyline.
|
\<edge data representation data 5\> describes a 3D polyline.
|
||||||
|
|
||||||
|
@@ -2159,6 +2159,14 @@ Existing message files containing 8-bit characters (previously interpreted as ch
|
|||||||
|
|
||||||
@section upgrade_occt760 Upgrade to OCCT 7.6.0
|
@section upgrade_occt760 Upgrade to OCCT 7.6.0
|
||||||
|
|
||||||
|
@subsection upgrade_760_changesInStorageOfShapes Changes in storage of shapes
|
||||||
|
|
||||||
|
Information about per-vertex triangulations normals is now stored in BinOCAF and XmlOCAF document,
|
||||||
|
BRep and Binary BRep Shape formats (only in case of triangulation-only Faces, with no analytical geometry to restore normals).
|
||||||
|
|
||||||
|
Versions of formats have been changed (11 for BinOCAF, 10 for XmlOCAF, 4 for BRep Shape and 3 for Binary BRep Shape).
|
||||||
|
Files written with the new version will not be readable by applications of old versions.
|
||||||
|
|
||||||
@subsection upgrade_760_trimming_surface Trimming surface
|
@subsection upgrade_760_trimming_surface Trimming surface
|
||||||
|
|
||||||
Geom_RectangularTrimmedSurface sequentially trimming in U and V directions already no longer loses the first trim.
|
Geom_RectangularTrimmedSurface sequentially trimming in U and V directions already no longer loses the first trim.
|
||||||
|
@@ -190,7 +190,11 @@ void BRepTools_ShapeSet::AddGeometry(const TopoDS_Shape& S)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (CR->IsPolygonOnTriangulation()) {
|
else if (CR->IsPolygonOnTriangulation()) {
|
||||||
myTriangulations.Add(CR->Triangulation());
|
// NCollection_IndexedDataMap::Add() function use is correct because
|
||||||
|
// Bin(Brep)Tools_ShapeSet::AddGeometry() is called from Bin(Brep)Tools_ShapeSet::Add()
|
||||||
|
// that processes shapes recursively from complex to elementary ones.
|
||||||
|
// As a result, the TopAbs_FACE's will be processed earlier than the TopAbs_EDGE's.
|
||||||
|
myTriangulations.Add(CR->Triangulation(), Standard_False); // edge triangulation does not need normals
|
||||||
myNodes.Add(CR->PolygonOnTriangulation());
|
myNodes.Add(CR->PolygonOnTriangulation());
|
||||||
ChangeLocations().Add(CR->Location());
|
ChangeLocations().Add(CR->Location());
|
||||||
if (CR->IsPolygonOnClosedTriangulation())
|
if (CR->IsPolygonOnClosedTriangulation())
|
||||||
@@ -211,12 +215,19 @@ void BRepTools_ShapeSet::AddGeometry(const TopoDS_Shape& S)
|
|||||||
else if (S.ShapeType() == TopAbs_FACE) {
|
else if (S.ShapeType() == TopAbs_FACE) {
|
||||||
|
|
||||||
// Add the surface geometry
|
// Add the surface geometry
|
||||||
|
Standard_Boolean needNormals = Standard_False;
|
||||||
Handle(BRep_TFace) TF = Handle(BRep_TFace)::DownCast(S.TShape());
|
Handle(BRep_TFace) TF = Handle(BRep_TFace)::DownCast(S.TShape());
|
||||||
if (!TF->Surface().IsNull()) mySurfaces.Add(TF->Surface());
|
if (!TF->Surface().IsNull())
|
||||||
|
{
|
||||||
|
mySurfaces.Add(TF->Surface());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
needNormals = Standard_True;
|
||||||
|
}
|
||||||
if (myWithTriangles || TF->Surface().IsNull()) { // for XML Persistence
|
if (myWithTriangles || TF->Surface().IsNull()) { // for XML Persistence
|
||||||
Handle(Poly_Triangulation) Tr = TF->Triangulation();
|
Handle(Poly_Triangulation) Tr = TF->Triangulation();
|
||||||
if (!Tr.IsNull()) myTriangulations.Add(Tr);
|
if (!Tr.IsNull()) myTriangulations.Add(Tr, needNormals);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChangeLocations().Add(TF->Location());
|
ChangeLocations().Add(TF->Location());
|
||||||
@@ -592,7 +603,7 @@ void BRepTools_ShapeSet::WriteGeometry (const TopoDS_Shape& S, Standard_OStream
|
|||||||
OS << "\n";
|
OS << "\n";
|
||||||
|
|
||||||
// Write UV Points // for XML Persistence higher performance
|
// Write UV Points // for XML Persistence higher performance
|
||||||
if (FormatNb() == 2)
|
if (FormatNb() >= TOP_TOOLS_VERSION_2)
|
||||||
{
|
{
|
||||||
gp_Pnt2d Pf,Pl;
|
gp_Pnt2d Pf,Pl;
|
||||||
if (CR->IsCurveOnClosedSurface()) {
|
if (CR->IsCurveOnClosedSurface()) {
|
||||||
@@ -902,7 +913,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
GeomTools::GetReal(IS, last);
|
GeomTools::GetReal(IS, last);
|
||||||
|
|
||||||
// read UV Points // for XML Persistence higher performance
|
// read UV Points // for XML Persistence higher performance
|
||||||
if (FormatNb() == 2)
|
if (FormatNb() >= TOP_TOOLS_VERSION_2)
|
||||||
{
|
{
|
||||||
GeomTools::GetReal(IS, PfX);
|
GeomTools::GetReal(IS, PfX);
|
||||||
GeomTools::GetReal(IS, PfY);
|
GeomTools::GetReal(IS, PfY);
|
||||||
@@ -920,7 +931,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
// Modified by Sergey KHROMOV - Wed Apr 24 12:11:17 2002 End
|
// Modified by Sergey KHROMOV - Wed Apr 24 12:11:17 2002 End
|
||||||
|
|
||||||
if (closed) {
|
if (closed) {
|
||||||
if (FormatNb() == 2)
|
if (FormatNb() >= TOP_TOOLS_VERSION_2)
|
||||||
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
||||||
myCurves2d.Curve2d(pc2),
|
myCurves2d.Curve2d(pc2),
|
||||||
mySurfaces.Surface(s),
|
mySurfaces.Surface(s),
|
||||||
@@ -941,7 +952,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (FormatNb() == 2)
|
if (FormatNb() >= TOP_TOOLS_VERSION_2)
|
||||||
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
||||||
mySurfaces.Surface(s),
|
mySurfaces.Surface(s),
|
||||||
Locations().Location(l),tol,
|
Locations().Location(l),tol,
|
||||||
@@ -995,7 +1006,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
myBuilder.UpdateEdge
|
myBuilder.UpdateEdge
|
||||||
(E, Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(pt)),
|
(E, Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(pt)),
|
||||||
Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(pt2)),
|
Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(pt2)),
|
||||||
Handle(Poly_Triangulation)::DownCast(myTriangulations(t)),
|
myTriangulations.FindKey(t),
|
||||||
Locations().Location(l));
|
Locations().Location(l));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1003,7 +1014,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
pt > 0 && pt <= myNodes.Extent())
|
pt > 0 && pt <= myNodes.Extent())
|
||||||
myBuilder.UpdateEdge
|
myBuilder.UpdateEdge
|
||||||
(E,Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(pt)),
|
(E,Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(pt)),
|
||||||
Handle(Poly_Triangulation)::DownCast(myTriangulations(t)),
|
myTriangulations.FindKey(t),
|
||||||
Locations().Location(l));
|
Locations().Location(l));
|
||||||
}
|
}
|
||||||
// range
|
// range
|
||||||
@@ -1055,7 +1066,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
//only triangulation
|
//only triangulation
|
||||||
IS >> s;
|
IS >> s;
|
||||||
myBuilder.UpdateFace(TopoDS::Face(S),
|
myBuilder.UpdateFace(TopoDS::Face(S),
|
||||||
Handle(Poly_Triangulation)::DownCast(myTriangulations(s)));
|
myTriangulations.FindKey(s));
|
||||||
}
|
}
|
||||||
// else pos = IS.tellg();
|
// else pos = IS.tellg();
|
||||||
|
|
||||||
@@ -1072,7 +1083,7 @@ void BRepTools_ShapeSet::ReadGeometry (const TopAbs_ShapeEnum T,
|
|||||||
s = atoi ( &string[2] );
|
s = atoi ( &string[2] );
|
||||||
if (s > 0 && s <= myTriangulations.Extent())
|
if (s > 0 && s <= myTriangulations.Extent())
|
||||||
myBuilder.UpdateFace(TopoDS::Face(S),
|
myBuilder.UpdateFace(TopoDS::Face(S),
|
||||||
Handle(Poly_Triangulation)::DownCast(myTriangulations(s)));
|
myTriangulations.FindKey(s));
|
||||||
}
|
}
|
||||||
// else IS.seekg(pos);
|
// else IS.seekg(pos);
|
||||||
}
|
}
|
||||||
@@ -1415,16 +1426,24 @@ void BRepTools_ShapeSet::WriteTriangulation(Standard_OStream& OS,
|
|||||||
Handle(Poly_Triangulation) T;
|
Handle(Poly_Triangulation) T;
|
||||||
for (i = 1; i <= nbtri && aPS.More(); i++, aPS.Next()) {
|
for (i = 1; i <= nbtri && aPS.More(); i++, aPS.Next()) {
|
||||||
|
|
||||||
T = Handle(Poly_Triangulation)::DownCast(myTriangulations(i));
|
T = myTriangulations.FindKey(i);
|
||||||
|
const Standard_Boolean toWriteNormals = myTriangulations(i);
|
||||||
if (Compact) {
|
if (Compact) {
|
||||||
OS << T->NbNodes() << " " << T->NbTriangles() << " ";
|
OS << T->NbNodes() << " " << T->NbTriangles() << " ";
|
||||||
OS << ((T->HasUVNodes()) ? "1" : "0") << " ";
|
OS << ((T->HasUVNodes()) ? "1" : "0") << " ";
|
||||||
|
if (FormatNb() >= TOP_TOOLS_VERSION_3)
|
||||||
|
{
|
||||||
|
OS << ((T->HasNormals() && toWriteNormals) ? "1" : "0") << " ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
OS << " "<< i << " : Triangulation with " << T->NbNodes() << " Nodes and "
|
OS << " "<< i << " : Triangulation with " << T->NbNodes() << " Nodes and "
|
||||||
<< T->NbTriangles() <<" Triangles\n";
|
<< T->NbTriangles() <<" Triangles\n";
|
||||||
OS << " "<<((T->HasUVNodes()) ? "with" : "without") << " UV nodes\n";
|
OS << " "<<((T->HasUVNodes()) ? "with" : "without") << " UV nodes\n";
|
||||||
|
if (FormatNb() >= TOP_TOOLS_VERSION_3)
|
||||||
|
{
|
||||||
|
OS << " " << ((T->HasNormals() && toWriteNormals) ? "with" : "without") << " normals\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// write the deflection
|
// write the deflection
|
||||||
@@ -1479,6 +1498,32 @@ void BRepTools_ShapeSet::WriteTriangulation(Standard_OStream& OS,
|
|||||||
if (!Compact) OS << "\n";
|
if (!Compact) OS << "\n";
|
||||||
else OS << " ";
|
else OS << " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (FormatNb() >= TOP_TOOLS_VERSION_3)
|
||||||
|
{
|
||||||
|
if (T->HasNormals() && toWriteNormals)
|
||||||
|
{
|
||||||
|
if (!Compact) OS << "\nNormals :\n";
|
||||||
|
const TShort_Array1OfShortReal& Normals = T->Normals();
|
||||||
|
for (j = 1; j <= nbNodes * 3; j++)
|
||||||
|
{
|
||||||
|
if (!Compact)
|
||||||
|
{
|
||||||
|
OS << std::setw(10) << j << " : ";
|
||||||
|
OS << std::setw(17);
|
||||||
|
}
|
||||||
|
OS << Normals(j) << " ";
|
||||||
|
if (!Compact)
|
||||||
|
{
|
||||||
|
OS << "\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OS << " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1505,8 +1550,10 @@ void BRepTools_ShapeSet::ReadTriangulation(Standard_IStream& IS, const Message_P
|
|||||||
// Standard_Integer i, j, val, nbtri;
|
// Standard_Integer i, j, val, nbtri;
|
||||||
Standard_Integer i, j, nbtri =0;
|
Standard_Integer i, j, nbtri =0;
|
||||||
Standard_Real d, x, y, z;
|
Standard_Real d, x, y, z;
|
||||||
|
Standard_Real normal;
|
||||||
Standard_Integer nbNodes =0, nbTriangles=0;
|
Standard_Integer nbNodes =0, nbTriangles=0;
|
||||||
Standard_Boolean hasUV= Standard_False;
|
Standard_Boolean hasUV= Standard_False;
|
||||||
|
Standard_Boolean hasNormals= Standard_False;
|
||||||
|
|
||||||
Handle(Poly_Triangulation) T;
|
Handle(Poly_Triangulation) T;
|
||||||
|
|
||||||
@@ -1519,11 +1566,19 @@ void BRepTools_ShapeSet::ReadTriangulation(Standard_IStream& IS, const Message_P
|
|||||||
for (i=1; i<=nbtri && aPS.More();i++, aPS.Next()) {
|
for (i=1; i<=nbtri && aPS.More();i++, aPS.Next()) {
|
||||||
|
|
||||||
IS >> nbNodes >> nbTriangles >> hasUV;
|
IS >> nbNodes >> nbTriangles >> hasUV;
|
||||||
|
if (FormatNb() >= TOP_TOOLS_VERSION_3)
|
||||||
|
{
|
||||||
|
IS >> hasNormals;
|
||||||
|
}
|
||||||
GeomTools::GetReal(IS, d);
|
GeomTools::GetReal(IS, d);
|
||||||
|
|
||||||
TColgp_Array1OfPnt Nodes(1, nbNodes);
|
TColgp_Array1OfPnt Nodes(1, nbNodes);
|
||||||
TColgp_Array1OfPnt2d UVNodes(1, nbNodes);
|
TColgp_Array1OfPnt2d UVNodes(1, nbNodes);
|
||||||
|
Handle(TShort_HArray1OfShortReal) Normals;
|
||||||
|
if (hasNormals)
|
||||||
|
{
|
||||||
|
Normals = new TShort_HArray1OfShortReal(1, nbNodes * 3);
|
||||||
|
}
|
||||||
for (j = 1; j <= nbNodes; j++) {
|
for (j = 1; j <= nbNodes; j++) {
|
||||||
GeomTools::GetReal(IS, x);
|
GeomTools::GetReal(IS, x);
|
||||||
GeomTools::GetReal(IS, y);
|
GeomTools::GetReal(IS, y);
|
||||||
@@ -1546,12 +1601,24 @@ void BRepTools_ShapeSet::ReadTriangulation(Standard_IStream& IS, const Message_P
|
|||||||
IS >> n1 >> n2 >> n3;
|
IS >> n1 >> n2 >> n3;
|
||||||
Triangles(j).Set(n1,n2,n3);
|
Triangles(j).Set(n1,n2,n3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasNormals)
|
||||||
|
{
|
||||||
|
for (j = 1; j <= nbNodes * 3; j++)
|
||||||
|
{
|
||||||
|
GeomTools::GetReal(IS, normal);
|
||||||
|
Normals->SetValue(j, static_cast<Standard_ShortReal>(normal));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (hasUV) T = new Poly_Triangulation(Nodes,UVNodes,Triangles);
|
if (hasUV) T = new Poly_Triangulation(Nodes,UVNodes,Triangles);
|
||||||
else T = new Poly_Triangulation(Nodes,Triangles);
|
else T = new Poly_Triangulation(Nodes,Triangles);
|
||||||
|
|
||||||
T->Deflection(d);
|
T->Deflection(d);
|
||||||
|
if (hasNormals)
|
||||||
myTriangulations.Add(T);
|
{
|
||||||
|
T->SetNormals(Normals);
|
||||||
|
}
|
||||||
|
myTriangulations.Add(T, hasNormals);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -159,7 +159,9 @@ private:
|
|||||||
GeomTools_Curve2dSet myCurves2d;
|
GeomTools_Curve2dSet myCurves2d;
|
||||||
TColStd_IndexedMapOfTransient myPolygons2D;
|
TColStd_IndexedMapOfTransient myPolygons2D;
|
||||||
TColStd_IndexedMapOfTransient myPolygons3D;
|
TColStd_IndexedMapOfTransient myPolygons3D;
|
||||||
TColStd_IndexedMapOfTransient myTriangulations;
|
NCollection_IndexedDataMap<Handle(Poly_Triangulation),
|
||||||
|
Standard_Boolean> myTriangulations; //!< Contains a boolean flag with information
|
||||||
|
//! to save normals for triangulation
|
||||||
TColStd_IndexedMapOfTransient myNodes;
|
TColStd_IndexedMapOfTransient myNodes;
|
||||||
Standard_Boolean myWithTriangles;
|
Standard_Boolean myWithTriangles;
|
||||||
|
|
||||||
|
@@ -33,7 +33,6 @@
|
|||||||
//#include <BinMNaming.hxx>
|
//#include <BinMNaming.hxx>
|
||||||
static Standard_GUID BinLStorageDriver ("13a56835-8269-11d5-aab2-0050044b1af1");
|
static Standard_GUID BinLStorageDriver ("13a56835-8269-11d5-aab2-0050044b1af1");
|
||||||
static Standard_GUID BinLRetrievalDriver("13a56836-8269-11d5-aab2-0050044b1af1");
|
static Standard_GUID BinLRetrievalDriver("13a56836-8269-11d5-aab2-0050044b1af1");
|
||||||
#define CURRENT_DOCUMENT_VERSION 10
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Factory
|
//function : Factory
|
||||||
@@ -100,7 +99,7 @@ Handle(BinMDF_ADriverTable) BinLDrivers::AttributeDrivers
|
|||||||
|
|
||||||
TCollection_AsciiString BinLDrivers::StorageVersion()
|
TCollection_AsciiString BinLDrivers::StorageVersion()
|
||||||
{
|
{
|
||||||
TCollection_AsciiString aVersionStr (CURRENT_DOCUMENT_VERSION);
|
TCollection_AsciiString aVersionStr (THE_CURRENT_VERSION);
|
||||||
return aVersionStr;
|
return aVersionStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#define _BinLDrivers_HeaderFile
|
#define _BinLDrivers_HeaderFile
|
||||||
|
|
||||||
#include <Standard_Handle.hxx>
|
#include <Standard_Handle.hxx>
|
||||||
|
#include <BinLDrivers_FormatVersion.hxx>
|
||||||
|
|
||||||
class Standard_Transient;
|
class Standard_Transient;
|
||||||
class Standard_GUID;
|
class Standard_GUID;
|
||||||
@@ -43,6 +44,10 @@ public:
|
|||||||
|
|
||||||
//! returns last storage version
|
//! returns last storage version
|
||||||
Standard_EXPORT static TCollection_AsciiString StorageVersion();
|
Standard_EXPORT static TCollection_AsciiString StorageVersion();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
static const Standard_Integer THE_CURRENT_VERSION = BIN_LDRIVERS_VERSION_11;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _BinLDrivers_HeaderFile
|
#endif // _BinLDrivers_HeaderFile
|
||||||
|
@@ -168,7 +168,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Standard_Integer aFileVer = aHeaderData->StorageVersion().IntegerValue();
|
Standard_Integer aFileVer = aHeaderData->StorageVersion().IntegerValue();
|
||||||
Standard_Integer aCurrVer = BinLDrivers::StorageVersion().IntegerValue();
|
Standard_Integer aCurrVer = BinLDrivers::THE_CURRENT_VERSION;
|
||||||
// maintain one-way compatibility starting from version 2+
|
// maintain one-way compatibility starting from version 2+
|
||||||
if (!CheckDocumentVersion(aFileVer, aCurrVer)) {
|
if (!CheckDocumentVersion(aFileVer, aCurrVer)) {
|
||||||
myReaderStatus = PCDM_RS_NoVersion;
|
myReaderStatus = PCDM_RS_NoVersion;
|
||||||
@@ -192,7 +192,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
|
|||||||
else if (aStr == END_TYPES)
|
else if (aStr == END_TYPES)
|
||||||
break;
|
break;
|
||||||
else if (begin) {
|
else if (begin) {
|
||||||
if ( aFileVer < 8 ) {
|
if ( aFileVer < BIN_LDRIVERS_VERSION_8) {
|
||||||
#ifdef DATATYPE_MIGRATION
|
#ifdef DATATYPE_MIGRATION
|
||||||
TCollection_AsciiString newName;
|
TCollection_AsciiString newName;
|
||||||
if(Storage_Schema::CheckTypeMigration(aStr, newName)) {
|
if(Storage_Schema::CheckTypeMigration(aStr, newName)) {
|
||||||
@@ -236,7 +236,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
|
|||||||
Message_ProgressScope aPS(theRange, "Reading data", 3);
|
Message_ProgressScope aPS(theRange, "Reading data", 3);
|
||||||
|
|
||||||
// 2b. Read the TOC of Sections
|
// 2b. Read the TOC of Sections
|
||||||
if (aFileVer >= 3) {
|
if (aFileVer >= BIN_LDRIVERS_VERSION_3) {
|
||||||
BinLDrivers_DocumentSection aSection;
|
BinLDrivers_DocumentSection aSection;
|
||||||
do {
|
do {
|
||||||
BinLDrivers_DocumentSection::ReadTOC (aSection, theIStream, aFileVer);
|
BinLDrivers_DocumentSection::ReadTOC (aSection, theIStream, aFileVer);
|
||||||
@@ -347,7 +347,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read Sections (post-reading type)
|
// Read Sections (post-reading type)
|
||||||
if (aFileVer >= 3) {
|
if (aFileVer >= BIN_LDRIVERS_VERSION_3) {
|
||||||
BinLDrivers_VectorOfDocumentSection::Iterator aSectIter (mySections);
|
BinLDrivers_VectorOfDocumentSection::Iterator aSectIter (mySections);
|
||||||
for (; aSectIter.More(); aSectIter.Next()) {
|
for (; aSectIter.More(); aSectIter.Next()) {
|
||||||
BinLDrivers_DocumentSection& aCurSection = aSectIter.ChangeValue();
|
BinLDrivers_DocumentSection& aCurSection = aSectIter.ChangeValue();
|
||||||
@@ -569,7 +569,7 @@ Standard_Boolean BinLDrivers_DocumentRetrievalDriver::CheckDocumentVersion(
|
|||||||
const Standard_Integer theFileVersion,
|
const Standard_Integer theFileVersion,
|
||||||
const Standard_Integer theCurVersion)
|
const Standard_Integer theCurVersion)
|
||||||
{
|
{
|
||||||
if (theFileVersion < 2 || theFileVersion > theCurVersion) {
|
if (theFileVersion < BIN_LDRIVERS_VERSION_2 || theFileVersion > theCurVersion) {
|
||||||
// file was written with another version
|
// file was written with another version
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
@@ -199,7 +199,7 @@ void BinLDrivers_DocumentSection::ReadTOC
|
|||||||
theSection.myName = (Standard_CString)&aBuf[0];
|
theSection.myName = (Standard_CString)&aBuf[0];
|
||||||
|
|
||||||
uint64_t aValue[3];
|
uint64_t aValue[3];
|
||||||
if (theDocFormatVersion <= 9)
|
if (theDocFormatVersion <= BIN_LDRIVERS_VERSION_9)
|
||||||
{
|
{
|
||||||
// Old documents stored file position as 4-bytes values.
|
// Old documents stored file position as 4-bytes values.
|
||||||
Standard_Integer aValInt[3];
|
Standard_Integer aValInt[3];
|
||||||
|
32
src/BinLDrivers/BinLDrivers_FormatVersion.hxx
Normal file
32
src/BinLDrivers/BinLDrivers_FormatVersion.hxx
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (c) 2020 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.
|
||||||
|
|
||||||
|
#ifndef _BinLDriversFormatVersion_HeaderFile
|
||||||
|
#define _BinLDriversFormatVersion_HeaderFile
|
||||||
|
|
||||||
|
//! Defined BinLDrivers format version
|
||||||
|
enum BinLDrivers_FormatVersion
|
||||||
|
{
|
||||||
|
BIN_LDRIVERS_VERSION_2 = 2, //!< First supported version
|
||||||
|
BIN_LDRIVERS_VERSION_3, //!< Add Delta to numbers data, changes in ShapeSection
|
||||||
|
BIN_LDRIVERS_VERSION_4, //!< entry, ContextLabel for tree
|
||||||
|
BIN_LDRIVERS_VERSION_5, //!< Convert old format to new
|
||||||
|
BIN_LDRIVERS_VERSION_6, //!< Add location
|
||||||
|
BIN_LDRIVERS_VERSION_7, //!< Add orientation, type migration
|
||||||
|
BIN_LDRIVERS_VERSION_8, //!< Stop convert old format
|
||||||
|
BIN_LDRIVERS_VERSION_9, //!< Add GUIDs, ReadTOC changed
|
||||||
|
BIN_LDRIVERS_VERSION_10, //!< Process user defined guid
|
||||||
|
BIN_LDRIVERS_VERSION_11 //!< Add normals to Shape
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@@ -6,5 +6,6 @@ BinLDrivers_DocumentSection.cxx
|
|||||||
BinLDrivers_DocumentSection.hxx
|
BinLDrivers_DocumentSection.hxx
|
||||||
BinLDrivers_DocumentStorageDriver.cxx
|
BinLDrivers_DocumentStorageDriver.cxx
|
||||||
BinLDrivers_DocumentStorageDriver.hxx
|
BinLDrivers_DocumentStorageDriver.hxx
|
||||||
|
BinLDrivers_FormatVersion.hxx
|
||||||
BinLDrivers_Marker.hxx
|
BinLDrivers_Marker.hxx
|
||||||
BinLDrivers_VectorOfDocumentSection.hxx
|
BinLDrivers_VectorOfDocumentSection.hxx
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <Standard_Integer.hxx>
|
#include <Standard_Integer.hxx>
|
||||||
#include <BinObjMgt_Persistent.hxx>
|
#include <BinObjMgt_Persistent.hxx>
|
||||||
|
#include <BinLDrivers_FormatVersion.hxx>
|
||||||
|
|
||||||
class BinMDF_ADriverTable;
|
class BinMDF_ADriverTable;
|
||||||
class Message_Messenger;
|
class Message_Messenger;
|
||||||
@@ -41,7 +42,7 @@ template<class T>
|
|||||||
static void SetAttributeID(const BinObjMgt_Persistent& theSource, const Handle(T)& anAtt, const Standard_Integer aDocFormatVersion)
|
static void SetAttributeID(const BinObjMgt_Persistent& theSource, const Handle(T)& anAtt, const Standard_Integer aDocFormatVersion)
|
||||||
{
|
{
|
||||||
Standard_Boolean ok = Standard_True;
|
Standard_Boolean ok = Standard_True;
|
||||||
if(aDocFormatVersion > 9) { // process user defined guid
|
if(aDocFormatVersion >= BIN_LDRIVERS_VERSION_10) { // process user defined guid
|
||||||
const Standard_Integer& aPos = theSource.Position();
|
const Standard_Integer& aPos = theSource.Position();
|
||||||
Standard_GUID aGuid;
|
Standard_GUID aGuid;
|
||||||
ok = theSource >> aGuid;
|
ok = theSource >> aGuid;
|
||||||
|
@@ -62,7 +62,7 @@ Standard_Boolean BinMDataStd_AsciiStringDriver::Paste
|
|||||||
Standard_Boolean ok = Source >> aString;
|
Standard_Boolean ok = Source >> aString;
|
||||||
if (ok)
|
if (ok)
|
||||||
aStrAtt->Set( aString );
|
aStrAtt->Set( aString );
|
||||||
if(RelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 8) { // process user defined guid
|
if(RelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_9) { // process user defined guid
|
||||||
const Standard_Integer& aPos = Source.Position();
|
const Standard_Integer& aPos = Source.Position();
|
||||||
Standard_GUID aGuid;
|
Standard_GUID aGuid;
|
||||||
ok = Source >> aGuid;
|
ok = Source >> aGuid;
|
||||||
|
@@ -71,7 +71,7 @@ Standard_Boolean BinMDataStd_ByteArrayDriver::Paste(const BinObjMgt_Persistent&
|
|||||||
anAtt->ChangeArray(bytes);
|
anAtt->ChangeArray(bytes);
|
||||||
|
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_3) {
|
||||||
Standard_Byte aDeltaValue;
|
Standard_Byte aDeltaValue;
|
||||||
if (! (theSource >> aDeltaValue))
|
if (! (theSource >> aDeltaValue))
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
@@ -81,7 +81,7 @@ Standard_Boolean BinMDataStd_ExtStringArrayDriver::Paste
|
|||||||
|
|
||||||
if(ok) {
|
if(ok) {
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_3) {
|
||||||
Standard_Byte aDeltaValue;
|
Standard_Byte aDeltaValue;
|
||||||
if (! (theSource >> aDeltaValue)) {
|
if (! (theSource >> aDeltaValue)) {
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
@@ -67,7 +67,7 @@ Standard_Boolean BinMDataStd_GenericExtStringDriver::Paste
|
|||||||
Standard_Boolean ok = Source >> aStr;
|
Standard_Boolean ok = Source >> aStr;
|
||||||
if (ok)
|
if (ok)
|
||||||
aStrAttr->Set( aStr );
|
aStrAttr->Set( aStr );
|
||||||
if(RelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 8) { // process user defined guid
|
if(RelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_9) { // process user defined guid
|
||||||
const Standard_Integer& aPos = Source.Position();
|
const Standard_Integer& aPos = Source.Position();
|
||||||
Standard_GUID aGuid;
|
Standard_GUID aGuid;
|
||||||
ok = Source >> aGuid;
|
ok = Source >> aGuid;
|
||||||
|
@@ -87,7 +87,7 @@ Standard_Boolean BinMDataStd_IntPackedMapDriver::Paste
|
|||||||
}
|
}
|
||||||
|
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
if(RelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(RelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_3) {
|
||||||
Standard_Byte aDeltaValue;
|
Standard_Byte aDeltaValue;
|
||||||
if (! (Source >> aDeltaValue))
|
if (! (Source >> aDeltaValue))
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
@@ -69,7 +69,7 @@ Standard_Boolean BinMDataStd_IntegerArrayDriver::Paste
|
|||||||
if(!theSource.GetIntArray (&aTargetArray(aFirstInd), aLength))
|
if(!theSource.GetIntArray (&aTargetArray(aFirstInd), aLength))
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_3) {
|
||||||
Standard_Byte aDeltaValue;
|
Standard_Byte aDeltaValue;
|
||||||
if (! (theSource >> aDeltaValue))
|
if (! (theSource >> aDeltaValue))
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
@@ -59,7 +59,7 @@ Standard_Boolean BinMDataStd_IntegerDriver::Paste
|
|||||||
Standard_Boolean ok = theSource >> aValue;
|
Standard_Boolean ok = theSource >> aValue;
|
||||||
if (ok)
|
if (ok)
|
||||||
anAtt->Set(aValue);
|
anAtt->Set(aValue);
|
||||||
if(theRT.GetHeaderData()->StorageVersion().IntegerValue() > 8) { // process user defined guid
|
if(theRT.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_9) { // process user defined guid
|
||||||
const Standard_Integer& aPos = theSource.Position();
|
const Standard_Integer& aPos = theSource.Position();
|
||||||
Standard_GUID aGuid;
|
Standard_GUID aGuid;
|
||||||
ok = theSource >> aGuid;
|
ok = theSource >> aGuid;
|
||||||
|
@@ -70,7 +70,7 @@ Standard_Boolean BinMDataStd_RealArrayDriver::Paste
|
|||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_3) {
|
||||||
Standard_Byte aDeltaValue;
|
Standard_Byte aDeltaValue;
|
||||||
if (! (theSource >> aDeltaValue))
|
if (! (theSource >> aDeltaValue))
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
@@ -59,7 +59,7 @@ Standard_Boolean BinMDataStd_RealDriver::Paste
|
|||||||
Standard_Boolean ok = theSource >> aValue;
|
Standard_Boolean ok = theSource >> aValue;
|
||||||
if (ok)
|
if (ok)
|
||||||
anAtt->Set(aValue);
|
anAtt->Set(aValue);
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 8) { // process user defined guid
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_9) { // process user defined guid
|
||||||
const Standard_Integer& aPos = theSource.Position();
|
const Standard_Integer& aPos = theSource.Position();
|
||||||
Standard_GUID aGuid;
|
Standard_GUID aGuid;
|
||||||
ok = theSource >> aGuid;
|
ok = theSource >> aGuid;
|
||||||
|
@@ -34,7 +34,6 @@
|
|||||||
IMPLEMENT_STANDARD_RTTIEXT(BinMNaming_NamedShapeDriver,BinMDF_ADriver)
|
IMPLEMENT_STANDARD_RTTIEXT(BinMNaming_NamedShapeDriver,BinMDF_ADriver)
|
||||||
|
|
||||||
#define SHAPESET "SHAPE_SECTION"
|
#define SHAPESET "SHAPE_SECTION"
|
||||||
#define FORMAT_NUMBER 3
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
static Standard_Character EvolutionToChar(const TNaming_Evolution theEvol)
|
static Standard_Character EvolutionToChar(const TNaming_Evolution theEvol)
|
||||||
{
|
{
|
||||||
@@ -142,7 +141,7 @@ static int TranslateFrom (const BinObjMgt_Persistent& theSource,
|
|||||||
|
|
||||||
BinMNaming_NamedShapeDriver::BinMNaming_NamedShapeDriver
|
BinMNaming_NamedShapeDriver::BinMNaming_NamedShapeDriver
|
||||||
(const Handle(Message_Messenger)& theMsgDriver)
|
(const Handle(Message_Messenger)& theMsgDriver)
|
||||||
: BinMDF_ADriver (theMsgDriver, STANDARD_TYPE(TNaming_NamedShape)->Name()), myShapeSet(Standard_False),myFormatNb(FORMAT_NUMBER)
|
: BinMDF_ADriver (theMsgDriver, STANDARD_TYPE(TNaming_NamedShape)->Name()), myShapeSet(Standard_False), myFormatNb(BinTools_ShapeSet::THE_CURRENT_VERSION)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
// 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 <BinLDrivers_FormatVersion.hxx>
|
||||||
#include <BinMDF_ADriver.hxx>
|
#include <BinMDF_ADriver.hxx>
|
||||||
#include <BinMNaming.hxx>
|
#include <BinMNaming.hxx>
|
||||||
#include <BinMNaming_NamingDriver.hxx>
|
#include <BinMNaming_NamingDriver.hxx>
|
||||||
@@ -237,7 +237,7 @@ Standard_Boolean BinMNaming_NamingDriver::Paste
|
|||||||
myMessageDriver->Send (aMsg, Message_Warning);
|
myMessageDriver->Send (aMsg, Message_Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 3) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_4) {
|
||||||
TCollection_AsciiString entry;
|
TCollection_AsciiString entry;
|
||||||
ok = theSource >> entry;
|
ok = theSource >> entry;
|
||||||
if(ok) {
|
if(ok) {
|
||||||
@@ -254,8 +254,8 @@ Standard_Boolean BinMNaming_NamingDriver::Paste
|
|||||||
aName.ContextLabel(tLab);
|
aName.ContextLabel(tLab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 4 &&
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_5 &&
|
||||||
theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < 7) {
|
theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < BIN_LDRIVERS_VERSION_7) {
|
||||||
// Orientation processing - converting from old format
|
// Orientation processing - converting from old format
|
||||||
Handle(TNaming_NamedShape) aNShape;
|
Handle(TNaming_NamedShape) aNShape;
|
||||||
if(anAtt->Label().FindAttribute(TNaming_NamedShape::GetID(), aNShape)) {
|
if(anAtt->Label().FindAttribute(TNaming_NamedShape::GetID(), aNShape)) {
|
||||||
@@ -274,7 +274,7 @@ Standard_Boolean BinMNaming_NamingDriver::Paste
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 6) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= BIN_LDRIVERS_VERSION_7) {
|
||||||
ok = theSource >> anIndx;
|
ok = theSource >> anIndx;
|
||||||
TopAbs_Orientation OrientationToApply(TopAbs_FORWARD);
|
TopAbs_Orientation OrientationToApply(TopAbs_FORWARD);
|
||||||
if(ok) {
|
if(ok) {
|
||||||
|
@@ -93,7 +93,7 @@ Standard_Boolean BinMXCAFDoc_LocationDriver::Translate(const BinObjMgt_Persisten
|
|||||||
}
|
}
|
||||||
|
|
||||||
Standard_Integer aFileVer = theMap.GetHeaderData()->StorageVersion().IntegerValue();
|
Standard_Integer aFileVer = theMap.GetHeaderData()->StorageVersion().IntegerValue();
|
||||||
if( aFileVer > 5 && myLocations == 0 )
|
if( aFileVer >= BIN_LDRIVERS_VERSION_6 && myLocations == 0 )
|
||||||
{
|
{
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ Standard_Boolean BinMXCAFDoc_LocationDriver::Translate(const BinObjMgt_Persisten
|
|||||||
Standard_Integer aPower;
|
Standard_Integer aPower;
|
||||||
Handle(TopLoc_Datum3D) aDatum;
|
Handle(TopLoc_Datum3D) aDatum;
|
||||||
|
|
||||||
if( aFileVer > 5 )
|
if( aFileVer >= BIN_LDRIVERS_VERSION_6 )
|
||||||
{
|
{
|
||||||
const TopLoc_Location& aLoc = myLocations->Location(anId);
|
const TopLoc_Location& aLoc = myLocations->Location(anId);
|
||||||
aPower = aLoc.FirstPower();
|
aPower = aLoc.FirstPower();
|
||||||
|
@@ -178,7 +178,6 @@ void BinTools::Write (const TopoDS_Shape& theShape, Standard_OStream& theStream,
|
|||||||
const Message_ProgressRange& theRange)
|
const Message_ProgressRange& theRange)
|
||||||
{
|
{
|
||||||
BinTools_ShapeSet aShapeSet(Standard_True);
|
BinTools_ShapeSet aShapeSet(Standard_True);
|
||||||
aShapeSet.SetFormatNb (3);
|
|
||||||
aShapeSet.Add (theShape);
|
aShapeSet.Add (theShape);
|
||||||
aShapeSet.Write (theStream, theRange);
|
aShapeSet.Write (theStream, theRange);
|
||||||
aShapeSet.Write (theShape, theStream);
|
aShapeSet.Write (theShape, theStream);
|
||||||
|
31
src/BinTools/BinTools_FormatVersion.hxx
Normal file
31
src/BinTools/BinTools_FormatVersion.hxx
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Copyright (c) 2020 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.
|
||||||
|
|
||||||
|
#ifndef _BinToolsFormatVersion_HeaderFile
|
||||||
|
#define _BinToolsFormatVersion_HeaderFile
|
||||||
|
|
||||||
|
//! Defined BinTools format version
|
||||||
|
enum BinTools_FormatVersion
|
||||||
|
{
|
||||||
|
BIN_TOOLS_DEFAULT_VERSION = 0, //!< Default version
|
||||||
|
BIN_TOOLS_VERSION_1 = 1, //!< Does not write CurveOnSurface UV Points
|
||||||
|
//! into the file. On reading calls Check() method.
|
||||||
|
BIN_TOOLS_VERSION_2 = 2, //!< Stores CurveOnSurface UV Points.
|
||||||
|
//! On reading format is recognized from Version string.
|
||||||
|
BIN_TOOLS_VERSION_3 = 3,
|
||||||
|
BIN_TOOLS_VERSION_4 = 4 //!< Stores per-vertex normal information in case
|
||||||
|
//! of triangulation-only Faces, because
|
||||||
|
//! no analytical geometry to restore normals
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@@ -55,9 +55,11 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
//#define MDTV_DEB 1
|
//#define MDTV_DEB 1
|
||||||
const char* Version_1 = "Open CASCADE Topology V1 (c)";
|
Standard_CString BinTools_ShapeSet::Version_1 = "Open CASCADE Topology V1 (c)";
|
||||||
const char* Version_2 = "Open CASCADE Topology V2 (c)";
|
Standard_CString BinTools_ShapeSet::Version_2 = "Open CASCADE Topology V2 (c)";
|
||||||
const char* Version_3 = "Open CASCADE Topology V3 (c)";
|
Standard_CString BinTools_ShapeSet::Version_3 = "Open CASCADE Topology V3 (c)";
|
||||||
|
Standard_CString BinTools_ShapeSet::Version_4 = "Open CASCADE Topology V4 (c)";
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : operator << (gp_Pnt)
|
//function : operator << (gp_Pnt)
|
||||||
//purpose :
|
//purpose :
|
||||||
@@ -76,7 +78,7 @@ static Standard_OStream& operator <<(Standard_OStream& OS, const gp_Pnt P)
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
BinTools_ShapeSet::BinTools_ShapeSet(const Standard_Boolean isWithTriangles)
|
BinTools_ShapeSet::BinTools_ShapeSet(const Standard_Boolean isWithTriangles)
|
||||||
:myFormatNb(3), myWithTriangles(isWithTriangles)
|
:myFormatNb(THE_CURRENT_VERSION), myWithTriangles(isWithTriangles)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -93,6 +95,10 @@ BinTools_ShapeSet::~BinTools_ShapeSet()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BinTools_ShapeSet::SetFormatNb(const Standard_Integer theFormatNb)
|
void BinTools_ShapeSet::SetFormatNb(const Standard_Integer theFormatNb)
|
||||||
{
|
{
|
||||||
|
Standard_ASSERT_RETURN(theFormatNb >= BIN_TOOLS_VERSION_1 &&
|
||||||
|
theFormatNb <= THE_CURRENT_VERSION,
|
||||||
|
"Error: unsupported BinTools version.", );
|
||||||
|
|
||||||
myFormatNb = theFormatNb;
|
myFormatNb = theFormatNb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +261,11 @@ void BinTools_ShapeSet::AddGeometry(const TopoDS_Shape& S)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (CR->IsPolygonOnTriangulation()) {
|
else if (CR->IsPolygonOnTriangulation()) {
|
||||||
myTriangulations.Add(CR->Triangulation());
|
// NCollection_IndexedDataMap::Add() function use is correct because
|
||||||
|
// Bin(Brep)Tools_ShapeSet::AddGeometry() is called from Bin(Brep)Tools_ShapeSet::Add()
|
||||||
|
// that processes shapes recursively from complex to elementary ones.
|
||||||
|
// As a result, the TopAbs_FACE's will be processed earlier than the TopAbs_EDGE's.
|
||||||
|
myTriangulations.Add(CR->Triangulation(), Standard_False); // edge triangulation does not need normals
|
||||||
myNodes.Add(CR->PolygonOnTriangulation());
|
myNodes.Add(CR->PolygonOnTriangulation());
|
||||||
ChangeLocations().Add(CR->Location());
|
ChangeLocations().Add(CR->Location());
|
||||||
if (CR->IsPolygonOnClosedTriangulation())
|
if (CR->IsPolygonOnClosedTriangulation())
|
||||||
@@ -276,14 +286,21 @@ void BinTools_ShapeSet::AddGeometry(const TopoDS_Shape& S)
|
|||||||
else if (S.ShapeType() == TopAbs_FACE) {
|
else if (S.ShapeType() == TopAbs_FACE) {
|
||||||
|
|
||||||
// Add the surface geometry
|
// Add the surface geometry
|
||||||
|
Standard_Boolean needNormals(Standard_False);
|
||||||
Handle(BRep_TFace) TF = Handle(BRep_TFace)::DownCast(S.TShape());
|
Handle(BRep_TFace) TF = Handle(BRep_TFace)::DownCast(S.TShape());
|
||||||
if (!TF->Surface().IsNull()) mySurfaces.Add(TF->Surface());
|
if (!TF->Surface().IsNull())
|
||||||
|
{
|
||||||
|
mySurfaces.Add(TF->Surface());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
needNormals = Standard_True;
|
||||||
|
}
|
||||||
if (myWithTriangles
|
if (myWithTriangles
|
||||||
|| TF->Surface().IsNull())
|
|| TF->Surface().IsNull())
|
||||||
{
|
{
|
||||||
Handle(Poly_Triangulation) Tr = TF->Triangulation();
|
Handle(Poly_Triangulation) Tr = TF->Triangulation();
|
||||||
if (!Tr.IsNull()) myTriangulations.Add(Tr);
|
if (!Tr.IsNull()) myTriangulations.Add(Tr, needNormals);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChangeLocations().Add(TF->Location());
|
ChangeLocations().Add(TF->Location());
|
||||||
@@ -327,12 +344,22 @@ void BinTools_ShapeSet::Write (Standard_OStream& OS,
|
|||||||
{
|
{
|
||||||
|
|
||||||
// write the copyright
|
// write the copyright
|
||||||
if (myFormatNb == 3)
|
if (myFormatNb == BIN_TOOLS_VERSION_4)
|
||||||
|
{
|
||||||
|
OS << "\n" << Version_4 << "\n";
|
||||||
|
}
|
||||||
|
else if (myFormatNb == BIN_TOOLS_VERSION_3)
|
||||||
|
{
|
||||||
OS << "\n" << Version_3 << "\n";
|
OS << "\n" << Version_3 << "\n";
|
||||||
else if (myFormatNb == 2)
|
}
|
||||||
|
else if (myFormatNb == BIN_TOOLS_VERSION_2)
|
||||||
|
{
|
||||||
OS << "\n" << Version_2 << "\n";
|
OS << "\n" << Version_2 << "\n";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
OS << "\n" << Version_1 << "\n";
|
OS << "\n" << Version_1 << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------
|
//-----------------------------------------
|
||||||
// write the locations
|
// write the locations
|
||||||
@@ -413,15 +440,28 @@ void BinTools_ShapeSet::Read (Standard_IStream& IS,
|
|||||||
}
|
}
|
||||||
|
|
||||||
} while ( ! IS.fail() && strcmp(vers,Version_1) && strcmp(vers,Version_2) &&
|
} while ( ! IS.fail() && strcmp(vers,Version_1) && strcmp(vers,Version_2) &&
|
||||||
strcmp(vers,Version_3));
|
strcmp(vers,Version_3) && strcmp(vers,Version_4));
|
||||||
if (IS.fail()) {
|
if (IS.fail()) {
|
||||||
std::cout << "BinTools_ShapeSet::Read: File was not written with this version of the topology"<<std::endl;
|
std::cout << "BinTools_ShapeSet::Read: File was not written with this version of the topology" << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(vers,Version_3) == 0) SetFormatNb(3);
|
if (strcmp(vers, Version_4) == 0)
|
||||||
else if (strcmp(vers,Version_2) == 0) SetFormatNb(2);
|
{
|
||||||
else SetFormatNb(1);
|
SetFormatNb(BIN_TOOLS_VERSION_4);
|
||||||
|
}
|
||||||
|
else if (strcmp(vers, Version_3) == 0)
|
||||||
|
{
|
||||||
|
SetFormatNb(BIN_TOOLS_VERSION_3);
|
||||||
|
}
|
||||||
|
else if (strcmp(vers, Version_2) == 0)
|
||||||
|
{
|
||||||
|
SetFormatNb(BIN_TOOLS_VERSION_2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetFormatNb(BIN_TOOLS_VERSION_1);
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------
|
//-----------------------------------------
|
||||||
// read the locations
|
// read the locations
|
||||||
@@ -481,7 +521,7 @@ void BinTools_ShapeSet::Read (Standard_IStream& IS,
|
|||||||
|
|
||||||
S.Free(aFree);
|
S.Free(aFree);
|
||||||
S.Modified(aMod);
|
S.Modified(aMod);
|
||||||
if (myFormatNb >= 2)
|
if (myFormatNb >= BIN_TOOLS_VERSION_2)
|
||||||
S.Checked(aChecked);
|
S.Checked(aChecked);
|
||||||
else
|
else
|
||||||
S.Checked (Standard_False); // force check at reading..
|
S.Checked (Standard_False); // force check at reading..
|
||||||
@@ -491,7 +531,7 @@ void BinTools_ShapeSet::Read (Standard_IStream& IS,
|
|||||||
S.Convex (aConv);
|
S.Convex (aConv);
|
||||||
// check
|
// check
|
||||||
|
|
||||||
if (myFormatNb == 1)
|
if (myFormatNb == BIN_TOOLS_VERSION_1)
|
||||||
if(T == TopAbs_FACE) {
|
if(T == TopAbs_FACE) {
|
||||||
const TopoDS_Face& F = TopoDS::Face(S);
|
const TopoDS_Face& F = TopoDS::Face(S);
|
||||||
BRepTools::Update(F);
|
BRepTools::Update(F);
|
||||||
@@ -684,7 +724,7 @@ void BinTools_ShapeSet::WriteGeometry (const TopoDS_Shape& S,
|
|||||||
BinTools::PutReal(OS, last);
|
BinTools::PutReal(OS, last);
|
||||||
|
|
||||||
// Write UV Points for higher performance
|
// Write UV Points for higher performance
|
||||||
if (FormatNb() >= 2)
|
if (myFormatNb >= BIN_TOOLS_VERSION_2)
|
||||||
{
|
{
|
||||||
gp_Pnt2d Pf,Pl;
|
gp_Pnt2d Pf,Pl;
|
||||||
if (CR->IsCurveOnClosedSurface()) {
|
if (CR->IsCurveOnClosedSurface()) {
|
||||||
@@ -828,7 +868,7 @@ void BinTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum T,
|
|||||||
|
|
||||||
BRep_ListOfPointRepresentation& lpr = TV->ChangePoints();
|
BRep_ListOfPointRepresentation& lpr = TV->ChangePoints();
|
||||||
TopLoc_Location L;
|
TopLoc_Location L;
|
||||||
Standard_Boolean aNewF = (myFormatNb > 2);
|
Standard_Boolean aNewF = (myFormatNb >= BIN_TOOLS_VERSION_3);
|
||||||
do {
|
do {
|
||||||
if(aNewF) {
|
if(aNewF) {
|
||||||
val = (Standard_Integer)IS.get();//case {0|1|2|3}
|
val = (Standard_Integer)IS.get();//case {0|1|2|3}
|
||||||
@@ -992,7 +1032,7 @@ void BinTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum T,
|
|||||||
BinTools::GetReal(IS, last);
|
BinTools::GetReal(IS, last);
|
||||||
|
|
||||||
// read UV Points // for XML Persistence higher performance
|
// read UV Points // for XML Persistence higher performance
|
||||||
if (FormatNb() >= 2)
|
if (myFormatNb >= BIN_TOOLS_VERSION_2)
|
||||||
{
|
{
|
||||||
BinTools::GetReal(IS, PfX);
|
BinTools::GetReal(IS, PfX);
|
||||||
BinTools::GetReal(IS, PfY);
|
BinTools::GetReal(IS, PfY);
|
||||||
@@ -1008,7 +1048,7 @@ void BinTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum T,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if (closed) {
|
if (closed) {
|
||||||
if (FormatNb() >= 2)
|
if (myFormatNb >= BIN_TOOLS_VERSION_2)
|
||||||
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
||||||
myCurves2d.Curve2d(pc2),
|
myCurves2d.Curve2d(pc2),
|
||||||
mySurfaces.Surface(s),
|
mySurfaces.Surface(s),
|
||||||
@@ -1029,7 +1069,7 @@ void BinTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum T,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (FormatNb() >= 2)
|
if (myFormatNb >= BIN_TOOLS_VERSION_2)
|
||||||
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
myBuilder.UpdateEdge(E,myCurves2d.Curve2d(pc),
|
||||||
mySurfaces.Surface(s),
|
mySurfaces.Surface(s),
|
||||||
Locations().Location(l),tol,
|
Locations().Location(l),tol,
|
||||||
@@ -1080,11 +1120,11 @@ void BinTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum T,
|
|||||||
BinTools::GetInteger(IS, l);
|
BinTools::GetInteger(IS, l);
|
||||||
if (closed)
|
if (closed)
|
||||||
{
|
{
|
||||||
myBuilder.UpdateEdge (E, myNodes(pt), myNodes(pt2), myTriangulations(t), Locations().Location(l));
|
myBuilder.UpdateEdge (E, myNodes(pt), myNodes(pt2), myTriangulations.FindKey(t), Locations().Location(l));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
myBuilder.UpdateEdge (E, myNodes(pt), myTriangulations(t), Locations().Location(l));
|
myBuilder.UpdateEdge (E, myNodes(pt), myTriangulations.FindKey(t), Locations().Location(l));
|
||||||
}
|
}
|
||||||
// range
|
// range
|
||||||
break;
|
break;
|
||||||
@@ -1133,7 +1173,7 @@ void BinTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum T,
|
|||||||
// cas triangulation
|
// cas triangulation
|
||||||
if(aByte == 2) {
|
if(aByte == 2) {
|
||||||
BinTools::GetInteger(IS, s);
|
BinTools::GetInteger(IS, s);
|
||||||
myBuilder.UpdateFace(TopoDS::Face(S), myTriangulations(s));
|
myBuilder.UpdateFace(TopoDS::Face(S), myTriangulations.FindKey(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1446,11 +1486,16 @@ void BinTools_ShapeSet::WriteTriangulation (Standard_OStream& OS,
|
|||||||
for (Standard_Integer aTriangulationIter = 1; aTriangulationIter <= aNbTriangulations && aPS.More(); ++aTriangulationIter, aPS.Next())
|
for (Standard_Integer aTriangulationIter = 1; aTriangulationIter <= aNbTriangulations && aPS.More(); ++aTriangulationIter, aPS.Next())
|
||||||
{
|
{
|
||||||
const Handle(Poly_Triangulation)& aTriangulation = myTriangulations.FindKey (aTriangulationIter);
|
const Handle(Poly_Triangulation)& aTriangulation = myTriangulations.FindKey (aTriangulationIter);
|
||||||
|
Standard_Boolean NeedToWriteNormals = myTriangulations.FindFromIndex(aTriangulationIter);
|
||||||
const Standard_Integer aNbNodes = aTriangulation->NbNodes();
|
const Standard_Integer aNbNodes = aTriangulation->NbNodes();
|
||||||
const Standard_Integer aNbTriangles = aTriangulation->NbTriangles();
|
const Standard_Integer aNbTriangles = aTriangulation->NbTriangles();
|
||||||
BinTools::PutInteger(OS, aNbNodes);
|
BinTools::PutInteger(OS, aNbNodes);
|
||||||
BinTools::PutInteger(OS, aNbTriangles);
|
BinTools::PutInteger(OS, aNbTriangles);
|
||||||
BinTools::PutBool(OS, aTriangulation->HasUVNodes() ? 1 : 0);
|
BinTools::PutBool(OS, aTriangulation->HasUVNodes() ? 1 : 0);
|
||||||
|
if (myFormatNb >= BIN_TOOLS_VERSION_4)
|
||||||
|
{
|
||||||
|
BinTools::PutBool(OS, (aTriangulation->HasNormals() && NeedToWriteNormals) ? 1 : 0);
|
||||||
|
}
|
||||||
BinTools::PutReal(OS, aTriangulation->Deflection());
|
BinTools::PutReal(OS, aTriangulation->Deflection());
|
||||||
|
|
||||||
// write the 3d nodes
|
// write the 3d nodes
|
||||||
@@ -1482,6 +1527,20 @@ void BinTools_ShapeSet::WriteTriangulation (Standard_OStream& OS,
|
|||||||
BinTools::PutInteger(OS, aTri.Value (2));
|
BinTools::PutInteger(OS, aTri.Value (2));
|
||||||
BinTools::PutInteger(OS, aTri.Value (3));
|
BinTools::PutInteger(OS, aTri.Value (3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write the normals
|
||||||
|
if (myFormatNb >= BIN_TOOLS_VERSION_4)
|
||||||
|
{
|
||||||
|
if (aTriangulation->HasNormals() && NeedToWriteNormals)
|
||||||
|
{
|
||||||
|
const TShort_Array1OfShortReal& aNormals = aTriangulation->Normals();
|
||||||
|
for (Standard_Integer aNormalIter = 1; aNormalIter <= 3 * aNbNodes; ++aNormalIter)
|
||||||
|
{
|
||||||
|
const Standard_ShortReal& aNormal = aNormals.Value(aNormalIter);
|
||||||
|
BinTools::PutShortReal(OS, aNormal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Standard_Failure const& anException)
|
catch (Standard_Failure const& anException)
|
||||||
@@ -1518,12 +1577,17 @@ void BinTools_ShapeSet::ReadTriangulation (Standard_IStream& IS,
|
|||||||
{
|
{
|
||||||
Standard_Integer aNbNodes = 0, aNbTriangles = 0;
|
Standard_Integer aNbNodes = 0, aNbTriangles = 0;
|
||||||
Standard_Boolean hasUV = Standard_False;
|
Standard_Boolean hasUV = Standard_False;
|
||||||
|
Standard_Boolean hasNormals = Standard_False;
|
||||||
Standard_Real aDefl = 0.0;
|
Standard_Real aDefl = 0.0;
|
||||||
BinTools::GetInteger(IS, aNbNodes);
|
BinTools::GetInteger(IS, aNbNodes);
|
||||||
BinTools::GetInteger(IS, aNbTriangles);
|
BinTools::GetInteger(IS, aNbTriangles);
|
||||||
BinTools::GetBool(IS, hasUV);
|
BinTools::GetBool(IS, hasUV);
|
||||||
|
if (myFormatNb >= BIN_TOOLS_VERSION_4)
|
||||||
|
{
|
||||||
|
BinTools::GetBool(IS, hasNormals);
|
||||||
|
}
|
||||||
BinTools::GetReal(IS, aDefl); //deflection
|
BinTools::GetReal(IS, aDefl); //deflection
|
||||||
Handle(Poly_Triangulation) aTriangulation = new Poly_Triangulation (aNbNodes, aNbTriangles, hasUV);
|
Handle(Poly_Triangulation) aTriangulation = new Poly_Triangulation (aNbNodes, aNbTriangles, hasUV, hasNormals);
|
||||||
aTriangulation->Deflection (aDefl);
|
aTriangulation->Deflection (aDefl);
|
||||||
|
|
||||||
TColgp_Array1OfPnt& aNodes = aTriangulation->ChangeNodes();
|
TColgp_Array1OfPnt& aNodes = aTriangulation->ChangeNodes();
|
||||||
@@ -1556,7 +1620,19 @@ void BinTools_ShapeSet::ReadTriangulation (Standard_IStream& IS,
|
|||||||
BinTools::GetInteger(IS, aTri.ChangeValue (3));
|
BinTools::GetInteger(IS, aTri.ChangeValue (3));
|
||||||
}
|
}
|
||||||
|
|
||||||
myTriangulations.Add (aTriangulation);
|
if (hasNormals)
|
||||||
|
{
|
||||||
|
TShort_Array1OfShortReal& aNormals = aTriangulation->ChangeNormals();
|
||||||
|
for (Standard_Integer aNormalIter = 1; aNormalIter <= aNbNodes*3; ++aNormalIter)
|
||||||
|
{
|
||||||
|
Standard_ShortReal aNormalFromFile;
|
||||||
|
BinTools::GetShortReal(IS, aNormalFromFile);
|
||||||
|
Standard_ShortReal& aNormalCoordinate = aNormals.ChangeValue(aNormalIter);
|
||||||
|
aNormalCoordinate = aNormalFromFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myTriangulations.Add (aTriangulation, hasNormals);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Standard_Failure const& anException)
|
catch (Standard_Failure const& anException)
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include <Standard_Handle.hxx>
|
#include <Standard_Handle.hxx>
|
||||||
|
|
||||||
#include <TopTools_IndexedMapOfShape.hxx>
|
#include <TopTools_IndexedMapOfShape.hxx>
|
||||||
|
#include <BinTools_FormatVersion.hxx>
|
||||||
#include <BinTools_LocationSet.hxx>
|
#include <BinTools_LocationSet.hxx>
|
||||||
#include <Standard_Integer.hxx>
|
#include <Standard_Integer.hxx>
|
||||||
#include <BRep_Builder.hxx>
|
#include <BRep_Builder.hxx>
|
||||||
@@ -58,13 +59,10 @@ public:
|
|||||||
//! Ignored (always written) if face defines only triangulation (no surface).
|
//! Ignored (always written) if face defines only triangulation (no surface).
|
||||||
void SetWithTriangles (const Standard_Boolean isWithTriangles) { myWithTriangles = isWithTriangles; }
|
void SetWithTriangles (const Standard_Boolean isWithTriangles) { myWithTriangles = isWithTriangles; }
|
||||||
|
|
||||||
|
//! Sets the BinTools_FormatVersion.
|
||||||
Standard_EXPORT void SetFormatNb (const Standard_Integer theFormatNb);
|
Standard_EXPORT void SetFormatNb (const Standard_Integer theFormatNb);
|
||||||
|
|
||||||
//! two formats available for the moment:
|
//! Returns the BinTools_FormatVersion.
|
||||||
//! First: does not write CurveOnSurface UV Points into the file
|
|
||||||
//! on reading calls Check() method.
|
|
||||||
//! Second: stores CurveOnSurface UV Points.
|
|
||||||
//! On reading format is recognized from Version string.
|
|
||||||
Standard_EXPORT Standard_Integer FormatNb() const;
|
Standard_EXPORT Standard_Integer FormatNb() const;
|
||||||
|
|
||||||
//! Clears the content of the set.
|
//! Clears the content of the set.
|
||||||
@@ -194,6 +192,14 @@ public:
|
|||||||
(Standard_OStream& OS,
|
(Standard_OStream& OS,
|
||||||
const Message_ProgressRange& theRange = Message_ProgressRange()) const;
|
const Message_ProgressRange& theRange = Message_ProgressRange()) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
static Standard_CString Version_1;
|
||||||
|
static Standard_CString Version_2;
|
||||||
|
static Standard_CString Version_3;
|
||||||
|
static Standard_CString Version_4;
|
||||||
|
static const BinTools_FormatVersion THE_CURRENT_VERSION = BIN_TOOLS_VERSION_4;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
TopTools_IndexedMapOfShape myShapes;
|
TopTools_IndexedMapOfShape myShapes;
|
||||||
@@ -205,7 +211,9 @@ private:
|
|||||||
BinTools_Curve2dSet myCurves2d;
|
BinTools_Curve2dSet myCurves2d;
|
||||||
NCollection_IndexedMap<Handle(Poly_Polygon2D), TColStd_MapTransientHasher> myPolygons2D;
|
NCollection_IndexedMap<Handle(Poly_Polygon2D), TColStd_MapTransientHasher> myPolygons2D;
|
||||||
NCollection_IndexedMap<Handle(Poly_Polygon3D), TColStd_MapTransientHasher> myPolygons3D;
|
NCollection_IndexedMap<Handle(Poly_Polygon3D), TColStd_MapTransientHasher> myPolygons3D;
|
||||||
NCollection_IndexedMap<Handle(Poly_Triangulation), TColStd_MapTransientHasher> myTriangulations;
|
NCollection_IndexedDataMap<Handle(Poly_Triangulation),
|
||||||
|
Standard_Boolean> myTriangulations; //!< Contains a boolean flag with information
|
||||||
|
//! to save normals for triangulation
|
||||||
NCollection_IndexedMap<Handle(Poly_PolygonOnTriangulation), TColStd_MapTransientHasher> myNodes;
|
NCollection_IndexedMap<Handle(Poly_PolygonOnTriangulation), TColStd_MapTransientHasher> myNodes;
|
||||||
Standard_Boolean myWithTriangles;
|
Standard_Boolean myWithTriangles;
|
||||||
|
|
||||||
|
@@ -4,6 +4,7 @@ BinTools_Curve2dSet.cxx
|
|||||||
BinTools_Curve2dSet.hxx
|
BinTools_Curve2dSet.hxx
|
||||||
BinTools_CurveSet.cxx
|
BinTools_CurveSet.cxx
|
||||||
BinTools_CurveSet.hxx
|
BinTools_CurveSet.hxx
|
||||||
|
BinTools_FormatVersion.hxx
|
||||||
BinTools_LocationSet.cxx
|
BinTools_LocationSet.cxx
|
||||||
BinTools_LocationSet.hxx
|
BinTools_LocationSet.hxx
|
||||||
BinTools_LocationSetPtr.hxx
|
BinTools_LocationSetPtr.hxx
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
// 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 <BinTools_ShapeSet.hxx>
|
||||||
#include <BRep_TEdge.hxx>
|
#include <BRep_TEdge.hxx>
|
||||||
#include <BRepAdaptor_Surface.hxx>
|
#include <BRepAdaptor_Surface.hxx>
|
||||||
#include <BRepGProp.hxx>
|
#include <BRepGProp.hxx>
|
||||||
@@ -27,6 +27,7 @@
|
|||||||
#include <Draw.hxx>
|
#include <Draw.hxx>
|
||||||
#include <Draw_Appli.hxx>
|
#include <Draw_Appli.hxx>
|
||||||
#include <Draw_ProgressIndicator.hxx>
|
#include <Draw_ProgressIndicator.hxx>
|
||||||
|
#include <Draw_SaveAndRestore.hxx>
|
||||||
#include <Message_ProgressRange.hxx>
|
#include <Message_ProgressRange.hxx>
|
||||||
#include <Draw_Segment3D.hxx>
|
#include <Draw_Segment3D.hxx>
|
||||||
#include <gp_Ax2.hxx>
|
#include <gp_Ax2.hxx>
|
||||||
@@ -1379,24 +1380,66 @@ static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc,
|
|||||||
// binsave
|
// binsave
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
static Standard_Integer binsave(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
static Standard_Integer binsave(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||||
{
|
{
|
||||||
if (n <= 2) return 1;
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
di << "Syntax error: wrong number of arguments!\n";
|
||||||
|
di.PrintHelp(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
TopoDS_Shape aShape = DBRep::Get (a[1]);
|
BinTools_FormatVersion aVersion = BinTools_ShapeSet::THE_CURRENT_VERSION;
|
||||||
|
|
||||||
|
for (Standard_Integer i = 3; i < argc; ++i)
|
||||||
|
{
|
||||||
|
TCollection_AsciiString aParam(argv[i]);
|
||||||
|
aParam.LowerCase();
|
||||||
|
if (aParam == "-version")
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if (i < argc)
|
||||||
|
{
|
||||||
|
aVersion = static_cast<BinTools_FormatVersion>(Draw::Atoi(argv[i]));
|
||||||
|
}
|
||||||
|
if (aVersion == BIN_TOOLS_DEFAULT_VERSION)
|
||||||
|
{
|
||||||
|
aVersion = BinTools_ShapeSet::THE_CURRENT_VERSION;
|
||||||
|
}
|
||||||
|
if (aVersion < BIN_TOOLS_VERSION_1)
|
||||||
|
{
|
||||||
|
di << "Version must not be negative\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (aVersion > BinTools_ShapeSet::THE_CURRENT_VERSION)
|
||||||
|
{
|
||||||
|
di << "Version higher than "
|
||||||
|
<< BinTools_ShapeSet::THE_CURRENT_VERSION
|
||||||
|
<< " is not supported\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
di << "Syntax error: unknown argument '" << aParam << "'\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TopoDS_Shape aShape = DBRep::Get (argv[1]);
|
||||||
if (aShape.IsNull())
|
if (aShape.IsNull())
|
||||||
{
|
{
|
||||||
di << a[1] << " is not a shape";
|
di << argv[1] << " is not a shape";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!BinTools::Write (aShape, a[2]))
|
if (!BinTools::Write (aShape, argv[2]))
|
||||||
{
|
{
|
||||||
di << "Cannot write to the file " << a[2];
|
di << "Cannot write to the file " << argv[2];
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
di << a[1];
|
di << argv[1];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1573,60 +1616,68 @@ Standard_Real DBRep::HLRAngle()
|
|||||||
{ return anglHLR; }
|
{ return anglHLR; }
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function :
|
//class : DBRep_SaveAndRestore
|
||||||
//purpose : save and restore shapes
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
static Standard_Boolean stest(const Handle(Draw_Drawable3D)& d)
|
class DBRep_SaveAndRestore : public Draw_SaveAndRestoreBase
|
||||||
{
|
{
|
||||||
return d->IsInstance(STANDARD_TYPE(DBRep_DrawableShape));
|
public:
|
||||||
}
|
DBRep_SaveAndRestore()
|
||||||
|
:Draw_SaveAndRestoreBase("DBRep_DrawableShape") {}
|
||||||
|
|
||||||
static void ssave(const Handle(Draw_Drawable3D)&d, std::ostream& OS)
|
Standard_Boolean Test(const Handle(Draw_Drawable3D)& d) const Standard_OVERRIDE
|
||||||
{
|
{
|
||||||
Handle(DBRep_DrawableShape)
|
return d->IsInstance(STANDARD_TYPE(DBRep_DrawableShape));
|
||||||
N = Handle(DBRep_DrawableShape)::DownCast(d);
|
}
|
||||||
BRep_Builder B;
|
|
||||||
BRepTools_ShapeSet S(B);
|
void Save(const Handle(Draw_Drawable3D)&d, std::ostream& OS, TopTools_FormatVersion theVersion) const Standard_OVERRIDE
|
||||||
S.Add (N->Shape());
|
{
|
||||||
Handle(Draw_ProgressIndicator) aProgress = Draw::GetProgressBar();
|
Handle(DBRep_DrawableShape) N = Handle(DBRep_DrawableShape)::DownCast(d);
|
||||||
S.Write(OS, Message_ProgressIndicator::Start(aProgress));
|
BRep_Builder B;
|
||||||
if (! aProgress.IsNull() && aProgress->UserBreak())
|
BRepTools_ShapeSet S(B);
|
||||||
return;
|
S.SetFormatNb(theVersion);
|
||||||
S.Write(N->Shape(),OS);
|
S.Add (N->Shape());
|
||||||
}
|
Handle(Draw_ProgressIndicator) aProgress = Draw::GetProgressBar();
|
||||||
|
S.Write(OS, Message_ProgressIndicator::Start(aProgress));
|
||||||
|
if (! aProgress.IsNull() && aProgress->UserBreak())
|
||||||
|
return;
|
||||||
|
S.Write(N->Shape(),OS);
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle(Draw_Drawable3D) Restore(std::istream& IS) const Standard_OVERRIDE
|
||||||
|
{
|
||||||
|
BRep_Builder B;
|
||||||
|
BRepTools_ShapeSet S(B);
|
||||||
|
Handle(Draw_ProgressIndicator) aProgress = Draw::GetProgressBar();
|
||||||
|
S.Read(IS, Message_ProgressIndicator::Start(aProgress));
|
||||||
|
Handle(DBRep_DrawableShape) N;
|
||||||
|
if (! aProgress.IsNull() && aProgress->UserBreak())
|
||||||
|
return N;
|
||||||
|
TopoDS_Shape theShape;
|
||||||
|
S.Read(theShape,IS );
|
||||||
|
N = new DBRep_DrawableShape(theShape,
|
||||||
|
Draw_vert,
|
||||||
|
Draw_jaune,
|
||||||
|
Draw_rouge,
|
||||||
|
Draw_bleu,
|
||||||
|
size,
|
||||||
|
nbIsos,
|
||||||
|
discret);
|
||||||
|
N->DisplayTriangulation(disptriangles);
|
||||||
|
N->DisplayPolygons(disppolygons);
|
||||||
|
N->DisplayHLR(withHLR,withRg1,withRgN,withHid,anglHLR);
|
||||||
|
|
||||||
static Handle(Draw_Drawable3D) srestore (std::istream& IS)
|
|
||||||
{
|
|
||||||
BRep_Builder B;
|
|
||||||
BRepTools_ShapeSet S(B);
|
|
||||||
Handle(Draw_ProgressIndicator) aProgress = Draw::GetProgressBar();
|
|
||||||
S.Read(IS, Message_ProgressIndicator::Start(aProgress));
|
|
||||||
Handle(DBRep_DrawableShape) N;
|
|
||||||
if (! aProgress.IsNull() && aProgress->UserBreak())
|
|
||||||
return N;
|
return N;
|
||||||
TopoDS_Shape theShape;
|
}
|
||||||
S.Read(theShape,IS );
|
|
||||||
N = new DBRep_DrawableShape(theShape,
|
|
||||||
Draw_vert,
|
|
||||||
Draw_jaune,
|
|
||||||
Draw_rouge,
|
|
||||||
Draw_bleu,
|
|
||||||
size,
|
|
||||||
nbIsos,
|
|
||||||
discret);
|
|
||||||
N->DisplayTriangulation(disptriangles);
|
|
||||||
N->DisplayPolygons(disppolygons);
|
|
||||||
N->DisplayHLR(withHLR,withRg1,withRgN,withHid,anglHLR);
|
|
||||||
|
|
||||||
return N;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
static Draw_SaveAndRestore ssr("DBRep_DrawableShape",
|
static DBRep_SaveAndRestore saveAndRestoreDBRep;
|
||||||
stest,ssave,srestore);
|
|
||||||
|
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : dumps
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
void dumps (const TopoDS_Shape& S)
|
void dumps (const TopoDS_Shape& S)
|
||||||
{
|
{
|
||||||
BRepTools::Dump(S,std::cout);
|
BRepTools::Dump(S,std::cout);
|
||||||
|
@@ -37,35 +37,8 @@ extern Draw_Viewer dout;
|
|||||||
extern Standard_Boolean Draw_Batch;
|
extern Standard_Boolean Draw_Batch;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class Draw_SaveAndRestore {
|
|
||||||
|
|
||||||
public :
|
|
||||||
|
|
||||||
Standard_EXPORT Draw_SaveAndRestore
|
|
||||||
(const char* name,
|
|
||||||
Standard_Boolean (*test)(const Handle(Draw_Drawable3D)&),
|
|
||||||
void (*save)(const Handle(Draw_Drawable3D)&, std::ostream&),
|
|
||||||
Handle(Draw_Drawable3D) (*restore) (std::istream&),
|
|
||||||
Standard_Boolean display = Standard_True);
|
|
||||||
|
|
||||||
|
|
||||||
const char* Name() const {return myName;}
|
|
||||||
Standard_Boolean Test(const Handle(Draw_Drawable3D)&d);
|
|
||||||
void Save(const Handle(Draw_Drawable3D)& d, std::ostream& os) const;
|
|
||||||
Handle(Draw_Drawable3D) Restore(std::istream&) const;
|
|
||||||
Standard_Boolean Disp() const {return myDisplay;}
|
|
||||||
Draw_SaveAndRestore* Next() {return myNext;}
|
|
||||||
|
|
||||||
private :
|
|
||||||
|
|
||||||
const char* myName;
|
|
||||||
Standard_Boolean (*myTest)(const Handle(Draw_Drawable3D)&);
|
|
||||||
void (*mySave)(const Handle(Draw_Drawable3D)&, std::ostream&);
|
|
||||||
Handle(Draw_Drawable3D) (*myRestore) (std::istream&);
|
|
||||||
Standard_Boolean myDisplay;
|
|
||||||
Draw_SaveAndRestore* myNext;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
75
src/Draw/Draw_SaveAndRestore.cxx
Normal file
75
src/Draw/Draw_SaveAndRestore.cxx
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
// Copyright (c) 2020 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 <Draw_SaveAndRestore.hxx>
|
||||||
|
|
||||||
|
#include <BRep_Builder.hxx>
|
||||||
|
#include <BRepTools_ShapeSet.hxx>
|
||||||
|
#include <DBRep_DrawableShape.hxx>
|
||||||
|
#include <Draw_Number.hxx>
|
||||||
|
#include <Draw_ProgressIndicator.hxx>
|
||||||
|
|
||||||
|
Draw_SaveAndRestoreBase* Draw_SaveAndRestoreBase::Draw_FirstSaveAndRestore = NULL;
|
||||||
|
|
||||||
|
// ================================================================
|
||||||
|
// Function : Draw_SaveAndRestoreBase
|
||||||
|
// Purpose :
|
||||||
|
// ================================================================
|
||||||
|
Draw_SaveAndRestoreBase::Draw_SaveAndRestoreBase (Standard_CString theName, Standard_Boolean theDisplay)
|
||||||
|
: myNext(Draw_FirstSaveAndRestore),
|
||||||
|
myName (theName),
|
||||||
|
myDisplay (theDisplay)
|
||||||
|
{
|
||||||
|
Draw_FirstSaveAndRestore = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================================================
|
||||||
|
// Function : Test
|
||||||
|
// Purpose :
|
||||||
|
// ================================================================
|
||||||
|
Standard_Boolean Draw_SaveAndRestoreNumber::Test (const Handle(Draw_Drawable3D)& theDrawable3D) const
|
||||||
|
{
|
||||||
|
return theDrawable3D->IsInstance(STANDARD_TYPE(Draw_Number));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================================================
|
||||||
|
// Function : Save
|
||||||
|
// Purpose :
|
||||||
|
// ================================================================
|
||||||
|
void Draw_SaveAndRestoreNumber::Save (const Handle(Draw_Drawable3D)& theDrawable3D,
|
||||||
|
std::ostream& theStream,
|
||||||
|
TopTools_FormatVersion theVersion) const
|
||||||
|
{
|
||||||
|
(void) theVersion;
|
||||||
|
Handle(Draw_Number) aNum = Handle(Draw_Number)::DownCast(theDrawable3D);
|
||||||
|
std::ios::fmtflags aFlags = theStream.flags();
|
||||||
|
theStream.setf(std::ios::scientific);
|
||||||
|
theStream.precision(15);
|
||||||
|
theStream.width(30);
|
||||||
|
theStream << aNum->Value() << "\n";
|
||||||
|
theStream.setf(aFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================================================
|
||||||
|
// Function : Restore
|
||||||
|
// Purpose :
|
||||||
|
// ================================================================
|
||||||
|
Handle(Draw_Drawable3D) Draw_SaveAndRestoreNumber::Restore (std::istream& is) const
|
||||||
|
{
|
||||||
|
Standard_Real val = RealLast();
|
||||||
|
is >> val;
|
||||||
|
Handle(Draw_Number) N = new Draw_Number(val);
|
||||||
|
return N;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Draw_SaveAndRestoreNumber saveAndRestoreNumber;
|
65
src/Draw/Draw_SaveAndRestore.hxx
Normal file
65
src/Draw/Draw_SaveAndRestore.hxx
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
// Copyright (c) 2020 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.
|
||||||
|
|
||||||
|
#ifndef Draw_SaveAndRestore_HeaderFile
|
||||||
|
#define Draw_SaveAndRestore_HeaderFile
|
||||||
|
|
||||||
|
#include <Draw.hxx>
|
||||||
|
#include <TopTools_FormatVersion.hxx>
|
||||||
|
|
||||||
|
class Draw_SaveAndRestoreBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static Draw_SaveAndRestoreBase* GetFirst() { return Draw_FirstSaveAndRestore; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
Standard_EXPORT Draw_SaveAndRestoreBase (Standard_CString thename,
|
||||||
|
Standard_Boolean theDisplay = Standard_True);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void Save (const Handle(Draw_Drawable3D)& theDrawable3D,
|
||||||
|
std::ostream& theStream,
|
||||||
|
TopTools_FormatVersion theVersion) const = 0;
|
||||||
|
virtual Handle(Draw_Drawable3D) Restore (std::istream& is) const = 0;
|
||||||
|
virtual Standard_Boolean Test (const Handle(Draw_Drawable3D)& theDrawable3D) const = 0;
|
||||||
|
|
||||||
|
Standard_CString Name() const { return myName; }
|
||||||
|
|
||||||
|
const Draw_SaveAndRestoreBase* Next() const { return myNext; }
|
||||||
|
|
||||||
|
Standard_Boolean Disp() const { return myDisplay; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Draw_SaveAndRestoreBase* myNext;
|
||||||
|
Standard_CString myName;
|
||||||
|
Standard_Boolean myDisplay;
|
||||||
|
private:
|
||||||
|
static Draw_SaveAndRestoreBase* Draw_FirstSaveAndRestore;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Draw_SaveAndRestoreNumber : public Draw_SaveAndRestoreBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Draw_SaveAndRestoreNumber()
|
||||||
|
: Draw_SaveAndRestoreBase ("Draw_Number", Standard_False) {}
|
||||||
|
|
||||||
|
Standard_EXPORT virtual void Save (const Handle(Draw_Drawable3D)& theDrawable3D,
|
||||||
|
std::ostream& theStream,
|
||||||
|
TopTools_FormatVersion theVersion) const Standard_OVERRIDE;
|
||||||
|
Standard_EXPORT virtual Handle(Draw_Drawable3D) Restore (std::istream& is) const Standard_OVERRIDE;
|
||||||
|
Standard_EXPORT virtual Standard_Boolean Test (const Handle(Draw_Drawable3D)& theDrawable3D) const Standard_OVERRIDE;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@@ -25,12 +25,14 @@
|
|||||||
#include <Draw_Number.hxx>
|
#include <Draw_Number.hxx>
|
||||||
#include <Message.hxx>
|
#include <Message.hxx>
|
||||||
#include <Draw_ProgressIndicator.hxx>
|
#include <Draw_ProgressIndicator.hxx>
|
||||||
|
#include <Draw_SaveAndRestore.hxx>
|
||||||
#include <Draw_SequenceOfDrawable3D.hxx>
|
#include <Draw_SequenceOfDrawable3D.hxx>
|
||||||
#include <Message.hxx>
|
#include <Message.hxx>
|
||||||
#include <NCollection_Map.hxx>
|
#include <NCollection_Map.hxx>
|
||||||
#include <Standard_SStream.hxx>
|
#include <Standard_SStream.hxx>
|
||||||
#include <Standard_Stream.hxx>
|
#include <Standard_Stream.hxx>
|
||||||
#include <TCollection_AsciiString.hxx>
|
#include <TCollection_AsciiString.hxx>
|
||||||
|
#include <TopTools_ShapeSet.hxx>
|
||||||
|
|
||||||
#include <ios>
|
#include <ios>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -68,82 +70,57 @@ static Standard_Integer p_b;
|
|||||||
static const char* p_Name = "";
|
static const char* p_Name = "";
|
||||||
|
|
||||||
|
|
||||||
static Draw_SaveAndRestore* Draw_First = NULL;
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : Draw_SaveAndRestore
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
|
|
||||||
Draw_SaveAndRestore::Draw_SaveAndRestore
|
|
||||||
(const char* name,
|
|
||||||
Standard_Boolean (*test)(const Handle(Draw_Drawable3D)&),
|
|
||||||
void (*save)(const Handle(Draw_Drawable3D)&, std::ostream&),
|
|
||||||
Handle(Draw_Drawable3D) (*restore) (std::istream&),
|
|
||||||
Standard_Boolean display) :
|
|
||||||
myName(name),
|
|
||||||
myTest(test),
|
|
||||||
mySave(save),
|
|
||||||
myRestore(restore),
|
|
||||||
myDisplay(display),
|
|
||||||
myNext(Draw_First)
|
|
||||||
{
|
|
||||||
Draw_First = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
Standard_Boolean Draw_SaveAndRestore::Test(const Handle(Draw_Drawable3D)&d)
|
|
||||||
{return (*myTest) (d);}
|
|
||||||
|
|
||||||
void Draw_SaveAndRestore::Save(const Handle(Draw_Drawable3D)& d,
|
|
||||||
std::ostream& os) const
|
|
||||||
{ (*mySave) (d,os);}
|
|
||||||
|
|
||||||
Handle(Draw_Drawable3D) Draw_SaveAndRestore::Restore(std::istream& is) const
|
|
||||||
{return (*myRestore) (is);}
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
// numeric save and restore
|
|
||||||
//=======================================================================
|
|
||||||
|
|
||||||
static Standard_Boolean numtest(const Handle(Draw_Drawable3D)& d)
|
|
||||||
{
|
|
||||||
return d->IsInstance(STANDARD_TYPE(Draw_Number));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void numsave (const Handle(Draw_Drawable3D)& theDrawable,
|
|
||||||
std::ostream& theStream)
|
|
||||||
{
|
|
||||||
Handle(Draw_Number) aNum = Handle(Draw_Number)::DownCast (theDrawable);
|
|
||||||
std::ios::fmtflags aFlags = theStream.flags();
|
|
||||||
theStream.setf (std::ios::scientific);
|
|
||||||
theStream.precision (15);
|
|
||||||
theStream.width (30);
|
|
||||||
theStream << aNum->Value() << "\n";
|
|
||||||
theStream.setf (aFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Handle(Draw_Drawable3D) numrestore (std::istream& is)
|
|
||||||
{
|
|
||||||
Standard_Real val;
|
|
||||||
is >> val;
|
|
||||||
Handle(Draw_Number) N = new Draw_Number(val);
|
|
||||||
return N;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static Draw_SaveAndRestore numsr("Draw_Number",
|
|
||||||
numtest,numsave,numrestore,
|
|
||||||
Standard_False);
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// save
|
// save
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
static Standard_Integer save(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||||
static Standard_Integer save(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
|
||||||
{
|
{
|
||||||
if (n <= 2) return 1;
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
di << "Syntax error: wrong number of arguments!\n";
|
||||||
|
di.PrintHelp(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
const char* name = a[2];
|
TopTools_FormatVersion aVersion = TopTools_ShapeSet::THE_CURRENT_VERSION;
|
||||||
|
|
||||||
|
for (Standard_Integer i = 3; i < argc; ++i)
|
||||||
|
{
|
||||||
|
TCollection_AsciiString aParam(argv[i]);
|
||||||
|
aParam.LowerCase();
|
||||||
|
if (aParam == "-version")
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if (i < argc)
|
||||||
|
{
|
||||||
|
aVersion = static_cast<TopTools_FormatVersion>(Draw::Atoi(argv[i]));
|
||||||
|
}
|
||||||
|
if (aVersion == TOP_TOOLS_DEFAULT_VERSION)
|
||||||
|
{
|
||||||
|
aVersion = TopTools_ShapeSet::THE_CURRENT_VERSION;
|
||||||
|
}
|
||||||
|
if (aVersion < TOP_TOOLS_VERSION_1)
|
||||||
|
{
|
||||||
|
di << "Version must not be negative\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (aVersion > TopTools_ShapeSet::THE_CURRENT_VERSION)
|
||||||
|
{
|
||||||
|
di << "Version higher than "
|
||||||
|
<< static_cast<Standard_Integer>(TopTools_ShapeSet::THE_CURRENT_VERSION)
|
||||||
|
<< " is not supported\n"; \
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
di << "Syntax error: unknown argument '" << aParam << "'\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Standard_CString name = argv[2];
|
||||||
std::ofstream os;
|
std::ofstream os;
|
||||||
os.precision(15);
|
os.precision(15);
|
||||||
OSD_OpenStream(os, name, std::ios::out);
|
OSD_OpenStream(os, name, std::ios::out);
|
||||||
@@ -153,10 +130,10 @@ static Standard_Integer save(Draw_Interpretor& di, Standard_Integer n, const cha
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle(Draw_Drawable3D) D = Draw::Get(a[1]);
|
Handle(Draw_Drawable3D) D = Draw::Get(argv[1]);
|
||||||
if (!D.IsNull()) {
|
if (!D.IsNull()) {
|
||||||
// find a tool
|
// find a tool
|
||||||
Draw_SaveAndRestore* tool = Draw_First;
|
const Draw_SaveAndRestoreBase* tool = Draw_SaveAndRestoreBase::GetFirst();
|
||||||
Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
|
Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
|
||||||
|
|
||||||
while (tool) {
|
while (tool) {
|
||||||
@@ -166,13 +143,14 @@ static Standard_Integer save(Draw_Interpretor& di, Standard_Integer n, const cha
|
|||||||
if (tool) {
|
if (tool) {
|
||||||
os << tool->Name() << "\n";
|
os << tool->Name() << "\n";
|
||||||
Draw::SetProgressBar(progress);
|
Draw::SetProgressBar(progress);
|
||||||
tool->Save(D,os);
|
tool->Save(D, os, aVersion);
|
||||||
os << "\n";
|
os << "\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
di << "No method for saving " << a[1];
|
di << "No method for saving " << argv[1];
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw::SetProgressBar( 0 );
|
Draw::SetProgressBar( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +167,7 @@ static Standard_Integer save(Draw_Interpretor& di, Standard_Integer n, const cha
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
di << a[1];
|
di << argv[1];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,10 +198,10 @@ static Standard_Integer restore(Draw_Interpretor& di, Standard_Integer n, const
|
|||||||
Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
|
Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
|
||||||
Draw::SetProgressBar(progress);
|
Draw::SetProgressBar(progress);
|
||||||
|
|
||||||
Draw_SaveAndRestore* tool = Draw_First;
|
const Draw_SaveAndRestoreBase* tool = Draw_SaveAndRestoreBase::GetFirst();
|
||||||
Draw_SaveAndRestore* aDBRepTool = NULL;
|
const Draw_SaveAndRestoreBase* aDBRepTool = NULL;
|
||||||
while (tool) {
|
while (tool) {
|
||||||
const char* toolName = tool->Name();
|
Standard_CString toolName = tool->Name();
|
||||||
if (!strcmp(typ,toolName)) break;
|
if (!strcmp(typ,toolName)) break;
|
||||||
if (!strcmp("DBRep_DrawableShape",toolName))
|
if (!strcmp("DBRep_DrawableShape",toolName))
|
||||||
aDBRepTool = tool;
|
aDBRepTool = tool;
|
||||||
|
@@ -54,6 +54,8 @@ Draw_Printer.hxx
|
|||||||
Draw_ProgressIndicator.cxx
|
Draw_ProgressIndicator.cxx
|
||||||
Draw_ProgressIndicator.hxx
|
Draw_ProgressIndicator.hxx
|
||||||
Draw_Replace.tcl
|
Draw_Replace.tcl
|
||||||
|
Draw_SaveAndRestore.cxx
|
||||||
|
Draw_SaveAndRestore.hxx
|
||||||
Draw_Segment2D.cxx
|
Draw_Segment2D.cxx
|
||||||
Draw_Segment2D.hxx
|
Draw_Segment2D.hxx
|
||||||
Draw_Segment3D.cxx
|
Draw_Segment3D.cxx
|
||||||
|
@@ -261,14 +261,41 @@ proc datadir {{dir ""}} {
|
|||||||
return $Draw_DataDir
|
return $Draw_DataDir
|
||||||
}
|
}
|
||||||
|
|
||||||
help save {save variable [filename]} "DRAW Variables management"
|
help save {
|
||||||
|
Use: save variable [filename] [options...]
|
||||||
|
Allowed options are:
|
||||||
|
-version versnumber: a number of format version to save.
|
||||||
|
Awailable versions are 1, 2, 3
|
||||||
|
Default version is 3
|
||||||
|
} "DRAW Variables management"
|
||||||
|
|
||||||
proc save {name {file ""}} {
|
proc save {name {file ""} {args {}}} {
|
||||||
|
# set default values of arguments
|
||||||
|
set version 0
|
||||||
|
|
||||||
|
# check arguments
|
||||||
|
for {set narg 0} {$narg < [llength $args]} {incr narg} {
|
||||||
|
set arg [lindex $args $narg]
|
||||||
|
|
||||||
|
# set version
|
||||||
|
if { $arg == "-version" } {
|
||||||
|
incr narg
|
||||||
|
if { $narg < [llength $args] && ! [regexp {^-} [lindex $args $narg]] } {
|
||||||
|
set version [lindex $args $narg]
|
||||||
|
} else {
|
||||||
|
error "Option -version requires argument"
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# unsupported option
|
||||||
|
error "Error: unsupported option \"$arg\""
|
||||||
|
}
|
||||||
if {$file == ""} {set file $name}
|
if {$file == ""} {set file $name}
|
||||||
upvar $name n
|
upvar $name n
|
||||||
if {![isdraw n]} {error "save : $name is not a Draw variable"}
|
if {![isdraw n]} {error "save : $name is not a Draw variable"}
|
||||||
global Draw_DataDir
|
global Draw_DataDir
|
||||||
bsave n [file join $Draw_DataDir $file]
|
bsave n [file join $Draw_DataDir $file] "-version" $version
|
||||||
return [file join $Draw_DataDir $file]
|
return [file join $Draw_DataDir $file]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,7 @@
|
|||||||
#include <DBRep.hxx>
|
#include <DBRep.hxx>
|
||||||
#include <Draw.hxx>
|
#include <Draw.hxx>
|
||||||
#include <Draw_Appli.hxx>
|
#include <Draw_Appli.hxx>
|
||||||
|
#include <Draw_SaveAndRestore.hxx>
|
||||||
#include <gp_Ax3.hxx>
|
#include <gp_Ax3.hxx>
|
||||||
#include <HLRAlgo_Projector.hxx>
|
#include <HLRAlgo_Projector.hxx>
|
||||||
#include <HLRAppli_ReflectLines.hxx>
|
#include <HLRAppli_ReflectLines.hxx>
|
||||||
@@ -596,91 +597,84 @@ void HLRTest::Commands (Draw_Interpretor& theCommands)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : save and restore projector
|
// class : HLRTest_SaveAndRestore
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
class HLRTest_SaveAndRestore : public Draw_SaveAndRestoreBase
|
||||||
static Standard_Boolean stest(const Handle(Draw_Drawable3D)& d)
|
|
||||||
{
|
{
|
||||||
return d->IsInstance(STANDARD_TYPE(HLRTest_Projector));
|
public:
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
HLRTest_SaveAndRestore()
|
||||||
//function : ssave
|
:Draw_SaveAndRestoreBase("HLRTest_Projector") {}
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
|
|
||||||
static void ssave (const Handle(Draw_Drawable3D)&d, std::ostream& OS)
|
Standard_Boolean Test(const Handle(Draw_Drawable3D)& d) const Standard_OVERRIDE
|
||||||
{
|
{
|
||||||
Handle(HLRTest_Projector) HP =
|
return d->IsInstance(STANDARD_TYPE(HLRTest_Projector));
|
||||||
Handle(HLRTest_Projector)::DownCast(d);
|
}
|
||||||
|
|
||||||
const HLRAlgo_Projector& P = HP->Projector();
|
void Save(const Handle(Draw_Drawable3D)& d, std::ostream& OS, TopTools_FormatVersion theVersion) const Standard_OVERRIDE
|
||||||
OS << (P.Perspective() ? "1" : "0") << "\n";
|
{
|
||||||
if (P.Perspective())
|
(void) theVersion;
|
||||||
OS << P.Focus() << "\n";
|
Handle(HLRTest_Projector) HP =
|
||||||
|
Handle(HLRTest_Projector)::DownCast(d);
|
||||||
|
|
||||||
|
const HLRAlgo_Projector& P = HP->Projector();
|
||||||
|
OS << (P.Perspective() ? "1" : "0") << "\n";
|
||||||
|
if (P.Perspective())
|
||||||
|
OS << P.Focus() << "\n";
|
||||||
|
|
||||||
gp_Trsf T = P.Transformation();
|
gp_Trsf T = P.Transformation();
|
||||||
gp_XYZ V = T.TranslationPart();
|
gp_XYZ V = T.TranslationPart();
|
||||||
gp_Mat M = T.VectorialPart();
|
gp_Mat M = T.VectorialPart();
|
||||||
|
|
||||||
OS << M(1,1) << " ";
|
OS << M(1,1) << " ";
|
||||||
OS << M(1,2) << " ";
|
OS << M(1,2) << " ";
|
||||||
OS << M(1,3) << " ";
|
OS << M(1,3) << " ";
|
||||||
OS << V.Coord(1) << " ";
|
OS << V.Coord(1) << " ";
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
OS << M(2,1) << " ";
|
OS << M(2,1) << " ";
|
||||||
OS << M(2,2) << " ";
|
OS << M(2,2) << " ";
|
||||||
OS << M(2,3) << " ";
|
OS << M(2,3) << " ";
|
||||||
OS << V.Coord(2) << " ";
|
OS << V.Coord(2) << " ";
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
OS << M(3,1) << " ";
|
OS << M(3,1) << " ";
|
||||||
OS << M(3,2) << " ";
|
OS << M(3,2) << " ";
|
||||||
OS << M(3,3) << " ";
|
OS << M(3,3) << " ";
|
||||||
OS << V.Coord(3) << " ";
|
OS << V.Coord(3) << " ";
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
Handle(Draw_Drawable3D) Restore(std::istream& IS) const Standard_OVERRIDE
|
||||||
//function : srestore
|
{
|
||||||
//purpose :
|
Standard_Boolean pers;
|
||||||
//=======================================================================
|
IS >> pers;
|
||||||
|
Standard_Real focus = 1;
|
||||||
static Handle(Draw_Drawable3D) srestore (std::istream& IS)
|
if (pers) IS >> focus;
|
||||||
{
|
|
||||||
Standard_Boolean pers;
|
|
||||||
IS >> pers;
|
|
||||||
Standard_Real focus = 1;
|
|
||||||
if (pers) IS >> focus;
|
|
||||||
|
|
||||||
gp_Trsf T;
|
gp_Trsf T;
|
||||||
Standard_Real V1[3],V2[3],V3[3];
|
Standard_Real V1[3],V2[3],V3[3];
|
||||||
Standard_Real V[3];
|
Standard_Real V[3];
|
||||||
|
|
||||||
IS >> V1[0] >> V1[1] >> V1[2] >> V[0];
|
IS >> V1[0] >> V1[1] >> V1[2] >> V[0];
|
||||||
IS >> V2[0] >> V2[1] >> V2[2] >> V[1];
|
IS >> V2[0] >> V2[1] >> V2[2] >> V[1];
|
||||||
IS >> V3[0] >> V3[1] >> V3[2] >> V[2];
|
IS >> V3[0] >> V3[1] >> V3[2] >> V[2];
|
||||||
|
|
||||||
gp_Dir D1(V1[0],V1[1],V1[2]);
|
gp_Dir D1(V1[0],V1[1],V1[2]);
|
||||||
gp_Dir D2(V2[0],V2[1],V2[2]);
|
gp_Dir D2(V2[0],V2[1],V2[2]);
|
||||||
gp_Dir D3(V3[0],V3[1],V3[2]);
|
gp_Dir D3(V3[0],V3[1],V3[2]);
|
||||||
gp_Ax3 axes(gp_Pnt(0,0,0),D3,D1);
|
gp_Ax3 axes(gp_Pnt(0,0,0),D3,D1);
|
||||||
D3.Cross(D1);
|
D3.Cross(D1);
|
||||||
if (D3.Dot(D2) < 0) axes.YReverse();
|
if (D3.Dot(D2) < 0) axes.YReverse();
|
||||||
T.SetTransformation(axes);
|
T.SetTransformation(axes);
|
||||||
|
|
||||||
T.SetTranslationPart(gp_Vec(V[0],V[1],V[2]));
|
T.SetTranslationPart(gp_Vec(V[0],V[1],V[2]));
|
||||||
|
|
||||||
HLRAlgo_Projector P(T,pers,focus);
|
HLRAlgo_Projector P(T,pers,focus);
|
||||||
Handle(HLRTest_Projector) HP = new HLRTest_Projector(P);
|
Handle(HLRTest_Projector) HP = new HLRTest_Projector(P);
|
||||||
return HP;
|
return HP;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
};
|
||||||
//function : ssr
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
|
|
||||||
static Draw_SaveAndRestore ssr("HLRTest_Projector",stest,ssave,srestore);
|
static HLRTest_SaveAndRestore saveAndRestoreHLRTest;
|
||||||
|
|
||||||
|
@@ -41,9 +41,30 @@ Poly_Triangulation::Poly_Triangulation(const Standard_Integer theNbNodes,
|
|||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Poly_Triangulation
|
//function : Poly_Triangulation
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
Poly_Triangulation::Poly_Triangulation(const Standard_Integer theNbNodes,
|
||||||
|
const Standard_Integer theNbTriangles,
|
||||||
|
const Standard_Boolean theHasUVNodes,
|
||||||
|
const Standard_Boolean theHasNormals)
|
||||||
|
: myDeflection(0),
|
||||||
|
myNodes (1, theNbNodes),
|
||||||
|
myTriangles (1, theNbTriangles)
|
||||||
|
{
|
||||||
|
if (theHasUVNodes)
|
||||||
|
{
|
||||||
|
myUVNodes = new TColgp_HArray1OfPnt2d(1, theNbNodes);
|
||||||
|
}
|
||||||
|
if (theHasNormals)
|
||||||
|
{
|
||||||
|
myNormals = new TShort_HArray1OfShortReal(1, theNbNodes * 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : Poly_Triangulation
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
Poly_Triangulation::Poly_Triangulation(const TColgp_Array1OfPnt& theNodes,
|
Poly_Triangulation::Poly_Triangulation(const TColgp_Array1OfPnt& theNodes,
|
||||||
const Poly_Array1OfTriangle& theTriangles)
|
const Poly_Array1OfTriangle& theTriangles)
|
||||||
: myDeflection(0),
|
: myDeflection(0),
|
||||||
|
@@ -76,6 +76,17 @@ public:
|
|||||||
//! enable a 2D representation).
|
//! enable a 2D representation).
|
||||||
Standard_EXPORT Poly_Triangulation(const Standard_Integer nbNodes, const Standard_Integer nbTriangles, const Standard_Boolean UVNodes);
|
Standard_EXPORT Poly_Triangulation(const Standard_Integer nbNodes, const Standard_Integer nbTriangles, const Standard_Boolean UVNodes);
|
||||||
|
|
||||||
|
//! Constructs a triangulation from a set of triangles.
|
||||||
|
//! The triangulation is initialized without a triangle or a node,
|
||||||
|
//! but capable of containing nbNodes nodes, and nbTriangles triangles.
|
||||||
|
//! Here the UVNodes flag indicates whether 2D nodes will be associated with 3D ones,
|
||||||
|
//! (i.e. to enable a 2D representation).
|
||||||
|
//! Here the hasNormals flag indicates whether normals will be given and associated with nodes.
|
||||||
|
Standard_EXPORT Poly_Triangulation(const Standard_Integer nbNodes,
|
||||||
|
const Standard_Integer nbTriangles,
|
||||||
|
const Standard_Boolean UVNodes,
|
||||||
|
const Standard_Boolean hasNormals);
|
||||||
|
|
||||||
//! Constructs a triangulation from a set of triangles. The
|
//! Constructs a triangulation from a set of triangles. The
|
||||||
//! triangulation is initialized with 3D points from Nodes and triangles
|
//! triangulation is initialized with 3D points from Nodes and triangles
|
||||||
//! from Triangles.
|
//! from Triangles.
|
||||||
|
@@ -111,6 +111,11 @@ public:
|
|||||||
Standard_EXPORT void SetNumberOfObjects (const Standard_Integer anObjectNumber);
|
Standard_EXPORT void SetNumberOfObjects (const Standard_Integer anObjectNumber);
|
||||||
|
|
||||||
Standard_EXPORT void SetStorageVersion (const TCollection_AsciiString& aVersion);
|
Standard_EXPORT void SetStorageVersion (const TCollection_AsciiString& aVersion);
|
||||||
|
|
||||||
|
void SetStorageVersion (const Standard_Integer aVersion)
|
||||||
|
{
|
||||||
|
SetStorageVersion(TCollection_AsciiString(aVersion));
|
||||||
|
}
|
||||||
|
|
||||||
Standard_EXPORT void SetCreationDate (const TCollection_AsciiString& aDate);
|
Standard_EXPORT void SetCreationDate (const TCollection_AsciiString& aDate);
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ TopTools_DataMapOfShapeListOfShape.hxx
|
|||||||
TopTools_DataMapOfShapeReal.hxx
|
TopTools_DataMapOfShapeReal.hxx
|
||||||
TopTools_DataMapOfShapeSequenceOfShape.hxx
|
TopTools_DataMapOfShapeSequenceOfShape.hxx
|
||||||
TopTools_DataMapOfShapeShape.hxx
|
TopTools_DataMapOfShapeShape.hxx
|
||||||
|
TopTools_FormatVersion.hxx
|
||||||
TopTools_HArray1OfListOfShape.hxx
|
TopTools_HArray1OfListOfShape.hxx
|
||||||
TopTools_HArray1OfShape.hxx
|
TopTools_HArray1OfShape.hxx
|
||||||
TopTools_HArray2OfShape.hxx
|
TopTools_HArray2OfShape.hxx
|
||||||
|
30
src/TopTools/TopTools_FormatVersion.hxx
Normal file
30
src/TopTools/TopTools_FormatVersion.hxx
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (c) 2020 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.
|
||||||
|
|
||||||
|
#ifndef _TopToolsFormatVersion_HeaderFile
|
||||||
|
#define _TopToolsFormatVersion_HeaderFile
|
||||||
|
|
||||||
|
//! Defined TopTools format version
|
||||||
|
enum TopTools_FormatVersion
|
||||||
|
{
|
||||||
|
TOP_TOOLS_DEFAULT_VERSION = 0, //!< Default version
|
||||||
|
TOP_TOOLS_VERSION_1 = 1, //!< Does not write CurveOnSurface UV Points into
|
||||||
|
//! the file. On reading calls Check() method.
|
||||||
|
TOP_TOOLS_VERSION_2 = 2, //!< Stores CurveOnSurface UV Points. On reading format is
|
||||||
|
//! recognized from Version string.
|
||||||
|
TOP_TOOLS_VERSION_3 = 3 //!< Stores per-vertex normal information in case
|
||||||
|
//! of triangulation-only Faces, because
|
||||||
|
//! no analytical geometry to restore normals
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@@ -28,18 +28,22 @@
|
|||||||
#include <TopoDS_Shape.hxx>
|
#include <TopoDS_Shape.hxx>
|
||||||
#include <TopTools_LocationSet.hxx>
|
#include <TopTools_LocationSet.hxx>
|
||||||
#include <TopTools_ShapeSet.hxx>
|
#include <TopTools_ShapeSet.hxx>
|
||||||
|
#include <Standard_Assert.hxx>
|
||||||
|
|
||||||
|
#include <BRep_TFace.hxx>
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
static const char* Version = "CASCADE Topology V1, (c) Matra-Datavision";
|
Standard_CString TopTools_ShapeSet::Version_1 = "CASCADE Topology V1, (c) Matra-Datavision";
|
||||||
static const char* Version2 = "CASCADE Topology V2, (c) Matra-Datavision";
|
Standard_CString TopTools_ShapeSet::Version_2 = "CASCADE Topology V2, (c) Matra-Datavision";
|
||||||
|
Standard_CString TopTools_ShapeSet::Version_3 = "Open CASCADE Topology V3 (c)";
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : TopTools_ShapeSet
|
//function : TopTools_ShapeSet
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
TopTools_ShapeSet::TopTools_ShapeSet() : myFormatNb(1)
|
TopTools_ShapeSet::TopTools_ShapeSet() : myFormatNb(THE_CURRENT_VERSION)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,6 +56,10 @@ TopTools_ShapeSet::~TopTools_ShapeSet()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void TopTools_ShapeSet::SetFormatNb(const Standard_Integer theFormatNb)
|
void TopTools_ShapeSet::SetFormatNb(const Standard_Integer theFormatNb)
|
||||||
{
|
{
|
||||||
|
Standard_ASSERT_RETURN(theFormatNb >= TOP_TOOLS_VERSION_1 &&
|
||||||
|
theFormatNb <= THE_CURRENT_VERSION,
|
||||||
|
"Error: unsupported TopTools version.", );
|
||||||
|
|
||||||
myFormatNb = theFormatNb;
|
myFormatNb = theFormatNb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,10 +459,18 @@ void TopTools_ShapeSet::Write(Standard_OStream& OS, const Message_ProgressRange
|
|||||||
std::streamsize prec = OS.precision(15);
|
std::streamsize prec = OS.precision(15);
|
||||||
|
|
||||||
// write the copyright
|
// write the copyright
|
||||||
if (myFormatNb == 2)
|
if (myFormatNb == TOP_TOOLS_VERSION_3)
|
||||||
OS << "\n" << Version2 << "\n";
|
{
|
||||||
|
OS << "\n" << Version_3 << "\n";
|
||||||
|
}
|
||||||
|
else if (myFormatNb == TOP_TOOLS_VERSION_2)
|
||||||
|
{
|
||||||
|
OS << "\n" << Version_2 << "\n";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
OS << "\n" << Version << "\n";
|
{
|
||||||
|
OS << "\n" << Version_1 << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------
|
//-----------------------------------------
|
||||||
// write the locations
|
// write the locations
|
||||||
@@ -606,14 +622,27 @@ void TopTools_ShapeSet::Read(Standard_IStream& IS, const Message_ProgressRange&
|
|||||||
vers[lv] = '\0';
|
vers[lv] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
} while ( ! IS.fail() && strcmp(vers,Version) && strcmp(vers,Version2) );
|
} while ( !IS.fail() &&
|
||||||
|
strcmp(vers, Version_1) &&
|
||||||
|
strcmp(vers, Version_2) &&
|
||||||
|
strcmp(vers, Version_3));
|
||||||
if (IS.fail()) {
|
if (IS.fail()) {
|
||||||
std::cout << "File was not written with this version of the topology"<<std::endl;
|
std::cout << "File was not written with this version of the topology"<<std::endl;
|
||||||
IS.imbue (anOldLocale);
|
IS.imbue (anOldLocale);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (strcmp(vers,Version2) == 0) SetFormatNb(2);
|
if (strcmp(vers, Version_3) == 0)
|
||||||
else SetFormatNb(1);
|
{
|
||||||
|
SetFormatNb(TOP_TOOLS_VERSION_3);
|
||||||
|
}
|
||||||
|
else if (strcmp(vers, Version_2) == 0)
|
||||||
|
{
|
||||||
|
SetFormatNb(TOP_TOOLS_VERSION_2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetFormatNb(TOP_TOOLS_VERSION_1);
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------
|
//-----------------------------------------
|
||||||
// read the locations
|
// read the locations
|
||||||
@@ -681,7 +710,7 @@ void TopTools_ShapeSet::Read(Standard_IStream& IS, const Message_ProgressRange&
|
|||||||
S.Free (buffer[0] == '1');
|
S.Free (buffer[0] == '1');
|
||||||
S.Modified (buffer[1] == '1');
|
S.Modified (buffer[1] == '1');
|
||||||
|
|
||||||
if (myFormatNb == 2)
|
if (myFormatNb >= TOP_TOOLS_VERSION_2)
|
||||||
S.Checked (buffer[2] == '1');
|
S.Checked (buffer[2] == '1');
|
||||||
else
|
else
|
||||||
S.Checked (Standard_False); // force check at reading..
|
S.Checked (Standard_False); // force check at reading..
|
||||||
@@ -693,7 +722,7 @@ void TopTools_ShapeSet::Read(Standard_IStream& IS, const Message_ProgressRange&
|
|||||||
|
|
||||||
// check
|
// check
|
||||||
|
|
||||||
if (myFormatNb == 1)
|
if (myFormatNb == TOP_TOOLS_VERSION_1)
|
||||||
Check(T,S);
|
Check(T,S);
|
||||||
|
|
||||||
myShapes.Add(S);
|
myShapes.Add(S);
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#include <Standard_OStream.hxx>
|
#include <Standard_OStream.hxx>
|
||||||
#include <Standard_IStream.hxx>
|
#include <Standard_IStream.hxx>
|
||||||
#include <TopAbs_ShapeEnum.hxx>
|
#include <TopAbs_ShapeEnum.hxx>
|
||||||
|
#include <TopTools_FormatVersion.hxx>
|
||||||
|
|
||||||
class TopoDS_Shape;
|
class TopoDS_Shape;
|
||||||
class TopTools_LocationSet;
|
class TopTools_LocationSet;
|
||||||
@@ -50,13 +51,10 @@ public:
|
|||||||
|
|
||||||
Standard_EXPORT virtual ~TopTools_ShapeSet();
|
Standard_EXPORT virtual ~TopTools_ShapeSet();
|
||||||
|
|
||||||
|
//! Sets the TopTools_FormatVersion
|
||||||
Standard_EXPORT void SetFormatNb (const Standard_Integer theFormatNb);
|
Standard_EXPORT void SetFormatNb (const Standard_Integer theFormatNb);
|
||||||
|
|
||||||
//! two formats available for the moment:
|
//! Returns the TopTools_FormatVersion
|
||||||
//! First: does not write CurveOnSurface UV Points into the file
|
|
||||||
//! on reading calls Check() method.
|
|
||||||
//! Second: stores CurveOnSurface UV Points.
|
|
||||||
//! On reading format is recognized from Version string.
|
|
||||||
Standard_EXPORT Standard_Integer FormatNb() const;
|
Standard_EXPORT Standard_Integer FormatNb() const;
|
||||||
|
|
||||||
//! Clears the content of the set. This method can be
|
//! Clears the content of the set. This method can be
|
||||||
@@ -181,6 +179,13 @@ public:
|
|||||||
//! Returns number of shapes read from file.
|
//! Returns number of shapes read from file.
|
||||||
Standard_EXPORT Standard_Integer NbShapes() const;
|
Standard_EXPORT Standard_Integer NbShapes() const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
static const TopTools_FormatVersion THE_CURRENT_VERSION = TOP_TOOLS_VERSION_3;
|
||||||
|
static Standard_CString Version_1;
|
||||||
|
static Standard_CString Version_2;
|
||||||
|
static Standard_CString Version_3;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//! Reads from <IS> a shape and returns it in S.
|
//! Reads from <IS> a shape and returns it in S.
|
||||||
|
@@ -4,6 +4,7 @@ XmlLDrivers_DocumentRetrievalDriver.cxx
|
|||||||
XmlLDrivers_DocumentRetrievalDriver.hxx
|
XmlLDrivers_DocumentRetrievalDriver.hxx
|
||||||
XmlLDrivers_DocumentStorageDriver.cxx
|
XmlLDrivers_DocumentStorageDriver.cxx
|
||||||
XmlLDrivers_DocumentStorageDriver.hxx
|
XmlLDrivers_DocumentStorageDriver.hxx
|
||||||
|
XmlLDrivers_FormatVersion.hxx
|
||||||
XmlLDrivers_NamespaceDef.cxx
|
XmlLDrivers_NamespaceDef.cxx
|
||||||
XmlLDrivers_NamespaceDef.hxx
|
XmlLDrivers_NamespaceDef.hxx
|
||||||
XmlLDrivers_SequenceOfNamespaceDef.hxx
|
XmlLDrivers_SequenceOfNamespaceDef.hxx
|
||||||
|
@@ -33,7 +33,6 @@
|
|||||||
static Standard_GUID XmlLStorageDriver ("13a56820-8269-11d5-aab2-0050044b1af1");
|
static Standard_GUID XmlLStorageDriver ("13a56820-8269-11d5-aab2-0050044b1af1");
|
||||||
static Standard_GUID XmlLRetrievalDriver("13a56822-8269-11d5-aab2-0050044b1af1");
|
static Standard_GUID XmlLRetrievalDriver("13a56822-8269-11d5-aab2-0050044b1af1");
|
||||||
|
|
||||||
static int CURRENT_DOCUMENT_VERSION(9);
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Factory
|
//function : Factory
|
||||||
@@ -128,9 +127,9 @@ Handle(XmlMDF_ADriverTable) XmlLDrivers::AttributeDrivers
|
|||||||
//purpose : Document storage version
|
//purpose : Document storage version
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
int XmlLDrivers::StorageVersion()
|
TCollection_AsciiString XmlLDrivers::StorageVersion()
|
||||||
{
|
{
|
||||||
return CURRENT_DOCUMENT_VERSION;
|
return TCollection_AsciiString(THE_CURRENT_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Declare entry point PLUGINFACTORY
|
// Declare entry point PLUGINFACTORY
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#define _XmlLDrivers_HeaderFile
|
#define _XmlLDrivers_HeaderFile
|
||||||
|
|
||||||
#include <Standard_Handle.hxx>
|
#include <Standard_Handle.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
|
|
||||||
class Standard_Transient;
|
class Standard_Transient;
|
||||||
class Standard_GUID;
|
class Standard_GUID;
|
||||||
@@ -41,8 +42,12 @@ public:
|
|||||||
Standard_EXPORT static void DefineFormat (const Handle(TDocStd_Application)& theApp);
|
Standard_EXPORT static void DefineFormat (const Handle(TDocStd_Application)& theApp);
|
||||||
|
|
||||||
Standard_EXPORT static Handle(XmlMDF_ADriverTable) AttributeDrivers (const Handle(Message_Messenger)& theMsgDriver);
|
Standard_EXPORT static Handle(XmlMDF_ADriverTable) AttributeDrivers (const Handle(Message_Messenger)& theMsgDriver);
|
||||||
|
|
||||||
Standard_EXPORT static int StorageVersion();
|
Standard_EXPORT static TCollection_AsciiString StorageVersion();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
static const Standard_Integer THE_CURRENT_VERSION = XML_LDRIVERS_VERSION_10;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _XmlLDrivers_HeaderFile
|
#endif // _XmlLDrivers_HeaderFile
|
||||||
|
@@ -252,25 +252,32 @@ void XmlLDrivers_DocumentRetrievalDriver::ReadFromDomDocument
|
|||||||
theApplication -> MessageDriver();
|
theApplication -> MessageDriver();
|
||||||
// 1. Read info // to be done
|
// 1. Read info // to be done
|
||||||
TCollection_AsciiString anAbsoluteDirectory = GetDirFromFile(myFileName);
|
TCollection_AsciiString anAbsoluteDirectory = GetDirFromFile(myFileName);
|
||||||
Standard_Integer aCurDocVersion = 0;
|
Standard_Integer aCurDocVersion = XML_LDRIVERS_VERSION_2; // minimum supported version
|
||||||
TCollection_ExtendedString anInfo;
|
TCollection_ExtendedString anInfo;
|
||||||
const XmlObjMgt_Element anInfoElem =
|
const XmlObjMgt_Element anInfoElem =
|
||||||
theElement.GetChildByTagName ("info");
|
theElement.GetChildByTagName ("info");
|
||||||
if (anInfoElem != NULL) {
|
if (anInfoElem != NULL) {
|
||||||
XmlObjMgt_DOMString aDocVerStr = anInfoElem.getAttribute("DocVersion");
|
XmlObjMgt_DOMString aDocVerStr = anInfoElem.getAttribute("DocVersion");
|
||||||
if(aDocVerStr == NULL)
|
if (aDocVerStr != NULL)
|
||||||
aCurDocVersion = 2;
|
{
|
||||||
else if (!aDocVerStr.GetInteger(aCurDocVersion)) {
|
Standard_Integer anIntegerVersion;
|
||||||
TCollection_ExtendedString aMsg =
|
if (aDocVerStr.GetInteger(anIntegerVersion))
|
||||||
TCollection_ExtendedString ("Cannot retrieve the current Document version"
|
{
|
||||||
" attribute as \"") + aDocVerStr + "\"";
|
aCurDocVersion = anIntegerVersion;
|
||||||
if(!aMsgDriver.IsNull())
|
}
|
||||||
aMsgDriver->Send(aMsg.ToExtString(), Message_Fail);
|
else
|
||||||
|
{
|
||||||
|
TCollection_ExtendedString aMsg =
|
||||||
|
TCollection_ExtendedString("Cannot retrieve the current Document version"
|
||||||
|
" attribute as \"") + aDocVerStr + "\"";
|
||||||
|
if (!aMsgDriver.IsNull())
|
||||||
|
aMsgDriver->Send(aMsg.ToExtString(), Message_Fail);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// oan: OCC22305 - check a document verison and if it's greater than
|
// oan: OCC22305 - check a document verison and if it's greater than
|
||||||
// current version of storage driver set an error status and return
|
// current version of storage driver set an error status and return
|
||||||
if( aCurDocVersion > XmlLDrivers::StorageVersion() )
|
if( aCurDocVersion > XmlLDrivers::THE_CURRENT_VERSION )
|
||||||
{
|
{
|
||||||
TCollection_ExtendedString aMsg =
|
TCollection_ExtendedString aMsg =
|
||||||
TCollection_ExtendedString ("error: wrong file version: ") +
|
TCollection_ExtendedString ("error: wrong file version: ") +
|
||||||
@@ -282,7 +289,6 @@ void XmlLDrivers_DocumentRetrievalDriver::ReadFromDomDocument
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( aCurDocVersion < 2) aCurDocVersion = 2;
|
|
||||||
Standard_Boolean isRef = Standard_False;
|
Standard_Boolean isRef = Standard_False;
|
||||||
for (LDOM_Node aNode = anInfoElem.getFirstChild();
|
for (LDOM_Node aNode = anInfoElem.getFirstChild();
|
||||||
aNode != NULL; aNode = aNode.getNextSibling()) {
|
aNode != NULL; aNode = aNode.getNextSibling()) {
|
||||||
|
@@ -269,10 +269,10 @@ Standard_Boolean XmlLDrivers_DocumentStorageDriver::WriteToDomDocument
|
|||||||
// anInfoElem.setAttribute("appv", anAppVersion.ToCString());
|
// anInfoElem.setAttribute("appv", anAppVersion.ToCString());
|
||||||
|
|
||||||
// Document version
|
// Document version
|
||||||
Standard_Integer aFormatVersion(XmlLDrivers::StorageVersion());// the last version of the format
|
Standard_Integer aFormatVersion(XmlLDrivers::THE_CURRENT_VERSION); // the last version of the format
|
||||||
if (theDocument->StorageFormatVersion() > 0)
|
if (theDocument->StorageFormatVersion() >= XML_LDRIVERS_VERSION_2) // the minimal supported version
|
||||||
{
|
{
|
||||||
if (XmlLDrivers::StorageVersion() < theDocument->StorageFormatVersion())
|
if (theDocument->StorageFormatVersion() > XmlLDrivers::THE_CURRENT_VERSION)
|
||||||
{
|
{
|
||||||
TCollection_ExtendedString anErrorString("Unacceptable storage format version, the last verson is used");
|
TCollection_ExtendedString anErrorString("Unacceptable storage format version, the last verson is used");
|
||||||
aMessageDriver->Send(anErrorString.ToExtString(), Message_Warning);
|
aMessageDriver->Send(anErrorString.ToExtString(), Message_Warning);
|
||||||
@@ -280,7 +280,8 @@ Standard_Boolean XmlLDrivers_DocumentStorageDriver::WriteToDomDocument
|
|||||||
else
|
else
|
||||||
aFormatVersion = theDocument->StorageFormatVersion();
|
aFormatVersion = theDocument->StorageFormatVersion();
|
||||||
}
|
}
|
||||||
anInfoElem.setAttribute("DocVersion", aFormatVersion);
|
TCollection_AsciiString aStringFormatVersion(aFormatVersion);
|
||||||
|
anInfoElem.setAttribute("DocVersion", aStringFormatVersion.ToCString());
|
||||||
|
|
||||||
// User info with Copyright
|
// User info with Copyright
|
||||||
TColStd_SequenceOfAsciiString aUserInfo;
|
TColStd_SequenceOfAsciiString aUserInfo;
|
||||||
|
30
src/XmlLDrivers/XmlLDrivers_FormatVersion.hxx
Normal file
30
src/XmlLDrivers/XmlLDrivers_FormatVersion.hxx
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (c) 2020 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.
|
||||||
|
|
||||||
|
#ifndef _XmlLDriversFormatVersion_HeaderFile
|
||||||
|
#define _XmlLDriversFormatVersion_HeaderFile
|
||||||
|
|
||||||
|
enum XmlLDrivers_FormatVersion
|
||||||
|
{
|
||||||
|
XML_LDRIVERS_VERSION_2 = 2,
|
||||||
|
XML_LDRIVERS_VERSION_3,
|
||||||
|
XML_LDRIVERS_VERSION_4,
|
||||||
|
XML_LDRIVERS_VERSION_5,
|
||||||
|
XML_LDRIVERS_VERSION_6,
|
||||||
|
XML_LDRIVERS_VERSION_7,
|
||||||
|
XML_LDRIVERS_VERSION_8,
|
||||||
|
XML_LDRIVERS_VERSION_9,
|
||||||
|
XML_LDRIVERS_VERSION_10
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@@ -35,6 +35,7 @@
|
|||||||
#include <XmlObjMgt_DOMString.hxx>
|
#include <XmlObjMgt_DOMString.hxx>
|
||||||
#include <XmlObjMgt_Persistent.hxx>
|
#include <XmlObjMgt_Persistent.hxx>
|
||||||
#include <XmlLDrivers.hxx>
|
#include <XmlLDrivers.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
#include <TDocStd_Owner.hxx>
|
#include <TDocStd_Owner.hxx>
|
||||||
#include <TDocStd_Document.hxx>
|
#include <TDocStd_Document.hxx>
|
||||||
#include <Standard_GUID.hxx>
|
#include <Standard_GUID.hxx>
|
||||||
@@ -107,7 +108,7 @@ Standard_Integer XmlMDF::WriteSubTree
|
|||||||
// was replaced by TDataXtd_Presentation. Therefore, for old versions
|
// was replaced by TDataXtd_Presentation. Therefore, for old versions
|
||||||
// we write old name of the attribute (TPrsStd_AISPresentation).
|
// we write old name of the attribute (TPrsStd_AISPresentation).
|
||||||
Standard_CString typeName = aDriver->TypeName().ToCString();
|
Standard_CString typeName = aDriver->TypeName().ToCString();
|
||||||
if (theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < 8 &&
|
if (theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < XML_LDRIVERS_VERSION_8 &&
|
||||||
strcmp(typeName, "TDataXtd_Presentation") == 0)
|
strcmp(typeName, "TDataXtd_Presentation") == 0)
|
||||||
{
|
{
|
||||||
typeName = "TPrsStd_AISPresentation";
|
typeName = "TPrsStd_AISPresentation";
|
||||||
|
@@ -24,6 +24,8 @@
|
|||||||
#include <XmlMDataStd_ByteArrayDriver.hxx>
|
#include <XmlMDataStd_ByteArrayDriver.hxx>
|
||||||
#include <XmlObjMgt.hxx>
|
#include <XmlObjMgt.hxx>
|
||||||
#include <XmlObjMgt_Persistent.hxx>
|
#include <XmlObjMgt_Persistent.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
|
|
||||||
IMPLEMENT_DOMSTRING (AttributeIDString, "bytearrattguid")
|
IMPLEMENT_DOMSTRING (AttributeIDString, "bytearrattguid")
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(XmlMDataStd_ByteArrayDriver,XmlMDF_ADriver)
|
IMPLEMENT_STANDARD_RTTIEXT(XmlMDataStd_ByteArrayDriver,XmlMDF_ADriver)
|
||||||
@@ -129,7 +131,7 @@ Standard_Boolean XmlMDataStd_ByteArrayDriver::Paste(const XmlObjMgt_Persistent&
|
|||||||
|
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_3) {
|
||||||
Standard_Integer aDeltaValue;
|
Standard_Integer aDeltaValue;
|
||||||
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
||||||
{
|
{
|
||||||
|
@@ -195,7 +195,7 @@ Standard_Boolean XmlMDataStd_ExtStringArrayDriver::Paste
|
|||||||
// Read delta-flag.
|
// Read delta-flag.
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_3) {
|
||||||
Standard_Integer aDeltaValue;
|
Standard_Integer aDeltaValue;
|
||||||
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
||||||
{
|
{
|
||||||
@@ -240,7 +240,7 @@ void XmlMDataStd_ExtStringArrayDriver::Paste (const Handle(TDF_Attribute)& theSo
|
|||||||
// So, if the user wants to save the document under the 7th or earlier versions,
|
// So, if the user wants to save the document under the 7th or earlier versions,
|
||||||
// don't apply this improvement.
|
// don't apply this improvement.
|
||||||
Standard_Character c = '-';
|
Standard_Character c = '-';
|
||||||
if (theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 7)
|
if (theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_8)
|
||||||
{
|
{
|
||||||
// Preferrable symbols for the separator: - _ . : ^ ~
|
// Preferrable symbols for the separator: - _ . : ^ ~
|
||||||
// Don't use a space as a separator: XML low-level parser sometimes "eats" it.
|
// Don't use a space as a separator: XML low-level parser sometimes "eats" it.
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#include <TColStd_PackedMapOfInteger.hxx>
|
#include <TColStd_PackedMapOfInteger.hxx>
|
||||||
#include <TDataStd_IntPackedMap.hxx>
|
#include <TDataStd_IntPackedMap.hxx>
|
||||||
#include <TDF_Attribute.hxx>
|
#include <TDF_Attribute.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
#include <XmlMDataStd.hxx>
|
#include <XmlMDataStd.hxx>
|
||||||
#include <XmlMDataStd_IntPackedMapDriver.hxx>
|
#include <XmlMDataStd_IntPackedMapDriver.hxx>
|
||||||
#include <XmlMDF_ADriver.hxx>
|
#include <XmlMDF_ADriver.hxx>
|
||||||
@@ -106,7 +107,7 @@ Standard_Boolean XmlMDataStd_IntPackedMapDriver::Paste
|
|||||||
if(Ok) {
|
if(Ok) {
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_3) {
|
||||||
Standard_Integer aDeltaValue;
|
Standard_Integer aDeltaValue;
|
||||||
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
||||||
{
|
{
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include <Standard_Type.hxx>
|
#include <Standard_Type.hxx>
|
||||||
#include <TDataStd_IntegerArray.hxx>
|
#include <TDataStd_IntegerArray.hxx>
|
||||||
#include <TDF_Attribute.hxx>
|
#include <TDF_Attribute.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
#include <XmlMDataStd.hxx>
|
#include <XmlMDataStd.hxx>
|
||||||
#include <XmlMDataStd_IntegerArrayDriver.hxx>
|
#include <XmlMDataStd_IntegerArrayDriver.hxx>
|
||||||
#include <XmlObjMgt.hxx>
|
#include <XmlObjMgt.hxx>
|
||||||
@@ -129,7 +130,7 @@ Standard_Boolean XmlMDataStd_IntegerArrayDriver::Paste
|
|||||||
}
|
}
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_3) {
|
||||||
Standard_Integer aDeltaValue;
|
Standard_Integer aDeltaValue;
|
||||||
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
||||||
{
|
{
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
#include <TColStd_HArray1OfReal.hxx>
|
#include <TColStd_HArray1OfReal.hxx>
|
||||||
#include <TDataStd_RealArray.hxx>
|
#include <TDataStd_RealArray.hxx>
|
||||||
#include <TDF_Attribute.hxx>
|
#include <TDF_Attribute.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
#include <XmlMDataStd.hxx>
|
#include <XmlMDataStd.hxx>
|
||||||
#include <XmlMDataStd_RealArrayDriver.hxx>
|
#include <XmlMDataStd_RealArrayDriver.hxx>
|
||||||
#include <XmlObjMgt.hxx>
|
#include <XmlObjMgt.hxx>
|
||||||
@@ -140,7 +141,7 @@ Standard_Boolean XmlMDataStd_RealArrayDriver::Paste
|
|||||||
}
|
}
|
||||||
Standard_Boolean aDelta(Standard_False);
|
Standard_Boolean aDelta(Standard_False);
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 2) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_3) {
|
||||||
Standard_Integer aDeltaValue;
|
Standard_Integer aDeltaValue;
|
||||||
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
|
||||||
{
|
{
|
||||||
|
@@ -118,7 +118,7 @@ void XmlMDataStd_TreeNodeDriver::Paste
|
|||||||
// tree id
|
// tree id
|
||||||
// A not default ID is skipped for storage version 8 and newer.
|
// A not default ID is skipped for storage version 8 and newer.
|
||||||
if (aS->ID() != TDataStd_TreeNode::GetDefaultTreeID() ||
|
if (aS->ID() != TDataStd_TreeNode::GetDefaultTreeID() ||
|
||||||
theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < 8)
|
theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < XML_LDRIVERS_VERSION_8)
|
||||||
{
|
{
|
||||||
Standard_Character aGuidStr [40];
|
Standard_Character aGuidStr [40];
|
||||||
Standard_PCharacter pGuidStr=aGuidStr;
|
Standard_PCharacter pGuidStr=aGuidStr;
|
||||||
|
@@ -370,7 +370,7 @@ void XmlMNaming_NamedShapeDriver::WriteShapeSection (XmlObjMgt_Element& theEleme
|
|||||||
|
|
||||||
// Add text to the "shapes" element
|
// Add text to the "shapes" element
|
||||||
if (myShapeSet.NbShapes() > 0) {
|
if (myShapeSet.NbShapes() > 0) {
|
||||||
myShapeSet.SetFormatNb(2);
|
myShapeSet.SetFormatNb(TopTools_ShapeSet::THE_CURRENT_VERSION);
|
||||||
LDOM_OSStream aStream (16 * 1024);
|
LDOM_OSStream aStream (16 * 1024);
|
||||||
// ostrstream aStream;
|
// ostrstream aStream;
|
||||||
// aStream.rdbuf() -> setbuf (0, 16380);
|
// aStream.rdbuf() -> setbuf (0, 16380);
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
#include <TNaming_Name.hxx>
|
#include <TNaming_Name.hxx>
|
||||||
#include <TNaming_NamedShape.hxx>
|
#include <TNaming_NamedShape.hxx>
|
||||||
#include <TNaming_Naming.hxx>
|
#include <TNaming_Naming.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
#include <XmlMNaming_NamingDriver.hxx>
|
#include <XmlMNaming_NamingDriver.hxx>
|
||||||
#include <XmlObjMgt.hxx>
|
#include <XmlObjMgt.hxx>
|
||||||
#include <XmlObjMgt_Persistent.hxx>
|
#include <XmlObjMgt_Persistent.hxx>
|
||||||
@@ -174,7 +175,7 @@ Standard_Boolean XmlMNaming_NamingDriver::Paste
|
|||||||
}
|
}
|
||||||
aNgName.Index(aNb);
|
aNgName.Index(aNb);
|
||||||
//
|
//
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 3) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_4) {
|
||||||
XmlObjMgt_DOMString aDomEntry = anElem.getAttribute(::ContextLabelString());
|
XmlObjMgt_DOMString aDomEntry = anElem.getAttribute(::ContextLabelString());
|
||||||
if (aDomEntry != NULL)
|
if (aDomEntry != NULL)
|
||||||
{
|
{
|
||||||
@@ -203,8 +204,8 @@ Standard_Boolean XmlMNaming_NamingDriver::Paste
|
|||||||
std::cout << "Retrieving Context Label is NULL" <<std::endl;
|
std::cout << "Retrieving Context Label is NULL" <<std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 4 &&
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_5 &&
|
||||||
theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < 7) {
|
theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() < XML_LDRIVERS_VERSION_7) {
|
||||||
// Orientation processing - converting from old format
|
// Orientation processing - converting from old format
|
||||||
Handle(TNaming_NamedShape) aNS;
|
Handle(TNaming_NamedShape) aNS;
|
||||||
if (aNg->Label().FindAttribute(TNaming_NamedShape::GetID(), aNS)) {
|
if (aNg->Label().FindAttribute(TNaming_NamedShape::GetID(), aNS)) {
|
||||||
@@ -223,7 +224,7 @@ Standard_Boolean XmlMNaming_NamingDriver::Paste
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() > 6) {
|
if(theRelocTable.GetHeaderData()->StorageVersion().IntegerValue() >= XML_LDRIVERS_VERSION_7) {
|
||||||
aDOMStr = anElem.getAttribute(::OrientString());
|
aDOMStr = anElem.getAttribute(::OrientString());
|
||||||
if (!aDOMStr.GetInteger(aNb))
|
if (!aDOMStr.GetInteger(aNb))
|
||||||
{
|
{
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include <TopLoc_Location.hxx>
|
#include <TopLoc_Location.hxx>
|
||||||
#include <TopTools_LocationSet.hxx>
|
#include <TopTools_LocationSet.hxx>
|
||||||
#include <XCAFDoc_Location.hxx>
|
#include <XCAFDoc_Location.hxx>
|
||||||
|
#include <XmlLDrivers_FormatVersion.hxx>
|
||||||
#include <XmlMNaming.hxx>
|
#include <XmlMNaming.hxx>
|
||||||
#include <XmlMXCAFDoc_LocationDriver.hxx>
|
#include <XmlMXCAFDoc_LocationDriver.hxx>
|
||||||
#include <XmlObjMgt.hxx>
|
#include <XmlObjMgt.hxx>
|
||||||
@@ -149,7 +150,7 @@ Standard_Boolean XmlMXCAFDoc_LocationDriver::Translate
|
|||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
|
||||||
Standard_Integer aFileVer = theMap.GetHeaderData()->StorageVersion().IntegerValue();
|
Standard_Integer aFileVer = theMap.GetHeaderData()->StorageVersion().IntegerValue();
|
||||||
if( aFileVer > 5 && myLocations == 0 )
|
if( aFileVer >= XML_LDRIVERS_VERSION_6 && myLocations == 0 )
|
||||||
{
|
{
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
@@ -157,7 +158,7 @@ Standard_Boolean XmlMXCAFDoc_LocationDriver::Translate
|
|||||||
Standard_Integer aPower;
|
Standard_Integer aPower;
|
||||||
Handle(TopLoc_Datum3D) aDatum;
|
Handle(TopLoc_Datum3D) aDatum;
|
||||||
|
|
||||||
if( aFileVer > 5 )
|
if( aFileVer >= XML_LDRIVERS_VERSION_6 )
|
||||||
{
|
{
|
||||||
// Get Location ID
|
// Get Location ID
|
||||||
Standard_Integer anId;
|
Standard_Integer anId;
|
||||||
|
23
tests/bugs/moddata_3/bug31136_1
Normal file
23
tests/bugs/moddata_3/bug31136_1
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
puts "=========="
|
||||||
|
puts "0031136: BinXCAF persistence loses normals from triangulation-only Faces"
|
||||||
|
puts "=========="
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
pload MODELING XDE OCAF VISUALIZATION
|
||||||
|
source $env(CSF_OCCTSamplesPath)/tcl/cad.tcl
|
||||||
|
trinfo res
|
||||||
|
wavefront res $imagedir/${test_image}
|
||||||
|
readobj o $imagedir/${test_image}.obj
|
||||||
|
|
||||||
|
# binary format
|
||||||
|
set test_image_bbrep ${test_image}_bbrep
|
||||||
|
binsave o $imagedir/${test_image_bbrep}.bbrep
|
||||||
|
binrestore $imagedir/${test_image_bbrep}.bbrep b1
|
||||||
|
vclear
|
||||||
|
vclose ALL
|
||||||
|
vinit v1/v1
|
||||||
|
vbottom
|
||||||
|
vdisplay -dispMode 1 b1
|
||||||
|
vfit
|
||||||
|
vrenderparams -shadingModel phong
|
||||||
|
checkview -screenshot -3d -path ${imagedir}/${test_image_bbrep}.png
|
24
tests/bugs/moddata_3/bug31136_2
Normal file
24
tests/bugs/moddata_3/bug31136_2
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
puts "=========="
|
||||||
|
puts "0031136: BinXCAF persistence loses normals from triangulation-only Faces"
|
||||||
|
puts "=========="
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
pload MODELING XDE OCAF VISUALIZATION
|
||||||
|
source $env(CSF_OCCTSamplesPath)/tcl/cad.tcl
|
||||||
|
trinfo res
|
||||||
|
wavefront res $imagedir/${test_image}
|
||||||
|
readobj o $imagedir/${test_image}.obj
|
||||||
|
|
||||||
|
# ASCII format
|
||||||
|
set test_image_brep ${test_image}_brep
|
||||||
|
save o $imagedir/${test_image_brep}.brep
|
||||||
|
restore $imagedir/${test_image_brep}.brep b2
|
||||||
|
vclear
|
||||||
|
vclose ALL
|
||||||
|
vinit v1/v1
|
||||||
|
vbottom
|
||||||
|
vdisplay -dispMode 1 b2
|
||||||
|
vfit
|
||||||
|
vrenderparams -shadingModel phong
|
||||||
|
checkview -screenshot -3d -path ${imagedir}/${test_image_brep}.png
|
||||||
|
|
27
tests/bugs/moddata_3/bug31136_3
Normal file
27
tests/bugs/moddata_3/bug31136_3
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
puts "=========="
|
||||||
|
puts "0031136: BinXCAF persistence loses normals from triangulation-only Faces"
|
||||||
|
puts "=========="
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
pload MODELING XDE OCAF VISUALIZATION
|
||||||
|
source $env(CSF_OCCTSamplesPath)/tcl/cad.tcl
|
||||||
|
trinfo res
|
||||||
|
wavefront res $imagedir/${test_image}
|
||||||
|
readobj o $imagedir/${test_image}.obj
|
||||||
|
|
||||||
|
# XBF format
|
||||||
|
set test_image_XBF ${test_image}_XBF
|
||||||
|
XNewDoc D1
|
||||||
|
XAddShape D1 o
|
||||||
|
XSave D1 $imagedir/${test_image_XBF}.xbf
|
||||||
|
Close D1
|
||||||
|
XOpen $imagedir/${test_image_XBF}.xbf D2
|
||||||
|
vclear
|
||||||
|
vclose ALL
|
||||||
|
vinit v1/v1
|
||||||
|
vbottom
|
||||||
|
XDisplay -dispMode 1 D2
|
||||||
|
Close D2
|
||||||
|
vfit
|
||||||
|
vrenderparams -shadingModel phong
|
||||||
|
checkview -screenshot -3d -path ${imagedir}/${test_image_XBF}.png
|
Reference in New Issue
Block a user