#include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
#include <TDataStd_RealList.hxx>
+#include <TopoDS_Iterator.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
-
+#include <TopTools_HSequenceOfShape.hxx>
+#include <TopExp_Explorer.hxx>
+#include <ShapeAnalysis_FreeBounds.hxx>
+#include <TopoDS.hxx>
#include <QColor>
#include <QPainterPath>
#include <QVariant>
aMakeWire.Add( aSectionWire );
}
}
-
- TopoDS_Shape aShape;
-
- if ( aMakeWire.IsDone() )
- {
- aShape = aMakeWire.Shape();
- }
- else if ( !aSectionWiresList.IsEmpty() )
+// all input wires in the <aSectionWiresList>
+ Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape;
+ Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape;
+ TopTools_ListIteratorOfListOfShape it(aSectionWiresList);
+ for(;it.More();it.Next())
{
- // build compound
- TopoDS_Compound aCompound;
-
- BRep_Builder aBuilder;
- aBuilder.MakeCompound( aCompound );
-
- TopTools_ListIteratorOfListOfShape anIter( aSectionWiresList );
- for ( ; anIter.More(); anIter.Next() )
- {
- aBuilder.Add( aCompound, anIter.Value() );
- }
-
- aShape = aCompound;
+ TopExp_Explorer it2(it.Value(), TopAbs_EDGE);
+ for(;it2.More();it2.Next())
+ aSeqEdges->Append(it2.Current());
}
-
- setPolylineShape( aShape );
+ BRep_Builder aBB;
+ TopoDS_Compound aCmp;
+ TopoDS_Shape aResult;
+ aBB.MakeCompound(aCmp);
+ if(aSeqEdges->Length() >1)
+ {
+ ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges,1E-5,Standard_False,aSeqWires);
+
+ if( aSeqWires->Length()==1 )
+ aResult = aSeqWires->Value( 1 );
+ else
+ {
+ for (Standard_Integer i = 1; i <= aSeqWires->Length();i++)
+ {
+ const TopoDS_Shape& aS1 = aSeqWires->Value(i);
+ aBB.Add(aCmp, aS1);
+ }
+ aResult = aCmp;
+ }
+ }
+ else if (aSeqEdges->Length() == 1)
+ {
+ BRepBuilderAPI_MakeWire mkWire (TopoDS::Edge(aSeqEdges->Value(1)));
+ if (mkWire.IsDone())
+ aResult = mkWire.Wire();
+ }
+
+ setPolylineShape( aResult );
}
/**