Reading of .brep is slow down on VS2011 due to problems in realization reading ASCII strings to real. Implementation of dedicated function for reading of reals was implemented
#include <BRepTools_ShapeSet.ixx>
#include <BRepTools.hxx>
+#include <GeomTools.hxx>
#include <Poly.hxx>
#include <TopoDS.hxx>
#include <TColStd_HArray1OfInteger.hxx>
TopoDS_Vertex& V = TopoDS::Vertex(S);
// Read the point geometry
- IS >> tol;
- IS >> X >> Y >> Z;
+ GeomTools::GetReal(IS, tol);
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
+ GeomTools::GetReal(IS, Z);
myBuilder.MakeVertex(V,gp_Pnt(X,Y,Z),tol);
Handle(BRep_TVertex) TV = Handle(BRep_TVertex)::DownCast(V.TShape());
TopLoc_Location L;
do {
- IS >> p1 >> val;
+ GeomTools::GetReal(IS, p1);
+ IS >> val;
Handle(BRep_PointRepresentation) PR;
switch (val) {
case 3 :
{
- IS >> p2 >> s;
+ GeomTools::GetReal(IS, p2);
+ IS >> s;
// Modified by Sergey KHROMOV - Wed Apr 24 13:59:09 2002 Begin
if (mySurfaces.Surface(s).IsNull())
myBuilder.MakeEdge(E);
// Read the curve geometry
- IS >> tol;
+ GeomTools::GetReal(IS, tol);
IS >> val;
myBuilder.SameParameter(E,(val == 1));
IS >> val;
myBuilder.UpdateEdge(E,myCurves.Curve(c),
Locations().Location(l),tol);
}
- IS >> first >> last;
+ GeomTools::GetReal(IS, first);
+ GeomTools::GetReal(IS, last);
if (!myCurves.Curve(c).IsNull()) {
Standard_Boolean Only3d = Standard_True;
myBuilder.Range(E,first,last,Only3d);
IS >> s >> l;
// range
- IS >> first >> last;
+ GeomTools::GetReal(IS, first);
+ GeomTools::GetReal(IS, last);
// read UV Points // for XML Persistence higher performance
if (FormatNb() == 2)
{
- IS >> PfX >> PfY >> PlX >> PlY;
+ GeomTools::GetReal(IS, PfX);
+ GeomTools::GetReal(IS, PfY);
+ GeomTools::GetReal(IS, PlX);
+ GeomTools::GetReal(IS, PlY);
aPf = gp_Pnt2d(PfX,PfY);
aPl = gp_Pnt2d(PlX,PlY);
}
IS >> val; // natural restriction
if (val == 0 || val == 1) {
- IS >> tol >> s >> l;
+ GeomTools::GetReal(IS, tol);
+ IS >> s >> l;
// Modified by Sergey KHROMOV - Wed Apr 24 12:39:13 2002 Begin
if (!mySurfaces.Surface(s).IsNull()) {
// Modified by Sergey KHROMOV - Wed Apr 24 12:39:14 2002 End
IS >> buffer;
// if (!strcasecmp(buffer, "p")) {
Standard_Real def;
- IS >> def;
+ GeomTools::GetReal(IS, def);
IS >> hasparameters;
if (hasparameters) {
TColStd_Array1OfReal Param1(1, nbnodes);
for (j = 1; j <= nbnodes; j++) {
- IS >> par;
+ GeomTools::GetReal(IS, par);
Param1(j) = par;
}
Poly = new Poly_PolygonOnTriangulation(Nodes, Param1);
IS >> nbnodes;
IS >> hasparameters;
TColgp_Array1OfPnt Nodes(1, nbnodes);
- IS >> d;
+ GeomTools::GetReal(IS, d);
for (j = 1; j <= nbnodes; j++) {
- IS >> x >> y >> z;
+ GeomTools::GetReal(IS, x);
+ GeomTools::GetReal(IS, y);
+ GeomTools::GetReal(IS, z);
Nodes(j).SetCoord(x,y,z);
}
if (hasparameters) {
TColStd_Array1OfReal Param(1,nbnodes);
for (p = 1; p <= nbnodes; p++) {
- IS >> Param(p);
+ GeomTools::GetReal(IS, Param(p));
}
P = new Poly_Polygon3D(Nodes, Param);
}
for (i=1; i<=nbtri && PS.More();i++, PS.Next()) {
IS >> nbNodes >> nbTriangles >> hasUV;
- IS >> d;
+ GeomTools::GetReal(IS, d);
TColgp_Array1OfPnt Nodes(1, nbNodes);
TColgp_Array1OfPnt2d UVNodes(1, nbNodes);
for (j = 1; j <= nbNodes; j++) {
- IS >> x >> y >> z;
+ GeomTools::GetReal(IS, x);
+ GeomTools::GetReal(IS, y);
+ GeomTools::GetReal(IS, z);
Nodes(j).SetCoord(x,y,z);
}
if (hasUV) {
for (j = 1; j <= nbNodes; j++) {
- IS >> x >> y;
+ GeomTools::GetReal(IS, x);
+ GeomTools::GetReal(IS, y);
UVNodes(j).SetCoord(x,y);
}
}
GetUndefinedTypeHandler returns UndefinedTypeHandler from GeomTools;
+ GetReal(IS : out IStream from Standard; theValue : out Real from Standard);
+ ---Purpose: Reads the Standard_Real value from the stream. Zero is read
+ --- in case of error
+
+
end GeomTools;
{
return theActiveHandler;
}
+
+//=======================================================================
+//function : GetReal
+//purpose :
+//=======================================================================
+
+void GeomTools::GetReal(Standard_IStream& IS,Standard_Real& theValue)
+{
+ theValue = 0.;
+ if (IS.eof())
+ return;
+
+ char buffer[256];
+ buffer[0] = '\0';
+ std::streamsize anOldWide = IS.width(256);
+ IS >> buffer;
+ IS.width(anOldWide);
+ theValue = Strtod(buffer, NULL);
+}
static Standard_IStream& operator>>(Standard_IStream& IS, gp_Pnt2d& P)
{
Standard_Real X=0.,Y=0.;
- IS >> X >> Y;
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
P.SetCoord(X,Y);
return IS;
}
static Standard_IStream& operator>>(Standard_IStream& IS, gp_Dir2d& D)
{
Standard_Real X=0.,Y=0.;
- IS >> X >> Y;
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
D.SetCoord(X,Y);
return IS;
}
gp_Pnt2d P(0.,0.);
gp_Dir2d AX(1.,0.),AY(1.,0.);
Standard_Real R=0.;
- IS >> P >> AX >> AY >> R;
+ IS >> P >> AX >> AY;
+ GeomTools::GetReal(IS, R);
C = new Geom2d_Circle(gp_Ax22d(P,AX,AY),R);
return IS;
}
gp_Pnt2d P(0.,0.);
gp_Dir2d AX(1.,0.),AY(1.,0.);
Standard_Real R1=0.,R2=0.;
- IS >> P >> AX >> AY >> R1 >> R2;
+ IS >> P >> AX >> AY;
+ GeomTools::GetReal(IS, R1);
+ GeomTools::GetReal(IS, R2);
E = new Geom2d_Ellipse(gp_Ax22d(P,AX,AY),R1,R2);
return IS;
}
gp_Pnt2d P(0.,0.);
gp_Dir2d AX(1.,0.),AY(1.,0.);
Standard_Real R1=0.;
- IS >> P >> AX >> AY >> R1;
+ IS >> P >> AX >> AY;
+ GeomTools::GetReal(IS, R1);
C = new Geom2d_Parabola(gp_Ax22d(P,AX,AY),R1);
return IS;
}
gp_Pnt2d P(0.,0.);
gp_Dir2d AX(1.,0.),AY(1.,0.);
Standard_Real R1=0.,R2=0.;
- IS >> P >> AX >> AY >> R1 >> R2;
+ IS >> P >> AX >> AY;
+ GeomTools::GetReal(IS, R1);
+ GeomTools::GetReal(IS, R2);
H = new Geom2d_Hyperbola(gp_Ax22d(P,AX,AY),R1,R2);
return IS;
}
for (i = 1; i <= degree+1; i++) {
IS >> poles(i);
if (rational)
- IS >> weights(i);
+ GeomTools::GetReal(IS, weights(i));
}
if (rational)
for (i = 1; i <= nbpoles; i++) {
IS >> poles(i);
if (rational)
- IS >> weights(i);
+ GeomTools::GetReal(IS, weights(i));
}
TColStd_Array1OfReal knots(1,nbknots);
TColStd_Array1OfInteger mults(1,nbknots);
for (i = 1; i <= nbknots; i++) {
- IS >> knots(i) >> mults(i);
+ GeomTools::GetReal(IS, knots(i));
+ IS >> mults(i);
}
if (rational)
Handle(Geom2d_TrimmedCurve)& C)
{
Standard_Real p1=0.,p2=0.;
- IS >> p1 >> p2;
+ GeomTools::GetReal(IS, p1);
+ GeomTools::GetReal(IS, p2);
Handle(Geom2d_Curve) BC;
GeomTools_Curve2dSet::ReadCurve2d(IS,BC);
C = new Geom2d_TrimmedCurve(BC,p1,p2);
Handle(Geom2d_OffsetCurve)& C)
{
Standard_Real p=0.;
- IS >> p;
+ GeomTools::GetReal(IS, p);
Handle(Geom2d_Curve) BC;
GeomTools_Curve2dSet::ReadCurve2d(IS,BC);
C = new Geom2d_OffsetCurve(BC,p);
static Standard_IStream& operator>>(Standard_IStream& IS, gp_Pnt& P)
{
Standard_Real X=0.,Y=0.,Z=0.;
- IS >> X >> Y >> Z;
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
+ GeomTools::GetReal(IS, Z);
P.SetCoord(X,Y,Z);
return IS;
}
static Standard_IStream& operator>>(Standard_IStream& IS, gp_Dir& D)
{
Standard_Real X=0.,Y=0.,Z=0.;
- IS >> X >> Y >> Z;
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
+ GeomTools::GetReal(IS, Z);
D.SetCoord(X,Y,Z);
return IS;
}
gp_Pnt P(0.,0.,0.);
gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
Standard_Real R=0.;
- IS >> P >> A >> AX >> AY >> R;
+ IS >> P >> A >> AX >> AY;
+ GeomTools::GetReal(IS, R);
C = new Geom_Circle(gp_Ax2(P,A,AX),R);
return IS;
}
gp_Pnt P(0.,0.,0.);
gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
Standard_Real R1=0.,R2=0.;
- IS >> P >> A >> AX >> AY >> R1 >> R2;
+ IS >> P >> A >> AX >> AY;
+ GeomTools::GetReal(IS, R1);
+ GeomTools::GetReal(IS, R2);
E = new Geom_Ellipse(gp_Ax2(P,A,AX),R1,R2);
return IS;
}
gp_Pnt P(0.,0.,0.);
gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
Standard_Real R1=0.;
- IS >> P >> A >> AX >> AY >> R1;
+ IS >> P >> A >> AX >> AY;
+ GeomTools::GetReal(IS, R1);
C = new Geom_Parabola(gp_Ax2(P,A,AX),R1);
return IS;
}
gp_Pnt P(0.,0.,0.);
gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
Standard_Real R1=0.,R2=0.;
- IS >> P >> A >> AX >> AY >> R1 >> R2;
+ IS >> P >> A >> AX >> AY;
+ GeomTools::GetReal(IS, R1);
+ GeomTools::GetReal(IS, R2);
H = new Geom_Hyperbola(gp_Ax2(P,A,AX),R1,R2);
return IS;
}
for (i = 1; i <= degree+1; i++) {
IS >> poles(i);
if (rational)
- IS >> weights(i);
+ GeomTools::GetReal(IS, weights(i));
}
if (rational)
for (i = 1; i <= nbpoles; i++) {
IS >> poles(i);
if (rational)
- IS >> weights(i);
+ GeomTools::GetReal(IS, weights(i));
}
TColStd_Array1OfReal knots(1,nbknots);
TColStd_Array1OfInteger mults(1,nbknots);
for (i = 1; i <= nbknots; i++) {
- IS >> knots(i) >> mults(i);
+ GeomTools::GetReal(IS, knots(i));
+ IS >> mults(i);
}
if (rational)
Handle(Geom_TrimmedCurve)& C)
{
Standard_Real p1=0.,p2=0.;
- IS >> p1 >> p2;
+ GeomTools::GetReal(IS, p1);
+ GeomTools::GetReal(IS, p2);
Handle(Geom_Curve) BC;
GeomTools_CurveSet::ReadCurve(IS,BC);
C = new Geom_TrimmedCurve(BC,p1,p2);
Handle(Geom_OffsetCurve)& C)
{
Standard_Real p=0.;
- IS >> p;
+ GeomTools::GetReal(IS, p);
gp_Dir D(1.,0.,0.);
IS >> D;
Handle(Geom_Curve) BC;
static Standard_IStream& operator>>(Standard_IStream& IS, gp_Pnt& P)
{
Standard_Real X=0.,Y=0.,Z=0.;
- IS >> X >> Y >> Z;
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
+ GeomTools::GetReal(IS, Z);
P.SetCoord(X,Y,Z);
return IS;
}
static Standard_IStream& operator>>(Standard_IStream& IS, gp_Dir& D)
{
Standard_Real X=0.,Y=0.,Z=0.;
- IS >> X >> Y >> Z;
+ GeomTools::GetReal(IS, X);
+ GeomTools::GetReal(IS, Y);
+ GeomTools::GetReal(IS, Z);
D.SetCoord(X,Y,Z);
return IS;
}
{
gp_Ax3 A;
Standard_Real R=0.;
- IS >> A >> R;
+ IS >> A;
+ GeomTools::GetReal(IS, R);
S = new Geom_CylindricalSurface(A,R);
return IS;
}
{
gp_Ax3 A;
Standard_Real R=0.,Ang=0.;
- IS >> A >> R >> Ang;
+ IS >> A;
+ GeomTools::GetReal(IS, R);
+ GeomTools::GetReal(IS, Ang);
S = new Geom_ConicalSurface(A,Ang,R);
return IS;
}
{
gp_Ax3 A;
Standard_Real R=0.;
- IS >> A >> R;
+ IS >> A;
+ GeomTools::GetReal(IS, R);
S = new Geom_SphericalSurface(A,R);
return IS;
}
{
gp_Ax3 A;
Standard_Real R1=0.,R2=0.;
- IS >> A >> R1 >> R2;
+ IS >> A;
+ GeomTools::GetReal(IS, R1);
+ GeomTools::GetReal(IS, R2);
S = new Geom_ToroidalSurface(A,R1,R2);
return IS;
}
for (j = 1; j <= vdegree+1; j++) {
IS >> poles(i,j);
if (urational || vrational)
- IS >> weights(i,j);
+ GeomTools::GetReal(IS, weights(i,j));
}
}
for (j = 1; j <= nbvpoles; j++) {
IS >> poles(i,j);
if (urational || vrational)
- IS >> weights(i,j);
+ GeomTools::GetReal(IS, weights(i,j));
}
}
TColStd_Array1OfReal uknots(1,nbuknots);
TColStd_Array1OfInteger umults(1,nbuknots);
for (i = 1; i <= nbuknots; i++) {
- IS >> uknots(i) >> umults(i);
+ GeomTools::GetReal(IS, uknots(i));
+ IS >> umults(i);
}
TColStd_Array1OfReal vknots(1,nbvknots);
TColStd_Array1OfInteger vmults(1,nbvknots);
for (i = 1; i <= nbvknots; i++) {
- IS >> vknots(i) >> vmults(i);
+ GeomTools::GetReal(IS, vknots(i));
+ IS >> vmults(i);
}
if (urational || vrational)
Handle(Geom_RectangularTrimmedSurface)& S)
{
Standard_Real U1=0.,U2=0.,V1=0.,V2=0.;
- IS >> U1 >> U2 >> V1 >> V2;
+ GeomTools::GetReal(IS, U1);
+ GeomTools::GetReal(IS, U2);
+ GeomTools::GetReal(IS, V1);
+ GeomTools::GetReal(IS, V2);
Handle(Geom_Surface) BS;
GeomTools_SurfaceSet::ReadSurface(IS,BS);
S = new Geom_RectangularTrimmedSurface(BS,U1,U2,V1,V2);
Handle(Geom_OffsetSurface)& S)
{
Standard_Real O=0.;
- IS >> O;
+ GeomTools::GetReal(IS, O);
Handle(Geom_Surface) BS;
GeomTools_SurfaceSet::ReadSurface(IS,BS);
S = new Geom_OffsetSurface(BS,O);
#include <TopLoc_Location.hxx>
#include <Message_ProgressSentry.hxx>
+#include <GeomTools.hxx>
#include <gp_Ax3.hxx>
#include <gp_Vec.hxx>
#include <Precision.hxx>
Standard_Real V1[3],V2[3],V3[3];
Standard_Real V[3];
- IS >> V1[0] >> V1[1] >> V1[2] >> V[0];
- IS >> V2[0] >> V2[1] >> V2[2] >> V[1];
- IS >> V3[0] >> V3[1] >> V3[2] >> V[2];
+ GeomTools::GetReal(IS, V1[0]);
+ GeomTools::GetReal(IS, V1[1]);
+ GeomTools::GetReal(IS, V1[2]);
+ GeomTools::GetReal(IS, V[0]);
+
+ GeomTools::GetReal(IS, V2[0]);
+ GeomTools::GetReal(IS, V2[1]);
+ GeomTools::GetReal(IS, V2[2]);
+ GeomTools::GetReal(IS, V[1]);
+
+ GeomTools::GetReal(IS, V3[0]);
+ GeomTools::GetReal(IS, V3[1]);
+ GeomTools::GetReal(IS, V3[2]);
+ GeomTools::GetReal(IS, V[2]);
T.SetValues(V1[0],V1[1],V1[2],V[0],
V2[0],V2[1],V2[2],V[1],