76 TList *stack =
nullptr;
86 for (i=0;i<3;i++) {
fRmin[i] = 0;
fRmax[i] = 1; }
87 for (i=0;i<4;i++) {
fYls[i] = 0; }
89 for (i=0;i<30;i++) {
fJmask[i] = 0; }
91 for (i=0;i<465;i++) {
fMask[i] = 0; }
93 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
94 for (i=0;i<200;i++) {
fT[i] = 0.; }
96 for (i=0;i<12;i++) {
fVls[i] = 0.; }
97 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
98 for (i=0;i<8;i++) {
fF8[i] = 0.; }
160 for (i=0;i<3;i++) {
fRmin[i] = rmin[i];
fRmax[i] = rmax[i]; }
161 for (i=0;i<4;i++) {
fYls[i] = 0; }
163 for (i=0;i<30;i++) {
fJmask[i] = 0; }
165 for (i=0;i<465;i++) {
fMask[i] = 0; }
167 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
168 for (i=0;i<200;i++) {
fT[i] = 0.; }
170 for (i=0;i<12;i++) {
fVls[i] = 0.; }
171 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
172 for (i=0;i<8;i++) {
fF8[i] = 0.; }
220 static Int_t iface1[4] = { 1, 4, 8, 5 };
221 static Int_t iface2[4] = { 4, 3, 7, 8 };
225 Error(
"BackBox",
"no TView in current pad");
231 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
234 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
235 for (
Int_t i = 0; i < 8; ++i) {
236 r[i*3 + 0] = av[i*3 + 0] + av[i*3 + 1]*cosa;
237 r[i*3 + 1] = av[i*3 + 1]*sina;
238 r[i*3 + 2] = av[i*3 + 2];
242 Int_t icodes[3] = { 0, 0, 0 };
244 tt[0] =
r[(iface1[0]-1)*3 + 2];
245 tt[1] =
r[(iface1[1]-1)*3 + 2];
246 tt[2] =
r[(iface1[2]-1)*3 + 2];
247 tt[3] =
r[(iface1[3]-1)*3 + 2];
249 tt[0] =
r[(iface2[0]-1)*3 + 2];
250 tt[1] =
r[(iface2[1]-1)*3 + 2];
251 tt[2] =
r[(iface2[2]-1)*3 + 2];
252 tt[3] =
r[(iface2[3]-1)*3 + 2];
263 static Int_t iface1[4] = { 1, 2, 6, 5 };
264 static Int_t iface2[4] = { 2, 3, 7, 6 };
268 Error(
"FrontBox",
"no TView in current pad");
274 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
277 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
278 for (
Int_t i = 0; i < 8; ++i) {
279 r[i*3 + 0] = av[i*3 + 0] + av[i*3 + 1]*cosa;
280 r[i*3 + 1] = av[i*3 + 1]*sina;
281 r[i*3 + 2] = av[i*3 + 2];
290 for (
Int_t i = 0; i < 4; ++i) {
291 Int_t k = iface1[i] - 1;
295 gPad->PaintPolyLine(4,
x,
y);
296 for (
Int_t i = 0; i < 4; ++i) {
297 Int_t k = iface2[i] - 1;
301 gPad->PaintPolyLine(4,
x,
y);
325 static const char *where =
"ColorFunction";
334 if (nl < 0 || nl > 256) {
335 Error(where,
"illegal number of levels (%d)", nl);
340 for (
Int_t i = 1; i < nl; ++i) {
341 if (fl[i] <= fl[i - 1]) {
348 for (
Int_t i = 0; i < nl; ++i) {
370 Error(
"GridLevels",
"no TView in current pad");
376 Double_t binLow = 0, binHigh = 0, binWidth = 0;
379 if (!rmin || !rmax)
return;
382 binLow, binHigh, nbins, binWidth,
" ");
387 binWidth = (binHigh - binLow)/nbins;
414 for (
Int_t i = 0; i <
np; ++i) {
416 if (k < 0) { k = -k; ifneg =
true; }
417 view->
WCtoNDC(&xyz[(k-1)*3], p3);
418 x[i] = p3[0];
y[i] = p3[1];
424 for (
Int_t i = 0; i <
np; ++i) {
425 z +=
y[i]*
x[i+1] -
x[i]*
y[i+1];
438 for (
Int_t i = 0; i <
np; ++i) {
439 if (iface[i] > 0)
gPad->PaintPolyLine(2, &
x[i], &
y[i]);
461 Double_t x[12+1] = {0},
y[12+1] = {0}, p3[3*12];
462 for (
Int_t i = 0; i <
np; ++i) {
464 view->
WCtoNDC(&xyz[(k-1)*3], &p3[i*3]);
465 x[i] = p3[i*3+0];
y[i] = p3[i*3+1];
475 Double_t ttt[5] = { t[0], t[1], t[2], t[3], t[0] };
476 for (
Int_t i = 0; i<3; ++i) { p3[3*4+i] = p3[i]; }
477 Int_t k1 = 0, k2 = 2;
478 Double_t z1 = (
x[k1+1] -
x[k1+0])*(
y[k1+2] -
y[k1+1]) - (
y[k1+1] -
y[k1+0])*(
x[k1+2] -
x[k1+1]);
479 Double_t z2 = (
x[k2+1] -
x[k2+0])*(
y[k2+2] -
y[k2+1]) - (
y[k2+1] -
y[k2+0])*(
x[k2+2] -
x[k2+1]);
480 if (z1 > z2) { k1 = 2; k2 = 0; }
483 gPad->PaintPolyLine(3, &
x[k1], &
y[k1]);
487 gPad->PaintPolyLine(3, &
x[k2], &
y[k2]);
489 x[1] =
x[2];
y[1] =
y[2];
490 gPad->PaintPolyLine(2, &
x[0], &
y[0]);
517 for (
Int_t i = 0; i <
np; ++i) {
519 view->
WCtoNDC(&xyz[(k-1)*3], p3);
520 x[i] = p3[0];
y[i] = p3[1];
528 if (icodes[3] == 1) icol =
fColorMain[icodes[2] - 1];
529 if (icodes[3] == 2) icol =
fColorDark[icodes[2] - 1];
530 if (icodes[3] == 3) icol =
fColorMain[icodes[2] - 1];
531 if (icodes[3] == 4) icol =
fColorDark[icodes[2] - 1];
564 for (
Int_t i = 0; i <
np; ++i) {
566 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
567 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
568 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
577 if (icodes[2] == 0) {
591 for (
Int_t it = 0; it <
fNT; ++it) {
592 x[0] = p1[0] + xdel*
fT[2*it + 0];
593 y[0] = p1[1] + ydel*
fT[2*it + 0];
594 x[1] = p1[0] + xdel*
fT[2*it + 1];
595 y[1] = p1[1] + ydel*
fT[2*it + 1];
596 gPad->PaintPolyLine(2,
x,
y);
601 if (icodes[2] == 0) {
611 for (
Int_t i = 0; i <
np; ++i) {
613 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
619 for (
Int_t it = 0; it <
fNT; ++it) {
620 x[0] = p1[0] + xdel*
fT[2*it + 0];
621 y[0] = p1[1] + ydel*
fT[2*it + 0];
622 x[1] = p1[0] + xdel*
fT[2*it + 1];
623 y[1] = p1[1] + ydel*
fT[2*it + 1];
624 gPad->PaintPolyLine(2,
x,
y);
629 for (
Int_t i = 0; i <
np; ++i) {
631 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
652 for (
Int_t i = 0; i <
np; ++i) {
654 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
655 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
656 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
661 if (icodes[2] == 0) {
671 for (
Int_t i = 0; i <
np; ++i) {
673 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
679 for (
Int_t it = 0; it <
fNT; ++it) {
680 x[0] = p1[0] + xdel*
fT[2*it + 0];
681 y[0] = p1[1] + ydel*
fT[2*it + 0];
682 x[1] = p1[0] + xdel*
fT[2*it + 1];
683 y[1] = p1[1] + ydel*
fT[2*it + 1];
684 gPad->PaintPolyLine(2,
x,
y);
689 for (
Int_t i = 0; i <
np; ++i) {
691 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
712 if (icodes[2] == 0) {
724 Double_t p3[3*12] = {0}, ttt[12] = {0};
725 for (
Int_t i = 0; i <
np; ++i) {
727 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
728 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
729 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
735 Int_t ipol[2] = { 0, 0 };
736 if (
np == 4 && icodes[2] != 0) {
741 npol[0] = 3; npol[1] = 3;
742 ipol[0] = 0; ipol[1] = 2;
746 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
747 if (npol[kpol] == 0)
continue;
748 Int_t nv = npol[kpol];
749 Int_t iv = ipol[kpol];
761 for (
Int_t it = 0; it <
fNT; ++it) {
762 x[0] = p1[0] + xdel*
fT[2*it + 0];
763 y[0] = p1[1] + ydel*
fT[2*it + 0];
764 x[1] = p1[0] + xdel*
fT[2*it + 1];
765 y[1] = p1[1] + ydel*
fT[2*it + 1];
766 gPad->PaintPolyLine(2,
x,
y);
772 for (
Int_t i = 0; i <
np; ++i) {
774 Int_t i2 = (i ==
np - 1) ? 0 : i1 + 1;
795 if (icodes[2] == 0) {
807 Double_t p3[3*12] = {0}, ttt[12] = {0};
808 for (
Int_t i = 0; i <
np; ++i) {
810 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
811 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
812 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
818 Int_t ipol[2] = { 0, 0 };
819 if (
np == 4 && icodes[2] != 0) {
824 npol[0] = 3; npol[1] = 3;
825 ipol[0] = 0; ipol[1] = 2;
829 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
830 if (npol[kpol] == 0)
continue;
831 Int_t nv = npol[kpol];
832 Int_t iv = ipol[kpol];
841 x[0] = p1[0];
y[0] = p1[1];
842 x[1] = p2[0];
y[1] = p2[1];
843 gPad->PaintPolyLine(2,
x,
y);
863 Double_t p3[3*12] = {0}, pp[2*12] = {0};
864 for (
Int_t i = 0; i <
np; ++i) {
867 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
868 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
869 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
882 if (icodes[2] == 0) {
896 for (
Int_t it = 0; it <
fNT; ++it) {
897 x[0] = p1[0] + xdel*
fT[2*it + 0];
898 y[0] = p1[1] + ydel*
fT[2*it + 0];
899 x[1] = p1[0] + xdel*
fT[2*it + 1];
900 y[1] = p1[1] + ydel*
fT[2*it + 1];
901 gPad->PaintPolyLine(2,
x,
y);
906 if (icodes[2] == 0) {
916 for (
Int_t i = 0; i <
np; ++i) {
917 if (iface[i] < 0)
continue;
919 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
921 Double_t xdel = pp[2*i2 + 0] - pp[2*i1 + 0];
922 Double_t ydel = pp[2*i2 + 1] - pp[2*i1 + 1];
923 for (
Int_t it = 0; it <
fNT; ++it) {
924 x[0] = pp[2*i1 + 0] + xdel*
fT[2*it + 0];
925 y[0] = pp[2*i1 + 1] + ydel*
fT[2*it + 0];
926 x[1] = pp[2*i1 + 0] + xdel*
fT[2*it + 1];
927 y[1] = pp[2*i1 + 1] + ydel*
fT[2*it + 1];
928 gPad->PaintPolyLine(2,
x,
y);
952 for (
Int_t i = 0; i <
np; ++i) {
966 for (
Int_t i = 0; i <
np; ++i) {
967 if (iface[i] < 0)
continue;
969 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
971 Double_t xdel = pp[2*i2 + 0] - pp[2*i1 + 0];
972 Double_t ydel = pp[2*i2 + 1] - pp[2*i1 + 1];
973 for (
Int_t it = 0; it <
fNT; ++it) {
974 x[0] = pp[2*i1 + 0] + xdel*
fT[2*it + 0];
975 y[0] = pp[2*i1 + 1] + ydel*
fT[2*it + 0];
976 x[1] = pp[2*i1 + 0] + xdel*
fT[2*it + 1];
977 y[1] = pp[2*i1 + 1] + ydel*
fT[2*it + 1];
978 gPad->PaintPolyLine(2,
x,
y);
999 Int_t ilev, i, k, icol, i1, i2, nl,
np;
1010 Error(
"FillPolygon",
"illegal number of vertices in polygon (%d)",
n);
1020 if (nl < 0) nl = -nl;
1023 for (i = 2; i <=
np; ++i) {
1024 if (fmin >
f[i]) fmin =
f[i];
1025 if (fmax <
f[i]) fmax =
f[i];
1028 if (fmin < funmin) funmin = fmin - 1;
1030 if (fmax > funmax) funmax = fmax + 1;
1034 for (ilev = 1; ilev <= nl+1; ++ilev) {
1037 if (ilev == nl + 1) f2 = funmax;
1039 if (fmax <
f1)
return;
1040 if (fmin > f2)
continue;
1043 for (i = 1; i <=
np; ++i) {
1046 if (i ==
np) i2 = 1;
1050 if (k < 3)
continue;
1051 for (i = 1; i <= k; ++i) {
1057 icol=
gPad->GetFillColor();
1064 gPad->PaintFillArea(k,
x,
y);
1077 i, j, k,
n, ibase, t,
x,
y, xscan[24] ,
1079 ib, nb, dx, dy, iw, nx, xx, yy, signdx, nstart, xx1, xx2, nxa, nxb;
1090 for (i = 1; i <=
n; ++i) {
1101 for (i = 1; i <=
n; ++i) {
1104 if (
y1[i - 1] <=
y1[i]) {
x2[i - 1] =
x1[i];
y2[i - 1] =
y1[i];}
1106 x2[i - 1] =
x1[i - 1];
1107 y2[i - 1] =
y1[i - 1];
1113 if (
ymax < 0)
return;
1117 for (i = 1; i <
n; ++i) {
1118 if (
y1[i] >=
y1[i - 1])
continue;
1121 for (j = i - 1; j >= 1; --j) {
1122 if (
y <
y1[j - 1])
continue;
1129 for (j = i; j >= k; --j) {
1142 for (i = 1; i <=
n; ++i) {
1143 xcur[i - 1] =
x1[i - 1];
1144 dy =
y2[i - 1] -
y1[i - 1];
1145 dx =
x2[i - 1] -
x1[i - 1];
1147 if (dx < 0) signdx = -1;
1148 if (dx < 0) dx = -dx;
1150 t = -(dy + 1) / 2 + dx;
1153 xnex[i - 1] = xcur[i - 1];
1155 test[i - 1] = t - dy;
1156 xnex[i - 1] = xcur[i - 1] + signdx;
1158 }
else if (dy != 0) {
1159 step = (dx - 1) / (dy + dy) + 1;
1160 test[i - 1] = step*dy - (dx + 1) / 2 - dx;
1161 xnex[i - 1] = xcur[i - 1] + signdx*step;
1167 for (yscan =
ymin; yscan <=
ymax; ++yscan) {
1171 for (i = nstart; i <=
n; ++i) {
1172 if (
y1[i - 1] > yscan)
goto L500;
1173 if (
y2[i - 1] <= yscan) {
1174 if (i == nstart) ++nstart;
1175 if (
y2[i - 1] != yscan)
continue;
1177 if (
x2[i - 1] >= xcur[i - 1]) {
1178 xscan[2*nxb - 2] = xcur[i - 1];
1179 xscan[2*nxb - 1] =
x2[i - 1];
1181 xscan[2*nxb - 2] =
x2[i - 1];
1182 xscan[2*nxb - 1] = xcur[i - 1];
1190 dy =
y2[i - 1] -
y1[i - 1];
1191 dx =
x2[i - 1] -
x1[i - 1];
1194 xscan[2*nxa - 2] = xcur[i - 1];
1195 xscan[2*nxa - 1] = xnex[i - 1];
1196 if (xscan[2*nxa - 2] != xscan[2*nxa - 1]) {
1202 xscan[2*nxa - 2] = xnex[i - 1];
1203 xscan[2*nxa - 1] = xcur[i - 1];
1204 if (xscan[2*nxa - 2] != xscan[2*nxa - 1]) {
1208 xcur[i - 1] = xnex[i - 1];
1211 if (test[i - 1] < 0)
continue;
1213 xnex[i - 1] += signdx;
1217 t = test[i - 1] + step*dy;
1219 test[i - 1] = t - dx;
1220 xnex[i - 1] += signdx*step;
1222 test[i - 1] = t + dy - dx;
1223 xnex[i - 1] += signdx*(step + 1);
1229 if (yscan < 0)
continue;
1232 for (i = 1; i < nxa; ++i) {
1233 for (j = i; j >= 1; --j) {
1234 if (xscan[2*j] >= xscan[2*j - 2])
continue;
1236 xscan[2*j] = xscan[2*j - 2];
1239 xscan[2*j + 1] = xscan[2*j - 1];
1243 for (i = 1; i <= nxa; i += 2) {
1245 xscan[2*nx - 2] = xscan[2*i - 2];
1247 if (xscan[2*i - 1] >
x)
x = xscan[2*i - 1];
1248 xscan[2*nx - 1] =
x;
1252 for (i = nxb; i <=
kLmax; ++i) {
1254 xscan[2*nx - 2] = xscan[2*i - 2];
1255 xscan[2*nx - 1] = xscan[2*i - 1];
1260 xx1 = xscan[2*nx - 2];
1261 xx2 = xscan[2*nx - 1];
1265 if ((xscan[2*k - 2] <= xx2 + 1) && (xscan[2*k - 1] >= xx1 - 1)) {
1266 if (xscan[2*k - 2] < xx1) xx1 = xscan[2*k - 2];
1267 if (xscan[2*k - 1] > xx2) xx2 = xscan[2*k - 1];
1268 xscan[2*k - 2] = xscan[2*nx - 2];
1269 xscan[2*k - 1] = xscan[2*nx - 1];
1273 if (xx1 < 0) xx1 = 0;
1275 nbit = xx2 - xx1 + 1;
1278 ib = kbit - iw*30 + 1;
1281 if (nb > nbit) nb = nbit;
1315 for (
Int_t i = 1; i <
np; ++i) {
1316 if (t[i] < tmin) tmin = t[i];
1317 if (t[i] > tmax) tmax = t[i];
1323 for (
Int_t il = 1; il <= nl; ++il) {
1324 if (tmin >=
fFunLevel[il - 1])
continue;
1330 for (
Int_t i = 0; i <
np; ++i) {
1332 Int_t i2 = (i ==
np-1) ? 0 : i+1;
1335 if (d1 == 0) d1 = 1
e-99;
1336 if (d2 == 0) d2 = 1
e-99;
1337 if (d1*d2 > 0)
continue;
1341 d1 /= t[i2] - t[i1];
1342 d2 /= t[i2] - t[i1];
1349 Error(
"FindLevelLines",
"number of points for line not equal 2");
1382 if (
f1 < fmin) k1 = -2;
1383 if (
f1 == fmin) k1 = -1;
1384 if (
f1 == fmax) k1 = 1;
1385 if (
f1 > fmax) k1 = 2;
1387 if (f2 < fmin) k2 = -2;
1388 if (f2 == fmin) k2 = -1;
1389 if (f2 == fmax) k2 = 1;
1390 if (f2 > fmax) k2 = 2;
1391 kk = (k1 + 2)*5 + (k2 + 2) + 1;
1426 pp[kpp*3 + 1] = p1[1];
1427 pp[kpp*3 + 2] = p1[2];
1428 pp[kpp*3 + 3] = p1[3];
1434 d1 = (fmin -
f1) / (
f1 - f2);
1435 d2 = (fmin - f2) / (
f1 - f2);
1436 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1437 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1438 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1444 d1 = (fmax -
f1) / (
f1 - f2);
1445 d2 = (fmax - f2) / (
f1 - f2);
1446 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1447 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1448 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1454 pp[kpp*3 + 1] = p1[1];
1455 pp[kpp*3 + 2] = p1[2];
1456 pp[kpp*3 + 3] = p1[3];
1458 d1 = (fmin -
f1) / (
f1 - f2);
1459 d2 = (fmin - f2) / (
f1 - f2);
1460 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1461 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1462 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1468 pp[kpp*3 + 1] = p1[1];
1469 pp[kpp*3 + 2] = p1[2];
1470 pp[kpp*3 + 3] = p1[3];
1472 d1 = (fmax -
f1) / (
f1 - f2);
1473 d2 = (fmax - f2) / (
f1 - f2);
1474 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1475 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1476 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1482 d1 = (fmin -
f1) / (
f1 - f2);
1483 d2 = (fmin - f2) / (
f1 - f2);
1484 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1485 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1486 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1488 d1 = (fmax -
f1) / (
f1 - f2);
1489 d2 = (fmax - f2) / (
f1 - f2);
1490 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1491 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1492 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1498 d1 = (fmax -
f1) / (
f1 - f2);
1499 d2 = (fmax - f2) / (
f1 - f2);
1500 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1501 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1502 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1504 d1 = (fmin -
f1) / (
f1 - f2);
1505 d2 = (fmin - f2) / (
f1 - f2);
1506 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1507 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1508 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1520 Int_t i, icase, i1, i2, icase1, icase2, iv, ifback;
1523 Double_t tt, uu, ww, yy, yy1, yy2, yy1d, yy2d;
1534 x1 = tn[0]*r1[1] + tn[1]*r1[2] + tn[2]*r1[3] + tn[3];
1535 x2 = tn[0]*r2[1] + tn[1]*r2[2] + tn[2]*r2[3] + tn[3];
1536 y1 = tn[4]*r1[1] + tn[5]*r1[2] + tn[6]*r1[3] + tn[7];
1537 y2 = tn[4]*r2[1] + tn[5]*r2[2] + tn[6]*r2[3] + tn[7];
1538 z1 = tn[8]*r1[1] + tn[9]*r1[2] + tn[10]*r1[3] + tn[11];
1539 z2 = tn[8]*r2[1] + tn[9]*r2[2] + tn[10]*r2[3] + tn[11];
1541 Error(
"FindVisibleDraw",
"invalid TView in current pad");
1545 Error(
"FindVisibleDraw",
"no TView in current pad");
1571 dy = (
y2 -
y1) / di;
1574 for (i = i1; i <= i2 - 1; ++i) {
1575 yy1 =
y1 + dy*(i - i1);
1577 yy1u = yy1 -
fU[2*i - 2];
1578 yy1d = yy1 -
fD[2*i - 2];
1579 yy2u = yy2 -
fU[2*i - 1];
1580 yy2d = yy2 -
fD[2*i - 1];
1584 if (yy1u > kEpsil) icase1 = 0;
1585 if (yy1d < -kEpsil) icase1 = 2;
1586 if ((icase1 == 0 || icase1 == 2) && iv <= 0) {
1591 if (icase1 == 1 && iv >= 0) {
1597 if (yy2u > kEpsil) icase2 = 0;
1598 if (yy2d < -kEpsil) icase2 = 2;
1599 icase = icase1*3 + icase2;
1602 fT[2*
fNT - 1] =
tt + dt*(yy1u / (yy1u - yy2u));
1605 fT[2*
fNT - 1] =
tt + dt*(yy1u / (yy1u - yy2u));
1607 fT[2*
fNT - 2] =
tt + dt*(yy1d / (yy1d - yy2d));
1612 fT[2*
fNT - 2] =
tt + dt*(yy1u / (yy1u - yy2u));
1617 fT[2*
fNT - 2] =
tt + dt*(yy1d / (yy1d - yy2d));
1620 fT[2*
fNT - 1] =
tt + dt*(yy1d / (yy1d - yy2d));
1622 fT[2*
fNT - 2] =
tt + dt*(yy1u / (yy1u - yy2u));
1626 fT[2*
fNT - 1] =
tt + dt*(yy1d / (yy1d - yy2d));
1628 if (
fNT + 1 >= 100)
break;
1630 if (iv > 0)
fT[2*
fNT - 1] = 1;
1638 if (
y2 ==
y1) {
fNT = 0;
return;}
1639 ifback = 1 - ifback;
1647 if (uu <
fU[2*i1 - 3]) uu =
fU[2*i1 - 3];
1648 if (dd >
fD[2*i1 - 3]) dd =
fD[2*i1 - 3];
1651 if (y1 < uu && y2 > dd) {
1652 if (
y1 >= dd &&
y2 <= uu) {
fNT = 0;
return;}
1667 if (ifback == 0)
return;
1668 if (
fNT == 0)
return;
1669 for (i = 1; i <=
fNT; ++i) {
1670 fT[2*i - 2] = 1 -
fT[2*i - 2];
1671 fT[2*i - 1] = 1 -
fT[2*i - 1];
1689 Int_t i, incrx, ivis,
x1,
y1,
x2,
y2, ib, kb, dx, dy, iw, ix, iy, ifinve, dx2, dy2;
1723 if (
x1 < 0 &&
x2 < 0)
return;
1735 if (dy > dx)
goto L200;
1739 ddtt = dt*(float).5;
1744 for (ix =
x1; incrx < 0 ? ix >=
x2 : ix <=
x2; ix += incrx) {
1753 if (iy < 0)
goto L110;
1755 if (ix < 0)
goto L110;
1758 ib = kb - iw*30 + 1;
1760 if (ivis > 0)
continue;
1766 if (ivis == 0)
continue;
1769 if (nt == ntmax)
goto L300;
1771 if (ivis > 0) t[2*nt + 2] = tcur + dt + ddtt;
1777 ddtt = dt*(float).5;
1783 for (iy =
y1; iy <=
y2; ++iy) {
1792 if (iy < 0)
goto L210;
1793 if (ix < 0)
goto L210;
1796 ib = kb - iw*30 + 1;
1798 if (ivis > 0)
continue;
1804 if (ivis == 0)
continue;
1807 if (nt == ntmax)
goto L300;
1809 if (ivis > 0) t[2*nt + 2] = tcur + dt;
1813 if (nt == 0)
return;
1815 if (t[3] <= dt) t[3] = 0;
1816 if (t[2*nt + 2] >= 1 - dt) t[2*nt + 2] = 1;
1817 if (ifinve == 0)
return;
1818 for (i = 1; i <= nt; ++i) {
1821 t[2*i + 1] = 1 - t2;
1822 t[2*i + 2] = 1 -
t1;
1838 Int_t incrx[3], incry[3];
1862 if (ixt == 1) incrx[0] = 0;
1867 if (iyt == 1) incry[0] = 0;
1872 for (j = 1; j <= 3; ++j) {
1873 for (i = 1; i <= 3; ++i) {
1874 i1 = ia + incrx[i - 1];
1875 i2 = ib + incry[j - 1];
1881 for (k = 1; k <= 4; ++k) {
1882 for (i = 1; i <= 3; ++i) {
1883 face[i + k*3] =
f[i + (k + 32)*3 - 52];
1888 for (j = 1; j <= 3; ++j) {
1889 for (i = 1; i <= 3; ++i) {
1890 for (k = 1; k <= 4; ++k) {
1892 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1893 r =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52];
1896 z[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 49];
1898 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1899 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1902 z[k + ((i + j*3) << 2) - 17] =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52];
1904 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1905 th =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1906 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1911 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1912 th =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1913 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1918 x[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 51];
1919 y[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 50];
1920 z[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 49];
1923 x1 =
x[((i + j*3) << 2) - 14] -
x[((i + j*3) << 2) - 16];
1924 x2 =
x[((i + j*3) << 2) - 13] -
x[((i + j*3) << 2) - 15];
1925 y1 =
y[((i + j*3) << 2) - 14] -
y[((i + j*3) << 2) - 16];
1926 y2 =
y[((i + j*3) << 2) - 13] -
y[((i + j*3) << 2) - 15];
1927 z1 = z[((i + j*3) << 2) - 14] - z[((i + j*3) << 2) - 16];
1928 z2 = z[((i + j*3) << 2) - 13] - z[((i + j*3) << 2) - 15];
1929 an[(i + j*3)*3 - 12] =
y1*z2 -
y2*z1;
1930 an[(i + j*3)*3 - 11] = z1*
x2 - z2*
x1;
1931 an[(i + j*3)*3 - 10] =
x1*
y2 -
x2*
y1;
1932 s =
TMath::Sqrt(an[(i + j*3)*3 - 12]*an[(i + j*3)*3 - 12] + an[
1933 (i + j*3)*3 - 11]*an[(i + j*3)*3 - 11] + an[(i
1934 + j*3)*3 - 10]*an[(i + j*3)*3 - 10]);
1936 an[(i + j*3)*3 - 12] /= s;
1937 an[(i + j*3)*3 - 11] /= s;
1938 an[(i + j*3)*3 - 10] /= s;
1943 for (j = 1; j <= 2; ++j) {
1944 for (i = 1; i <= 2; ++i) {
1945 for (k = 1; k <= 3; ++k) {
1946 bn[k + (i + 2*j)*3 - 10] = an[k + (i + j*3)*3 - 13]
1947 + an[k + (i + 1 + j*3)*3 - 13] + an[k + (i + 1 +
1948 (j + 1)*3)*3 - 13] + an[k + (i + (j + 1)*3)*3 - 13];
1974 fU[2*i + 0] = -VERY_BIG;
1975 fU[2*i + 1] = -VERY_BIG;
1976 fD[2*i + 0] = VERY_BIG;
1977 fD[2*i + 1] = VERY_BIG;
1993 Int_t i, j, k, ib, nb;
2003 Int_t buffersize = nx*ny/30 + 1;
2009 for (i = 1; i <= 30; ++i) {
2012 fMask[i - 1] = pow2;
2016 for (nb = 2; nb <= 30; ++nb) {
2017 for (ib = 1; ib <= 30 - nb + 1; ++ib) {
2019 for (i = ib; i <= ib + nb - 1; ++i) k = k |
fMask[i - 1];
2034 Int_t i, j, ixt, iyt;
2036 Double_t xlab1l, xlab2l, ylab1l, ylab2l;
2102 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2103 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2104 ab[4] = (ab[4] - yval1l) / (yval2l - yval1l);
2105 ab[8] = (ab[8] - yval1l) / (yval2l - yval1l);
2107 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2108 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2110 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2111 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2112 ab[4] = 180*(ab[4] - ylab1l) / (ylab2l - ylab1l);
2113 ab[8] = 180*(ab[8] - ylab1l) / (ylab2l - ylab1l);
2115 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2116 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2117 ab[4] = (180 - dangle*2)*(ab[4] - ylab1l) / (ylab2l - ylab1l) + dangle;
2118 ab[8] = (180 - dangle*2)*(ab[8] - ylab1l) / (ylab2l - ylab1l) + dangle;
2144 if (stack) nids = stack->
GetSize();
2146 for (i = 2; i <= nids + 1; ++i) {
2155 for (i = 2; i <= nv; ++i) {
2171 if (
vv[i] <
vv[i - 1]) {
2183 for (i = 1; i <= nv; ++i) {
2189 for (i = 1; i <= nv; ++i) {
2190 for (j = 1; j <= 4; ++j) t[j + (i << 2)] =
vv[i];
2207 Int_t icodes[4], iface[4];
2209 Int_t firstStackNumberDrawn=-1 ;
2213 Error(
"LegoCartesian",
"no TView in current pad");
2221 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2224 Int_t incrx = (tnorm[8] < 0.) ? -1 : +1;
2225 Int_t incry = (tnorm[9] < 0.) ? -1 : +1;
2226 if (*chopt !=
'B' && *chopt !=
'b') {
2227 incrx = -incrx; incry = -incry;
2229 Int_t ix1 = (incrx == +1) ? 1 : nx;
2230 Int_t iy1 = (incry == +1) ? 1 : ny;
2231 Int_t ix2 = (incrx == +1) ? nx : 1;
2232 Int_t iy2 = (incry == +1) ? ny : 1;
2236 Int_t ivis[6] = { 0,0,0,0,0,0 };
2238 if (zn < 0) ivis[0] = 1;
2239 if (zn > 0) ivis[2] = 1;
2241 if (zn > 0) ivis[1] = 1;
2242 if (zn < 0) ivis[3] = 1;
2244 if (zn > 0) ivis[5] = 1;
2245 if (zn < 0) ivis[4] = 1;
2250 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
2251 for (
Int_t ix = ix1; ix != ix2+incrx; ix += incrx) {
2252 if (!painter->
IsInside(ix,iy))
continue;
2254 if (nv < 2 || nv > vSize)
continue;
2257 for (
Int_t iv = 1; iv < nv; ++iv) { total_content +=
v[iv]; }
2262 for (
Int_t i = 1; i <= 4; ++i) {
2263 xyz[i*3 - 3] =
xy[2*i - 2];
2264 xyz[i*3 - 2] =
xy[2*i - 1];
2265 xyz[(i + 4)*3 - 3] = xyz[i*3 - 3];
2266 xyz[(i + 4)*3 - 2] = xyz[i*3 - 2];
2269 firstStackNumberDrawn = -1;
2270 for (
Int_t iv = 1; iv < nv; ++iv) {
2271 for (
Int_t i = 1; i <= 4; ++i) {
2272 xyz[i*3 - 1] =
v[iv - 1];
2273 xyz[(i + 4)*3 - 1] =
v[iv];
2275 if (
v[iv - 1] ==
v[iv])
continue;
2277 for (
Int_t i = 1; i <= 4; ++i) {
2278 if (ivis[i - 1] == 0)
continue;
2287 tface[0] =
tt[k1 + (iv << 2) - 5];
2288 tface[1] =
tt[k2 + (iv << 2) - 5];
2289 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2290 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2292 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2294 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2300 for (
Int_t i = 1; i <= 4; ++i) {
2301 xyz[i*3 - 1] =
v[0];
2302 iface[i - 1] = 5 - i;
2303 tface[i - 1] =
tt[5 - i - 1];
2310 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2316 for (
Int_t i = 1; i <= 4; ++i) {
2317 iface[i - 1] = i + 4;
2318 tface[i - 1] =
tt[i + (nv << 2) - 5];
2323 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2324 for (
Int_t iv = nv-1; iv > 2; --iv) {
2325 if (
v[nv-1] ==
v[iv-1]) {
2332 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2353 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2355 Int_t incrr, k1, k2, ia, ib, ir1, ir2;
2357 Int_t ir, jr, iv, nr, nv, icodes[4];
2360 Int_t firstStackNumberDrawn = -1 ;
2364 Error(
"LegoPolar",
"no TView in current pad");
2383 if (
fAphi.empty()) {
2384 Error(
"LegoPolar",
"failed to allocate array fAphi[%d]",
fNaphi);
2389 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2393 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2399 if (iordr == 0) ia = nr;
2400 if (iordr != 0) ib = nr;
2401 for (i = 1; i <= nphi; ++i) {
2402 if (iordr == 0) ib = i;
2403 if (iordr != 0) ia = i;
2405 if (i == 1)
fAphi[0] = ab[jphi - 1];
2406 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2407 fAphi[i] = ab[jphi + 3];
2413 for (i = 1; i <= nphi; ++i) {
2424 if (iphi > nphi)
goto L300;
2429 if (incrr < 0) ir1 = nr;
2432 for (ir = ir1; incrr < 0 ? ir >= ir2 : ir <= ir2; ir += incrr) {
2433 if (iordr == 0) { ia = ir; ib = iphi; }
2434 else { ia = iphi; ib = ir; }
2436 if (nv < 2 || nv > vSize)
continue;
2439 for (iv = 1; iv < nv; ++iv) total_content +=
v[iv];
2440 if (total_content==0)
continue;
2444 for (i = 1; i <= 4; ++i) {
2446 if (iordr != 0 && i == 2) j = 4;
2447 if (iordr != 0 && i == 4) j = 2;
2448 xyz[j*3 - 3] = ab[jr + 2*i - 3]*
TMath::Cos(ab[jphi + 2*i - 3]*
kRad);
2449 xyz[j*3 - 2] = ab[jr + 2*i - 3]*
TMath::Sin(ab[jphi + 2*i - 3]*
kRad);
2450 xyz[(j + 4)*3 - 3] = xyz[j*3 - 3];
2451 xyz[(j + 4)*3 - 2] = xyz[j*3 - 2];
2454 firstStackNumberDrawn = -1;
2455 for (iv = 1; iv < nv; ++iv) {
2456 for (i = 1; i <= 4; ++i) {
2457 xyz[i*3 - 1] =
v[iv - 1];
2458 xyz[(i + 4)*3 - 1] =
v[iv];
2460 if (
v[iv - 1] >=
v[iv])
continue;
2462 for (i = 1; i <= 4; ++i) {
2463 if (ivis[i - 1] == 0)
continue;
2467 if (xyz[k1*3 - 3] == xyz[k2*3 - 3] && xyz[k1*3 - 2] ==
2468 xyz[k2*3 - 2])
continue;
2473 tface[0] =
tt[k1 + (iv << 2) - 5];
2474 tface[1] =
tt[k2 + (iv << 2) - 5];
2475 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2476 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2479 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2481 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2487 for (i = 1; i <= 4; ++i) {
2488 xyz[i*3 - 1] =
v[0];
2489 iface[i - 1] = 5 - i;
2490 tface[i - 1] =
tt[5 - i - 1];
2497 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2503 for (i = 1; i <= 4; ++i) {
2504 iface[i - 1] = i + 4;
2505 tface[i - 1] =
tt[i + (nv << 2) - 5];
2510 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2511 for (iv = nv-1; iv>2; iv--) {
2512 if (
v[nv-1] ==
v[iv-1]) {
2519 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2526 if (iphi == 0) iphi = kphi;
2527 if (iphi > kphi) iphi = 1;
2528 if (iphi != iphi2)
goto L100;
2555 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2558 Int_t ia, ib, idummy, iz1, iz2, nz, incrz, k1, k2, nv;
2559 Int_t iv, iz, jz, icodes[4];
2564 Int_t firstStackNumberDrawn=-1 ;
2568 Error(
"LegoCylindrical",
"no TView in current pad");
2587 if (
fAphi.empty()) {
2588 Error(
"LegoCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
2593 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2597 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2603 if (iordr == 0) ia = nz;
2604 if (iordr != 0) ib = nz;
2605 for (i = 1; i <= nphi; ++i) {
2606 if (iordr == 0) ib = i;
2607 if (iordr != 0) ia = i;
2609 if (i == 1)
fAphi[0] = ab[jphi - 1];
2610 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2611 fAphi[i] = ab[jphi + 3];
2617 for (i = 1; i <= nphi; ++i) {
2618 if (iordr == 0) ib = i;
2619 if (iordr != 0) ia = i;
2628 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
2638 if (iphi > nphi)
goto L400;
2642 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
2643 if (iordr == 0) {ia = iz; ib = iphi;}
2644 else {ia = iphi; ib = iz;}
2646 if (nv < 2 || nv > vSize)
continue;
2649 for (i = 1; i <= 4; ++i) {
2651 if (iordr != 0 && i == 2) j = 4;
2652 if (iordr != 0 && i == 4) j = 2;
2655 xyz[j*3 - 1] = ab[jz + 2*i - 3];
2656 xyz[(j + 4)*3 - 1] = ab[jz + 2*i - 3];
2659 firstStackNumberDrawn = -1;
2660 for (iv = 1; iv < nv; ++iv) {
2661 for (i = 1; i <= 4; ++i) {
2662 xyz[i*3 - 3] =
v[iv - 1]*cosphi[i - 1];
2663 xyz[i*3 - 2] =
v[iv - 1]*sinphi[i - 1];
2664 xyz[(i + 4)*3 - 3] =
v[iv]*cosphi[i - 1];
2665 xyz[(i + 4)*3 - 2] =
v[iv]*sinphi[i - 1];
2667 if (
v[iv - 1] >=
v[iv])
continue;
2669 for (i = 1; i <= 4; ++i) {
2670 if (ivis[i - 1] == 0)
continue;
2678 tface[0] =
tt[k1 + (iv << 2) - 5];
2679 tface[1] =
tt[k2 + (iv << 2) - 5];
2680 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2681 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2684 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2686 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2689 if (ivis[4] != 0 &&
v[0] > 0) {
2692 for (i = 1; i <= 4; ++i) {
2693 xyz[i*3 - 3] =
v[0]*cosphi[i - 1];
2694 xyz[i*3 - 2] =
v[0]*sinphi[i - 1];
2696 tface[i - 1] =
tt[i - 1];
2703 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2706 if (ivis[5] != 0 &&
v[nv - 1] > 0) {
2709 for (i = 1; i <= 4; ++i) {
2710 iface[i - 1] = 5 - i + 4;
2711 tface[i - 1] =
tt[5 - i + (nv << 2) - 5];
2716 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2717 for (iv = nv-1; iv>2; iv--) {
2718 if (
v[nv-1] ==
v[iv-1]) {
2725 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2732 if (iphi == 0) iphi = kphi;
2733 if (iphi > kphi) iphi = 1;
2734 if (iphi != iphi2)
goto L100;
2760 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2763 Int_t k1, k2, ia, ib, incrth, ith, jth, kth, nth, mth, ith1, ith2, nv;
2766 Int_t iv, icodes[4];
2772 Int_t firstStackNumberDrawn=-1 ;
2776 Error(
"LegoSpherical",
"no TView in current pad");
2795 if (
fAphi.empty()) {
2796 Error(
"LegoSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
2801 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2805 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2812 if (mth == 0) mth = 1;
2813 if (iordr == 0) ia = mth;
2814 if (iordr != 0) ib = mth;
2815 for (i = 1; i <= nphi; ++i) {
2816 if (iordr == 0) ib = i;
2817 if (iordr != 0) ia = i;
2819 if (i == 1)
fAphi[0] = ab[jphi - 1];
2820 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2821 fAphi[i] = ab[jphi + 3];
2826 if (iordr == 0) ib = 1;
2827 if (iordr != 0) ia = 1;
2828 for (i = 1; i <= nth; ++i) {
2829 if (iordr == 0) ia = i;
2830 if (iordr != 0) ib = i;
2832 if (i == 1)
fAphi[0] = ab[jth - 1];
2833 fAphi[i - 1] = (
fAphi[i - 1] + ab[jth - 1]) / (
float)2.;
2834 fAphi[i] = ab[jth + 3];
2843 if (iphi > nphi)
goto L500;
2846 if (!iordr) {ia = mth; ib = iphi; }
2847 else {ia = iphi; ib = mth; }
2849 phi = (ab[jphi - 1] + ab[jphi + 3]) / (
float)2.;
2854 if (ith > nth)
goto L400;
2855 if (iordr == 0) ia = ith;
2856 if (iordr != 0) ib = ith;
2858 if (nv < 2 || nv > vSize)
goto L400;
2861 for (i = 1; i <= 6; ++i) ivis[i - 1] = 0;
2863 phi1 =
kRad*ab[jphi - 1];
2864 phi2 =
kRad*ab[jphi + 3];
2868 if (zn > 0) ivis[1] = 1;
2870 if (zn > 0) ivis[3] = 1;
2871 phi = (phi1 + phi2) / (
float)2.;
2873 if (zn > 0) ivis[0] = 1;
2875 if (zn > 0) ivis[2] = 1;
2876 th = (
th1 +
th2) / (
float)2.;
2877 if (ipsdr == 1) th =
kRad*90;
2879 if (zn < 0) ivis[4] = 1;
2880 if (zn > 0) ivis[5] = 1;
2885 for (i = 1; i <= 4; ++i) {
2887 if (iordr != 0 && i == 2) j = 4;
2888 if (iordr != 0 && i == 4) j = 2;
2894 firstStackNumberDrawn = -1;
2895 for (iv = 1; iv < nv; ++iv) {
2897 for (i = 1; i <= 4; ++i) {
2898 xyz[i*3 - 3] =
v[iv - 1]*cosphi[i - 1];
2899 xyz[i*3 - 2] =
v[iv - 1]*sinphi[i - 1];
2900 xyz[i*3 - 1] =
v[iv - 1]*costh[i - 1] / sinth[i - 1];
2901 xyz[(i + 4)*3 - 3] =
v[iv]*cosphi[i - 1];
2902 xyz[(i + 4)*3 - 2] =
v[iv]*sinphi[i - 1];
2903 xyz[(i + 4)*3 - 1] =
v[iv]*costh[i - 1] / sinth[i - 1];
2906 for (i = 1; i <= 4; ++i) {
2907 xyz[i*3 - 3] =
v[iv - 1]*sinth[i - 1]*cosphi[i - 1];
2908 xyz[i*3 - 2] =
v[iv - 1]*sinth[i - 1]*sinphi[i - 1];
2909 xyz[i*3 - 1] =
v[iv - 1]*costh[i - 1];
2910 xyz[(i + 4)*3 - 3] =
v[iv]*sinth[i - 1]*cosphi[i - 1];
2911 xyz[(i + 4)*3 - 2] =
v[iv]*sinth[i - 1]*sinphi[i - 1];
2912 xyz[(i + 4)*3 - 1] =
v[iv]*costh[i - 1];
2915 if (
v[iv - 1] >=
v[iv])
continue;
2917 for (i = 1; i <= 4; ++i) {
2918 if (ivis[i - 1] == 0)
continue;
2926 tface[0] =
tt[k1 + (iv << 2) - 5];
2927 tface[1] =
tt[k2 + (iv << 2) - 5];
2928 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2929 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2932 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2934 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2937 if (ivis[4] != 0 &&
v[0] > 0) {
2940 for (i = 1; i <= 4; ++i) {
2942 xyz[i*3 - 3] =
v[0]*cosphi[i - 1];
2943 xyz[i*3 - 2] =
v[0]*sinphi[i - 1];
2944 xyz[i*3 - 1] =
v[0]*costh[i - 1] / sinth[i - 1];
2946 xyz[i*3 - 3] =
v[0]*sinth[i - 1]*cosphi[i - 1];
2947 xyz[i*3 - 2] =
v[0]*sinth[i - 1]*sinphi[i - 1];
2948 xyz[i*3 - 1] =
v[0]*costh[i - 1];
2950 iface[i - 1] = 5 - i;
2951 tface[i - 1] =
tt[5 - i - 1];
2958 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2961 if (ivis[5] != 0 &&
v[nv - 1] > 0) {
2964 for (i = 1; i <= 4; ++i) {
2965 iface[i - 1] = i + 4;
2966 tface[i - 1] =
tt[i + 4 + 2*nv - 5];
2971 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2972 for (iv = nv-1; iv>2; iv--) {
2973 if (
v[nv-1] ==
v[iv-1]) {
2980 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2986 if (ith == 0) ith = kth;
2987 if (ith > kth) ith = 1;
2988 if (ith != ith2)
goto L200;
2989 if (incrth == 0)
goto L500;
3000 if (iphi == 0) iphi = kphi;
3001 if (iphi > kphi) iphi = 1;
3002 if (iphi != iphi2)
goto L100;
3032 if (nl < 0)
goto L100;
3033 else if (nl == 0)
goto L200;
3040 for (i = 1; i <= 4; ++i) {
3047 Error(
"LightSource",
"negative light intensity");
3055 if (nl > 4 || yl < 0) {
3056 Error(
"LightSource",
"illegal light source number (nl=%d, yl=%f)", nl, yl);
3060 s =
TMath::Sqrt(xscr*xscr + yscr*yscr + zscr*zscr);
3062 Error(
"LightSource",
"light source is placed at origin");
3067 fVls[nl*3 - 3] = xscr / s;
3068 fVls[nl*3 - 2] = yscr / s;
3069 fVls[nl*3 - 1] = zscr / s;
3073 if (
fYdl != 0)
return;
3074 for (i = 1; i <= 4; ++i) {
3075 if (
fYls[i - 1] != 0)
return;
3092 if (!view ||
fLoff)
return;
3101 s =
TMath::Sqrt(vn[0]*vn[0] + vn[1]*vn[1] + vn[2]*vn[2]);
3109 for (i = 1; i <= 4; ++i) {
3110 if (
fYls[i - 1] <= 0)
continue;
3111 vl[0] =
fVls[i*3 - 3];
3112 vl[1] =
fVls[i*3 - 2];
3113 vl[2] =
fVls[i*3 - 1];
3114 cosn = vl[0]*vn[0] + vl[1]*vn[1] + vl[2]*vn[2];
3115 if (cosn < 0)
continue;
3116 cosr = vn[1]*(vn[2]*vl[1] - vn[1]*vl[2]) - vn[0]*(vn[0]*vl[2]
3117 - vn[2]*vl[0]) + vn[2]*cosn;
3118 if (cosr <= 0) cosr = 0;
3144 x1 = tn[0]*r1[1] + tn[1]*r1[2] + tn[2]*r1[3] + tn[3];
3145 x2 = tn[0]*r2[1] + tn[1]*r2[2] + tn[2]*r2[3] + tn[3];
3146 y1 = tn[4]*r1[1] + tn[5]*r1[2] + tn[6]*r1[3] + tn[7];
3147 y2 = tn[4]*r2[1] + tn[5]*r2[2] + tn[6]*r2[3] + tn[7];
3149 Error(
"ModifyScreen",
"invalid TView in current pad");
3153 Error(
"ModifyScreen",
"no TView in current pad");
3167 if (i1 == i2)
return;
3170 dy = (
y2 -
y1) / (i2 - i1);
3171 for (i = i1; i <= i2 - 1; ++i) {
3172 yy1 =
y1 + dy*(i - i1);
3174 if (
fD[2*i - 2] > yy1)
fD[2*i - 2] = yy1;
3175 if (
fD[2*i - 1] > yy2)
fD[2*i - 1] = yy2;
3176 if (
fU[2*i - 2] < yy1)
fU[2*i - 2] = yy1;
3177 if (
fU[2*i - 1] < yy2)
fU[2*i - 1] = yy2;
3246 Int_t ivis[6], i, k, num;
3250 for (i = 1; i <= 6; ++i) {
3253 if (k < num)
continue;
3258 if (k == 1) ir = -1;
3284 Error(
"SideVisibilityEncode",
"no TView in current pad");
3289 if (zn > 0) k += 64;
3290 if (zn < 0) k += 32;
3292 if (zn > 0) k += 16;
3295 phi = (phi1 + phi2) / (
float)2.;
3299 if ((zn <= 0 && iopt == 1) || (zn > 0 && iopt == 2)) ++k;
3316 static const char *where =
"Spectrum";
3323 if (nl == 0) {
fNlevel = 0;
return; }
3327 Error(where,
"fmax (%f) less than fmin (%f)", fmax, fmin);
3331 if (nl < 0 || nl > 256) {
3332 Error(where,
"illegal number of levels (%d)", nl);
3337 Error(where,
"initial color index is negative");
3342 Error(where,
"color index increment must be positive");
3347 const Int_t kMAXCOL = 50;
3348 delf = (fmax - fmin) / nl;
3350 for (i = 1; i <= nl+1; ++i) {
3372 Int_t iface[4] = { 1,2,3,4 };
3378 Error(
"SurfaceCartesian",
"no TView in current pad");
3385 Int_t incrx = (tnorm[8] < 0.) ? -1 : +1;
3386 Int_t incry = (tnorm[9] < 0.) ? -1 : +1;
3387 if (*chopt !=
'B' && *chopt !=
'b') {
3388 incrx = -incrx; incry = -incry;
3390 Int_t ix1 = (incrx == +1) ? 1 : nx;
3391 Int_t iy1 = (incry == +1) ? 1 : ny;
3392 Int_t ix2 = (incrx == +1) ? nx : 1;
3393 Int_t iy2 = (incry == +1) ? ny : 1;
3397 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
3398 for (
Int_t ix = ix1; ix != ix2+incrx; ix += incrx) {
3399 if (!painter->
IsInside(ix,iy))
continue;
3401 for (
Int_t i = 0; i < 4; ++i) {
3402 xyz[i*3 + 0] =
f[i*3 + 0];
3403 xyz[i*3 + 1] =
f[i*3 + 1];
3404 xyz[i*3 + 2] =
f[i*3 + 2];
3443 static Int_t ixadd[4] = { 0,1,1,0 };
3444 static Int_t iyadd[4] = { 0,0,1,1 };
3449 Double_t xlab1l, xlab2l, ylab1l, ylab2l;
3450 Int_t i, ixa, iya, icx, ixt, iyt;
3483 for (i = 1; i <= 4; ++i) {
3504 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3505 f[i*3 + 2] = (
f[i*3 + 2] - yval1l) / (yval2l - yval1l);
3507 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3509 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3510 f[i*3 + 2] = 360*(
f[i*3 + 2] - ylab1l) / (ylab2l - ylab1l);
3512 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3513 f[i*3 + 2] = (180 - dangle*2)*(
f[i*3 + 2] - ylab1l) / (ylab2l - ylab1l) + dangle;
3536 t[i] =
f[i * 3 + 3];
3541 for (i = 1; i <= 4; ++i)
f[i * 3 + 3] =
fRmax[2];
3545 for (i = 1; i <= 4; ++i) {
3546 f[i*3 + 3] = (1 - rinrad)*((
f[i*3 + 3] -
Hparam.
zmin) /
3566 static Int_t iface[4] = { 1,2,3,4 };
3570 Error(
"SurfacePolar",
"no TView in current pad");
3574 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3576 Int_t i, j, incrr, ir1, ir2;
3578 Int_t ia, ib, ir, jr, nr, icodes[3];
3598 if (
fAphi.empty()) {
3599 Error(
"SurfacePolar",
"failed to allocate array fAphi[%d]",
fNaphi);
3604 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3609 if (iordr == 0) ia = nr;
3610 if (iordr != 0) ib = nr;
3611 for (i = 1; i <= nphi; ++i) {
3612 if (iordr == 0) ib = i;
3613 if (iordr != 0) ia = i;
3615 if (i == 1)
fAphi[0] =
f[jphi - 1];
3616 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3627 if (iphi > nphi)
goto L300;
3630 if (iordr == 0) {ia = nr; ib = iphi;}
3631 else {ia = iphi;ib = nr;}
3634 phi =
kRad*((
f[jphi - 1] +
f[jphi + 5]) / 2);
3638 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
3644 for (ir = ir1; incrr < 0 ? ir >= ir2 : ir <= ir2; ir += incrr) {
3645 if (iordr == 0) ia = ir;
3646 if (iordr != 0) ib = ir;
3649 for (i = 1; i <= 4; ++i) {
3651 if (iordr != 0 && i == 2) j = 4;
3652 if (iordr != 0 && i == 4) j = 2;
3655 xyz[j*3 - 1] =
f[i*3 - 1];
3656 ttt[j - 1] =
tt[i - 1];
3660 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3665 if (iphi == 0) iphi = kphi;
3666 if (iphi > kphi) iphi = 1;
3667 if (iphi != iphi2)
goto L100;
3668 if (incr == 0)
return;
3694 static Int_t iface[4] = { 1,2,3,4 };
3696 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3697 Int_t i, j, incrz, nz, iz1, iz2;
3698 Int_t ia, ib, iz, jz, icodes[3];
3707 Error(
"SurfaceCylindrical",
"no TView in current pad");
3726 if (
fAphi.empty()) {
3727 Error(
"SurfaceCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
3732 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3737 if (iordr == 0) ia = nz;
3738 if (iordr != 0) ib = nz;
3739 for (i = 1; i <= nphi; ++i) {
3740 if (iordr == 0) ib = i;
3741 if (iordr != 0) ia = i;
3743 if (i == 1)
fAphi[0] =
f[jphi - 1];
3744 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3753 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
3765 if (iphi > nphi)
goto L400;
3766 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
3767 if (iordr == 0) {ia = iz; ib = iphi;}
3768 else {ia = iphi; ib = iz;}
3770 for (i = 1; i <= 4; ++i) {
3772 if (iordr == 0 && i == 2) j = 4;
3773 if (iordr == 0 && i == 4) j = 2;
3776 xyz[j*3 - 1] =
f[jz + i*3 - 4];
3777 ttt[j - 1] =
tt[i - 1];
3781 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3786 if (iphi == 0) iphi = kphi;
3787 if (iphi > kphi) iphi = 1;
3788 if (iphi != iphi2)
goto L100;
3789 if (incr == 0)
return;
3814 static Int_t iface[4] = { 1,2,3,4 };
3816 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3817 Int_t i, j, incrth, ith, jth, kth, nth, mth, ith1, ith2;
3818 Int_t ia, ib, icodes[3];
3827 Error(
"SurfaceSpherical",
"no TView in current pad");
3846 if (
fAphi.empty()) {
3847 Error(
"SurfaceSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
3852 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3858 if (mth == 0) mth = 1;
3859 if (iordr == 0) ia = mth;
3860 if (iordr != 0) ib = mth;
3861 for (i = 1; i <= nphi; ++i) {
3862 if (iordr == 0) ib = i;
3863 if (iordr != 0) ia = i;
3865 if (i == 1)
fAphi[0] =
f[jphi - 1];
3866 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3872 if (iordr == 0) ib = 1;
3873 if (iordr != 0) ia = 1;
3874 for (i = 1; i <= nth; ++i) {
3875 if (iordr == 0) ia = i;
3876 if (iordr != 0) ib = i;
3879 if (i == 1)
fAphi[0] =
f[jth - 1];
3880 fAphi[i - 1] = (
fAphi[i - 1] +
f[jth - 1]) / (
float)2.;
3891 if (iphi > nphi)
goto L500;
3894 if (iordr == 0) {ia = mth; ib = iphi;}
3895 else {ia = iphi;ib = mth;}
3898 phi = (
f[jphi - 1] +
f[jphi + 5]) / (
float)2.;
3903 if (ith > nth)
goto L400;
3904 if (iordr == 0) ia = ith;
3905 if (iordr != 0) ib = ith;
3909 for (i = 1; i <= 4; ++i) {
3911 if (iordr != 0 && i == 2) j = 4;
3912 if (iordr != 0 && i == 4) j = 2;
3917 ttt[j - 1] =
tt[i - 1];
3920 for (i = 1; i <= 4; ++i) {
3922 if (iordr != 0 && i == 2) j = 4;
3923 if (iordr != 0 && i == 4) j = 2;
3927 ttt[j - 1] =
tt[i - 1];
3932 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3936 if (ith == 0) ith = kth;
3937 if (ith > kth) ith = 1;
3938 if (ith != ith2)
goto L200;
3939 if (incrth == 0)
goto L500;
3950 if (iphi == 0) iphi = kphi;
3951 if (iphi > kphi) iphi = 1;
3952 if (iphi != iphi2)
goto L100;
3953 if (incr == 0)
return;
3978 if (qqa < 0 || qqa > 1 || qqd < 0 || qqd > 1 || qqs < 0 || qqs > 1 || nnqs < 1) {
3979 Error(
"SurfaceProperty",
"error in coefficients");
4008 Error(
"ImplicitFunction",
"no TF3 function provided");
4013 Int_t ix1, iy1, iz1;
4014 Int_t ix2, iy2, iz2;
4015 Int_t incr, incrx, incry, incrz;
4016 Int_t icodes[3], i, i1, i2, k, nnod, ntria;
4019 Double_t p[8][3], pf[8], pn[8][3], t[3], fsurf,
w;
4027 Error(
"ImplicitFunction",
"no TView in current pad");
4035 Double_t fgF3XClip = 0., fgF3YClip = 0., fgF3ZClip = 0.;
4038 fgF3Clipping =
kTRUE;
4039 fgF3XClip = clip[0];
4040 fgF3YClip = clip[1];
4041 fgF3ZClip = clip[2];
4045 if (*chopt ==
'B' || *chopt ==
'b') {
4054 if (tnorm[8] < 0.) incrx =-incrx;
4055 if (tnorm[9] < 0.) incry =-incry;
4056 if (tnorm[10] < 0.) incrz =-incrz;
4060 if (incrx == -1) ix1 = nx;
4061 if (incry == -1) iy1 = ny;
4062 if (incrz == -1) iz1 = nz;
4066 dx = (rmax[0]-rmin[0]) / nx;
4067 dy = (rmax[1]-rmin[1]) / ny;
4068 dz = (rmax[2]-rmin[2]) / nz;
4071 Float_t r=0.,
g=0.,
b=0., hue, light, satur, light2;
4081 light2 = 1-.5*light;
4092 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
4093 z1 = (iz-1)*dz + rmin[2];
4103 for (iy = iy1; incry < 0 ? iy >= iy2 : iy <= iy2; iy += incry) {
4104 y1 = (iy-1)*dy + rmin[1];
4127 for (ix = ix1; incrx < 0 ? ix >= ix2 : ix <= ix2; ix += incrx) {
4154 if (pf[0] >= -
kFdel)
goto L110;
4155 if (pf[1] >= -
kFdel)
goto L120;
4156 if (pf[2] >= -
kFdel)
goto L120;
4157 if (pf[3] >= -
kFdel)
goto L120;
4158 if (pf[4] >= -
kFdel)
goto L120;
4159 if (pf[5] >= -
kFdel)
goto L120;
4160 if (pf[6] >= -
kFdel)
goto L120;
4161 if (pf[7] >= -
kFdel)
goto L120;
4164 if (pf[1] < -
kFdel)
goto L120;
4165 if (pf[2] < -
kFdel)
goto L120;
4166 if (pf[3] < -
kFdel)
goto L120;
4167 if (pf[4] < -
kFdel)
goto L120;
4168 if (pf[5] < -
kFdel)
goto L120;
4169 if (pf[6] < -
kFdel)
goto L120;
4170 if (pf[7] < -
kFdel)
goto L120;
4185 pn[0][0] = (pf[1] - pf[0]) / dx;
4186 pn[3][0] = (pf[2] - pf[3]) / dx;
4187 pn[4][0] = (pf[5] - pf[4]) / dx;
4188 pn[7][0] = (pf[6] - pf[7]) / dx;
4190 pn[0][0] = (pf[1] - f3->
Eval(
x1-dx,
y1,z1)) / (dx + dx);
4191 pn[3][0] = (pf[2] - f3->
Eval(
x1-dx,
y2,z1)) / (dx + dx);
4192 pn[4][0] = (pf[5] - f3->
Eval(
x1-dx,
y1,z2)) / (dx + dx);
4193 pn[7][0] = (pf[6] - f3->
Eval(
x1-dx,
y2,z2)) / (dx + dx);
4196 pn[1][0] = (pf[1] - pf[0]) / dx;
4197 pn[2][0] = (pf[2] - pf[3]) / dx;
4198 pn[5][0] = (pf[5] - pf[4]) / dx;
4199 pn[6][0] = (pf[6] - pf[7]) / dx;
4201 pn[1][0] = (f3->
Eval(
x2+dx,
y1,z1) - pf[0]) / (dx + dx);
4202 pn[2][0] = (f3->
Eval(
x2+dx,
y2,z1) - pf[3]) / (dx + dx);
4203 pn[5][0] = (f3->
Eval(
x2+dx,
y1,z2) - pf[4]) / (dx + dx);
4204 pn[6][0] = (f3->
Eval(
x2+dx,
y2,z2) - pf[7]) / (dx + dx);
4208 pn[0][1] = (pf[3] - pf[0]) / dy;
4209 pn[1][1] = (pf[2] - pf[1]) / dy;
4210 pn[4][1] = (pf[7] - pf[4]) / dy;
4211 pn[5][1] = (pf[6] - pf[5]) / dy;
4213 pn[0][1] = (pf[3] - f3->
Eval(
x1,
y1-dy,z1)) / (dy + dy);
4214 pn[1][1] = (pf[2] - f3->
Eval(
x2,
y1-dy,z1)) / (dy + dy);
4215 pn[4][1] = (pf[7] - f3->
Eval(
x1,
y1-dy,z2)) / (dy + dy);
4216 pn[5][1] = (pf[6] - f3->
Eval(
x2,
y1-dy,z2)) / (dy + dy);
4219 pn[2][1] = (pf[2] - pf[1]) / dy;
4220 pn[3][1] = (pf[3] - pf[0]) / dy;
4221 pn[6][1] = (pf[6] - pf[5]) / dy;
4222 pn[7][1] = (pf[7] - pf[4]) / dy;
4224 pn[2][1] = (f3->
Eval(
x2,
y2+dy,z1) - pf[1]) / (dy + dy);
4225 pn[3][1] = (f3->
Eval(
x1,
y2+dy,z1) - pf[0]) / (dy + dy);
4226 pn[6][1] = (f3->
Eval(
x2,
y2+dy,z2) - pf[5]) / (dy + dy);
4227 pn[7][1] = (f3->
Eval(
x1,
y2+dy,z2) - pf[4]) / (dy + dy);
4231 pn[0][2] = (pf[4] - pf[0]) / dz;
4232 pn[1][2] = (pf[5] - pf[1]) / dz;
4233 pn[2][2] = (pf[6] - pf[2]) / dz;
4234 pn[3][2] = (pf[7] - pf[3]) / dz;
4236 pn[0][2] = (pf[4] - f3->
Eval(
x1,
y1,z1-dz)) / (dz + dz);
4237 pn[1][2] = (pf[5] - f3->
Eval(
x2,
y1,z1-dz)) / (dz + dz);
4238 pn[2][2] = (pf[6] - f3->
Eval(
x2,
y2,z1-dz)) / (dz + dz);
4239 pn[3][2] = (pf[7] - f3->
Eval(
x1,
y2,z1-dz)) / (dz + dz);
4242 pn[4][2] = (pf[4] - pf[0]) / dz;
4243 pn[5][2] = (pf[5] - pf[1]) / dz;
4244 pn[6][2] = (pf[6] - pf[2]) / dz;
4245 pn[7][2] = (pf[7] - pf[3]) / dz;
4247 pn[4][2] = (f3->
Eval(
x1,
y1,z2+dz) - pf[0]) / (dz + dz);
4248 pn[5][2] = (f3->
Eval(
x2,
y1,z2+dz) - pf[1]) / (dz + dz);
4249 pn[6][2] = (f3->
Eval(
x2,
y2,z2+dz) - pf[2]) / (dz + dz);
4250 pn[7][2] = (f3->
Eval(
x1,
y2,z2+dz) - pf[3]) / (dz + dz);
4253 MarchingCube(fsurf,
p, pf, pn, nnod, ntria, xyz, grad, itria);
4254 if (ntria == 0)
goto L510;
4256 for ( i=1 ; i<=nnod ; i++ ) {
4257 view->
WCtoNDC(&xyz[i-1][0], &xyzn[i-1][0]);
4261 ZDepth(xyzn, ntria, itria, dtria, abcd, (
Int_t*)iorder);
4262 if (ntria == 0)
goto L510;
4264 if (*chopt ==
'B' || *chopt ==
'b') incr =-1;
4266 if (incr == -1) i1 = ntria;
4267 i2 = ntria - i1 + 1;
4270 if(
x2<=fgF3XClip && y2 <=fgF3YClip && z2>=fgF3ZClip)
goto L510;
4273 for (i=i1; incr < 0 ? i >= i2 : i <= i2; i += incr) {
4309 static Int_t irota[24][8] = { { 1,2,3,4,5,6,7,8 }, { 2,3,4,1,6,7,8,5 },
4310 { 3,4,1,2,7,8,5,6 }, { 4,1,2,3,8,5,6,7 },
4311 { 6,5,8,7,2,1,4,3 }, { 5,8,7,6,1,4,3,2 },
4312 { 8,7,6,5,4,3,2,1 }, { 7,6,5,8,3,2,1,4 },
4313 { 2,6,7,3,1,5,8,4 }, { 6,7,3,2,5,8,4,1 },
4314 { 7,3,2,6,8,4,1,5 }, { 3,2,6,7,4,1,5,8 },
4315 { 5,1,4,8,6,2,3,7 }, { 1,4,8,5,2,3,7,6 },
4316 { 4,8,5,1,3,7,6,2 }, { 8,5,1,4,7,6,2,3 },
4317 { 5,6,2,1,8,7,3,4 }, { 6,2,1,5,7,3,4,8 },
4318 { 2,1,5,6,3,4,8,7 }, { 1,5,6,2,4,8,7,3 },
4319 { 4,3,7,8,1,2,6,5 }, { 3,7,8,4,2,6,5,1 },
4320 { 7,8,4,3,6,5,1,2 }, { 8,4,3,7,5,1,2,6 } };
4322 static Int_t iwhat[21] = { 1,3,5,65,50,67,74,51,177,105,113,58,165,178,
4323 254,252,250,190,205,188,181 };
4324 Int_t j, i, i1, i2, i3, ir, irt=0, k, k1, k2, incr, icase=0,
n;
4331 for ( i=1; i<=8 ; i++) {
4332 fF8[i-1] =
f[i-1] - fiso;
4334 for ( ir=1 ; ir<=24 ; ir++ ) {
4337 for ( i=1 ; i<=8 ; i++ ) {
4338 if (
fF8[irota[ir-1][i-1]-1] >= 0.) k = k + incr;
4341 if (k==0 || k==255)
return;
4342 for ( i=1 ; i<=21 ; i++ ) {
4343 if (k != iwhat[i-1])
continue;
4352 for ( i=1 ; i<=8 ; i++ ) {
4353 k = irota[irt-1][i-1];
4354 fF8[i-1] =
f[k-1] - fiso;
4355 fP8[i-1][0] =
p[k-1][0];
4356 fP8[i-1][1] =
p[k-1][1];
4357 fP8[i-1][2] =
p[k-1][2];
4358 fG8[i-1][0] =
g[k-1][0];
4359 fG8[i-1][1] =
g[k-1][1];
4360 fG8[i-1][2] =
g[k-1][2];
4365 switch ((
int)icase) {
4368 MarchingCubeCase00(1, 4, 9, 0, 0, 0, nnod, ntria, xyz, grad, itria);
4372 MarchingCubeCase00(2, 4, 9, 10, 0, 0, nnod, ntria, xyz, grad, itria);
4384 MarchingCubeCase00(6, 2, 1, 9, 8, 0, nnod, ntria, xyz, grad, itria);
4395 MarchingCubeCase00(2, 4, 8, 6, 0, 0, nnod, ntria, xyz, grad, itria);
4398 MarchingCubeCase00(1, 4, 12, 7, 6, 10, nnod, ntria, xyz, grad, itria);
4404 MarchingCubeCase00(1, 4, 8, 7, 11, 10, nnod, ntria, xyz, grad, itria);
4413 MarchingCubeCase00(1, 9, 12, 7, 6, 2, nnod, ntria, xyz, grad, itria);
4419 if (ntria == 0)
return;
4420 if (icase <= 14)
goto L500;
4421 for ( i=1; i<=ntria ; i++ ) {
4425 if (itria[i-1][2] < 0) i1 =-i1;
4426 if (itria[i-1][1] < 0) i3 =-i3;
4427 if (itria[i-1][0] < 0) i2 =-i2;
4437 if (
n > ntria)
return;
4438 for ( i=1 ; i<=3 ; i++ ) {
4441 if (i2 == 4) i2 = 1;
4448 if (i3 == 0) i3 = 3;
4455 for ( i=1 ; i<=3 ; i++ ) {
4456 itr[i-1] = itria[
n-1][i-1];
4457 itria[
n-1][i-1] = itria[ntria-1][i-1];
4460 if (ntria == 0)
return;
4461 if (itr[i2-1]*itr[i3-1] > 0)
goto L510;
4464 if (itr[i2-1] < 0) {
4468 if (itr[i3-1] < 0) {
4472 for ( j=1 ; j<=ntria ; j++ ) {
4473 for ( i=1 ; i<=3 ; i++ ) {
4474 if (itria[j-1][i-1] != k2)
continue;
4477 if (i2 == k1) itria[j-1][i-1] =-itria[j-1][i-1];
4503 static Int_t it[4][4][3] = { { { 1,2, 3 }, { 0,0, 0 }, { 0,0, 0 }, { 0,0, 0 } },
4504 { { 1,2,-3 }, {-1,3, 4 }, { 0,0, 0 }, { 0,0, 0 } },
4505 { { 1,2,-3 }, {-1,3,-4 }, {-1,4, 5 }, { 0,0, 0 } },
4506 { { 1,2,-3 }, {-1,3,-4 }, {-4,6,-1 }, { 4,5,-6 } }
4508 Int_t it2[4][3], i, j;
4520 if (ie[5] == 0) nnod = 5;
4521 if (ie[4] == 0) nnod = 4;
4522 if (ie[3] == 0) nnod = 3;
4528 for ( i=0; i<3 ; i++) {
4529 for ( j=0; j<4 ; j++) {
4530 it2[j][i] = it[ntria-1][j][i];
4543 static Int_t ie[6] = { 4,9,1, 2,11,3 };
4544 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4545 static Int_t it2[4][3] = { { 1,2,-5 }, { -1,5,6 }, { 5,-2,4 }, { -4,2,3 } };
4553 if (f0>=0. &&
fF8[0]>=0.)
goto L100;
4554 if (f0<0. &&
fF8[0]<0.)
goto L100;
4572 static Int_t ie[6] = { 4,9,1, 7,11,6 };
4573 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4574 static Int_t it2[6][3] = { { 1,2,4 }, { 2,3,6 }, { 3,1,5 },
4575 { 4,5,1 }, { 5,6,3 }, { 6,4,2 } };
4602 static Int_t ie[7] = { 2,4,9,10, 6,7,11 };
4603 static Int_t it1[5][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 } };
4604 static Int_t it2[3][3] = { { 1,2,-3 }, { -1,3,4 }, { 5,6,7 } };
4605 static Int_t it3[7][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 },
4606 { 1,7,-5 }, { -1,5,4 } };
4614 if (f0>=0. &&
fF8[1]>=0.)
goto L100;
4615 if (f0<0. &&
fF8[1]<0.)
goto L100;
4644 static Int_t ie[9] = { 3,12,4, 1,10,2, 11,6,7 };
4645 static Int_t it[9][9][3] = {
4646 {{ 1,2,3}, { 4,5,6}, { 7,8,9}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4647 {{ 1,2,3}, { 4,9,-7}, { -4,7,6}, { 9,4,-5}, { -9,5,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4648 {{ 4,5,6}, { 8,3,-1}, { -8,1,7}, { 3,8,-9}, { -3,9,2}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4649 {{-10,2,3}, {10,3,-1}, {-10,1,7}, {10,7,-6}, {-10,6,4}, {10,4,-5}, {-10,5,8}, { 10,8,9}, {10,9,-2}},
4650 {{ 7,8,9}, { 2,5,-6}, { -2,6,1}, { 5,2,-3}, { -5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4651 {{-10,1,2}, {10,2,-3}, {-10,3,4}, { 10,4,5}, {10,5,-8}, {-10,8,9}, {10,9,-7}, {-10,7,6}, {10,6,-1}},
4652 {{ 10,2,3}, {10,3,-4}, {-10,4,5}, {10,5,-6}, {-10,6,1}, {10,1,-7}, {-10,7,8}, {10,8,-9}, {-10,9,2}},
4653 {{ 1,7,6}, { -4,2,3}, {-4,9,-2}, {-9,4,-5}, { -9,5,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4654 {{ -1,9,2}, { 1,2,3}, { 1,3,-4}, { 6,-1,4}, { 6,4,5}, { 6,-5,7}, { -7,5,8}, { 7,8,9}, { 7,-9,1}}
4657 Int_t it2[9][3], i, j;
4668 if (
f1>=0. &&
fF8[2] <0.) icase = icase + 1;
4669 if (
f1 <0. &&
fF8[2]>=0.) icase = icase + 1;
4670 if (f2>=0. &&
fF8[2] <0.) icase = icase + 2;
4671 if (f2 <0. &&
fF8[2]>=0.) icase = icase + 2;
4672 if (f3>=0. &&
fF8[2] <0.) icase = icase + 4;
4673 if (f3 <0. &&
fF8[2]>=0.) icase = icase + 4;
4676 switch ((
int)icase) {
4697 for ( i=0; i<3 ; i++) {
4698 for ( j=0; j<9 ; j++) {
4699 it2[j][i] = it[icase-1][j][i];
4709 if (irep != 2)
goto L400;
4716 for ( i=0; i<3 ; i++) {
4717 for ( j=0; j<9 ; j++) {
4718 it2[j][i] = it[icase-1][j][i];
4732 static Int_t ie[8] = { 1,3,12,9, 5,7,11,10 };
4733 static Int_t it[6][8][3] = {
4734 {{1,2,-3}, {-1,3,4}, {5,6,-7}, {-5,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4735 {{ 9,1,2}, { 9,2,3}, { 9,3,4}, { 9,4,5}, { 9,5,6}, { 9,6,7}, { 9,7,8}, { 9,8,1}},
4736 {{ 9,1,2}, { 9,4,1}, { 9,3,4}, { 9,6,3}, { 9,5,6}, { 9,8,5}, { 9,7,8}, { 9,2,7}},
4737 {{1,2,-7}, {-1,7,8}, {5,6,-3}, {-5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4738 {{1,2,-7}, {-1,7,8}, {2,3,-6}, {-2,6,7}, {3,4,-5}, {-3,5,6}, {4,1,-8}, {-4,8,5}},
4739 {{1,2,-3}, {-1,3,4}, {2,7,-6}, {-2,6,3}, {7,8,-5}, {-7,5,6}, {8,1,-4}, {-8,4,5}}
4741 Int_t it2[8][3], i, j;
4751 if (
f1 >= 0.) icase = icase + 1;
4752 if (f2 >= 0.) icase = icase + 2;
4753 if (icase==1 || icase==4)
goto L100;
4759 for ( i=0; i<3 ; i++) {
4760 for ( j=0; j<8 ; j++) {
4761 it2[j][i] = it[icase-1][j][i];
4772 if (irep == 0)
goto L200;
4775 if (icase == 1) icase = 5;
4776 if (icase == 4) icase = 6;
4781 for ( i=0; i<3 ; i++) {
4782 for ( j=0; j<8 ; j++) {
4783 it2[j][i] = it[icase-1][j][i];
4797 static Int_t ie[8] = { 3,12,4, 1,9,8,6,2 };
4798 static Int_t it[6][8][3] = {
4799 {{ 1,2,3}, {4,5,-6}, {-4,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4800 {{-9,1,2}, {9,2,-3}, {-9,3,4}, {9,4,-5}, {-9,5,6}, {9,6,-7}, {-9,7,8}, {9,8,-1}},
4801 {{9,1,-2}, {-9,2,6}, {9,6,-7}, {-9,7,8}, {9,8,-4}, {-9,4,5}, {9,5,-3}, {-9,3,1}},
4802 {{ 3,4,5}, {1,2,-6}, {-1,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4803 {{ 7,8,6}, {6,8,-1}, {-6,1,2}, {3,1,-8}, {-3,8,4}, { 3,4,5}, {3,5,-6}, {-3,6,2}},
4804 {{ 7,8,6}, {6,8,-4}, {-6,4,5}, {3,4,-8}, {-3,8,1}, { 3,1,2}, {3,2,-6}, {-3,6,5}}
4806 Int_t it2[8][3], i, j;
4816 if (
f1 >= 0.) icase = icase + 1;
4817 if (f2 >= 0.) icase = icase + 2;
4818 if (icase==1 || icase==4)
goto L100;
4824 for ( i=0; i<3 ; i++) {
4825 for ( j=0; j<8 ; j++) {
4826 it2[j][i] = it[icase-1][j][i];
4837 if (irep != 1)
goto L200;
4840 if (icase == 1) icase = 5;
4841 if (icase == 4) icase = 6;
4846 for ( i=0; i<3 ; i++) {
4847 for ( j=0; j<8 ; j++) {
4848 it2[j][i] = it[icase-1][j][i];
4862 Int_t nr, nf, i, k, incr,
n, kr, icase, irep;
4863 static Int_t irota[12][8] = {
4864 {1,2,3,4,5,6,7,8}, {1,5,6,2,4,8,7,3}, {1,4,8,5,2,3,7,6},
4865 {3,7,8,4,2,6,5,1}, {3,2,6,7,4,1,5,8}, {3,4,1,2,7,8,5,6},
4866 {6,7,3,2,5,8,4,1}, {6,5,8,7,2,1,4,3}, {6,2,1,5,7,3,4,8},
4867 {8,4,3,7,5,1,2,6}, {8,5,1,4,7,6,2,3}, {8,7,6,5,4,3,2,1} };
4868 static Int_t iwhat[8] = { 63,62,54,26,50,9,1,0 };
4869 static Int_t ie[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
4870 static Int_t iface[6][4] = {
4871 {1,2,3,4}, {5,6,7,8}, {1,2,6,5}, {2,6,7,3}, {4,3,7,8}, {1,5,8,4} };
4872 static Int_t it1[4][3] = { {1,2,10}, {9,5,8}, {6,11,7}, {3,4,12} };
4873 static Int_t it2[4][3] = { {5,6,10}, {1,4,9}, {2,11,3}, {7,8,12} };
4874 static Int_t it3[6][3] = { {10,12,-3}, {-10,3,2}, {12,10,-1}, {-12,1,4},
4875 {9,5,8}, {6,11,7} };
4876 static Int_t it4[6][3] = { {11,9,-1}, {-11,1,2}, {9,11,-3}, {-9,3,4},
4877 {5,6,10}, {7,8,12} };
4878 static Int_t it5[10][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4879 {13,10,1}, {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2}, {5,8,9} };
4880 static Int_t it6[10][3] = { {13,2,-10}, {-13,10,5}, {13,5,-6}, {-13,6,11},
4881 {13,11,3}, {13,3,-4}, {-13,4,9}, {13,9,-1}, {-13,1,2}, {12,7,8} };
4882 static Int_t it7[12][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4883 {13,10,-5}, {-13,5,8}, {13,8,-9}, {-13,9,1},
4884 {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2} };
4885 static Int_t it8[6][3] = { {3,8,12}, {3,-2,-8}, {-2,5,-8}, {2,10,-5},
4886 {7,6,11}, {1,4,9} };
4887 static Int_t it9[10][3] = { {7,12,-3}, {-7,3,11}, {11,3,2}, {6,11,-2}, {-6,2,10},
4888 {6,10,5}, {7,6,-5}, {-7,5,8}, {7,8,12}, {1,4,9} };
4889 static Int_t it10[10][3] = { {9,1,-10}, {-9,10,5}, {9,5,8}, {4,9,-8}, {-4,8,12},
4890 {4,12,3}, {1,4,-3}, {-1,3,2}, {1,2,10}, {7,6,11} };
4896 for ( nr=1 ; nr<=12 ; nr++ ) {
4899 for ( nf=1 ; nf<=6 ; nf++ ) {
4900 f1 =
fF8[irota[nr-1][iface[nf-1][0]-1]-1];
4901 f2 =
fF8[irota[nr-1][iface[nf-1][1]-1]-1];
4902 f3 =
fF8[irota[nr-1][iface[nf-1][2]-1]-1];
4903 f4 =
fF8[irota[nr-1][iface[nf-1][3]-1]-1];
4904 if ((
f1*f3-f2*f4)/(
f1+f3-f2-f4) >= 0.) k = k + incr;
4907 for ( i=1 ; i<=8 ; i++ ) {
4908 if (k != iwhat[i-1])
continue;
4914 Error(
"MarchingCubeCase13",
"configuration is not found");
4919 if (icase==1 || icase==8)
goto L300;
4920 for (
n=1 ;
n<=8 ;
n++) {
4921 k = irota[kr-1][
n-1];
4923 for ( i=1 ; i<=3 ; i++ ) {
4924 xyz[
n-1][i-1] =
fP8[k-1][i-1];
4925 grad[
n-1][i-1] =
fG8[k-1][i-1];
4928 for (
n=1 ;
n<=8 ;
n++ ) {
4930 for ( i=1 ; i<=3 ; i++ ) {
4931 fP8[
n-1][i-1] = xyz[
n-1][i-1];
4932 fG8[
n-1][i-1] = grad[
n-1][i-1];
4942 switch ((
int)icase) {
4963 &xyz[nnod-1][0], &grad[nnod-1][0]);
4970 &xyz[nnod-1][0], &grad[nnod-1][0]);
4977 &xyz[nnod-1][0], &grad[nnod-1][0]);
4984 switch ((
int)(irep+1)) {
5013 for (
n=1 ;
n<=ntria ;
n++ ) {
5014 for ( i=1 ; i<=3 ; i++ ) {
5016 itria[
n-1][i-1] = k;
5040 for ( i=1 ; i<=3 ; i++ ) {
5044 for (
n=1 ;
n<=nnod ;
n++ ) {
5047 for ( i=1 ; i<=3 ; i++ ) {
5048 p[i-1] =
p[i-1] + xyz[k-1][i-1];
5049 g[i-1] =
g[i-1] + grad[k-1][i-1];
5052 for ( i=1 ; i<=3 ; i++ ) {
5053 pxyz[i-1] =
p[i-1] / nnod;
5054 pgrad[i-1] =
g[i-1] / nnod;