// Created on: 2004-05-20 // Created by: Sergey ZARITCHNY // Copyright (c) 2004-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PLANE 1 #define CYLINDER 2 #define CONE 3 #define SPHERE 4 #define TORUS 5 #define LINEAREXTRUSION 6 #define REVOLUTION 7 #define BEZIER 8 #define BSPLINE 9 #define RECTANGULAR 10 #define OFFSET 11 //======================================================================= //function : BinTools_SurfaceSet //purpose : //======================================================================= BinTools_SurfaceSet::BinTools_SurfaceSet() { } //======================================================================= //function : Clear //purpose : //======================================================================= void BinTools_SurfaceSet::Clear() { myMap.Clear(); } //======================================================================= //function : Add //purpose : //======================================================================= Standard_Integer BinTools_SurfaceSet::Add(const Handle(Geom_Surface)& S) { return myMap.Add(S); } //======================================================================= //function : Surface //purpose : //======================================================================= Handle(Geom_Surface) BinTools_SurfaceSet::Surface (const Standard_Integer I)const { return Handle(Geom_Surface)::DownCast(myMap(I)); } //======================================================================= //function : Index //purpose : //======================================================================= Standard_Integer BinTools_SurfaceSet::Index (const Handle(Geom_Surface)& S)const { return myMap.FindIndex(S); } //======================================================================= //function : operator << (gp_Pnt) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const gp_Pnt P) { BinTools::PutReal(OS, P.X()); BinTools::PutReal(OS, P.Y()); BinTools::PutReal(OS, P.Z()); return OS; } //======================================================================= //function : operator << (gp_Dir) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const gp_Dir D) { BinTools::PutReal(OS, D.X()); BinTools::PutReal(OS, D.Y()); BinTools::PutReal(OS, D.Z()); return OS; } //======================================================================= //function : operator <<(Geom_Plane) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_Plane)& S) { OS << (Standard_Byte)PLANE; gp_Pln P = S->Pln(); OS << P.Location();//Pnt OS << P.Axis().Direction(); OS << P.XAxis().Direction(); OS << P.YAxis().Direction(); return OS; } //======================================================================= //function : operator <<(Geom_CylindricalSurface) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_CylindricalSurface)& S) { OS << (Standard_Byte)CYLINDER; gp_Cylinder P = S->Cylinder(); OS << P.Location();//Pnt OS << P.Axis().Direction(); OS << P.XAxis().Direction(); OS << P.YAxis().Direction(); BinTools::PutReal(OS, P.Radius()); return OS; } //======================================================================= //function : operator <<(Geom_ConicalSurface) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_ConicalSurface)& S) { OS << (Standard_Byte)CONE; gp_Cone P = S->Cone(); OS << P.Location();//Pnt OS << P.Axis().Direction(); OS << P.XAxis().Direction(); OS << P.YAxis().Direction(); BinTools::PutReal(OS, P.RefRadius()); BinTools::PutReal(OS, P.SemiAngle()); return OS; } //======================================================================= //function : operator <<(Geom_SphericalSurface) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_SphericalSurface)& S) { OS << (Standard_Byte)SPHERE; gp_Sphere P = S->Sphere(); OS << P.Location();//Pnt OS << P.Position().Axis().Direction(); OS << P.XAxis().Direction(); OS << P.YAxis().Direction(); BinTools::PutReal(OS, P.Radius()); return OS; } //======================================================================= //function : operator <<(Geom_ToroidalSurface) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_ToroidalSurface)& S) { OS << (Standard_Byte)TORUS; gp_Torus P = S->Torus(); OS << P.Location();//Pnt OS << P.Axis().Direction(); OS << P.XAxis().Direction(); OS << P.YAxis().Direction(); BinTools::PutReal(OS, P.MajorRadius()); BinTools::PutReal(OS, P.MinorRadius()); return OS; } //======================================================================= //function : operator <<(Geom_SurfaceOfLinearExtrusion) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_SurfaceOfLinearExtrusion)& S) { OS << (Standard_Byte)LINEAREXTRUSION; OS << S->Direction(); BinTools_CurveSet::WriteCurve(S->BasisCurve(),OS); return OS; } //======================================================================= //function : operator <<(Geom_SurfaceOfRevolution) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_SurfaceOfRevolution)& S) { OS << (Standard_Byte)REVOLUTION; OS << S->Location(); OS << S->Direction(); BinTools_CurveSet::WriteCurve(S->BasisCurve(),OS); return OS; } //======================================================================= //function : operator <<(Geom_BezierSurface) //purpose : //======================================================================= static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_BezierSurface)& S) { OS << (Standard_Byte)BEZIER; Standard_Boolean urational = S->IsURational() ? 1:0; Standard_Boolean vrational = S->IsVRational() ? 1:0; BinTools::PutBool(OS, urational); //rational BinTools::PutBool(OS, vrational); // cout << "Bezier Surface:"<< endl; // cout << "\turational = "<>(Standard_IStream& IS, gp_Pnt& P) { Standard_Real X=0.,Y=0.,Z=0.; BinTools::GetReal(IS, X); BinTools::GetReal(IS, Y); BinTools::GetReal(IS, Z); P.SetCoord(X,Y,Z); return IS; } //======================================================================= //function : ReadDir //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, gp_Dir& D) { Standard_Real X=0.,Y=0.,Z=0.; BinTools::GetReal(IS, X); BinTools::GetReal(IS, Y); BinTools::GetReal(IS, Z); D.SetCoord(X,Y,Z); return IS; } //======================================================================= //function : ReadAx3 //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, gp_Ax3& A3) { gp_Pnt P(0.,0.,0.); gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.); IS >> P >> A >> AX >> AY; gp_Ax3 ax3(P,A,AX); if (AY.DotCross(A,AX) < 0) ax3.YReverse(); A3 = ax3; return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_Plane)& S) { gp_Ax3 A; IS >> A; S = new Geom_Plane(A); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_CylindricalSurface)& S) { gp_Ax3 A; Standard_Real R=0.; IS >> A; BinTools::GetReal(IS, R); S = new Geom_CylindricalSurface(A,R); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_ConicalSurface)& S) { gp_Ax3 A; Standard_Real R=0.,Ang=0.; IS >> A; BinTools::GetReal(IS, R); BinTools::GetReal(IS, Ang); S = new Geom_ConicalSurface(A,Ang,R); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_SphericalSurface)& S) { gp_Ax3 A; Standard_Real R=0.; IS >> A; BinTools::GetReal(IS, R); S = new Geom_SphericalSurface(A,R); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_ToroidalSurface)& S) { gp_Ax3 A; Standard_Real R1=0.,R2=0.; IS >> A; BinTools::GetReal(IS, R1); BinTools::GetReal(IS, R2); S = new Geom_ToroidalSurface(A,R1,R2); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_SurfaceOfLinearExtrusion)& S) { gp_Dir D(1.,0.,0.); Handle(Geom_Curve) C; IS >> D; BinTools_CurveSet::ReadCurve(IS,C); S = new Geom_SurfaceOfLinearExtrusion(C,D); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_SurfaceOfRevolution)& S) { gp_Pnt P(0.,0.,0.); gp_Dir D(1.,0.,0.); Handle(Geom_Curve) C; IS >> P >> D; BinTools_CurveSet::ReadCurve(IS, C); S = new Geom_SurfaceOfRevolution(C,gp_Ax1(P,D)); return IS; } //======================================================================= //function : operator>> //purpose : //======================================================================= static Standard_IStream& operator>>(Standard_IStream& IS, Handle(Geom_BezierSurface)& S) { // cout << "BezierSurface:" <> buffer; if (IS.fail() || strcmp(buffer,"Surfaces")) { Standard_SStream aMsg; aMsg << "BinTools_SurfaceSet::Read: Not a surface table"<> nbsurf; IS.get ();//remove for (i = 1; i <= nbsurf; i++) { BinTools_SurfaceSet::ReadSurface(IS,S); myMap.Add(S); } }