- anArrOfProfiles.SetValue(i,aProfile->GetShape3D());//aProfile->GetTopShape();
- anArrOf2DProfiles.SetValue(i,aProfile->GetTopShape());
-
- gp_Pnt aCurFirstPoint( aPnt1.X(), aPnt1.Y(), 0 ), aCurFP;
- gp_Pnt aCurLastPoint( aPnt2.X(), aPnt2.Y(), 0 ), aCurLP;
- TopoDS_Vertex aV1, aV2;
- TopExp::Vertices(TopoDS::Wire(aProf3d), aV1, aV2);
- gp_Pnt aP1 = BRep_Tool::Pnt(aV1);
- if(aP1.X() == aPnt1.X() && aP1.Y() == aPnt1.Y())
- aCurFP = aP1;
- else
- aCurLP = aP1;
- aP1 = BRep_Tool::Pnt(aV2);
- if(aP1.X() == aPnt2.X() && aP1.Y() == aPnt2.Y())
- aCurLP = aP1;
- else
- aCurFP = aP1;
- anArrayOfFPnt->SetValue(i,aCurFP);
- anArrayOfLPnt->SetValue(i,aCurLP);
- }
-
- // Construct of the 3D presentation
- Handle(Geom_BSplineCurve) aBSpline = buildInterpolationCurve (anArrayOfFPnt);
- if(aBSpline.IsNull())
- return false;
-
- TopoDS_Edge anEdgLeft, anEdgRight;
-
- BRepBuilderAPI_MakeEdge aMakeEdge(aBSpline);
- if(aMakeEdge.IsDone())
- anEdgLeft = aMakeEdge.Edge();
-
- if(anEdgLeft.IsNull())
- return false;
-
- aBSpline.Nullify();
- aBSpline = buildInterpolationCurve (anArrayOfLPnt);
- if(aBSpline.IsNull())
- return false;
-
- aMakeEdge.Init(aBSpline);
- if(aMakeEdge.IsDone())
- anEdgRight = aMakeEdge.Edge();
-
- if(anEdgRight.IsNull())
- return false;
-
- BRep_Builder aBB;
- TopoDS_Compound aCmp;
- aBB.MakeCompound(aCmp);
- anIter.Init( theProfiles );
- for (int i=1 ; i < anArrOfProfiles.Length() +1; i++ )
- aBB.Add(aCmp, anArrOfProfiles.Value(i));
-
- aBB.Add(aCmp,anEdgLeft);
- aBB.Add(aCmp,anEdgRight);
- BRepCheck_Analyzer aCh(aCmp);
- if(aCh.IsValid())
- thePrs.myPrs3D = aCmp;
-#ifdef DEB_UPDATE
- else {
- BRepTools::Write(aCmp, "str3d.brep");
- thePrs.myPrs3D = aCmp;
- }
-#endif
-
- // Construct the top presentation
- for(int i=1;i<= anArrayOfLPnt->Length();i++) {
- gp_Pnt aPnt = anArrayOfFPnt->Value(i);
- aPnt.SetZ(.0); // make 2d
- anArrayOfFPnt->SetValue(i, aPnt);
- aPnt = anArrayOfLPnt->Value(i);
- aPnt.SetZ(.0);
- anArrayOfLPnt->SetValue(i, aPnt);
- }
-
- aBSpline.Nullify();
- aBSpline = buildInterpolationCurve (anArrayOfFPnt);
- if(aBSpline.IsNull())
- return false;
-
- aMakeEdge.Init(aBSpline);
- if(aMakeEdge.IsDone())
- anEdgLeft = aMakeEdge.Edge();
-
- aBSpline.Nullify();
- aBSpline = buildInterpolationCurve (anArrayOfLPnt);
- if(aBSpline.IsNull())
- return false;
-
- aMakeEdge.Init(aBSpline);
- if(aMakeEdge.IsDone())
- anEdgRight = aMakeEdge.Edge();
- if(anEdgRight.IsNull())
- return false;
-
- BRepBuilderAPI_MakeEdge aMakeEdge2(anArrayOfFPnt->Value(1),anArrayOfLPnt->Value(1));
- TopoDS_Edge aBotEdge, aTopEdge;
- if(aMakeEdge2.IsDone())
- aBotEdge = aMakeEdge2.Edge();
-
- BRepBuilderAPI_MakeEdge aMakeEdge3(anArrayOfFPnt->Value(anArrayOfFPnt->Length()),anArrayOfLPnt->Value(anArrayOfLPnt->Length()));
- if(aMakeEdge3.IsDone())
- aTopEdge = aMakeEdge3.Edge();
-
- // Make wire for 2D presentation with updating of corresponding edges
- BRepBuilderAPI_MakeWire aMakeWire;
-
- aMakeWire.Add( aBotEdge );
- thePrs.myInlet = aMakeWire.Edge();
-
- aMakeWire.Add( anEdgLeft );
- thePrs.myLeftBank = aMakeWire.Edge();
-
- aMakeWire.Add( aTopEdge );
- thePrs.myOutlet = aMakeWire.Edge();
-
- aMakeWire.Add( anEdgRight );
- thePrs.myRightBank = aMakeWire.Edge();
-
- TopoDS_Wire aSectProfileWire;
- if(aMakeWire.IsDone())
- aSectProfileWire = aMakeWire.Wire();
-
- BRepBuilderAPI_MakeFace aMakeFace( aSectProfileWire, Standard_True );
- TopoDS_Face aFace;
- aMakeFace.Build();
- if( aMakeFace.IsDone() )
- aFace = aMakeFace.Face();
-
- aCmp.Nullify();
- aBB.MakeCompound(aCmp);
- aBB.Add(aCmp,aFace);
- for(int i=1;i <= anArrOf2DProfiles.Length(); i++)
- aBB.Add(aCmp,anArrOf2DProfiles.Value(i));
-
- aCh.Init(aCmp);
- if(aCh.IsValid())
- thePrs.myPrs2D = aCmp;
-#ifdef DEB_UPDATE
- else {
- BRepTools::Write(aCmp, "str2d.brep");
- thePrs.myPrs2D = aCmp;
- }
-#endif