MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / LineClip

Method LineClip

src/Engine/FastLineClip.cpp:74–410  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72
73
74int FastLineClip::LineClip(double *x0, double *y0, double *x1, double *y1)
75{
76 int Code= 0;
77 int visible= 0; // visible state
78
79 FC_xn= *x0; FC_yn= *y0;
80 FC_xk= *x1; FC_yk= *y1;
81
82
83// "Code" evaluation - bits 0..3 - end point, bits 4..7 - start point.
84
85 //start point is
86 if (FC_yk > Wybot) Code|= 0x08; else //lower
87 if (FC_yk < Wytop) Code|= 0x04; //higher
88
89 if (FC_xk > Wxrig) Code|= 0x02; else //righter
90 if (FC_xk < Wxlef) Code|= 0x01; //lefter
91
92 //end point is
93 if (FC_yn > Wybot) Code|= 0x80; else //lower
94 if (FC_yn < Wytop) Code|= 0x40; //higher
95
96 if (FC_xn > Wxrig) Code|= 0x20; else //righter
97 if (FC_xn < Wxlef) Code|= 0x10; //lefter
98
99// Clipping for each of 81 cases.
100 switch (Code) {
101
102 // From center
103
104 case 0x00: ++visible; break;
105 case 0x01: Clip1_Left() ; ++visible; break;
106 case 0x02: Clip1_Right(); ++visible; break;
107 case 0x04: Clip1_Top(); ++visible; break;
108 case 0x05: Clip1_Left() ;
109 if (FC_yk < Wytop) Clip1_Top();
110 ++visible; break;
111 case 0x06: Clip1_Right();
112 if (FC_yk < Wytop) Clip1_Top();
113 ++visible; break;
114 case 0x08: Clip1_Bottom(); ++visible; break;
115 case 0x09: Clip1_Left() ;
116 if (FC_yk > Wybot) Clip1_Bottom();
117 ++visible; break;
118 case 0x0A: Clip1_Right();
119 if (FC_yk > Wybot) Clip1_Bottom();
120 ++visible; break;
121
122
123
124
125
126 //From left
127
128 case 0x10: Clip0_Left(); ++visible;
129 case 0x11: break;
130 case 0x12: Clip0_Left(); Clip1_Right();
131 ++visible; break;

Callers 1

XuLineMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected