mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-24 21:10:33 +05:00
closing curves
This commit is contained in:
parent
cd8b27dd73
commit
f105a9b3cc
@ -195,6 +195,7 @@ public:
|
|||||||
{
|
{
|
||||||
startpnt = gp_Pnt2d(h,v);
|
startpnt = gp_Pnt2d(h,v);
|
||||||
localpos.SetLocation(startpnt);
|
localpos.SetLocation(startpnt);
|
||||||
|
startvertex.Nullify();
|
||||||
return shared_from_this();
|
return shared_from_this();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,26 +215,29 @@ public:
|
|||||||
gp_Pnt2d new2d = localpos.Location();
|
gp_Pnt2d new2d = localpos.Location();
|
||||||
gp_Pnt newp = axis.Location() . Translated(new2d.X() * axis.XDirection() + new2d.Y() * axis.YDirection());
|
gp_Pnt newp = axis.Location() . Translated(new2d.X() * axis.XDirection() + new2d.Y() * axis.YDirection());
|
||||||
|
|
||||||
cout << "lineto, newp = " << occ2ng(newp) << endl;
|
if (new2d.Distance(old2d) < 1e-10) return shared_from_this();
|
||||||
gp_Pnt pfromsurf;
|
bool closing = new2d.Distance(startpnt) < 1e-10;
|
||||||
surf->D0(new2d.X(), new2d.Y(), pfromsurf);
|
|
||||||
cout << "p from plane = " << occ2ng(pfromsurf) << endl;
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "lineto, newp = " << occ2ng(newp) << endl;
|
||||||
|
gp_Pnt pfromsurf = surf->Value(new2d.X(), new2d.Y());
|
||||||
|
cout << "p from plane = " << occ2ng(pfromsurf) << endl;
|
||||||
|
|
||||||
Handle(Geom_TrimmedCurve) curve = GC_MakeSegment(oldp, newp);
|
Handle(Geom_TrimmedCurve) curve = GC_MakeSegment(oldp, newp);
|
||||||
|
|
||||||
if (startvertex.IsNull())
|
if (startvertex.IsNull())
|
||||||
startvertex = lastvertex = BRepBuilderAPI_MakeVertex(oldp);
|
startvertex = lastvertex = BRepBuilderAPI_MakeVertex(oldp);
|
||||||
auto endv = BRepBuilderAPI_MakeVertex(newp);
|
auto endv = closing ? startvertex : BRepBuilderAPI_MakeVertex(newp);
|
||||||
// liefert noch Fehler bei close
|
// liefert noch Fehler bei close
|
||||||
// auto edge = BRepBuilderAPI_MakeEdge(curve, lastvertex, endv).Edge();
|
auto edge = BRepBuilderAPI_MakeEdge(curve, lastvertex, endv).Edge();
|
||||||
lastvertex = endv;
|
lastvertex = endv;
|
||||||
|
|
||||||
|
// auto edge = BRepBuilderAPI_MakeEdge(curve).Edge();
|
||||||
auto edge = BRepBuilderAPI_MakeEdge(curve).Edge();
|
|
||||||
if (name)
|
if (name)
|
||||||
OCCGeometry::global_shape_properties[edge.TShape()].name = name;
|
OCCGeometry::global_shape_properties[edge.TShape()].name = name;
|
||||||
wire_builder.Add(edge);
|
wire_builder.Add(edge);
|
||||||
|
|
||||||
|
if (closing) Close();
|
||||||
return shared_from_this();
|
return shared_from_this();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,9 +316,24 @@ public:
|
|||||||
//Draw 2d arc of circle from P1 to P2 through P3
|
//Draw 2d arc of circle from P1 to P2 through P3
|
||||||
Handle(Geom2d_TrimmedCurve) curve2d = GCE2d_MakeArcOfCircle(P1, P3, P2).Value();
|
Handle(Geom2d_TrimmedCurve) curve2d = GCE2d_MakeArcOfCircle(P1, P3, P2).Value();
|
||||||
|
|
||||||
|
gp_Pnt P13d = surf->Value(P1.X(), P1.Y());
|
||||||
|
gp_Pnt P23d = surf->Value(P2.X(), P2.Y());
|
||||||
|
cout << "p13d = " << occ2ng(P13d) << ", p23d = " << occ2ng(P23d) << endl;
|
||||||
|
bool closing = P2.Distance(startpnt) < 1e-10;
|
||||||
|
if (startvertex.IsNull())
|
||||||
|
startvertex = lastvertex = BRepBuilderAPI_MakeVertex(P13d);
|
||||||
|
auto endv = closing ? startvertex : BRepBuilderAPI_MakeVertex(P23d);
|
||||||
|
// liefert noch Fehler bei close
|
||||||
|
|
||||||
|
cout << "closing = " << closing << endl;
|
||||||
|
cout << "startv isnull = " << lastvertex.IsNull() << endl;
|
||||||
|
cout << "endv isnull = " << endv.IsNull() << endl;
|
||||||
//create 3d edge from 2d curve using surf
|
//create 3d edge from 2d curve using surf
|
||||||
auto edge = BRepBuilderAPI_MakeEdge(curve2d, surf).Edge();
|
auto edge = BRepBuilderAPI_MakeEdge(curve2d, surf, lastvertex, endv).Edge();
|
||||||
|
lastvertex = endv;
|
||||||
|
cout << "have edge" << endl;
|
||||||
BRepLib::BuildCurves3d(edge);
|
BRepLib::BuildCurves3d(edge);
|
||||||
|
cout << "Have curve3d" << endl;
|
||||||
wire_builder.Add(edge);
|
wire_builder.Add(edge);
|
||||||
|
|
||||||
//compute angle of rotation
|
//compute angle of rotation
|
||||||
@ -330,7 +349,12 @@ public:
|
|||||||
|
|
||||||
//update localpos.Direction()
|
//update localpos.Direction()
|
||||||
Rotate(angle*180/M_PI);
|
Rotate(angle*180/M_PI);
|
||||||
|
if (closing)
|
||||||
|
{
|
||||||
|
cout << "call close from arc" << endl;
|
||||||
|
Close();
|
||||||
|
cout << "close is back" << endl;
|
||||||
|
}
|
||||||
return shared_from_this();
|
return shared_from_this();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,8 +402,8 @@ public:
|
|||||||
Rotate (90);
|
Rotate (90);
|
||||||
Line(w);
|
Line(w);
|
||||||
Rotate (90);
|
Rotate (90);
|
||||||
wires.push_back (wire_builder.Wire());
|
// wires.push_back (wire_builder.Wire());
|
||||||
wire_builder = BRepBuilderAPI_MakeWire();
|
// wire_builder = BRepBuilderAPI_MakeWire();
|
||||||
return shared_from_this();
|
return shared_from_this();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,8 +414,8 @@ public:
|
|||||||
Direction (0, 1);
|
Direction (0, 1);
|
||||||
Arc(r, 180);
|
Arc(r, 180);
|
||||||
Arc(r, 180);
|
Arc(r, 180);
|
||||||
wires.push_back (wire_builder.Wire());
|
// wires.push_back (wire_builder.Wire());
|
||||||
wire_builder = BRepBuilderAPI_MakeWire();
|
// wire_builder = BRepBuilderAPI_MakeWire();
|
||||||
return shared_from_this();
|
return shared_from_this();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -419,12 +443,19 @@ public:
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Close ()
|
shared_ptr<WorkPlane> Close ()
|
||||||
{
|
{
|
||||||
LineTo (startpnt.X(), startpnt.Y());
|
cout << "close called" << endl;
|
||||||
wires.push_back (wire_builder.Wire());
|
if (!startvertex.IsNull())
|
||||||
wire_builder = BRepBuilderAPI_MakeWire();
|
{
|
||||||
startvertex.Nullify();
|
cout << "I am actually closing" << endl;
|
||||||
|
LineTo (startpnt.X(), startpnt.Y());
|
||||||
|
wires.push_back (wire_builder.Wire());
|
||||||
|
wire_builder = BRepBuilderAPI_MakeWire();
|
||||||
|
startvertex.Nullify();
|
||||||
|
cout << "complete" << endl;
|
||||||
|
}
|
||||||
|
cout << "close returning" << endl;
|
||||||
return shared_from_this();
|
return shared_from_this();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1413,8 +1444,10 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
|
|||||||
.def("ArcTo", &WorkPlane::ArcTo)
|
.def("ArcTo", &WorkPlane::ArcTo)
|
||||||
.def("Arc", &WorkPlane::Arc)
|
.def("Arc", &WorkPlane::Arc)
|
||||||
.def("Rotate", &WorkPlane::Rotate)
|
.def("Rotate", &WorkPlane::Rotate)
|
||||||
.def("Line", [](WorkPlane&wp,double l, optional<string> name) { return wp.Line(l, name); })
|
.def("Line", [](WorkPlane&wp,double l, optional<string> name) { return wp.Line(l, name); },
|
||||||
.def("Line", [](WorkPlane&wp,double h,double v, optional<string> name) { return wp.Line(h,v,name); })
|
py::arg("l"), py::arg("name")=nullopt)
|
||||||
|
.def("Line", [](WorkPlane&wp,double h,double v, optional<string> name) { return wp.Line(h,v,name); },
|
||||||
|
py::arg("dx"), py::arg("dy"), py::arg("name")=nullopt)
|
||||||
.def("Rectangle", &WorkPlane::Rectangle)
|
.def("Rectangle", &WorkPlane::Rectangle)
|
||||||
.def("Circle", &WorkPlane::Circle)
|
.def("Circle", &WorkPlane::Circle)
|
||||||
.def("Offset", &WorkPlane::Offset)
|
.def("Offset", &WorkPlane::Offset)
|
||||||
|
Loading…
Reference in New Issue
Block a user