if (AS.GetType()==GeomAbs_Plane){
gp_Pln pln = AS.Plane();
gp_Ax3 ax3 = pln.Position();
- Handle(Geom_Line) GL = Handle(Geom_Line)::DownCast
- (BRep_Tool::Curve(TopoDS::Edge(aNewEdge),Loc,First,Last));
+ Handle(Geom_Curve) aC = BRep_Tool::Curve(TopoDS::Edge(aNewEdge),Loc,First,Last);
+ Handle(Geom_Line) GL = Handle(Geom_Line)::DownCast(aC);
+ if (GL.IsNull()) {
+ Handle(Geom_TrimmedCurve) aTrimmedCurve = Handle(Geom_TrimmedCurve)::DownCast(aC);
+ if (!aTrimmedCurve.IsNull()) {
+ GL = Handle(Geom_Line)::DownCast(aTrimmedCurve->BasisCurve());
+ if (GL.IsNull()) {
+ Standard_ConstructionError::Raise("BRepSweep_Rotation::SetGeneratingPCurve");
+ }
+ }
+ }
gp_Lin gl = GL->Lin();
gl.Transform(Loc.Transformation());
point = gl.Location();
--- /dev/null
+puts "========"
+puts "OCC26016"
+puts "========"
+puts ""
+##@@###########################
+# BRepPrimAPI_MakeRevol crash
+###############################
+
+smallview
+
+restore [locate_data_file OCC26016-revolve-crash.brep] a
+revol r a 0 0 0 0 1 0 90
+set bug_info [checkshape r]
+
+if {[string compare $bug_info "This shape seems to be valid"] != 0} {
+ puts "ERROR: OCC26016 is reproduced"
+}
+
+donly r
+fit
+set only_screen_axo 1