X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_PolylineXY.cxx;h=9711309a883a4a7c50f99e675f1a9dfab909b87c;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=f55f42b8ce6ab679873e44bc921122f8a8d4d62f;hpb=5a250a4946c626b9f3b549ff5c2bdca4a7d438a2;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_PolylineXY.cxx b/src/HYDROData/HYDROData_PolylineXY.cxx index f55f42b8..9711309a 100755 --- a/src/HYDROData/HYDROData_PolylineXY.cxx +++ b/src/HYDROData/HYDROData_PolylineXY.cxx @@ -13,6 +13,8 @@ #include #include +#include + #include #include #include @@ -36,6 +38,7 @@ #include +#include #include #include #include @@ -56,8 +59,6 @@ static const Standard_GUID GUID_IS_UNEDITABLE("e5799736-9030-4051-91a4-2e58321fa153"); -#define PYTHON_POLYLINEXY_ID "KIND_POLYLINEXY" - const double LOCAL_SELECTION_TOLERANCE = 0.0001; TCollection_AsciiString getUniqueSectionName( const NCollection_Sequence& theNamesSeq ) @@ -108,43 +109,71 @@ HYDROData_PolylineXY::~HYDROData_PolylineXY() QStringList HYDROData_PolylineXY::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const { - QStringList aResList; - - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); - if ( aDocument.IsNull() ) - return aResList; - - QString aDocName = aDocument->GetDocPyName(); - QString aPolylineName = GetName(); + QStringList aResList = dumpObjectCreation( theTreatedObjects ); + QString aPolylineName = GetObjPyName(); - aResList << QString( "%1 = %2.CreateObject( %3 );" ) - .arg( aPolylineName ).arg( aDocName ).arg( PYTHON_POLYLINEXY_ID ); - aResList << QString( "%1.SetName( \"%1\" );" ).arg( aPolylineName ); + // Set the wire color + QStringList aWireColorDef; - // Set polilyne data - NCollection_Sequence aSectNames; - NCollection_Sequence aSectTypes; - NCollection_Sequence aSectClosures; - GetSections( aSectNames, aSectTypes, aSectClosures ); + QColor aWireColor = GetWireColor(); + setPythonObjectColor( aWireColorDef, aWireColor, DefaultWireColor(), "SetWireColor" ); + + if ( !aWireColorDef.isEmpty() ) + { + aResList << aWireColorDef; + aResList << QString( "" ); + } - for ( int i = 1, n = aSectNames.Size(); i <= n; ++i ) + bool anIsEditable = IsEditable(); + if ( !anIsEditable ) { - const TCollection_AsciiString& aSectName = aSectNames.Value( i ); - const SectionType& aSectType = aSectTypes.Value( i ); - bool aSectClosure = aSectClosures.Value( i ); + // If polyline is not editable we try to import the shape from geom + TCollection_AsciiString aGeomObjectEntry = GetGeomObjectEntry(); + if ( !aGeomObjectEntry.IsEmpty() ) + { + QString aSalomeObjName = HYDROData_Tool::GenerateNameForPython( theTreatedObjects, "polyline_sobj" ); + aResList << QString( "%1 = salome.myStudy.FindObjectID( \"%2\" );" ) + .arg( aSalomeObjName ).arg( aGeomObjectEntry.ToCString() ); - aResList << QString( "%1.AddSection( \"%2\", %3, %4 );" ).arg( aPolylineName ) - .arg( aSectName.ToCString() ).arg( aSectType ).arg( aSectClosure ); + aResList << QString( "%1.ImportFromGeomIOR( %2.GetIOR() );" ) + .arg( aPolylineName ).arg( aSalomeObjName ); + + aResList << QString( "%1.SetGeomObjectEntry( \"%2\" );" ) + .arg( aPolylineName ).arg( aGeomObjectEntry.ToCString() ); + } + } + else + { + // Set polilyne data + NCollection_Sequence aSectNames; + NCollection_Sequence aSectTypes; + NCollection_Sequence aSectClosures; + GetSections( aSectNames, aSectTypes, aSectClosures ); - HYDROData_PolylineXY::PointsList aSectPointsList = GetPoints( i ); - for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k ) + for ( int i = 1, n = aSectNames.Size(); i <= n; ++i ) { - const Point& aSectPoint = aSectPointsList.Value( k ); + const TCollection_AsciiString& aSectName = aSectNames.Value( i ); + const SectionType& aSectType = aSectTypes.Value( i ); + bool aSectClosure = aSectClosures.Value( i ); - aResList << QString( "%1.AddPoint( %2, QPointF( %3, %4 ) );" ).arg( aPolylineName ) - .arg( i - 1 ).arg( aSectPoint.X() ).arg( aSectPoint.Y() ); + aResList << QString( "%1.AddSection( \"%2\", %3, %4 );" ).arg( aPolylineName ) + .arg( aSectName.ToCString() ).arg( aSectType ).arg( aSectClosure ); + + HYDROData_IPolyline::PointsList aSectPointsList = GetPoints( i - 1 ); + for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k ) + { + const Point& aSectPoint = aSectPointsList.Value( k ); + + QString anXStr = QString::number( aSectPoint.X(), 'f', 2 ); + QString anYStr = QString::number( aSectPoint.Y(), 'f', 2 ); + aResList << QString( "%1.AddPoint( %2, gp_XY( %3, %4 ) );" ).arg( aPolylineName ) + .arg( i - 1 ).arg( anXStr ).arg( anYStr ); + } } } + aResList << QString( "" ); + aResList << QString( "%1.Update();" ).arg( aPolylineName ); + aResList << QString( "" ); return aResList; } @@ -164,6 +193,38 @@ QColor HYDROData_PolylineXY::DefaultWireColor() return QColor( Qt::red ); } +bool HYDROData_PolylineXY::ImportFromGeomIOR( const TCollection_AsciiString& theIOR ) +{ + if ( theIOR.IsEmpty() ) + return false; + + TopoDS_Shape aShape = GEOMBase::GetShapeFromIOR( theIOR.ToCString() ); + if ( aShape.IsNull() ) + return false; + + return ImportShape( aShape ); +} + +void HYDROData_PolylineXY::SetGeomObjectEntry( const TCollection_AsciiString& theEntry ) +{ + TDataStd_AsciiString::Set( myLab.FindChild( DataTag_GeomObjectEntry ), theEntry ); +} + +TCollection_AsciiString HYDROData_PolylineXY::GetGeomObjectEntry() const +{ + TCollection_AsciiString aRes; + + TDF_Label aLabel = myLab.FindChild( DataTag_GeomObjectEntry, false ); + if ( !aLabel.IsNull() ) + { + Handle(TDataStd_AsciiString) anAsciiStr; + if ( aLabel.FindAttribute( TDataStd_AsciiString::GetID(), anAsciiStr ) ) + aRes = anAsciiStr->Get(); + } + + return aRes; +} + TopoDS_Shape HYDROData_PolylineXY::GetShape() const { return getPolylineShape(); @@ -330,14 +391,15 @@ TopoDS_Wire HYDROData_PolylineXY::BuildWire( const SectionType& TopoDS_Wire aWire; if( theType == SECTION_POLYLINE ) { + int aNbPoints = thePoints.Length(); BRepBuilderAPI_MakePolygon aMakeWire; - for ( int i = 1, n = thePoints.Length(); i <= n ; ++i ) + for ( int i = 1, n = aNbPoints; i <= n ; ++i ) { gp_XYZ aPoint = thePoints.Value( i ); gp_Pnt aPnt( aPoint.X(), aPoint.Y(), aPoint.Z() ); aMakeWire.Add( aPnt ); } - if( theIsClosed ) + if( theIsClosed && ( aNbPoints > 2 ) ) aMakeWire.Close(); if ( aMakeWire.IsDone() ) @@ -478,6 +540,11 @@ void HYDROData_PolylineXY::Update() setPolylineShape( aResult ); } +bool HYDROData_PolylineXY::IsHas2dPrs() const +{ + return true; +} + bool HYDROData_PolylineXY::IsEditable() const { return !myLab.IsAttribute( GUID_IS_UNEDITABLE ); @@ -1037,4 +1104,26 @@ QPainterPath HYDROData_PolylineXY::GetPainterPath() const return aPath; } +void HYDROData_PolylineXY::UpdateLocalCS( double theDx, double theDy ) +{ + NCollection_Sequence aSectNames; + NCollection_Sequence aSectTypes; + NCollection_Sequence aSectClosures; + GetSections( aSectNames, aSectTypes, aSectClosures ); + + gp_XY aDelta( theDx, theDy ); + for ( int i = 0, aNbSects = aSectNames.Size(); i < aNbSects; i++ ) + { + PointsList aPoints = GetPoints( i ); + for( int j = 1, n = aPoints.Size(); j <= n; ++j ) + { + Point& aPoint = aPoints.ChangeValue( j ); + aPoint += aDelta; + } + SetPoints( i, aPoints ); + } + SetToUpdate( true ); +} + +