isReverse = !IsFwdSeq(1);
}
- TopoDS_Vertex FirstVtx_final = FirstVertex;
+ TopoDS_Vertex FirstVtx_final, LastVtx_final;
+ if (isReverse)
+ {
+ FirstVtx_final = LastVertex;
+ LastVtx_final = FirstVertex;
+ }
+ else
+ {
+ FirstVtx_final = FirstVertex;
+ LastVtx_final = LastVertex;
+ }
FirstVtx_final.Orientation(TopAbs_FORWARD);
- TopoDS_Vertex LastVtx_final = LastVertex;
LastVtx_final.Orientation(TopAbs_REVERSED);
if (CurveSeq.IsEmpty())
concatcurve->SetValue(concatcurve->Lower(), Concat.BSplineCurve());
}
+ if (isReverse) {
+ concatcurve->ChangeValue(concatcurve->Lower())->Reverse();
+ }
ResEdge = BRepLib_MakeEdge(concatcurve->Value(concatcurve->Lower()),
FirstVtx_final, LastVtx_final,
concatcurve->Value(concatcurve->Lower())->FirstParameter(),
--- /dev/null
+puts "==================================================="
+puts "0031496: Modeling Algorithms - BRepAlgo::ConcatenateWireC0() crashes"
+puts "==================================================="
+vertex v1 0 0 0
+vertex v2 1 0 0
+vertex v3 2 0 0
+vertex v4 3 0 0
+edge e1 v1 v2
+edge e2 v2 v3
+edge e3 v3 v4
+wire w e1 e2 e3
+invert w
+concatC0wire e w
+checknbshapes e -vertex 2 -edge 1
+nurbsconvert w w
+concatC0wire e w
+checknbshapes e -vertex 2 -edge 1