MCPcopy Create free account
hub / github.com/XRay3D/GERBER_X3 / IntersectPoint

Function IntersectPoint

static_libs/clipper/clipper.cpp:648–705  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

646//------------------------------------------------------------------------------
647
648void IntersectPoint(TEdge& Edge1, TEdge& Edge2, IntPoint& ip)
649{
650#ifdef use_xyz
651 ip.Z = 0;
652#endif
653
654 double b1, b2;
655 if (Edge1.Dx == Edge2.Dx) {
656 ip.Y = Edge1.Curr.Y;
657 ip.X = TopX(Edge1, ip.Y);
658 return;
659 } else if (Edge1.Dx == 0) {
660 ip.X = Edge1.Bot.X;
661 if (IsHorizontal(Edge2))
662 ip.Y = Edge2.Bot.Y;
663 else {
664 b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx);
665 ip.Y = Round(ip.X / Edge2.Dx + b2);
666 }
667 } else if (Edge2.Dx == 0) {
668 ip.X = Edge2.Bot.X;
669 if (IsHorizontal(Edge1))
670 ip.Y = Edge1.Bot.Y;
671 else {
672 b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx);
673 ip.Y = Round(ip.X / Edge1.Dx + b1);
674 }
675 } else {
676 b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx;
677 b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx;
678 double q = (b2 - b1) / (Edge1.Dx - Edge2.Dx);
679 ip.Y = Round(q);
680 if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
681 ip.X = Round(Edge1.Dx * q + b1);
682 else
683 ip.X = Round(Edge2.Dx * q + b2);
684 }
685
686 if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y) {
687 if (Edge1.Top.Y > Edge2.Top.Y)
688 ip.Y = Edge1.Top.Y;
689 else
690 ip.Y = Edge2.Top.Y;
691 if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
692 ip.X = TopX(Edge1, ip.Y);
693 else
694 ip.X = TopX(Edge2, ip.Y);
695 }
696 //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ...
697 if (ip.Y > Edge1.Curr.Y) {
698 ip.Y = Edge1.Curr.Y;
699 //use the more vertical edge to derive X ...
700 if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx))
701 ip.X = TopX(Edge2, ip.Y);
702 else
703 ip.X = TopX(Edge1, ip.Y);
704 }
705}

Callers 1

BuildIntersectListMethod · 0.70

Calls 3

TopXFunction · 0.70
IsHorizontalFunction · 0.70
RoundFunction · 0.70

Tested by

no test coverage detected