#include <BRepLib_MakeWire.hxx>
#include <BRep_Builder.hxx>
#include <ShapeAnalysis_Wire.hxx>
+#include <BRepAlgo_NormalProjection.hxx>
+#include <BRepBuilderAPI_MakePolygon.hxx>
IMPLEMENT_STANDARD_HANDLE( HYDROData_DTM, HYDROData_Bathymetry )
void HYDROData_DTM::PointToWire(const AltitudePoints& pnts, TopoDS_Wire& W )
{
- BRepLib_MakeWire WM;
+ /*BRepLib_MakeWire WM;
if (pnts.empty())
return;
for (int i = 0; i < pnts.size() - 1; i++)
gp_Pnt p2(pnts[i+1].X, pnts[i+1].Y, pnts[i+1].Z);
WM.Add(BRepLib_MakeEdge(p1, p2).Edge());
}
- if (WM.IsDone())
- W = WM.Wire();
+ if (WM.IsDone())*/
+
+ BRepBuilderAPI_MakePolygon PM;
+ for (int i = 0; i < pnts.size(); i++)
+ PM.Add(gp_Pnt(pnts[i].X, pnts[i].Y, pnts[i].Z));
+
+ W = PM.Wire();
}
TopTools_IndexedMapOfOrientedShape HYDROData_DTM::Create3DShape(const AltitudePoints& left,
Out3dPres = GetShape( DataTag_3DShape );
Out2dPres = GetShape( DataTag_2DShape );
}
-
void HYDROData_DTM::CreateProfilesFromDTM (const HYDROData_SequenceOfObjects& InpProfiles,
double ddz,
double step,
void HYDROData_DTM::ProjWireOnPlane(const TopoDS_Wire& inpWire, const Handle_Geom_Plane& RefPlane, TopoDS_Wire& outWire)
{
- //its also possible to use BrepAlgo_NormalProjection here!
- BRepTools_WireExplorer ex(TopoDS::Wire(inpWire.Oriented(TopAbs_FORWARD)));
+ /*BRepTools_WireExplorer ex(TopoDS::Wire(inpWire.Oriented(TopAbs_FORWARD)));
BRepLib_MakeWire WM;
for (;ex.More();ex.Next())
{
double f, l;
Handle(Geom_Curve) C3d = BRep_Tool::Curve(CE, f, l);
Handle(Geom_Curve) ProjectedCurve = GeomProjLib::ProjectOnPlane(new Geom_TrimmedCurve(C3d, f, l), RefPlane, RefPlane->Position().Direction(), Standard_True);
- TopoDS_Edge ProjEdge = BRepLib_MakeEdge(ProjectedCurve);
- WM.Add(ProjEdge); //auto sharing between edges if vertex is coincident
- }
+ if (!ProjectedCurve.IsNull())
+ {
+ TopoDS_Edge ProjEdge = BRepLib_MakeEdge(ProjectedCurve, f, l );
+ if (!BRep_Tool::Degenerated(ProjEdge))
+ WM.Add(ProjEdge); //auto sharing between edges if vertex is coincident
+ }
+ }*/
+
+ BRep_Builder BB;
+ TopoDS_Face F;
+ BB.MakeFace(F, RefPlane, Precision::Confusion());
+ BRepLib_MakeWire WM;
+
+ BRepAlgo_NormalProjection nproj(F);
+ nproj.Add(inpWire);
+ nproj.SetDefaultParams();
+ nproj.Build();
+ if(!nproj.IsDone())
+ return;
+ TopoDS_Shape projRes = nproj.Projection();
+ TopExp_Explorer exp(projRes, TopAbs_EDGE);
+ TopTools_ListOfShape llE;
+ for (;exp.More();exp.Next())
+ llE.Append(exp.Current());
+
+ WM.Add(llE);
outWire = WM.Wire();
+
outWire.Orientation(inpWire.Orientation()); //take from the original wire
}