19 #include <grass/gstypes.h>
22 static void init_cplane(
void);
24 static float Cp_pt[4], Cp_norm[MAX_CPLANES][4];
25 static float Cp_trans[MAX_CPLANES][3], Cp_rot[MAX_CPLANES][3];
26 static int Cp_ison[MAX_CPLANES];
28 static void init_cplane(
void)
35 for (i = 0; i < MAX_CPLANES; i++) {
38 Cp_norm[i][
Y] = Cp_norm[i][Z] = 0.0;
40 Cp_rot[i][
X] = Cp_trans[i][
X] = 0.0;
41 Cp_rot[i][
Y] = Cp_trans[i][
Y] = 0.0;
42 Cp_rot[i][Z] = Cp_trans[i][Z] = 0.0;
57 float sx, sy, sz, ppt[3];
66 ppt[0] = (pt[0] + Cp_pt[0]) * sx;
67 ppt[1] = (pt[1] + Cp_pt[1]) * sy;
68 ppt[2] = (pt[2] + Cp_pt[2] - zmin) * sz;
70 params[0] = norm[0] * sx;
71 params[1] = norm[1] * sy;
72 params[2] = norm[2] * sz;
74 params[3] = -ppt[0] * params[0] - ppt[1] * params[1] - ppt[2] * params[2];
90 for (i = 0; i < MAX_CPLANES; i++) {
106 static int first = 1;
146 for (i = 0; i < MAX_CPLANES; i++) {
147 onstate[i] = Cp_ison[i];
167 for (ons = i = 0; i < MAX_CPLANES; i++) {
169 thru[
X] = Cp_pt[
X] + Cp_trans[ons][
X];
170 thru[
Y] = Cp_pt[
Y] + Cp_trans[ons][
Y];
171 thru[Z] = Cp_pt[Z] + Cp_trans[ons][Z];
172 planes[ons][
X] = -Cp_norm[ons][
X];
173 planes[ons][
Y] = -Cp_norm[ons][
Y];
174 planes[ons][Z] = -Cp_norm[ons][Z];
175 planes[ons][W] = -(DOT3(planes[ons], thru));
192 v[0][
X] = v[0][W] = 1.0;
193 v[0][
Y] = v[0][Z] = 0.0;
196 P_rot(Cp_rot[num][Z],
'z');
197 P_rot(Cp_rot[num][
Y],
'y');
198 P_rot(Cp_rot[num][
X],
'x');
231 Cp_trans[num][
X] = tx;
232 Cp_trans[num][
Y] = ty;
233 Cp_trans[num][Z] = tz;
250 float len, dir[3], bgn[2], end[2], px, py, fencenorm[3];
253 if ((was_on = Cp_ison[cpnum])) {
259 dir[
X] = -Cp_norm[cpnum][
Y];
260 dir[
Y] = Cp_norm[cpnum][
X];
263 px = Cp_trans[cpnum][
X] + Cp_pt[
X];
264 py = Cp_trans[cpnum][
Y] + Cp_pt[
Y];
273 bgn[
X] = px + len * dir[
X];
274 bgn[
Y] = py + len * dir[
Y];
275 end[
X] = px - len * dir[
X];
276 end[
Y] = py - len * dir[
Y];
278 fencenorm[
X] = -Cp_norm[cpnum][
X];
279 fencenorm[
Y] = -Cp_norm[cpnum][
Y];
280 fencenorm[Z] = -Cp_norm[cpnum][Z];
304 for (i = 0; i < MAX_CPLANES; i++) {
323 Cp_pt[
Y] + Cp_trans[num][
Y], Cp_pt[Z] + Cp_trans[num][Z]);
352 for (i = 0; i < MAX_CPLANES; i++) {