#include <HYDROData_PolylineOperator.h>
#include <HYDROData_Document.h>
#include <HYDROData_TopoCurve.h>
+#include <HYDROData_Object.h>
+#ifndef LIGHT_MODE
#include <CurveCreator_Utils.hxx>
+#endif
#include <BRepAdaptor_Curve.hxx>
#include <BRep_Builder.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#include <QString>
+#include <QStringList>
+#include <QColor>
+#include <Geom_BSplineCurve.hxx>
template<class T> void append( std::vector<T>& theList, const std::vector<T>& theList2 )
{
for( int i=0, n=aCurves.size(); i<n; i++ )
{
std::vector<TopoDS_Shape> aCurvesList;
- Split(aCurves[i], thePoint, theTolerance, aCurvesList);
- bool isLocalOK = CreatePolylines( theDoc, thePolyline->GetName(), aCurvesList, true );
+ Split( aCurves[i], thePoint, theTolerance, aCurvesList );
+ bool isLocalOK = CreatePolylines( theDoc, thePolyline->GetName(),
+ aCurvesList, true, thePolyline->GetWireColor() );
isOK = isOK && isLocalOK;
}
return isOK;
std::vector<TopoDS_Shape> aPolylines(1);
aPolylines[0] = aWireSet;
- CreatePolylines(theDoc, theName, aPolylines, false);
+ QString aName = theName;
+ if( aName.isEmpty() )
+ aName = "merged";
+ CreatePolylines( theDoc, aName, aPolylines, true, QColor() );
return true;
}
}
}
- CreatePolylines(theDoc, thePolyline->GetName(), aResult, true);
+ CreatePolylines( theDoc, thePolyline->GetName(), aResult, true, thePolyline->GetWireColor() );
return true;
}
bool HYDROData_PolylineOperator::CreatePolylines( const Handle( HYDROData_Document )& theDoc,
const QString& theNamePrefix,
const std::vector<TopoDS_Shape>& theShapes,
- bool isUseIndices )
+ bool isUseIndices,
+ const QColor& theColor )
{
if( theDoc.IsNull() )
return false;
{
aPolyline->SetName( theNamePrefix );
}
+
+ if( theColor.isValid() )
+ aPolyline->SetWireColor( theColor );
}
return true;
}
}
Handle(Geom_BSplineCurve) aBSpline2;
const bool isClosed = theCurve.IsClosed();
+#ifndef LIGHT_MODE
if (!CurveCreator_Utils::constructBSpline(aPs2, isClosed, aBSpline2))
+#endif
{
return -1;
}
}
return aMaxDefl;
}
+
+bool HYDROData_PolylineOperator::Extract( const Handle(HYDROData_Document)& theDocument,
+ const Handle(HYDROData_Object)& theObject )
+{
+ if( theObject.IsNull() || theDocument.IsNull() )
+ return false;
+
+ QList<TopoDS_Shape> aBoundShapes;
+ QStringList aBoundNames;
+
+ theObject->GetBoundaries( aBoundShapes, aBoundNames );
+
+ for( int i=0, n=aBoundShapes.size(); i<n; i++ )
+ {
+ TopoDS_Shape aShape = aBoundShapes[i];
+ if( aShape.IsNull() )
+ continue;
+
+ QString aBoundName = i<aBoundNames.size() ? aBoundNames[i] : "";
+
+ Handle( HYDROData_PolylineXY ) aPolyline =
+ Handle( HYDROData_PolylineXY )::DownCast( theDocument->CreateObject( KIND_POLYLINEXY ) );
+
+ if( aPolyline.IsNull() )
+ return false;
+
+ aPolyline->SetShape( aShape );
+
+ int anIndex = 0;
+ QString aName = aBoundName;
+ while( !theDocument->FindObjectByName( aName ).IsNull() )
+ {
+ anIndex++;
+ aName = aBoundName + "_" + QString::number( anIndex );
+ }
+ aPolyline->SetName( aName );
+ }
+
+ return true;
+}