Subject: CGAL users discussion list
List archive
Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always
Chronological Thread
- From: Nicklas SB Karlsson <>
- To:
- Subject: Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always
- Date: Mon, 27 Nov 2023 17:39:24 +0100
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=Pass
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:RIxFh6HvcvzDYvL4pLqE78eALOsnbusQ8zAXPiFKOH5om6mj/f xG88576faZslkssTQb+exoW5PwJU80l6QZ3WB5B97LNzUO+lHYT72KhrGP/9SPIUPDH6JmpM JdWpk7JvrcSWJzl8OS2njeL+od
- Ironport-phdr: A9a23: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
- Ironport-sdr: 6564c63d_kUPa6mwn8Fn/ZaxlvbwF3arF8D2Sn/7exDHE0k1IiY2I82G iaaIjfdOpuZ4K2hJeKwzwFWnos9il1g6dKcs3AA==
Found the problem. Accidentally redeclared variable pgn at line 122. Usually have warning turned on to avoid these kind of misstakes but not this time so missed it. Sorry to disturb.
Using the function Curve_2(...) and function make_x_monotone_2_object(...) to split the curve seems to have solved tha problem.
Regards Nicklas Karlsson
mån 2023-11-27 klockan 17:24 +0100 skrev Nicklas SB Karlsson:
Another try attached. This time with Curve_2 but seems to disappear between line 131 in main.c there it is added to pgn with push_back(...) function and lines 140 to 145 there the coordinates for the X_monotone_curve_2 in pgn is printed. A complete mystery for me what happen.Same procedure change to sub directory build run "cmake .." and make to build an executable inte the build directory.Regards Nicklas Karlssonlör 2023-11-25 klockan 10:53 +0200 skrev Efi Fogel:Please provide a complete stand-alone example that compiles.____ _ ____ _
/_____/_) o /__________ __ //
(____ ( ( ( (_/ (_/-(-'_(/
_/On Fri, 24 Nov 2023 at 23:44, Nicklas SB Karlsson <> wrote:Have been able to make polygons with connected lines, circles and
boolean operations in between them. While possible to make polygons with
circular arcs using boolean operations of these it is not a desirable
solution. Preferred solution is of course to add lines and then needed
circular arcs.
Have code below that for some angles cases succeed making a polygon with
half circle and a line connecting the two endpoints example in attached
picture. It seems to work perfect for different angles then circle is to
the right the first if condition if(p2.y() < p3.y()) in code snippet
below. But for the second if condition if(p2.y() > p3.y()) it only seems
to work then pointing to the left the angle=PI but otherwise fail with
the error message at bottom. Suspect this is because something does not
fit perfectly together for example the points on the circle. Guess I am
not the first person try to do this. Anybody have any suggestions how to
make it work?
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2 K_Point_2;
typedef CGAL::Arr_circle_segment_traits_2<Kernel>::Point_2 Apoint_2;
typedef Kernel::Circle_2 K_Circle_2;
typedef CGAL::Gps_circle_segment_traits_2<Kernel> Traits_2; /* The
traits class Gps_circle_segment_traits_2 models the
GeneralPolygonSetTraits_2 concept.
*
It enables Boolean set-operations on general polygons bounded by linear
segments or circular arcs. It should be parameterized with a kernel. */
typedef CGAL::General_polygon_set_2<Traits_2> Polygon_set_2;
typedef Traits_2::General_polygon_2 Polygon_2;
typedef Traits_2::General_polygon_with_holes_2 Polygon_with_holes_2;
typedef Traits_2::Curve_2 Curve_2;
typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2;
typedef Traits_2::CoordNT coordnt;
tool_type::tool_type(point_type pOld, point_type pNew)
{
const double xOld = pOld.x;
const double yOld = pOld.y;
const double xNew = pNew.x;
const double yNew = pNew.y;
const double radius = 6;
const double angle = atan2(yNew-yOld, xNew-xOld);
const FT radiusFT = radius;
{
const K_Point_2 p0(xOld+radius*std::cos(angle + M_PI/2),
yOld+radius*std::sin(angle + M_PI/2)); // angle zero and pNew to the right
const K_Point_2 p1(xOld+radius*std::cos(angle - M_PI/2),
yOld+radius*std::sin(angle - M_PI/2)); // of pOld arrangement below:
const K_Point_2 p2(xNew+radius*std::cos(angle - M_PI/2),
yNew+radius*std::sin(angle - M_PI/2)); // p0 p3
const K_Point_2 p3(xNew+radius*std::cos(angle + M_PI/2),
yNew+radius*std::sin(angle + M_PI/2)); // p1 p2
{
Polygon_2 pgn;
const K_Circle_2 tool_circle(K_Point_2(xOld,yOld),
radiusFT*radiusFT);
const K_Circle_2 tool_circle2(p2, p3, CGAL::COUNTERCLOCKWISE);
toolFront = construct_polygon(tool_circle);
monotone_curves_type cc;// = construct_circular_arc(tool_circle2,
radiusFT, p2, p3, CGAL::COUNTERCLOCKWISE); // Test function remove!!
then done
if(p2.y() < p3.y())
{
const Apoint_2 p(p2.x(), p2.y());
const K_Point_2 pRight(xNew + radius, yNew);
const Apoint_2 r(p3.x(), p3.y());
const K_Circle_2 c(p2, pRight, p3);
const K_Point_2 center = c.center();
const Apoint_2 q(pRight.x(), pRight.y());
cc.x1 = X_monotone_curve_2(c, p, q, CGAL::COUNTERCLOCKWISE);
cc.x2 = X_monotone_curve_2(c, q, r, CGAL::COUNTERCLOCKWISE);
cc.valid = 2;
}
if(p2.y() > p3.y())
{
const Apoint_2 p(p2.x(), p2.y());
const K_Point_2 pLeft(xNew - radius, yNew);
const Apoint_2 r(p3.x(), p3.y());
const K_Circle_2 c(p2, pLeft, p3);
const K_Point_2 center = c.center();
const Apoint_2 q(pLeft.x(), pLeft.y());
cc.x1 = X_monotone_curve_2(c, p, q, CGAL::COUNTERCLOCKWISE);
cc.x2 = X_monotone_curve_2(c, q, r, CGAL::COUNTERCLOCKWISE);
cc.valid = 2;
}
pgn.push_back(cc.x1);
pgn.push_back(cc.x2);
pgn.push_back(X_monotone_curve_2(p3, p2));
closed.insert(pgn);
}
}
}
terminate called after throwing an instance of
'CGAL::Precondition_exception'
what(): CGAL ERROR: precondition violation!
Expr: cv1.point_position (p) == EQUAL && cv2.point_position (p) == EQUAL
File: /usr/include/CGAL/Arr_circle_segments_traits2.h
Line: 255
Aborted
For the curios persons it should be used to iteratively calculate tool
path for a CNC machine. If Successful I will try to add it to the CAM
module called path workbench in Freecad. At first tried to use the
builtin representation of material and tool shape but seems I got some
accuracy problem. Then I tried Open Cascade which Freecad use internally
or are built upon so to say but calculations where slow. So then I
decided to switch to CGAL as I had seen before it have an impressive
list of developers so guess it is the best possible to get.
Nicklas SB Karlsson
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss
- [cgal-discuss] Polygon adding circular arc work in some cases but not always, Nicklas SB Karlsson, 11/24/2023
- Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always, Efi Fogel, 11/25/2023
- Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always, Nicklas SB Karlsson, 11/25/2023
- Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always, Nicklas SB Karlsson, 11/27/2023
- Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always, Nicklas SB Karlsson, 11/27/2023
- Re: [cgal-discuss] Polygon adding circular arc work in some cases but not always, Efi Fogel, 11/25/2023
Archive powered by MHonArc 2.6.19+.