Standard_Real umin,umax,vmin,vmax,T;
- Handle(Geom_Surface) S = SS;
+ Handle(Geom_Surface) S = SS, BS = SS;
Handle(Geom_RectangularTrimmedSurface) RS =
Handle(Geom_RectangularTrimmedSurface)::DownCast(S);
if (!RS.IsNull())
- S = RS->BasisSurface();
-
+ BS = RS->BasisSurface();
Standard_Boolean OffsetSurface =
- (S->DynamicType() == STANDARD_TYPE(Geom_OffsetSurface));
-
+ (BS->DynamicType() == STANDARD_TYPE(Geom_OffsetSurface));
+
// adjust periodical surface or reordonate
// check if the values are in the natural range
Standard_Real epsilon = Precision::PConfusion();
- S->Bounds(umin,umax,vmin,vmax);
+ BS->Bounds(umin,umax,vmin,vmax);
if (OffsetSurface) {
- Handle(Geom_OffsetSurface) OS = Handle(Geom_OffsetSurface)::DownCast(S);
+ Handle(Geom_OffsetSurface) OS = Handle(Geom_OffsetSurface)::DownCast(BS);
Handle(Geom_Surface) Base = OS->BasisSurface();
if (Base->DynamicType() == STANDARD_TYPE(Geom_SurfaceOfLinearExtrusion)) {
// (BRepPrimAPI_MakeRevol replace surface of revolution by plane then 3D and 2D curves are inconsistent;
// and 3D is ignored. As result shape is rectangle instead circle shape.
Handle(Geom_Curve) aBasisCurve;
+
{
- try {
- OCC_CATCH_SIGNALS
- if (extractCurve3d(generatrix, aBasisCurve)) {
- Handle(Geom_Surface) aResultSurf = new Geom_SurfaceOfRevolution(aBasisCurve, revolAxis);
- if ( !aResultSurf.IsNull() && !IsFullAngle ) {
- Standard_Real VF = aBasisCurve->FirstParameter();
- Standard_Real VL = aBasisCurve->LastParameter();
- // PTV 29.08.2002 begin of OCC663 Trim surface by correct parameters
- Standard_Real UF = 0;
- Standard_Real UL = endAngle - startAngle;;
- //aResultSurf = new Geom_RectangularTrimmedSurface(aResultSurf, startAngle, endAngle, VF, VL);
- aResultSurf = new Geom_RectangularTrimmedSurface(aResultSurf, UF, UL, VF, VL);
- // PTV 29.08.2002 end of OCC663
- }
- if (!aResultSurf.IsNull()) {
- BRepBuilderAPI_MakeFace aMakeF(aResultSurf, Precision::Confusion());
- if (aMakeF.IsDone()) res = aMakeF.Face();
- }
+ try
+ {
+ OCC_CATCH_SIGNALS
+ if (extractCurve3d(generatrix, aBasisCurve))
+ {
+ BRepBuilderAPI_MakeFace aMakeF;
+ Handle(Geom_Surface) aResultSurf =
+ new Geom_SurfaceOfRevolution(aBasisCurve, revolAxis);
+
+ if ( !aResultSurf.IsNull())
+ {
+ if (!IsFullAngle)
+ {
+ const Standard_Real VF = aBasisCurve->FirstParameter();
+ const Standard_Real VL = aBasisCurve->LastParameter();
+
+ // PTV 29.08.2002 begin of OCC663 Trim surface by correct parameters
+ const Standard_Real UF = 0;
+ const Standard_Real UL = endAngle - startAngle;
+ // PTV 29.08.2002 end of OCC663
+
+ aMakeF = BRepBuilderAPI_MakeFace(aResultSurf, UF,
+ UL, VF, VL, Precision::Confusion());
+ }//if (!IsFullAngle)
+ else
+ {
+ aMakeF = BRepBuilderAPI_MakeFace(aResultSurf, Precision::Confusion());
+ }
+
+ if (aMakeF.IsDone())
+ res = aMakeF.Face();
+ }//if ( !aResultSurf.IsNull())
+ }//if (extractCurve3d(generatrix, aBasisCurve))
}
- }
- catch (Standard_Failure) {
+ catch (Standard_Failure)
+ {
#ifdef DEB
- cout << "Warning: IgesToBRep_TopoSurface::TransferSurfaceOfRevolution(): exception by Geom: ";
- Standard_Failure::Caught()->Print ( cout ); cout << endl;
+ cout << "Warning: IgesToBRep_TopoSurface::"
+ "TransferSurfaceOfRevolution(): exception by Geom: ";
+ Standard_Failure::Caught()->Print ( cout ); cout << endl;
#endif
- }
+ }//catch (Standard_Failure)
}
if ( res.IsNull() ) {
Handle(Geom_Surface) aResultSurf =
new Geom_SurfaceOfLinearExtrusion(aBasisCurve, dir);
if (!aResultSurf.IsNull()) {
- aResultSurf =
- new Geom_RectangularTrimmedSurface(aResultSurf,
- aBasisCurve->FirstParameter(),
+ //aResultSurf =
+ // new Geom_RectangularTrimmedSurface(aResultSurf,
+ // aBasisCurve->FirstParameter(),
+ // aBasisCurve->LastParameter(),
+ // 0., dir.Magnitude() );
+ BRepBuilderAPI_MakeFace aMakeF(aResultSurf, aBasisCurve->FirstParameter(),
aBasisCurve->LastParameter(),
- 0., dir.Magnitude() );
- BRepBuilderAPI_MakeFace aMakeF(aResultSurf, Precision::Confusion());
- if (aMakeF.IsDone()) res = aMakeF.Face();
+ 0., dir.Magnitude(),
+ Precision::Confusion());
+ if (aMakeF.IsDone())
+ res = aMakeF.Face();
}
}
}
#include <TopoDS_Compound.hxx>
#include <TopExp_Explorer.hxx>
+#include <Geom_RectangularTrimmedSurface.hxx>
+
#include <ShapeFix_ShapeTolerance.hxx>
#include <StepShape_ConnectedEdgeSet.hxx>
#include <StepShape_EdgeBasedWireframeModel.hxx>
if (!StepToGeom_MakeSurface::Convert(surf,theSurf) || //:i6: protection
!theSurf->IsKind(STANDARD_TYPE(Geom_BoundedSurface))) return res;
- //gka 11.01.99 file PRO7755.stp entity #2018 surface #1895: error BRepLib_MakeFace func IsDegenerated
- BRepBuilderAPI_MakeFace myMkFace(theSurf, TolDegen);
+
+ BRepBuilderAPI_MakeFace myMkFace;
+
+ Handle(Geom_RectangularTrimmedSurface) RS =
+ Handle(Geom_RectangularTrimmedSurface)::DownCast(theSurf);
+
+ if (!RS.IsNull())
+ {
+ Standard_Real umin, umax, vmin, vmax;
+ theSurf->Bounds(umin, umax, vmin, vmax);
+
+ myMkFace = BRepBuilderAPI_MakeFace(RS->BasisSurface(), umin, umax, vmin, vmax, TolDegen);
+ }
+ else
+ {
+ myMkFace = BRepBuilderAPI_MakeFace(theSurf, TolDegen);
+ }
+
return myMkFace.Face();
}