36#define ROOT_Hoption_cxx
38#define ROOT_Hparam_cxx
80 TList *stack =
nullptr;
90 for (i=0;i<3;i++) {
fRmin[i] = 0;
fRmax[i] = 1; }
91 for (i=0;i<4;i++) {
fYls[i] = 0; }
93 for (i=0;i<30;i++) {
fJmask[i] = 0; }
95 for (i=0;i<465;i++) {
fMask[i] = 0; }
97 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
98 for (i=0;i<200;i++) {
fT[i] = 0.; }
100 for (i=0;i<12;i++) {
fVls[i] = 0.; }
101 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
102 for (i=0;i<8;i++) {
fF8[i] = 0.; }
164 for (i=0;i<3;i++) {
fRmin[i] = rmin[i];
fRmax[i] = rmax[i]; }
165 for (i=0;i<4;i++) {
fYls[i] = 0; }
167 for (i=0;i<30;i++) {
fJmask[i] = 0; }
169 for (i=0;i<465;i++) {
fMask[i] = 0; }
171 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
172 for (i=0;i<200;i++) {
fT[i] = 0.; }
174 for (i=0;i<12;i++) {
fVls[i] = 0.; }
175 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
176 for (i=0;i<8;i++) {
fF8[i] = 0.; }
224 static Int_t iface1[4] = { 1, 4, 8, 5 };
225 static Int_t iface2[4] = { 4, 3, 7, 8 };
229 Error(
"BackBox",
"no TView in current pad");
235 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
238 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
239 for (
Int_t i = 0; i < 8; ++i) {
240 r[i*3 + 0] = av[i*3 + 0] + av[i*3 + 1]*cosa;
241 r[i*3 + 1] = av[i*3 + 1]*sina;
242 r[i*3 + 2] = av[i*3 + 2];
246 Int_t icodes[3] = { 0, 0, 0 };
248 tt[0] =
r[(iface1[0]-1)*3 + 2];
249 tt[1] =
r[(iface1[1]-1)*3 + 2];
250 tt[2] =
r[(iface1[2]-1)*3 + 2];
251 tt[3] =
r[(iface1[3]-1)*3 + 2];
253 tt[0] =
r[(iface2[0]-1)*3 + 2];
254 tt[1] =
r[(iface2[1]-1)*3 + 2];
255 tt[2] =
r[(iface2[2]-1)*3 + 2];
256 tt[3] =
r[(iface2[3]-1)*3 + 2];
267 static Int_t iface1[4] = { 1, 2, 6, 5 };
268 static Int_t iface2[4] = { 2, 3, 7, 6 };
272 Error(
"FrontBox",
"no TView in current pad");
278 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
281 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
282 for (
Int_t i = 0; i < 8; ++i) {
283 r[i*3 + 0] = av[i*3 + 0] + av[i*3 + 1]*cosa;
284 r[i*3 + 1] = av[i*3 + 1]*sina;
285 r[i*3 + 2] = av[i*3 + 2];
294 for (
Int_t i = 0; i < 4; ++i) {
295 Int_t k = iface1[i] - 1;
299 gPad->PaintPolyLine(4,
x,
y);
300 for (
Int_t i = 0; i < 4; ++i) {
301 Int_t k = iface2[i] - 1;
305 gPad->PaintPolyLine(4,
x,
y);
329 static const char *where =
"ColorFunction";
338 if (nl < 0 || nl > 256) {
339 Error(where,
"illegal number of levels (%d)", nl);
344 for (
Int_t i = 1; i < nl; ++i) {
345 if (fl[i] <= fl[i - 1]) {
352 for (
Int_t i = 0; i < nl; ++i) {
374 Error(
"GridLevels",
"no TView in current pad");
380 Double_t binLow = 0, binHigh = 0, binWidth = 0;
383 if (!rmin || !rmax)
return;
386 binLow, binHigh, nbins, binWidth,
" ");
391 binWidth = (binHigh - binLow)/nbins;
418 for (
Int_t i = 0; i <
np; ++i) {
420 if (k < 0) { k = -k; ifneg =
true; }
421 view->
WCtoNDC(&xyz[(k-1)*3], p3);
422 x[i] = p3[0];
y[i] = p3[1];
428 for (
Int_t i = 0; i <
np; ++i) {
429 z +=
y[i]*
x[i+1] -
x[i]*
y[i+1];
442 for (
Int_t i = 0; i <
np; ++i) {
443 if (iface[i] > 0)
gPad->PaintPolyLine(2, &
x[i], &
y[i]);
465 Double_t x[12+1] = {0},
y[12+1] = {0}, p3[3*12];
466 for (
Int_t i = 0; i <
np; ++i) {
468 view->
WCtoNDC(&xyz[(k-1)*3], &p3[i*3]);
469 x[i] = p3[i*3+0];
y[i] = p3[i*3+1];
479 Double_t ttt[5] = { t[0], t[1], t[2], t[3], t[0] };
480 for (
Int_t i = 0; i<3; ++i) { p3[3*4+i] = p3[i]; }
481 Int_t k1 = 0, k2 = 2;
482 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]);
483 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]);
490 gPad->PaintPolyLine(3, &
x[k1], &
y[k1]);
494 gPad->PaintPolyLine(3, &
x[k2], &
y[k2]);
496 x[1] =
x[2];
y[1] =
y[2];
497 gPad->PaintPolyLine(2, &
x[0], &
y[0]);
524 for (
Int_t i = 0; i <
np; ++i) {
526 view->
WCtoNDC(&xyz[(k-1)*3], p3);
527 x[i] = p3[0];
y[i] = p3[1];
535 if (icodes[3] == 1) icol =
fColorMain[icodes[2] - 1];
536 if (icodes[3] == 2) icol =
fColorDark[icodes[2] - 1];
537 if (icodes[3] == 3) icol =
fColorMain[icodes[2] - 1];
538 if (icodes[3] == 4) icol =
fColorDark[icodes[2] - 1];
571 for (
Int_t i = 0; i <
np; ++i) {
573 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
574 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
575 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
584 if (icodes[2] == 0) {
598 for (
Int_t it = 0; it <
fNT; ++it) {
599 x[0] = p1[0] + xdel*
fT[2*it + 0];
600 y[0] = p1[1] + ydel*
fT[2*it + 0];
601 x[1] = p1[0] + xdel*
fT[2*it + 1];
602 y[1] = p1[1] + ydel*
fT[2*it + 1];
604 gPad->PaintPolyLine(2,
x,
y);
609 if (icodes[2] == 0) {
619 for (
Int_t i = 0; i <
np; ++i) {
621 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
627 for (
Int_t it = 0; it <
fNT; ++it) {
628 x[0] = p1[0] + xdel*
fT[2*it + 0];
629 y[0] = p1[1] + ydel*
fT[2*it + 0];
630 x[1] = p1[0] + xdel*
fT[2*it + 1];
631 y[1] = p1[1] + ydel*
fT[2*it + 1];
633 gPad->PaintPolyLine(2,
x,
y);
638 for (
Int_t i = 0; i <
np; ++i) {
640 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
661 for (
Int_t i = 0; i <
np; ++i) {
663 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
664 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
665 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
670 if (icodes[2] == 0) {
680 for (
Int_t i = 0; i <
np; ++i) {
682 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
688 for (
Int_t it = 0; it <
fNT; ++it) {
689 x[0] = p1[0] + xdel*
fT[2*it + 0];
690 y[0] = p1[1] + ydel*
fT[2*it + 0];
691 x[1] = p1[0] + xdel*
fT[2*it + 1];
692 y[1] = p1[1] + ydel*
fT[2*it + 1];
694 gPad->PaintPolyLine(2,
x,
y);
699 for (
Int_t i = 0; i <
np; ++i) {
701 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
722 if (icodes[2] == 0) {
734 Double_t p3[3*12] = {0}, ttt[12] = {0};
735 for (
Int_t i = 0; i <
np; ++i) {
737 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
738 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
739 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
745 Int_t ipol[2] = { 0, 0 };
746 if (
np == 4 && icodes[2] != 0) {
751 npol[0] = 3; npol[1] = 3;
752 ipol[0] = 0; ipol[1] = 2;
756 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
757 if (npol[kpol] == 0)
continue;
758 Int_t nv = npol[kpol];
759 Int_t iv = ipol[kpol];
771 for (
Int_t it = 0; it <
fNT; ++it) {
772 x[0] = p1[0] + xdel*
fT[2*it + 0];
773 y[0] = p1[1] + ydel*
fT[2*it + 0];
774 x[1] = p1[0] + xdel*
fT[2*it + 1];
775 y[1] = p1[1] + ydel*
fT[2*it + 1];
777 gPad->PaintPolyLine(2,
x,
y);
783 for (
Int_t i = 0; i <
np; ++i) {
785 Int_t i2 = (i ==
np - 1) ? 0 : i1 + 1;
806 if (icodes[2] == 0) {
818 Double_t p3[3*12] = {0}, ttt[12] = {0};
819 for (
Int_t i = 0; i <
np; ++i) {
821 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
822 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
823 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
829 Int_t ipol[2] = { 0, 0 };
830 if (
np == 4 && icodes[2] != 0) {
835 npol[0] = 3; npol[1] = 3;
836 ipol[0] = 0; ipol[1] = 2;
840 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
841 if (npol[kpol] == 0)
continue;
842 Int_t nv = npol[kpol];
843 Int_t iv = ipol[kpol];
852 x[0] = p1[0];
y[0] = p1[1];
853 x[1] = p2[0];
y[1] = p2[1];
854 gPad->PaintPolyLine(2,
x,
y);
874 Double_t p3[3*12] = {0}, pp[2*12] = {0};
875 for (
Int_t i = 0; i <
np; ++i) {
878 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
879 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
880 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
893 if (icodes[2] == 0) {
907 for (
Int_t it = 0; it <
fNT; ++it) {
908 x[0] = p1[0] + xdel*
fT[2*it + 0];
909 y[0] = p1[1] + ydel*
fT[2*it + 0];
910 x[1] = p1[0] + xdel*
fT[2*it + 1];
911 y[1] = p1[1] + ydel*
fT[2*it + 1];
912 gPad->PaintPolyLine(2,
x,
y);
917 if (icodes[2] == 0) {
927 for (
Int_t i = 0; i <
np; ++i) {
928 if (iface[i] < 0)
continue;
930 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
932 Double_t xdel = pp[2*i2 + 0] - pp[2*i1 + 0];
933 Double_t ydel = pp[2*i2 + 1] - pp[2*i1 + 1];
934 for (
Int_t it = 0; it <
fNT; ++it) {
935 x[0] = pp[2*i1 + 0] + xdel*
fT[2*it + 0];
936 y[0] = pp[2*i1 + 1] + ydel*
fT[2*it + 0];
937 x[1] = pp[2*i1 + 0] + xdel*
fT[2*it + 1];
938 y[1] = pp[2*i1 + 1] + ydel*
fT[2*it + 1];
939 gPad->PaintPolyLine(2,
x,
y);
963 for (
Int_t i = 0; i <
np; ++i) {
977 for (
Int_t i = 0; i <
np; ++i) {
978 if (iface[i] < 0)
continue;
980 Int_t i2 = (i ==
np-1) ? 0 : i + 1;
982 Double_t xdel = pp[2*i2 + 0] - pp[2*i1 + 0];
983 Double_t ydel = pp[2*i2 + 1] - pp[2*i1 + 1];
984 for (
Int_t it = 0; it <
fNT; ++it) {
985 x[0] = pp[2*i1 + 0] + xdel*
fT[2*it + 0];
986 y[0] = pp[2*i1 + 1] + ydel*
fT[2*it + 0];
987 x[1] = pp[2*i1 + 0] + xdel*
fT[2*it + 1];
988 y[1] = pp[2*i1 + 1] + ydel*
fT[2*it + 1];
989 gPad->PaintPolyLine(2,
x,
y);
1010 Int_t ilev, i, k, icol, i1, i2, nl,
np;
1021 Error(
"FillPolygon",
"illegal number of vertices in polygon (%d)",
n);
1031 if (nl < 0) nl = -nl;
1034 for (i = 2; i <=
np; ++i) {
1035 if (fmin >
f[i]) fmin =
f[i];
1036 if (fmax <
f[i]) fmax =
f[i];
1039 if (fmin < funmin) funmin = fmin - 1;
1041 if (fmax > funmax) funmax = fmax + 1;
1045 for (ilev = 1; ilev <= nl+1; ++ilev) {
1048 if (ilev == nl + 1) f2 = funmax;
1050 if (fmax <
f1)
return;
1051 if (fmin > f2)
continue;
1054 for (i = 1; i <=
np; ++i) {
1057 if (i ==
np) i2 = 1;
1061 if (k < 3)
continue;
1062 for (i = 1; i <= k; ++i) {
1068 icol=
gPad->GetFillColor();
1075 gPad->PaintFillArea(k,
x,
y);
1088 i, j, k,
n, ibase, t,
x,
y, xscan[24] ,
1090 ib, nb, dx, dy, iw, nx, xx, yy, signdx, nstart, xx1, xx2, nxa, nxb;
1101 for (i = 1; i <=
n; ++i) {
1112 for (i = 1; i <=
n; ++i) {
1115 if (
y1[i - 1] <=
y1[i]) {
x2[i - 1] =
x1[i];
y2[i - 1] =
y1[i];}
1117 x2[i - 1] =
x1[i - 1];
1118 y2[i - 1] =
y1[i - 1];
1124 if (
ymax < 0)
return;
1128 for (i = 1; i <
n; ++i) {
1129 if (
y1[i] >=
y1[i - 1])
continue;
1132 for (j = i - 1; j >= 1; --j) {
1133 if (
y <
y1[j - 1])
continue;
1140 for (j = i; j >= k; --j) {
1153 for (i = 1; i <=
n; ++i) {
1154 xcur[i - 1] =
x1[i - 1];
1155 dy =
y2[i - 1] -
y1[i - 1];
1156 dx =
x2[i - 1] -
x1[i - 1];
1158 if (dx < 0) signdx = -1;
1159 if (dx < 0) dx = -dx;
1161 t = -(dy + 1) / 2 + dx;
1164 xnex[i - 1] = xcur[i - 1];
1166 test[i - 1] = t - dy;
1167 xnex[i - 1] = xcur[i - 1] + signdx;
1169 }
else if (dy != 0) {
1170 step = (dx - 1) / (dy + dy) + 1;
1171 test[i - 1] = step*dy - (dx + 1) / 2 - dx;
1172 xnex[i - 1] = xcur[i - 1] + signdx*step;
1178 for (yscan =
ymin; yscan <=
ymax; ++yscan) {
1182 for (i = nstart; i <=
n; ++i) {
1183 if (
y1[i - 1] > yscan)
goto L500;
1184 if (
y2[i - 1] <= yscan) {
1185 if (i == nstart) ++nstart;
1186 if (
y2[i - 1] != yscan)
continue;
1188 if (
x2[i - 1] >= xcur[i - 1]) {
1189 xscan[2*nxb - 2] = xcur[i - 1];
1190 xscan[2*nxb - 1] =
x2[i - 1];
1192 xscan[2*nxb - 2] =
x2[i - 1];
1193 xscan[2*nxb - 1] = xcur[i - 1];
1201 dy =
y2[i - 1] -
y1[i - 1];
1202 dx =
x2[i - 1] -
x1[i - 1];
1205 xscan[2*nxa - 2] = xcur[i - 1];
1206 xscan[2*nxa - 1] = xnex[i - 1];
1207 if (xscan[2*nxa - 2] != xscan[2*nxa - 1]) {
1213 xscan[2*nxa - 2] = xnex[i - 1];
1214 xscan[2*nxa - 1] = xcur[i - 1];
1215 if (xscan[2*nxa - 2] != xscan[2*nxa - 1]) {
1219 xcur[i - 1] = xnex[i - 1];
1222 if (test[i - 1] < 0)
continue;
1224 xnex[i - 1] += signdx;
1228 t = test[i - 1] + step*dy;
1230 test[i - 1] = t - dx;
1231 xnex[i - 1] += signdx*step;
1233 test[i - 1] = t + dy - dx;
1234 xnex[i - 1] += signdx*(step + 1);
1240 if (yscan < 0)
continue;
1243 for (i = 1; i < nxa; ++i) {
1244 for (j = i; j >= 1; --j) {
1245 if (xscan[2*j] >= xscan[2*j - 2])
continue;
1247 xscan[2*j] = xscan[2*j - 2];
1250 xscan[2*j + 1] = xscan[2*j - 1];
1254 for (i = 1; i <= nxa; i += 2) {
1256 xscan[2*nx - 2] = xscan[2*i - 2];
1258 if (xscan[2*i - 1] >
x)
x = xscan[2*i - 1];
1259 xscan[2*nx - 1] =
x;
1263 for (i = nxb; i <=
kLmax; ++i) {
1265 xscan[2*nx - 2] = xscan[2*i - 2];
1266 xscan[2*nx - 1] = xscan[2*i - 1];
1271 xx1 = xscan[2*nx - 2];
1272 xx2 = xscan[2*nx - 1];
1276 if ((xscan[2*k - 2] <= xx2 + 1) && (xscan[2*k - 1] >= xx1 - 1)) {
1277 if (xscan[2*k - 2] < xx1) xx1 = xscan[2*k - 2];
1278 if (xscan[2*k - 1] > xx2) xx2 = xscan[2*k - 1];
1279 xscan[2*k - 2] = xscan[2*nx - 2];
1280 xscan[2*k - 1] = xscan[2*nx - 1];
1284 if (xx1 < 0) xx1 = 0;
1286 nbit = xx2 - xx1 + 1;
1289 ib = kbit - iw*30 + 1;
1292 if (nb > nbit) nb = nbit;
1326 for (
Int_t i = 1; i <
np; ++i) {
1327 if (t[i] < tmin) tmin = t[i];
1328 if (t[i] > tmax) tmax = t[i];
1334 for (
Int_t il = 1; il <= nl; ++il) {
1335 if (tmin >=
fFunLevel[il - 1])
continue;
1341 for (
Int_t i = 0; i <
np; ++i) {
1343 Int_t i2 = (i ==
np-1) ? 0 : i+1;
1346 if (d1 == 0) d1 = 1
e-99;
1347 if (d2 == 0) d2 = 1
e-99;
1348 if (d1*d2 > 0)
continue;
1352 d1 /= t[i2] - t[i1];
1353 d2 /= t[i2] - t[i1];
1360 Error(
"FindLevelLines",
"number of points for line not equal 2");
1393 if (
f1 < fmin) k1 = -2;
1394 if (
f1 == fmin) k1 = -1;
1395 if (
f1 == fmax) k1 = 1;
1396 if (
f1 > fmax) k1 = 2;
1398 if (f2 < fmin) k2 = -2;
1399 if (f2 == fmin) k2 = -1;
1400 if (f2 == fmax) k2 = 1;
1401 if (f2 > fmax) k2 = 2;
1402 kk = (k1 + 2)*5 + (k2 + 2) + 1;
1437 pp[kpp*3 + 1] = p1[1];
1438 pp[kpp*3 + 2] = p1[2];
1439 pp[kpp*3 + 3] = p1[3];
1445 d1 = (fmin -
f1) / (
f1 - f2);
1446 d2 = (fmin - f2) / (
f1 - f2);
1447 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1448 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1449 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1455 d1 = (fmax -
f1) / (
f1 - f2);
1456 d2 = (fmax - f2) / (
f1 - f2);
1457 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1458 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1459 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1465 pp[kpp*3 + 1] = p1[1];
1466 pp[kpp*3 + 2] = p1[2];
1467 pp[kpp*3 + 3] = p1[3];
1469 d1 = (fmin -
f1) / (
f1 - f2);
1470 d2 = (fmin - f2) / (
f1 - f2);
1471 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1472 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1473 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1479 pp[kpp*3 + 1] = p1[1];
1480 pp[kpp*3 + 2] = p1[2];
1481 pp[kpp*3 + 3] = p1[3];
1483 d1 = (fmax -
f1) / (
f1 - f2);
1484 d2 = (fmax - f2) / (
f1 - f2);
1485 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1486 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1487 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1493 d1 = (fmin -
f1) / (
f1 - f2);
1494 d2 = (fmin - f2) / (
f1 - f2);
1495 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1496 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1497 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1499 d1 = (fmax -
f1) / (
f1 - f2);
1500 d2 = (fmax - f2) / (
f1 - f2);
1501 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1502 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1503 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1509 d1 = (fmax -
f1) / (
f1 - f2);
1510 d2 = (fmax - f2) / (
f1 - f2);
1511 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1512 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1513 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1515 d1 = (fmin -
f1) / (
f1 - f2);
1516 d2 = (fmin - f2) / (
f1 - f2);
1517 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1518 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1519 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1531 Int_t i, icase, i1, i2, icase1, icase2, iv, ifback;
1534 Double_t tt, uu, ww, yy, yy1, yy2, yy1d, yy2d;
1545 x1 = tn[0]*r1[1] + tn[1]*r1[2] + tn[2]*r1[3] + tn[3];
1546 x2 = tn[0]*r2[1] + tn[1]*r2[2] + tn[2]*r2[3] + tn[3];
1547 y1 = tn[4]*r1[1] + tn[5]*r1[2] + tn[6]*r1[3] + tn[7];
1548 y2 = tn[4]*r2[1] + tn[5]*r2[2] + tn[6]*r2[3] + tn[7];
1549 z1 = tn[8]*r1[1] + tn[9]*r1[2] + tn[10]*r1[3] + tn[11];
1550 z2 = tn[8]*r2[1] + tn[9]*r2[2] + tn[10]*r2[3] + tn[11];
1552 Error(
"FindVisibleDraw",
"invalid TView in current pad");
1556 Error(
"FindVisibleDraw",
"no TView in current pad");
1582 dy = (
y2 -
y1) / di;
1585 for (i = i1; i <= i2 - 1; ++i) {
1586 yy1 =
y1 + dy*(i - i1);
1588 yy1u = yy1 -
fU[2*i - 2];
1589 yy1d = yy1 -
fD[2*i - 2];
1590 yy2u = yy2 -
fU[2*i - 1];
1591 yy2d = yy2 -
fD[2*i - 1];
1595 if (yy1u > kEpsil) icase1 = 0;
1596 if (yy1d < -kEpsil) icase1 = 2;
1597 if ((icase1 == 0 || icase1 == 2) && iv <= 0) {
1602 if (icase1 == 1 && iv >= 0) {
1608 if (yy2u > kEpsil) icase2 = 0;
1609 if (yy2d < -kEpsil) icase2 = 2;
1610 icase = icase1*3 + icase2;
1613 fT[2*
fNT - 1] =
tt + dt*(yy1u / (yy1u - yy2u));
1616 fT[2*
fNT - 1] =
tt + dt*(yy1u / (yy1u - yy2u));
1618 fT[2*
fNT - 2] =
tt + dt*(yy1d / (yy1d - yy2d));
1623 fT[2*
fNT - 2] =
tt + dt*(yy1u / (yy1u - yy2u));
1628 fT[2*
fNT - 2] =
tt + dt*(yy1d / (yy1d - yy2d));
1631 fT[2*
fNT - 1] =
tt + dt*(yy1d / (yy1d - yy2d));
1633 fT[2*
fNT - 2] =
tt + dt*(yy1u / (yy1u - yy2u));
1637 fT[2*
fNT - 1] =
tt + dt*(yy1d / (yy1d - yy2d));
1639 if (
fNT + 1 >= 100)
break;
1641 if (iv > 0)
fT[2*
fNT - 1] = 1;
1649 if (
y2 ==
y1) {
fNT = 0;
return;}
1650 ifback = 1 - ifback;
1658 if (uu <
fU[2*i1 - 3]) uu =
fU[2*i1 - 3];
1659 if (dd >
fD[2*i1 - 3]) dd =
fD[2*i1 - 3];
1662 if (y1 < uu && y2 > dd) {
1663 if (
y1 >= dd &&
y2 <= uu) {
fNT = 0;
return;}
1678 if (ifback == 0)
return;
1679 if (
fNT == 0)
return;
1680 for (i = 1; i <=
fNT; ++i) {
1681 fT[2*i - 2] = 1 -
fT[2*i - 2];
1682 fT[2*i - 1] = 1 -
fT[2*i - 1];
1700 Int_t i, incrx, ivis,
x1,
y1,
x2,
y2, ib, kb, dx, dy, iw, ix, iy, ifinve, dx2, dy2;
1734 if (
x1 < 0 &&
x2 < 0)
return;
1746 if (dy > dx)
goto L200;
1750 ddtt = dt*(float).5;
1755 for (ix =
x1; incrx < 0 ? ix >=
x2 : ix <=
x2; ix += incrx) {
1764 if (iy < 0)
goto L110;
1766 if (ix < 0)
goto L110;
1769 ib = kb - iw*30 + 1;
1771 if (ivis > 0)
continue;
1777 if (ivis == 0)
continue;
1780 if (nt == ntmax)
goto L300;
1782 if (ivis > 0) t[2*nt + 2] = tcur + dt + ddtt;
1788 ddtt = dt*(float).5;
1794 for (iy =
y1; iy <=
y2; ++iy) {
1803 if (iy < 0)
goto L210;
1804 if (ix < 0)
goto L210;
1807 ib = kb - iw*30 + 1;
1809 if (ivis > 0)
continue;
1815 if (ivis == 0)
continue;
1818 if (nt == ntmax)
goto L300;
1820 if (ivis > 0) t[2*nt + 2] = tcur + dt;
1824 if (nt == 0)
return;
1826 if (t[3] <= dt) t[3] = 0;
1827 if (t[2*nt + 2] >= 1 - dt) t[2*nt + 2] = 1;
1828 if (ifinve == 0)
return;
1829 for (i = 1; i <= nt; ++i) {
1832 t[2*i + 1] = 1 - t2;
1833 t[2*i + 2] = 1 -
t1;
1849 Int_t incrx[3], incry[3];
1873 if (ixt == 1) incrx[0] = 0;
1878 if (iyt == 1) incry[0] = 0;
1883 for (j = 1; j <= 3; ++j) {
1884 for (i = 1; i <= 3; ++i) {
1885 i1 = ia + incrx[i - 1];
1886 i2 = ib + incry[j - 1];
1892 for (k = 1; k <= 4; ++k) {
1893 for (i = 1; i <= 3; ++i) {
1894 face[i + k*3] =
f[i + (k + 32)*3 - 52];
1899 for (j = 1; j <= 3; ++j) {
1900 for (i = 1; i <= 3; ++i) {
1901 for (k = 1; k <= 4; ++k) {
1903 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1904 r =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52];
1907 z[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 49];
1909 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1910 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1913 z[k + ((i + j*3) << 2) - 17] =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52];
1915 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1916 th =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1917 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1922 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1923 th =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1924 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1929 x[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 51];
1930 y[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 50];
1931 z[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 49];
1934 x1 =
x[((i + j*3) << 2) - 14] -
x[((i + j*3) << 2) - 16];
1935 x2 =
x[((i + j*3) << 2) - 13] -
x[((i + j*3) << 2) - 15];
1936 y1 =
y[((i + j*3) << 2) - 14] -
y[((i + j*3) << 2) - 16];
1937 y2 =
y[((i + j*3) << 2) - 13] -
y[((i + j*3) << 2) - 15];
1938 z1 = z[((i + j*3) << 2) - 14] - z[((i + j*3) << 2) - 16];
1939 z2 = z[((i + j*3) << 2) - 13] - z[((i + j*3) << 2) - 15];
1940 an[(i + j*3)*3 - 12] =
y1*z2 -
y2*z1;
1941 an[(i + j*3)*3 - 11] = z1*
x2 - z2*
x1;
1942 an[(i + j*3)*3 - 10] =
x1*
y2 -
x2*
y1;
1943 s =
TMath::Sqrt(an[(i + j*3)*3 - 12]*an[(i + j*3)*3 - 12] + an[
1944 (i + j*3)*3 - 11]*an[(i + j*3)*3 - 11] + an[(i
1945 + j*3)*3 - 10]*an[(i + j*3)*3 - 10]);
1947 an[(i + j*3)*3 - 12] /= s;
1948 an[(i + j*3)*3 - 11] /= s;
1949 an[(i + j*3)*3 - 10] /= s;
1954 for (j = 1; j <= 2; ++j) {
1955 for (i = 1; i <= 2; ++i) {
1956 for (k = 1; k <= 3; ++k) {
1957 bn[k + (i + 2*j)*3 - 10] = an[k + (i + j*3)*3 - 13]
1958 + an[k + (i + 1 + j*3)*3 - 13] + an[k + (i + 1 +
1959 (j + 1)*3)*3 - 13] + an[k + (i + (j + 1)*3)*3 - 13];
1985 fU[2*i + 0] = -VERY_BIG;
1986 fU[2*i + 1] = -VERY_BIG;
1987 fD[2*i + 0] = VERY_BIG;
1988 fD[2*i + 1] = VERY_BIG;
2004 Int_t i, j, k, ib, nb;
2014 Int_t bufsize = nx*ny/30 + 1;
2020 for (i = 1; i <= 30; ++i) {
2023 fMask[i - 1] = pow2;
2027 for (nb = 2; nb <= 30; ++nb) {
2028 for (ib = 1; ib <= 30 - nb + 1; ++ib) {
2030 for (i = ib; i <= ib + nb - 1; ++i) k = k |
fMask[i - 1];
2045 Int_t i, j, ixt, iyt;
2047 Double_t xlab1l, xlab2l, ylab1l, ylab2l;
2113 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2114 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2115 ab[4] = (ab[4] - yval1l) / (yval2l - yval1l);
2116 ab[8] = (ab[8] - yval1l) / (yval2l - yval1l);
2118 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2119 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2121 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2122 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2123 ab[4] = 180*(ab[4] - ylab1l) / (ylab2l - ylab1l);
2124 ab[8] = 180*(ab[8] - ylab1l) / (ylab2l - ylab1l);
2126 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2127 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2128 ab[4] = (180 - dangle*2)*(ab[4] - ylab1l) / (ylab2l - ylab1l) + dangle;
2129 ab[8] = (180 - dangle*2)*(ab[8] - ylab1l) / (ylab2l - ylab1l) + dangle;
2155 if (stack) nids = stack->
GetSize();
2157 for (i = 2; i <= nids + 1; ++i) {
2166 for (i = 2; i <= nv; ++i) {
2182 if (
vv[i] <
vv[i - 1]) {
2194 for (i = 1; i <= nv; ++i) {
2200 for (i = 1; i <= nv; ++i) {
2201 for (j = 1; j <= 4; ++j) t[j + (i << 2)] =
vv[i];
2218 Int_t icodes[4], iface[4];
2220 Int_t firstStackNumberDrawn=-1 ;
2224 Error(
"LegoCartesian",
"no TView in current pad");
2232 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2235 Int_t incrx = (tnorm[8] < 0.) ? -1 : +1;
2236 Int_t incry = (tnorm[9] < 0.) ? -1 : +1;
2237 if (*chopt !=
'B' && *chopt !=
'b') {
2238 incrx = -incrx; incry = -incry;
2240 Int_t ix1 = (incrx == +1) ? 1 : nx;
2241 Int_t iy1 = (incry == +1) ? 1 : ny;
2242 Int_t ix2 = (incrx == +1) ? nx : 1;
2243 Int_t iy2 = (incry == +1) ? ny : 1;
2247 Int_t ivis[6] = { 0,0,0,0,0,0 };
2249 if (zn < 0) ivis[0] = 1;
2250 if (zn > 0) ivis[2] = 1;
2252 if (zn > 0) ivis[1] = 1;
2253 if (zn < 0) ivis[3] = 1;
2255 if (zn > 0) ivis[5] = 1;
2256 if (zn < 0) ivis[4] = 1;
2261 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
2262 for (
Int_t ix = ix1; ix != ix2+incrx; ix += incrx) {
2263 if (!painter->
IsInside(ix,iy))
continue;
2265 if (nv < 2 || nv > vSize)
continue;
2268 for (
Int_t iv = 1; iv < nv; ++iv) { total_content +=
v[iv]; }
2273 for (
Int_t i = 1; i <= 4; ++i) {
2274 xyz[i*3 - 3] =
xy[2*i - 2];
2275 xyz[i*3 - 2] =
xy[2*i - 1];
2276 xyz[(i + 4)*3 - 3] = xyz[i*3 - 3];
2277 xyz[(i + 4)*3 - 2] = xyz[i*3 - 2];
2280 firstStackNumberDrawn = -1;
2281 for (
Int_t iv = 1; iv < nv; ++iv) {
2282 for (
Int_t i = 1; i <= 4; ++i) {
2283 xyz[i*3 - 1] =
v[iv - 1];
2284 xyz[(i + 4)*3 - 1] =
v[iv];
2286 if (
v[iv - 1] ==
v[iv])
continue;
2288 for (
Int_t i = 1; i <= 4; ++i) {
2289 if (ivis[i - 1] == 0)
continue;
2298 tface[0] =
tt[k1 + (iv << 2) - 5];
2299 tface[1] =
tt[k2 + (iv << 2) - 5];
2300 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2301 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2303 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2305 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2311 for (
Int_t i = 1; i <= 4; ++i) {
2312 xyz[i*3 - 1] =
v[0];
2313 iface[i - 1] = 5 - i;
2314 tface[i - 1] =
tt[5 - i - 1];
2321 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2327 for (
Int_t i = 1; i <= 4; ++i) {
2328 iface[i - 1] = i + 4;
2329 tface[i - 1] =
tt[i + (nv << 2) - 5];
2334 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2335 for (
Int_t iv = nv-1; iv > 2; --iv) {
2336 if (
v[nv-1] ==
v[iv-1]) {
2343 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2364 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2366 Int_t incrr, k1, k2, ia, ib, ir1, ir2;
2368 Int_t ir, jr, iv, nr, nv, icodes[4];
2371 Int_t firstStackNumberDrawn = -1 ;
2375 Error(
"LegoPolar",
"no TView in current pad");
2394 if (
fAphi.empty()) {
2395 Error(
"LegoPolar",
"failed to allocate array fAphi[%d]",
fNaphi);
2400 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2404 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2410 if (iordr == 0) ia = nr;
2411 if (iordr != 0) ib = nr;
2412 for (i = 1; i <= nphi; ++i) {
2413 if (iordr == 0) ib = i;
2414 if (iordr != 0) ia = i;
2416 if (i == 1)
fAphi[0] = ab[jphi - 1];
2417 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2418 fAphi[i] = ab[jphi + 3];
2424 for (i = 1; i <= nphi; ++i) {
2435 if (iphi > nphi)
goto L300;
2440 if (incrr < 0) ir1 = nr;
2443 for (ir = ir1; incrr < 0 ? ir >= ir2 : ir <= ir2; ir += incrr) {
2444 if (iordr == 0) { ia = ir; ib = iphi; }
2445 else { ia = iphi; ib = ir; }
2447 if (nv < 2 || nv > vSize)
continue;
2450 for (iv = 1; iv < nv; ++iv) total_content +=
v[iv];
2451 if (total_content==0)
continue;
2455 for (i = 1; i <= 4; ++i) {
2457 if (iordr != 0 && i == 2) j = 4;
2458 if (iordr != 0 && i == 4) j = 2;
2459 xyz[j*3 - 3] = ab[jr + 2*i - 3]*
TMath::Cos(ab[jphi + 2*i - 3]*
kRad);
2460 xyz[j*3 - 2] = ab[jr + 2*i - 3]*
TMath::Sin(ab[jphi + 2*i - 3]*
kRad);
2461 xyz[(j + 4)*3 - 3] = xyz[j*3 - 3];
2462 xyz[(j + 4)*3 - 2] = xyz[j*3 - 2];
2465 firstStackNumberDrawn = -1;
2466 for (iv = 1; iv < nv; ++iv) {
2467 for (i = 1; i <= 4; ++i) {
2468 xyz[i*3 - 1] =
v[iv - 1];
2469 xyz[(i + 4)*3 - 1] =
v[iv];
2471 if (
v[iv - 1] >=
v[iv])
continue;
2473 for (i = 1; i <= 4; ++i) {
2474 if (ivis[i - 1] == 0)
continue;
2478 if (xyz[k1*3 - 3] == xyz[k2*3 - 3] && xyz[k1*3 - 2] ==
2479 xyz[k2*3 - 2])
continue;
2484 tface[0] =
tt[k1 + (iv << 2) - 5];
2485 tface[1] =
tt[k2 + (iv << 2) - 5];
2486 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2487 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2490 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2492 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2498 for (i = 1; i <= 4; ++i) {
2499 xyz[i*3 - 1] =
v[0];
2500 iface[i - 1] = 5 - i;
2501 tface[i - 1] =
tt[5 - i - 1];
2508 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2514 for (i = 1; i <= 4; ++i) {
2515 iface[i - 1] = i + 4;
2516 tface[i - 1] =
tt[i + (nv << 2) - 5];
2521 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2522 for (iv = nv-1; iv>2; iv--) {
2523 if (
v[nv-1] ==
v[iv-1]) {
2530 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2537 if (iphi == 0) iphi = kphi;
2538 if (iphi > kphi) iphi = 1;
2539 if (iphi != iphi2)
goto L100;
2566 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2569 Int_t ia, ib, idummy, iz1, iz2, nz, incrz, k1, k2, nv;
2570 Int_t iv, iz, jz, icodes[4];
2575 Int_t firstStackNumberDrawn=-1 ;
2579 Error(
"LegoCylindrical",
"no TView in current pad");
2598 if (
fAphi.empty()) {
2599 Error(
"LegoCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
2604 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2608 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2614 if (iordr == 0) ia = nz;
2615 if (iordr != 0) ib = nz;
2616 for (i = 1; i <= nphi; ++i) {
2617 if (iordr == 0) ib = i;
2618 if (iordr != 0) ia = i;
2620 if (i == 1)
fAphi[0] = ab[jphi - 1];
2621 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2622 fAphi[i] = ab[jphi + 3];
2628 for (i = 1; i <= nphi; ++i) {
2629 if (iordr == 0) ib = i;
2630 if (iordr != 0) ia = i;
2639 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
2649 if (iphi > nphi)
goto L400;
2653 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
2654 if (iordr == 0) {ia = iz; ib = iphi;}
2655 else {ia = iphi; ib = iz;}
2657 if (nv < 2 || nv > vSize)
continue;
2660 for (i = 1; i <= 4; ++i) {
2662 if (iordr != 0 && i == 2) j = 4;
2663 if (iordr != 0 && i == 4) j = 2;
2666 xyz[j*3 - 1] = ab[jz + 2*i - 3];
2667 xyz[(j + 4)*3 - 1] = ab[jz + 2*i - 3];
2670 firstStackNumberDrawn = -1;
2671 for (iv = 1; iv < nv; ++iv) {
2672 for (i = 1; i <= 4; ++i) {
2673 xyz[i*3 - 3] =
v[iv - 1]*cosphi[i - 1];
2674 xyz[i*3 - 2] =
v[iv - 1]*sinphi[i - 1];
2675 xyz[(i + 4)*3 - 3] =
v[iv]*cosphi[i - 1];
2676 xyz[(i + 4)*3 - 2] =
v[iv]*sinphi[i - 1];
2678 if (
v[iv - 1] >=
v[iv])
continue;
2680 for (i = 1; i <= 4; ++i) {
2681 if (ivis[i - 1] == 0)
continue;
2689 tface[0] =
tt[k1 + (iv << 2) - 5];
2690 tface[1] =
tt[k2 + (iv << 2) - 5];
2691 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2692 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2695 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2697 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2700 if (ivis[4] != 0 &&
v[0] > 0) {
2703 for (i = 1; i <= 4; ++i) {
2704 xyz[i*3 - 3] =
v[0]*cosphi[i - 1];
2705 xyz[i*3 - 2] =
v[0]*sinphi[i - 1];
2707 tface[i - 1] =
tt[i - 1];
2714 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2717 if (ivis[5] != 0 &&
v[nv - 1] > 0) {
2720 for (i = 1; i <= 4; ++i) {
2721 iface[i - 1] = 5 - i + 4;
2722 tface[i - 1] =
tt[5 - i + (nv << 2) - 5];
2727 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2728 for (iv = nv-1; iv>2; iv--) {
2729 if (
v[nv-1] ==
v[iv-1]) {
2736 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2743 if (iphi == 0) iphi = kphi;
2744 if (iphi > kphi) iphi = 1;
2745 if (iphi != iphi2)
goto L100;
2771 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2774 Int_t k1, k2, ia, ib, incrth, ith, jth, kth, nth, mth, ith1, ith2, nv;
2777 Int_t iv, icodes[4];
2783 Int_t firstStackNumberDrawn=-1 ;
2787 Error(
"LegoSpherical",
"no TView in current pad");
2806 if (
fAphi.empty()) {
2807 Error(
"LegoSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
2812 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2816 std::vector<Double_t>
v(vSize),
tt(4*vSize);
2823 if (mth == 0) mth = 1;
2824 if (iordr == 0) ia = mth;
2825 if (iordr != 0) ib = mth;
2826 for (i = 1; i <= nphi; ++i) {
2827 if (iordr == 0) ib = i;
2828 if (iordr != 0) ia = i;
2830 if (i == 1)
fAphi[0] = ab[jphi - 1];
2831 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2832 fAphi[i] = ab[jphi + 3];
2837 if (iordr == 0) ib = 1;
2838 if (iordr != 0) ia = 1;
2839 for (i = 1; i <= nth; ++i) {
2840 if (iordr == 0) ia = i;
2841 if (iordr != 0) ib = i;
2843 if (i == 1)
fAphi[0] = ab[jth - 1];
2844 fAphi[i - 1] = (
fAphi[i - 1] + ab[jth - 1]) / (
float)2.;
2845 fAphi[i] = ab[jth + 3];
2854 if (iphi > nphi)
goto L500;
2857 if (!iordr) {ia = mth; ib = iphi; }
2858 else {ia = iphi; ib = mth; }
2860 phi = (ab[jphi - 1] + ab[jphi + 3]) / (
float)2.;
2865 if (ith > nth)
goto L400;
2866 if (iordr == 0) ia = ith;
2867 if (iordr != 0) ib = ith;
2869 if (nv < 2 || nv > vSize)
goto L400;
2872 for (i = 1; i <= 6; ++i) ivis[i - 1] = 0;
2874 phi1 =
kRad*ab[jphi - 1];
2875 phi2 =
kRad*ab[jphi + 3];
2879 if (zn > 0) ivis[1] = 1;
2881 if (zn > 0) ivis[3] = 1;
2882 phi = (phi1 + phi2) / (
float)2.;
2884 if (zn > 0) ivis[0] = 1;
2886 if (zn > 0) ivis[2] = 1;
2887 th = (
th1 +
th2) / (
float)2.;
2888 if (ipsdr == 1) th =
kRad*90;
2890 if (zn < 0) ivis[4] = 1;
2891 if (zn > 0) ivis[5] = 1;
2896 for (i = 1; i <= 4; ++i) {
2898 if (iordr != 0 && i == 2) j = 4;
2899 if (iordr != 0 && i == 4) j = 2;
2905 firstStackNumberDrawn = -1;
2906 for (iv = 1; iv < nv; ++iv) {
2908 for (i = 1; i <= 4; ++i) {
2909 xyz[i*3 - 3] =
v[iv - 1]*cosphi[i - 1];
2910 xyz[i*3 - 2] =
v[iv - 1]*sinphi[i - 1];
2911 xyz[i*3 - 1] =
v[iv - 1]*costh[i - 1] / sinth[i - 1];
2912 xyz[(i + 4)*3 - 3] =
v[iv]*cosphi[i - 1];
2913 xyz[(i + 4)*3 - 2] =
v[iv]*sinphi[i - 1];
2914 xyz[(i + 4)*3 - 1] =
v[iv]*costh[i - 1] / sinth[i - 1];
2917 for (i = 1; i <= 4; ++i) {
2918 xyz[i*3 - 3] =
v[iv - 1]*sinth[i - 1]*cosphi[i - 1];
2919 xyz[i*3 - 2] =
v[iv - 1]*sinth[i - 1]*sinphi[i - 1];
2920 xyz[i*3 - 1] =
v[iv - 1]*costh[i - 1];
2921 xyz[(i + 4)*3 - 3] =
v[iv]*sinth[i - 1]*cosphi[i - 1];
2922 xyz[(i + 4)*3 - 2] =
v[iv]*sinth[i - 1]*sinphi[i - 1];
2923 xyz[(i + 4)*3 - 1] =
v[iv]*costh[i - 1];
2926 if (
v[iv - 1] >=
v[iv])
continue;
2928 for (i = 1; i <= 4; ++i) {
2929 if (ivis[i - 1] == 0)
continue;
2937 tface[0] =
tt[k1 + (iv << 2) - 5];
2938 tface[1] =
tt[k2 + (iv << 2) - 5];
2939 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2940 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2943 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2945 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2948 if (ivis[4] != 0 &&
v[0] > 0) {
2951 for (i = 1; i <= 4; ++i) {
2953 xyz[i*3 - 3] =
v[0]*cosphi[i - 1];
2954 xyz[i*3 - 2] =
v[0]*sinphi[i - 1];
2955 xyz[i*3 - 1] =
v[0]*costh[i - 1] / sinth[i - 1];
2957 xyz[i*3 - 3] =
v[0]*sinth[i - 1]*cosphi[i - 1];
2958 xyz[i*3 - 2] =
v[0]*sinth[i - 1]*sinphi[i - 1];
2959 xyz[i*3 - 1] =
v[0]*costh[i - 1];
2961 iface[i - 1] = 5 - i;
2962 tface[i - 1] =
tt[5 - i - 1];
2969 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2972 if (ivis[5] != 0 &&
v[nv - 1] > 0) {
2975 for (i = 1; i <= 4; ++i) {
2976 iface[i - 1] = i + 4;
2977 tface[i - 1] =
tt[i + 4 + 2*nv - 5];
2982 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2983 for (iv = nv-1; iv>2; iv--) {
2984 if (
v[nv-1] ==
v[iv-1]) {
2991 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2997 if (ith == 0) ith = kth;
2998 if (ith > kth) ith = 1;
2999 if (ith != ith2)
goto L200;
3000 if (incrth == 0)
goto L500;
3011 if (iphi == 0) iphi = kphi;
3012 if (iphi > kphi) iphi = 1;
3013 if (iphi != iphi2)
goto L100;
3043 if (nl < 0)
goto L100;
3044 else if (nl == 0)
goto L200;
3051 for (i = 1; i <= 4; ++i) {
3058 Error(
"LightSource",
"negative light intensity");
3066 if (nl > 4 || yl < 0) {
3067 Error(
"LightSource",
"illegal light source number (nl=%d, yl=%f)", nl, yl);
3071 s =
TMath::Sqrt(xscr*xscr + yscr*yscr + zscr*zscr);
3073 Error(
"LightSource",
"light source is placed at origin");
3078 fVls[nl*3 - 3] = xscr / s;
3079 fVls[nl*3 - 2] = yscr / s;
3080 fVls[nl*3 - 1] = zscr / s;
3084 if (
fYdl != 0)
return;
3085 for (i = 1; i <= 4; ++i) {
3086 if (
fYls[i - 1] != 0)
return;
3103 if (!view ||
fLoff)
return;
3112 s =
TMath::Sqrt(vn[0]*vn[0] + vn[1]*vn[1] + vn[2]*vn[2]);
3120 for (i = 1; i <= 4; ++i) {
3121 if (
fYls[i - 1] <= 0)
continue;
3122 vl[0] =
fVls[i*3 - 3];
3123 vl[1] =
fVls[i*3 - 2];
3124 vl[2] =
fVls[i*3 - 1];
3125 cosn = vl[0]*vn[0] + vl[1]*vn[1] + vl[2]*vn[2];
3126 if (cosn < 0)
continue;
3127 cosr = vn[1]*(vn[2]*vl[1] - vn[1]*vl[2]) - vn[0]*(vn[0]*vl[2]
3128 - vn[2]*vl[0]) + vn[2]*cosn;
3129 if (cosr <= 0) cosr = 0;
3155 x1 = tn[0]*r1[1] + tn[1]*r1[2] + tn[2]*r1[3] + tn[3];
3156 x2 = tn[0]*r2[1] + tn[1]*r2[2] + tn[2]*r2[3] + tn[3];
3157 y1 = tn[4]*r1[1] + tn[5]*r1[2] + tn[6]*r1[3] + tn[7];
3158 y2 = tn[4]*r2[1] + tn[5]*r2[2] + tn[6]*r2[3] + tn[7];
3160 Error(
"ModifyScreen",
"invalid TView in current pad");
3164 Error(
"ModifyScreen",
"no TView in current pad");
3178 if (i1 == i2)
return;
3181 dy = (
y2 -
y1) / (i2 - i1);
3182 for (i = i1; i <= i2 - 1; ++i) {
3183 yy1 =
y1 + dy*(i - i1);
3185 if (
fD[2*i - 2] > yy1)
fD[2*i - 2] = yy1;
3186 if (
fD[2*i - 1] > yy2)
fD[2*i - 1] = yy2;
3187 if (
fU[2*i - 2] < yy1)
fU[2*i - 2] = yy1;
3188 if (
fU[2*i - 1] < yy2)
fU[2*i - 1] = yy2;
3257 Int_t ivis[6], i, k, num;
3261 for (i = 1; i <= 6; ++i) {
3264 if (k < num)
continue;
3269 if (k == 1) ir = -1;
3295 Error(
"SideVisibilityEncode",
"no TView in current pad");
3300 if (zn > 0) k += 64;
3301 if (zn < 0) k += 32;
3303 if (zn > 0) k += 16;
3306 phi = (phi1 + phi2) / (
float)2.;
3310 if ((zn <= 0 && iopt == 1) || (zn > 0 && iopt == 2)) ++k;
3327 static const char *where =
"Spectrum";
3334 if (nl == 0) {
fNlevel = 0;
return; }
3338 Error(where,
"fmax (%f) less than fmin (%f)", fmax, fmin);
3342 if (nl < 0 || nl > 256) {
3343 Error(where,
"illegal number of levels (%d)", nl);
3348 Error(where,
"initial color index is negative");
3353 Error(where,
"color index increment must be positive");
3358 const Int_t kMAXCOL = 50;
3359 delf = (fmax - fmin) / nl;
3361 for (i = 1; i <= nl+1; ++i) {
3383 Int_t iface[4] = { 1,2,3,4 };
3389 Error(
"SurfaceCartesian",
"no TView in current pad");
3396 Int_t incrx = (tnorm[8] < 0.) ? -1 : +1;
3397 Int_t incry = (tnorm[9] < 0.) ? -1 : +1;
3398 if (*chopt !=
'B' && *chopt !=
'b') {
3399 incrx = -incrx; incry = -incry;
3401 Int_t ix1 = (incrx == +1) ? 1 : nx;
3402 Int_t iy1 = (incry == +1) ? 1 : ny;
3403 Int_t ix2 = (incrx == +1) ? nx : 1;
3404 Int_t iy2 = (incry == +1) ? ny : 1;
3408 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
3409 for (
Int_t ix = ix1; ix != ix2+incrx; ix += incrx) {
3410 if (!painter->
IsInside(ix,iy))
continue;
3412 for (
Int_t i = 0; i < 4; ++i) {
3413 xyz[i*3 + 0] =
f[i*3 + 0];
3414 xyz[i*3 + 1] =
f[i*3 + 1];
3415 xyz[i*3 + 2] =
f[i*3 + 2];
3454 static Int_t ixadd[4] = { 0,1,1,0 };
3455 static Int_t iyadd[4] = { 0,0,1,1 };
3460 Double_t xlab1l, xlab2l, ylab1l, ylab2l;
3461 Int_t i, ixa, iya, icx, ixt, iyt;
3494 for (i = 1; i <= 4; ++i) {
3515 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3516 f[i*3 + 2] = (
f[i*3 + 2] - yval1l) / (yval2l - yval1l);
3518 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3520 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3521 f[i*3 + 2] = 360*(
f[i*3 + 2] - ylab1l) / (ylab2l - ylab1l);
3523 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3524 f[i*3 + 2] = (180 - dangle*2)*(
f[i*3 + 2] - ylab1l) / (ylab2l - ylab1l) + dangle;
3547 t[i] =
f[i * 3 + 3];
3552 for (i = 1; i <= 4; ++i)
f[i * 3 + 3] =
fRmax[2];
3556 for (i = 1; i <= 4; ++i) {
3557 f[i*3 + 3] = (1 - rinrad)*((
f[i*3 + 3] -
Hparam.
zmin) /
3577 static Int_t iface[4] = { 1,2,3,4 };
3581 Error(
"SurfacePolar",
"no TView in current pad");
3585 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3587 Int_t i, j, incrr, ir1, ir2;
3589 Int_t ia, ib, ir, jr, nr, icodes[3];
3609 if (
fAphi.empty()) {
3610 Error(
"SurfacePolar",
"failed to allocate array fAphi[%d]",
fNaphi);
3615 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3620 if (iordr == 0) ia = nr;
3621 if (iordr != 0) ib = nr;
3622 for (i = 1; i <= nphi; ++i) {
3623 if (iordr == 0) ib = i;
3624 if (iordr != 0) ia = i;
3626 if (i == 1)
fAphi[0] =
f[jphi - 1];
3627 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3638 if (iphi > nphi)
goto L300;
3641 if (iordr == 0) {ia = nr; ib = iphi;}
3642 else {ia = iphi;ib = nr;}
3645 phi =
kRad*((
f[jphi - 1] +
f[jphi + 5]) / 2);
3649 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
3655 for (ir = ir1; incrr < 0 ? ir >= ir2 : ir <= ir2; ir += incrr) {
3656 if (iordr == 0) ia = ir;
3657 if (iordr != 0) ib = ir;
3660 for (i = 1; i <= 4; ++i) {
3662 if (iordr != 0 && i == 2) j = 4;
3663 if (iordr != 0 && i == 4) j = 2;
3666 xyz[j*3 - 1] =
f[i*3 - 1];
3667 ttt[j - 1] =
tt[i - 1];
3671 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3676 if (iphi == 0) iphi = kphi;
3677 if (iphi > kphi) iphi = 1;
3678 if (iphi != iphi2)
goto L100;
3679 if (incr == 0)
return;
3705 static Int_t iface[4] = { 1,2,3,4 };
3707 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3708 Int_t i, j, incrz, nz, iz1, iz2;
3709 Int_t ia, ib, iz, jz, icodes[3];
3718 Error(
"SurfaceCylindrical",
"no TView in current pad");
3737 if (
fAphi.empty()) {
3738 Error(
"SurfaceCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
3743 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3748 if (iordr == 0) ia = nz;
3749 if (iordr != 0) ib = nz;
3750 for (i = 1; i <= nphi; ++i) {
3751 if (iordr == 0) ib = i;
3752 if (iordr != 0) ia = i;
3754 if (i == 1)
fAphi[0] =
f[jphi - 1];
3755 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3764 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
3776 if (iphi > nphi)
goto L400;
3777 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
3778 if (iordr == 0) {ia = iz; ib = iphi;}
3779 else {ia = iphi; ib = iz;}
3781 for (i = 1; i <= 4; ++i) {
3783 if (iordr == 0 && i == 2) j = 4;
3784 if (iordr == 0 && i == 4) j = 2;
3787 xyz[j*3 - 1] =
f[jz + i*3 - 4];
3788 ttt[j - 1] =
tt[i - 1];
3792 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3797 if (iphi == 0) iphi = kphi;
3798 if (iphi > kphi) iphi = 1;
3799 if (iphi != iphi2)
goto L100;
3800 if (incr == 0)
return;
3825 static Int_t iface[4] = { 1,2,3,4 };
3827 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3828 Int_t i, j, incrth, ith, jth, kth, nth, mth, ith1, ith2;
3829 Int_t ia, ib, icodes[3];
3838 Error(
"SurfaceSpherical",
"no TView in current pad");
3857 if (
fAphi.empty()) {
3858 Error(
"SurfaceSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
3863 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3869 if (mth == 0) mth = 1;
3870 if (iordr == 0) ia = mth;
3871 if (iordr != 0) ib = mth;
3872 for (i = 1; i <= nphi; ++i) {
3873 if (iordr == 0) ib = i;
3874 if (iordr != 0) ia = i;
3876 if (i == 1)
fAphi[0] =
f[jphi - 1];
3877 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3883 if (iordr == 0) ib = 1;
3884 if (iordr != 0) ia = 1;
3885 for (i = 1; i <= nth; ++i) {
3886 if (iordr == 0) ia = i;
3887 if (iordr != 0) ib = i;
3890 if (i == 1)
fAphi[0] =
f[jth - 1];
3891 fAphi[i - 1] = (
fAphi[i - 1] +
f[jth - 1]) / (
float)2.;
3902 if (iphi > nphi)
goto L500;
3905 if (iordr == 0) {ia = mth; ib = iphi;}
3906 else {ia = iphi;ib = mth;}
3909 phi = (
f[jphi - 1] +
f[jphi + 5]) / (
float)2.;
3914 if (ith > nth)
goto L400;
3915 if (iordr == 0) ia = ith;
3916 if (iordr != 0) ib = ith;
3920 for (i = 1; i <= 4; ++i) {
3922 if (iordr != 0 && i == 2) j = 4;
3923 if (iordr != 0 && i == 4) j = 2;
3928 ttt[j - 1] =
tt[i - 1];
3931 for (i = 1; i <= 4; ++i) {
3933 if (iordr != 0 && i == 2) j = 4;
3934 if (iordr != 0 && i == 4) j = 2;
3938 ttt[j - 1] =
tt[i - 1];
3943 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3947 if (ith == 0) ith = kth;
3948 if (ith > kth) ith = 1;
3949 if (ith != ith2)
goto L200;
3950 if (incrth == 0)
goto L500;
3961 if (iphi == 0) iphi = kphi;
3962 if (iphi > kphi) iphi = 1;
3963 if (iphi != iphi2)
goto L100;
3964 if (incr == 0)
return;
3989 if (qqa < 0 || qqa > 1 || qqd < 0 || qqd > 1 || qqs < 0 || qqs > 1 || nnqs < 1) {
3990 Error(
"SurfaceProperty",
"error in coefficients");
4019 Error(
"ImplicitFunction",
"no TF3 function provided");
4024 Int_t ix1, iy1, iz1;
4025 Int_t ix2, iy2, iz2;
4026 Int_t incr, incrx, incry, incrz;
4027 Int_t icodes[3], i, i1, i2, k, nnod, ntria;
4030 Double_t p[8][3], pf[8], pn[8][3], t[3], fsurf,
w;
4038 Error(
"ImplicitFunction",
"no TView in current pad");
4046 Double_t fgF3XClip = 0., fgF3YClip = 0., fgF3ZClip = 0.;
4049 fgF3Clipping =
kTRUE;
4050 fgF3XClip = clip[0];
4051 fgF3YClip = clip[1];
4052 fgF3ZClip = clip[2];
4056 if (*chopt ==
'B' || *chopt ==
'b') {
4065 if (tnorm[8] < 0.) incrx =-incrx;
4066 if (tnorm[9] < 0.) incry =-incry;
4067 if (tnorm[10] < 0.) incrz =-incrz;
4071 if (incrx == -1) ix1 = nx;
4072 if (incry == -1) iy1 = ny;
4073 if (incrz == -1) iz1 = nz;
4077 dx = (rmax[0]-rmin[0]) / nx;
4078 dy = (rmax[1]-rmin[1]) / ny;
4079 dz = (rmax[2]-rmin[2]) / nz;
4082 Float_t r=0.,
g=0.,
b=0., hue, light, satur, light2;
4092 light2 = 1-.5*light;
4103 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
4104 z1 = (iz-1)*dz + rmin[2];
4114 for (iy = iy1; incry < 0 ? iy >= iy2 : iy <= iy2; iy += incry) {
4115 y1 = (iy-1)*dy + rmin[1];
4138 for (ix = ix1; incrx < 0 ? ix >= ix2 : ix <= ix2; ix += incrx) {
4165 if (pf[0] >= -
kFdel)
goto L110;
4166 if (pf[1] >= -
kFdel)
goto L120;
4167 if (pf[2] >= -
kFdel)
goto L120;
4168 if (pf[3] >= -
kFdel)
goto L120;
4169 if (pf[4] >= -
kFdel)
goto L120;
4170 if (pf[5] >= -
kFdel)
goto L120;
4171 if (pf[6] >= -
kFdel)
goto L120;
4172 if (pf[7] >= -
kFdel)
goto L120;
4175 if (pf[1] < -
kFdel)
goto L120;
4176 if (pf[2] < -
kFdel)
goto L120;
4177 if (pf[3] < -
kFdel)
goto L120;
4178 if (pf[4] < -
kFdel)
goto L120;
4179 if (pf[5] < -
kFdel)
goto L120;
4180 if (pf[6] < -
kFdel)
goto L120;
4181 if (pf[7] < -
kFdel)
goto L120;
4196 pn[0][0] = (pf[1] - pf[0]) / dx;
4197 pn[3][0] = (pf[2] - pf[3]) / dx;
4198 pn[4][0] = (pf[5] - pf[4]) / dx;
4199 pn[7][0] = (pf[6] - pf[7]) / dx;
4201 pn[0][0] = (pf[1] - f3->
Eval(
x1-dx,
y1,z1)) / (dx + dx);
4202 pn[3][0] = (pf[2] - f3->
Eval(
x1-dx,
y2,z1)) / (dx + dx);
4203 pn[4][0] = (pf[5] - f3->
Eval(
x1-dx,
y1,z2)) / (dx + dx);
4204 pn[7][0] = (pf[6] - f3->
Eval(
x1-dx,
y2,z2)) / (dx + dx);
4207 pn[1][0] = (pf[1] - pf[0]) / dx;
4208 pn[2][0] = (pf[2] - pf[3]) / dx;
4209 pn[5][0] = (pf[5] - pf[4]) / dx;
4210 pn[6][0] = (pf[6] - pf[7]) / dx;
4212 pn[1][0] = (f3->
Eval(
x2+dx,
y1,z1) - pf[0]) / (dx + dx);
4213 pn[2][0] = (f3->
Eval(
x2+dx,
y2,z1) - pf[3]) / (dx + dx);
4214 pn[5][0] = (f3->
Eval(
x2+dx,
y1,z2) - pf[4]) / (dx + dx);
4215 pn[6][0] = (f3->
Eval(
x2+dx,
y2,z2) - pf[7]) / (dx + dx);
4219 pn[0][1] = (pf[3] - pf[0]) / dy;
4220 pn[1][1] = (pf[2] - pf[1]) / dy;
4221 pn[4][1] = (pf[7] - pf[4]) / dy;
4222 pn[5][1] = (pf[6] - pf[5]) / dy;
4224 pn[0][1] = (pf[3] - f3->
Eval(
x1,
y1-dy,z1)) / (dy + dy);
4225 pn[1][1] = (pf[2] - f3->
Eval(
x2,
y1-dy,z1)) / (dy + dy);
4226 pn[4][1] = (pf[7] - f3->
Eval(
x1,
y1-dy,z2)) / (dy + dy);
4227 pn[5][1] = (pf[6] - f3->
Eval(
x2,
y1-dy,z2)) / (dy + dy);
4230 pn[2][1] = (pf[2] - pf[1]) / dy;
4231 pn[3][1] = (pf[3] - pf[0]) / dy;
4232 pn[6][1] = (pf[6] - pf[5]) / dy;
4233 pn[7][1] = (pf[7] - pf[4]) / dy;
4235 pn[2][1] = (f3->
Eval(
x2,
y2+dy,z1) - pf[1]) / (dy + dy);
4236 pn[3][1] = (f3->
Eval(
x1,
y2+dy,z1) - pf[0]) / (dy + dy);
4237 pn[6][1] = (f3->
Eval(
x2,
y2+dy,z2) - pf[5]) / (dy + dy);
4238 pn[7][1] = (f3->
Eval(
x1,
y2+dy,z2) - pf[4]) / (dy + dy);
4242 pn[0][2] = (pf[4] - pf[0]) / dz;
4243 pn[1][2] = (pf[5] - pf[1]) / dz;
4244 pn[2][2] = (pf[6] - pf[2]) / dz;
4245 pn[3][2] = (pf[7] - pf[3]) / dz;
4247 pn[0][2] = (pf[4] - f3->
Eval(
x1,
y1,z1-dz)) / (dz + dz);
4248 pn[1][2] = (pf[5] - f3->
Eval(
x2,
y1,z1-dz)) / (dz + dz);
4249 pn[2][2] = (pf[6] - f3->
Eval(
x2,
y2,z1-dz)) / (dz + dz);
4250 pn[3][2] = (pf[7] - f3->
Eval(
x1,
y2,z1-dz)) / (dz + dz);
4253 pn[4][2] = (pf[4] - pf[0]) / dz;
4254 pn[5][2] = (pf[5] - pf[1]) / dz;
4255 pn[6][2] = (pf[6] - pf[2]) / dz;
4256 pn[7][2] = (pf[7] - pf[3]) / dz;
4258 pn[4][2] = (f3->
Eval(
x1,
y1,z2+dz) - pf[0]) / (dz + dz);
4259 pn[5][2] = (f3->
Eval(
x2,
y1,z2+dz) - pf[1]) / (dz + dz);
4260 pn[6][2] = (f3->
Eval(
x2,
y2,z2+dz) - pf[2]) / (dz + dz);
4261 pn[7][2] = (f3->
Eval(
x1,
y2,z2+dz) - pf[3]) / (dz + dz);
4264 MarchingCube(fsurf,
p, pf, pn, nnod, ntria, xyz, grad, itria);
4265 if (ntria == 0)
goto L510;
4267 for ( i=1 ; i<=nnod ; i++ ) {
4268 view->
WCtoNDC(&xyz[i-1][0], &xyzn[i-1][0]);
4272 ZDepth(xyzn, ntria, itria, dtria, abcd, (
Int_t*)iorder);
4273 if (ntria == 0)
goto L510;
4275 if (*chopt ==
'B' || *chopt ==
'b') incr =-1;
4277 if (incr == -1) i1 = ntria;
4278 i2 = ntria - i1 + 1;
4281 if(
x2<=fgF3XClip && y2 <=fgF3YClip && z2>=fgF3ZClip)
goto L510;
4284 for (i=i1; incr < 0 ? i >= i2 : i <= i2; i += incr) {
4320 static Int_t irota[24][8] = { { 1,2,3,4,5,6,7,8 }, { 2,3,4,1,6,7,8,5 },
4321 { 3,4,1,2,7,8,5,6 }, { 4,1,2,3,8,5,6,7 },
4322 { 6,5,8,7,2,1,4,3 }, { 5,8,7,6,1,4,3,2 },
4323 { 8,7,6,5,4,3,2,1 }, { 7,6,5,8,3,2,1,4 },
4324 { 2,6,7,3,1,5,8,4 }, { 6,7,3,2,5,8,4,1 },
4325 { 7,3,2,6,8,4,1,5 }, { 3,2,6,7,4,1,5,8 },
4326 { 5,1,4,8,6,2,3,7 }, { 1,4,8,5,2,3,7,6 },
4327 { 4,8,5,1,3,7,6,2 }, { 8,5,1,4,7,6,2,3 },
4328 { 5,6,2,1,8,7,3,4 }, { 6,2,1,5,7,3,4,8 },
4329 { 2,1,5,6,3,4,8,7 }, { 1,5,6,2,4,8,7,3 },
4330 { 4,3,7,8,1,2,6,5 }, { 3,7,8,4,2,6,5,1 },
4331 { 7,8,4,3,6,5,1,2 }, { 8,4,3,7,5,1,2,6 } };
4333 static Int_t iwhat[21] = { 1,3,5,65,50,67,74,51,177,105,113,58,165,178,
4334 254,252,250,190,205,188,181 };
4335 Int_t j, i, i1, i2, i3, ir, irt=0, k, k1, k2, incr, icase=0,
n;
4342 for ( i=1; i<=8 ; i++) {
4343 fF8[i-1] =
f[i-1] - fiso;
4345 for ( ir=1 ; ir<=24 ; ir++ ) {
4348 for ( i=1 ; i<=8 ; i++ ) {
4349 if (
fF8[irota[ir-1][i-1]-1] >= 0.) k = k + incr;
4352 if (k==0 || k==255)
return;
4353 for ( i=1 ; i<=21 ; i++ ) {
4354 if (k != iwhat[i-1])
continue;
4363 for ( i=1 ; i<=8 ; i++ ) {
4364 k = irota[irt-1][i-1];
4365 fF8[i-1] =
f[k-1] - fiso;
4366 fP8[i-1][0] =
p[k-1][0];
4367 fP8[i-1][1] =
p[k-1][1];
4368 fP8[i-1][2] =
p[k-1][2];
4369 fG8[i-1][0] =
g[k-1][0];
4370 fG8[i-1][1] =
g[k-1][1];
4371 fG8[i-1][2] =
g[k-1][2];
4376 switch ((
int)icase) {
4379 MarchingCubeCase00(1, 4, 9, 0, 0, 0, nnod, ntria, xyz, grad, itria);
4383 MarchingCubeCase00(2, 4, 9, 10, 0, 0, nnod, ntria, xyz, grad, itria);
4395 MarchingCubeCase00(6, 2, 1, 9, 8, 0, nnod, ntria, xyz, grad, itria);
4406 MarchingCubeCase00(2, 4, 8, 6, 0, 0, nnod, ntria, xyz, grad, itria);
4409 MarchingCubeCase00(1, 4, 12, 7, 6, 10, nnod, ntria, xyz, grad, itria);
4415 MarchingCubeCase00(1, 4, 8, 7, 11, 10, nnod, ntria, xyz, grad, itria);
4424 MarchingCubeCase00(1, 9, 12, 7, 6, 2, nnod, ntria, xyz, grad, itria);
4430 if (ntria == 0)
return;
4431 if (icase <= 14)
goto L500;
4432 for ( i=1; i<=ntria ; i++ ) {
4436 if (itria[i-1][2] < 0) i1 =-i1;
4437 if (itria[i-1][1] < 0) i3 =-i3;
4438 if (itria[i-1][0] < 0) i2 =-i2;
4448 if (
n > ntria)
return;
4449 for ( i=1 ; i<=3 ; i++ ) {
4452 if (i2 == 4) i2 = 1;
4459 if (i3 == 0) i3 = 3;
4466 for ( i=1 ; i<=3 ; i++ ) {
4467 itr[i-1] = itria[
n-1][i-1];
4468 itria[
n-1][i-1] = itria[ntria-1][i-1];
4471 if (ntria == 0)
return;
4472 if (itr[i2-1]*itr[i3-1] > 0)
goto L510;
4475 if (itr[i2-1] < 0) {
4479 if (itr[i3-1] < 0) {
4483 for ( j=1 ; j<=ntria ; j++ ) {
4484 for ( i=1 ; i<=3 ; i++ ) {
4485 if (itria[j-1][i-1] != k2)
continue;
4488 if (i2 == k1) itria[j-1][i-1] =-itria[j-1][i-1];
4514 static Int_t it[4][4][3] = { { { 1,2, 3 }, { 0,0, 0 }, { 0,0, 0 }, { 0,0, 0 } },
4515 { { 1,2,-3 }, {-1,3, 4 }, { 0,0, 0 }, { 0,0, 0 } },
4516 { { 1,2,-3 }, {-1,3,-4 }, {-1,4, 5 }, { 0,0, 0 } },
4517 { { 1,2,-3 }, {-1,3,-4 }, {-4,6,-1 }, { 4,5,-6 } }
4519 Int_t it2[4][3], i, j;
4531 if (ie[5] == 0) nnod = 5;
4532 if (ie[4] == 0) nnod = 4;
4533 if (ie[3] == 0) nnod = 3;
4539 for ( i=0; i<3 ; i++) {
4540 for ( j=0; j<4 ; j++) {
4541 it2[j][i] = it[ntria-1][j][i];
4554 static Int_t ie[6] = { 4,9,1, 2,11,3 };
4555 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4556 static Int_t it2[4][3] = { { 1,2,-5 }, { -1,5,6 }, { 5,-2,4 }, { -4,2,3 } };
4564 if (f0>=0. &&
fF8[0]>=0.)
goto L100;
4565 if (f0<0. &&
fF8[0]<0.)
goto L100;
4583 static Int_t ie[6] = { 4,9,1, 7,11,6 };
4584 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4585 static Int_t it2[6][3] = { { 1,2,4 }, { 2,3,6 }, { 3,1,5 },
4586 { 4,5,1 }, { 5,6,3 }, { 6,4,2 } };
4613 static Int_t ie[7] = { 2,4,9,10, 6,7,11 };
4614 static Int_t it1[5][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 } };
4615 static Int_t it2[3][3] = { { 1,2,-3 }, { -1,3,4 }, { 5,6,7 } };
4616 static Int_t it3[7][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 },
4617 { 1,7,-5 }, { -1,5,4 } };
4625 if (f0>=0. &&
fF8[1]>=0.)
goto L100;
4626 if (f0<0. &&
fF8[1]<0.)
goto L100;
4655 static Int_t ie[9] = { 3,12,4, 1,10,2, 11,6,7 };
4656 static Int_t it[9][9][3] = {
4657 {{ 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}},
4658 {{ 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}},
4659 {{ 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}},
4660 {{-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}},
4661 {{ 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}},
4662 {{-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}},
4663 {{ 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}},
4664 {{ 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}},
4665 {{ -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}}
4668 Int_t it2[9][3], i, j;
4679 if (
f1>=0. &&
fF8[2] <0.) icase = icase + 1;
4680 if (
f1 <0. &&
fF8[2]>=0.) icase = icase + 1;
4681 if (f2>=0. &&
fF8[2] <0.) icase = icase + 2;
4682 if (f2 <0. &&
fF8[2]>=0.) icase = icase + 2;
4683 if (f3>=0. &&
fF8[2] <0.) icase = icase + 4;
4684 if (f3 <0. &&
fF8[2]>=0.) icase = icase + 4;
4687 switch ((
int)icase) {
4708 for ( i=0; i<3 ; i++) {
4709 for ( j=0; j<9 ; j++) {
4710 it2[j][i] = it[icase-1][j][i];
4720 if (irep != 2)
goto L400;
4727 for ( i=0; i<3 ; i++) {
4728 for ( j=0; j<9 ; j++) {
4729 it2[j][i] = it[icase-1][j][i];
4743 static Int_t ie[8] = { 1,3,12,9, 5,7,11,10 };
4744 static Int_t it[6][8][3] = {
4745 {{1,2,-3}, {-1,3,4}, {5,6,-7}, {-5,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4746 {{ 9,1,2}, { 9,2,3}, { 9,3,4}, { 9,4,5}, { 9,5,6}, { 9,6,7}, { 9,7,8}, { 9,8,1}},
4747 {{ 9,1,2}, { 9,4,1}, { 9,3,4}, { 9,6,3}, { 9,5,6}, { 9,8,5}, { 9,7,8}, { 9,2,7}},
4748 {{1,2,-7}, {-1,7,8}, {5,6,-3}, {-5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4749 {{1,2,-7}, {-1,7,8}, {2,3,-6}, {-2,6,7}, {3,4,-5}, {-3,5,6}, {4,1,-8}, {-4,8,5}},
4750 {{1,2,-3}, {-1,3,4}, {2,7,-6}, {-2,6,3}, {7,8,-5}, {-7,5,6}, {8,1,-4}, {-8,4,5}}
4752 Int_t it2[8][3], i, j;
4762 if (
f1 >= 0.) icase = icase + 1;
4763 if (f2 >= 0.) icase = icase + 2;
4764 if (icase==1 || icase==4)
goto L100;
4770 for ( i=0; i<3 ; i++) {
4771 for ( j=0; j<8 ; j++) {
4772 it2[j][i] = it[icase-1][j][i];
4783 if (irep == 0)
goto L200;
4786 if (icase == 1) icase = 5;
4787 if (icase == 4) icase = 6;
4792 for ( i=0; i<3 ; i++) {
4793 for ( j=0; j<8 ; j++) {
4794 it2[j][i] = it[icase-1][j][i];
4808 static Int_t ie[8] = { 3,12,4, 1,9,8,6,2 };
4809 static Int_t it[6][8][3] = {
4810 {{ 1,2,3}, {4,5,-6}, {-4,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4811 {{-9,1,2}, {9,2,-3}, {-9,3,4}, {9,4,-5}, {-9,5,6}, {9,6,-7}, {-9,7,8}, {9,8,-1}},
4812 {{9,1,-2}, {-9,2,6}, {9,6,-7}, {-9,7,8}, {9,8,-4}, {-9,4,5}, {9,5,-3}, {-9,3,1}},
4813 {{ 3,4,5}, {1,2,-6}, {-1,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4814 {{ 7,8,6}, {6,8,-1}, {-6,1,2}, {3,1,-8}, {-3,8,4}, { 3,4,5}, {3,5,-6}, {-3,6,2}},
4815 {{ 7,8,6}, {6,8,-4}, {-6,4,5}, {3,4,-8}, {-3,8,1}, { 3,1,2}, {3,2,-6}, {-3,6,5}}
4817 Int_t it2[8][3], i, j;
4827 if (
f1 >= 0.) icase = icase + 1;
4828 if (f2 >= 0.) icase = icase + 2;
4829 if (icase==1 || icase==4)
goto L100;
4835 for ( i=0; i<3 ; i++) {
4836 for ( j=0; j<8 ; j++) {
4837 it2[j][i] = it[icase-1][j][i];
4848 if (irep != 1)
goto L200;
4851 if (icase == 1) icase = 5;
4852 if (icase == 4) icase = 6;
4857 for ( i=0; i<3 ; i++) {
4858 for ( j=0; j<8 ; j++) {
4859 it2[j][i] = it[icase-1][j][i];
4873 Int_t nr, nf, i, k, incr,
n, kr, icase, irep;
4874 static Int_t irota[12][8] = {
4875 {1,2,3,4,5,6,7,8}, {1,5,6,2,4,8,7,3}, {1,4,8,5,2,3,7,6},
4876 {3,7,8,4,2,6,5,1}, {3,2,6,7,4,1,5,8}, {3,4,1,2,7,8,5,6},
4877 {6,7,3,2,5,8,4,1}, {6,5,8,7,2,1,4,3}, {6,2,1,5,7,3,4,8},
4878 {8,4,3,7,5,1,2,6}, {8,5,1,4,7,6,2,3}, {8,7,6,5,4,3,2,1} };
4879 static Int_t iwhat[8] = { 63,62,54,26,50,9,1,0 };
4880 static Int_t ie[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
4881 static Int_t iface[6][4] = {
4882 {1,2,3,4}, {5,6,7,8}, {1,2,6,5}, {2,6,7,3}, {4,3,7,8}, {1,5,8,4} };
4883 static Int_t it1[4][3] = { {1,2,10}, {9,5,8}, {6,11,7}, {3,4,12} };
4884 static Int_t it2[4][3] = { {5,6,10}, {1,4,9}, {2,11,3}, {7,8,12} };
4885 static Int_t it3[6][3] = { {10,12,-3}, {-10,3,2}, {12,10,-1}, {-12,1,4},
4886 {9,5,8}, {6,11,7} };
4887 static Int_t it4[6][3] = { {11,9,-1}, {-11,1,2}, {9,11,-3}, {-9,3,4},
4888 {5,6,10}, {7,8,12} };
4889 static Int_t it5[10][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4890 {13,10,1}, {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2}, {5,8,9} };
4891 static Int_t it6[10][3] = { {13,2,-10}, {-13,10,5}, {13,5,-6}, {-13,6,11},
4892 {13,11,3}, {13,3,-4}, {-13,4,9}, {13,9,-1}, {-13,1,2}, {12,7,8} };
4893 static Int_t it7[12][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4894 {13,10,-5}, {-13,5,8}, {13,8,-9}, {-13,9,1},
4895 {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2} };
4896 static Int_t it8[6][3] = { {3,8,12}, {3,-2,-8}, {-2,5,-8}, {2,10,-5},
4897 {7,6,11}, {1,4,9} };
4898 static Int_t it9[10][3] = { {7,12,-3}, {-7,3,11}, {11,3,2}, {6,11,-2}, {-6,2,10},
4899 {6,10,5}, {7,6,-5}, {-7,5,8}, {7,8,12}, {1,4,9} };
4900 static Int_t it10[10][3] = { {9,1,-10}, {-9,10,5}, {9,5,8}, {4,9,-8}, {-4,8,12},
4901 {4,12,3}, {1,4,-3}, {-1,3,2}, {1,2,10}, {7,6,11} };
4907 for ( nr=1 ; nr<=12 ; nr++ ) {
4910 for ( nf=1 ; nf<=6 ; nf++ ) {
4911 f1 =
fF8[irota[nr-1][iface[nf-1][0]-1]-1];
4912 f2 =
fF8[irota[nr-1][iface[nf-1][1]-1]-1];
4913 f3 =
fF8[irota[nr-1][iface[nf-1][2]-1]-1];
4914 f4 =
fF8[irota[nr-1][iface[nf-1][3]-1]-1];
4915 if ((
f1*f3-f2*f4)/(
f1+f3-f2-f4) >= 0.) k = k + incr;
4918 for ( i=1 ; i<=8 ; i++ ) {
4919 if (k != iwhat[i-1])
continue;
4925 Error(
"MarchingCubeCase13",
"configuration is not found");
4930 if (icase==1 || icase==8)
goto L300;
4931 for (
n=1 ;
n<=8 ;
n++) {
4932 k = irota[kr-1][
n-1];
4934 for ( i=1 ; i<=3 ; i++ ) {
4935 xyz[
n-1][i-1] =
fP8[k-1][i-1];
4936 grad[
n-1][i-1] =
fG8[k-1][i-1];
4939 for (
n=1 ;
n<=8 ;
n++ ) {
4941 for ( i=1 ; i<=3 ; i++ ) {
4942 fP8[
n-1][i-1] = xyz[
n-1][i-1];
4943 fG8[
n-1][i-1] = grad[
n-1][i-1];
4953 switch ((
int)icase) {
4974 &xyz[nnod-1][0], &grad[nnod-1][0]);
4981 &xyz[nnod-1][0], &grad[nnod-1][0]);
4988 &xyz[nnod-1][0], &grad[nnod-1][0]);
4995 switch ((
int)(irep+1)) {
5024 for (
n=1 ;
n<=ntria ;
n++ ) {
5025 for ( i=1 ; i<=3 ; i++ ) {
5027 itria[
n-1][i-1] = k;
5051 for ( i=1 ; i<=3 ; i++ ) {
5055 for (
n=1 ;
n<=nnod ;
n++ ) {
5058 for ( i=1 ; i<=3 ; i++ ) {
5059 p[i-1] =
p[i-1] + xyz[k-1][i-1];
5060 g[i-1] =
g[i-1] + grad[k-1][i-1];
5063 for ( i=1 ; i<=3 ; i++ ) {
5064 pxyz[i-1] =
p[i-1] / nnod;
5065 pgrad[i-1] =
g[i-1] / nnod;
5087 a = (a11-a01)*(b00-b10) - (a00-a10)*(b11-b01);
5088 if (
a == 0.)
return;
5089 b = a01*(b00-b10)-(a11-a01)*b00-(a00-a10)*b01+a00*(b11-b01);
5090 c = a00*b01 - a01*b00;
5092 if (
d <= 0.)
return;
5095 s1 = (-
b+
d) / (2*
a);
5096 if (s1<0. || s1>1.)
return;
5098 s2 = (-
b-
d) / (2*
a);
5099 if (s2<0. || s2>1.)
return;
5103 if (a00 >= 0) iposa = iposa + 1;
5104 if (a01 >= 0) iposa = iposa + 2;
5105 if (a10 >= 0) iposa = iposa + 4;
5106 if (a11 >= 0) iposa = iposa + 8;
5107 if (iposa==6 || iposa==9)
goto L100;
5113 s0 = (a00-a01) / (a00+a11-a10-a01);
5114 if (
s1>=
s0 && s2<
s0)
return;
5115 if (s1<s0 && s2>=
s0)
return;
5117 if (
s1 >=
s0) irep = 2;
5121 if (b00 >= 0) iposb = iposb + 1;
5122 if (b01 >= 0) iposb = iposb + 2;
5123 if (b10 >= 0) iposb = iposb + 4;
5124 if (b11 >= 0) iposb = iposb + 8;
5125 if (iposb!=6 && iposb!=9)
return;
5126 s0 = (b00-b01) / (b00+b11-b10-b01);
5127 if (iposa != iposb)
goto L200;
5129 if (irep==1 &&
s1>
s0)
return;
5130 if (irep==2 &&
s1<
s0)
return;
5135 if (irep==1 &&
s1<
s0)
return;
5136 if (irep==2 &&
s1>
s0)
return;
5155 static Int_t iedge[12][2] = {
5156 {1,2}, {2,3}, {3,4}, {4,1}, {5,6}, {6,7}, {7,8}, {8,5}, {1,5}, {2,6}, {3,7}, {4,8} };
5158 for (
n=1 ;
n<=nnod ;
n++ ) {
5164 for ( i=1 ; i<=3 ; i++ ) {
5165 xyz[
n-1][i-1] = (
fP8[n2-1][i-1]-
fP8[n1-1][i-1])*t +
fP8[n1-1][i-1];
5166 grad[
n-1][i-1] = (
fG8[n2-1][i-1]-
fG8[n1-1][i-1])*t +
fG8[n1-1][i-1];
5187 Int_t n, nf, i1, i2, i3, i, icur, k, itst, kface, kf, irep;
5197 for (
n=1 ;
n<=nface ;
n++ ) {
5221 for ( i=1 ; i<=3 ; i++ ) {
5222 wmin = xyz[i1-1][i-1];
5223 wmax = xyz[i1-1][i-1];
5224 if (
wmin > xyz[i2-1][i-1])
wmin = xyz[i2-1][i-1];
5225 if (
wmax < xyz[i2-1][i-1])
wmax = xyz[i2-1][i-1];
5226 if (
wmin > xyz[i3-1][i-1])
wmin = xyz[i3-1][i-1];
5227 if (
wmax < xyz[i3-1][i-1])
wmax = xyz[i3-1][i-1];
5228 dface[
n-1][i-1] =
wmin;
5229 dface[
n-1][i+2] =
wmax;
5232 for ( i=1 ; i<=3 ; i++ ) {
5233 v[0][i-1] = xyz[i2-1][i-1] - xyz[i1-1][i-1];
5234 v[1][i-1] = xyz[i3-1][i-1] - xyz[i2-1][i-1];
5236 a = (
v[0][1]*
v[1][2] -
v[0][2]*
v[1][1]);
5237 b = (
v[0][2]*
v[1][0] -
v[0][0]*
v[1][2]);
5238 c = (
v[0][0]*
v[1][1] -
v[0][1]*
v[1][0]);
5247 abcd[
n-1][3] =-(
a*xyz[i1-1][0] +
b*xyz[i1-1][1] +
c*xyz[i1-1][2]);
5250 if (nf <= 1)
return;
5253 for ( icur=2 ; icur<=nface ; icur++ ) {
5255 zcur = dface[k-1][2];
5256 for ( itst=icur-1 ; itst>=1 ; itst-- ) {
5258 if (zcur < dface[k-1][2])
break;
5260 iorder[itst-1] = iorder[itst];
5268 if (kface == 1)
goto L900;
5269 nf = iorder[kface-1];
5270 if (nf < 0) nf =-nf;
5271 abcdn[0] = abcd[nf-1][0];
5272 abcdn[1] = abcd[nf-1][1];
5273 abcdn[2] = abcd[nf-1][2];
5274 abcdn[3] = abcd[nf-1][3];
5280 for ( k=kface-1 ; k>=1 ; k-- ) {
5282 if (kf < 0) kf =-kf;
5283 if (dface[nf-1][5] > dface[kf-1][2]+
kDel)
goto L400;
5284 if (iorder[k-1] > 0)
goto L900;
5289 if (dface[kf-1][0] >= dface[nf-1][3]-
kDel)
goto L800;
5290 if (dface[kf-1][3] <= dface[nf-1][0]+
kDel)
goto L800;
5291 if (dface[kf-1][1] >= dface[nf-1][4]-
kDel)
goto L800;
5292 if (dface[kf-1][4] <= dface[nf-1][1]+
kDel)
goto L800;
5298 if (abcdn[0]*xyz[kk[0]-1][0]+abcdn[1]*xyz[kk[0]-1][1]+
5299 abcdn[2]*xyz[kk[0]-1][2]+abcdn[3] < -
kDel)
goto L500;
5300 if (abcdn[0]*xyz[kk[1]-1][0]+abcdn[1]*xyz[kk[1]-1][1]+
5301 abcdn[2]*xyz[kk[1]-1][2]+abcdn[3] < -
kDel)
goto L500;
5302 if (abcdn[0]*xyz[kk[2]-1][0]+abcdn[1]*xyz[kk[2]-1][1]+
5303 abcdn[2]*xyz[kk[2]-1][2]+abcdn[3] < -
kDel)
goto L500;
5308 abcdk[0] = abcd[kf-1][0];
5309 abcdk[1] = abcd[kf-1][1];
5310 abcdk[2] = abcd[kf-1][2];
5311 abcdk[3] = abcd[kf-1][3];
5312 if (abcdk[0]*xyz[nn[0]-1][0]+abcdk[1]*xyz[nn[0]-1][1]+
5313 abcdk[2]*xyz[nn[0]-1][2]+abcdk[3] >
kDel)
goto L600;
5314 if (abcdk[0]*xyz[nn[1]-1][0]+abcdk[1]*xyz[nn[1]-1][1]+
5315 abcdk[2]*xyz[nn[1]-1][2]+abcdk[3] >
kDel)
goto L600;
5316 if (abcdk[0]*xyz[nn[2]-1][0]+abcdk[1]*xyz[nn[2]-1][1]+
5317 abcdk[2]*xyz[nn[2]-1][2]+abcdk[3] >
kDel)
goto L600;
5323 for ( i=1 ; i<=3 ; i++ ) {
5326 if (i != 3) i2 = kk[i];
5328 if ( irep<0 )
goto L700;
5329 if ( irep==0 )
continue;
5330 if ( irep>0 )
goto L800;
5333 for ( i=1 ; i<=3 ; i++ ) {
5336 if (i != 3) i2 = nn[i];
5338 if ( irep<0 )
goto L800;
5339 if ( irep==0 )
continue;
5340 if ( irep>0 )
goto L700;
5347 for ( i=k+1 ; i<=kface ; i++ ) {
5348 iorder[i-2] = iorder[i-1];
5350 iorder[kface-1] =-kf;
5351 if (kf > 0)
goto L300;
5359 if (iorder[kface-1] < 0) iorder[kface-1] =-iorder[kface-1];
5361 if (kface > 0)
goto L300;
5379 Int_t k, k1, k2, ixy, i;
5380 Double_t a,
b,
c, d1, d2, dd,
xy, tmin, tmax, tmid,
x,
y, z;
5386 delta[0] = xyz[i2-1][0] - xyz[i1-1][0];
5387 delta[1] = xyz[i2-1][1] - xyz[i1-1][1];
5388 delta[2] = xyz[i2-1][2] - xyz[i1-1][2];
5394 c =-(
a*xyz[i1-1][0] +
b*xyz[i1-1][1]);
5395 d[0] =
a*xyz[iface[0]-1][0] +
b*xyz[iface[0]-1][1] +
c;
5396 d[1] =
a*xyz[iface[1]-1][0] +
b*xyz[iface[1]-1][1] +
c;
5397 d[2] =
a*xyz[iface[2]-1][0] +
b*xyz[iface[2]-1][1] +
c;
5399 for ( i=1 ; i<=3 ; i++ ) {
5403 if (
d[k1-1]>=0. &&
d[k2-1]>=0.)
continue;
5404 if (
d[k1-1] <0. &&
d[k2-1] <0.)
continue;
5405 d1 =
d[k1-1] / (
d[k1-1] -
d[k2-1]);
5406 d2 =
d[k2-1] / (
d[k1-1] -
d[k2-1]);
5407 xy = d1*xyz[iface[k2-1]-1][ixy-1] - d2*xyz[iface[k1-1]-1][ixy-1];
5409 t[k-1] = (
xy-xyz[i1-1][ixy-1]) / delta[ixy-1];
5410 if (k == 2)
goto L200;
5418 if (tmin>1. || tmax<0)
return;
5419 if (tmin < 0.) tmin = 0.;
5420 if (tmax > 1.) tmax = 1.;
5421 tmid = (tmin + tmax) / 2.;
5422 x = delta[0]*tmid + xyz[i1-1][0];
5423 y = delta[1]*tmid + xyz[i1-1][1];
5424 z = delta[2]*tmid + xyz[i1-1][2];
5425 dd = abcd[0]*
x + abcd[1]*
y + abcd[2]*z + abcd[3];
5426 if (dd >
del)
goto L997;
5427 if (dd <-
del)
goto L998;
5459 Double_t p0[3], p1[3], p2[3], p3[3], t[3];
5462 Int_t i, i1, i2, j, ibase, nnod, knod, ntria, ktria, iopt, iready;
5463 Int_t ixcrit, iycrit, izcrit, incrx, incry, incrz, incr;
5464 Int_t ix, ix1=0, ix2=0, iy, iy1=0, iy2=0, iz, iz1=0, iz2=0, k, kx, ky, kz, isurf, nsurf;
5470 static Int_t ind[8][3] = { { 0,0,0 }, { 1,0,0 }, { 1,0,1 }, { 0,0,1 },
5471 { 0,1,0 }, { 1,1,0 }, { 1,1,1 }, { 0,1,1 } };
5480 Error(
"ImplicitFunction",
"no TView in current pad");
5485 if (nsurf >
kNiso) {
5486 Warning(
"IsoSurface",
"Number of iso-surfaces too large. Increase kNiso");
5489 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
5513 if (p1[2] < p0[2]) ixcrit = 1;
5514 if (p2[2] < p0[2]) iycrit = 1;
5515 if (p3[2] < p0[2]) izcrit = 1;
5524 if (iopt == 1) iz1 = 1;
5525 if (iopt == 1) iz2 = izcrit-1;
5526 if (iopt == 2) iz1 = izcrit;
5527 if (iopt == 2) iz2 = nz - 1;
5529 if (iopt == 1) iz1 = nz - 1;
5530 if (iopt == 1) iz2 = izcrit;
5531 if (iopt == 2) iz1 = izcrit-1;
5532 if (iopt == 2) iz2 = 1;
5534 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
5537 if (iopt == 1) iy1 = 1;
5538 if (iopt == 1) iy2 = iycrit-1;
5539 if (iopt == 2) iy1 = iycrit;
5540 if (iopt == 2) iy2 = ny - 1;
5542 if (iopt == 1) iy1 = ny - 1;
5543 if (iopt == 1) iy2 = iycrit;
5544 if (iopt == 2) iy1 = iycrit-1;
5545 if (iopt == 2) iy2 = 1;
5547 for (iy = iy1; incry < 0 ? iy >= iy2 : iy <= iy2; iy += incry) {
5550 if (iopt == 1) ix1 = 1;
5551 if (iopt == 1) ix2 = ixcrit-1;
5552 if (iopt == 2) ix1 = ixcrit;
5553 if (iopt == 2) ix2 = nx - 1;
5555 if (iopt == 1) ix1 = nx - 1;
5556 if (iopt == 1) ix2 = ixcrit;
5557 if (iopt == 2) ix1 = ixcrit-1;
5558 if (iopt == 2) ix2 = 1;
5560 for (ix = ix1; incrx < 0 ? ix >= ix2 : ix <= ix2; ix += incrx) {
5564 for ( isurf=1 ; isurf<=nsurf ; isurf++ ) {
5602 if (iready !=0)
goto L310;
5604 for ( i=1 ; i<=8 ; i++ ) {
5605 kx = ix + ind[i-1][0];
5606 ky = iy + ind[i-1][1];
5607 kz = iz + ind[i-1][2];
5608 p[i-1][0] =
x[kx-1];
5609 p[i-1][1] =
y[ky-1];
5610 p[i-1][2] = z[kz-1];
5617 }
else if (kx == nx) {
5622 d1 =
x[kx-1] -
x[kx-2];
5623 d2 =
x[kx] -
x[kx-1];
5633 pn[i-1][0] = (df1*d2*d2+df2*d1*d1)/(d1*d2*d2+d2*d1*d1);
5641 }
else if (ky == ny) {
5646 d1 =
y[ky-1] -
y[ky-2];
5647 d2 =
y[ky] -
y[ky-1];
5657 pn[i-1][1] = (df1*d2*d2+df2*d1*d1)/(d1*d2*d2+d2*d1*d1);
5665 }
else if (kz == nz) {
5670 d1 = z[kz-1] - z[kz-2];
5671 d2 = z[kz] - z[kz-1];
5681 pn[i-1][2] = (df1*d2*d2+df2*d1*d1)/(d1*d2*d2+d2*d1*d1);
5692 xyz_tmp, grad_tmp, itria_tmp);
5694 for(
l=0 ;
l<knod ;
l++) {
5695 xyz[nnod+
l][0] = xyz_tmp[
l][0];
5696 xyz[nnod+
l][1] = xyz_tmp[
l][1];
5697 xyz[nnod+
l][2] = xyz_tmp[
l][2];
5698 grad[nnod+
l][0] = grad_tmp[
l][0];
5699 grad[nnod+
l][1] = grad_tmp[
l][1];
5700 grad[nnod+
l][2] = grad_tmp[
l][2];
5702 for(
l=0 ;
l<ktria ;
l++) {
5703 itria[ntria+
l][0] = itria_tmp[
l][0];
5704 itria[ntria+
l][1] = itria_tmp[
l][1];
5705 itria[ntria+
l][2] = itria_tmp[
l][2];
5708 for ( i=ntria+1 ; i<=ntria+ktria ; i++ ) {
5709 for ( j=1 ; j<=3 ; j++ ){
5711 if (itria[i-1][j-1] < 0) ibase =-nnod;
5712 itria[i-1][j-1] = itria[i-1][j-1] + ibase;
5717 ntria = ntria + ktria;
5721 if (ntria == 0)
continue;
5722 for ( i=1 ; i<=nnod ; i++ ) {
5723 view->
WCtoNDC(&xyz[i-1][0], &xyzn[i-1][0]);
5727 ZDepth(xyzn, ntria, itria, dtria, abcd, (
Int_t*)iorder);
5728 if (ntria == 0)
continue;
5730 if (iopt == 1) incr = -1;
5732 if (incr == -1) i1 = ntria;
5733 i2 = ntria - i1 + 1;
5734 for (i = i1; incr < 0 ? i >= i2 : i <= i2; i += incr) {
5739 icodes[0] = iattr[k-1];
5740 icodes[1] = iattr[k-1];
5741 icodes[2] = iattr[k-1];
5746 if (incrx < 0)
goto L130;
5749 if (incry < 0)
goto L120;
5752 if (incrz < 0)
goto L110;
5768 Error(
"ImplicitFunction",
"no TView in current pad");
5775 for ( i=1 ; i<=
np ; i++) {
5778 view->
WCtoNDC(&xyz[k-1][0], &p3[i-1][0]);
short Style_t
Style number (short)
int Int_t
Signed integer 4 bytes (int)
short Color_t
Color number (short)
short Width_t
Line width (short)
float Float_t
Float 4 bytes (float)
double Double_t
Double 8 bytes.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
winID h TVirtualViewer3D TVirtualGLPainter p
winID h TVirtualViewer3D vv
Option_t Option_t SetLineWidth
Option_t Option_t SetFillStyle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t del
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t wmin
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t SetLineColor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char FillPolygon
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint xy
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t SetFillColor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t wmax
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TH1 * gCurrentHist
R__EXTERN Hoption_t Hoption
const Int_t kF3FillColor2
const Double_t kEpsFaceMode2
const Int_t kF3FillColor1
R__EXTERN TStyle * gStyle
Fill Area Attributes class.
virtual Color_t GetFillColor() const
Return the fill area color.
virtual void Modify()
Change current fill area attributes if necessary.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual void Modify()
Change current line attributes if necessary.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
The color creation and management class.
virtual void SetRGB(Float_t r, Float_t g, Float_t b)
Initialize this color and its "dark" and "bright" associated colors.
static void RGBtoHLS(Float_t r, Float_t g, Float_t b, Float_t &h, Float_t &l, Float_t &s)
virtual void GetRGB(Float_t &r, Float_t &g, Float_t &b) const
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
static void HLStoRGB(Float_t h, Float_t l, Float_t s, Float_t &r, Float_t &g, Float_t &b)
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
TF3 defines a 3D Function with Parameters.
virtual const Double_t * GetClippingBox() const
TH1 is the base class of all histogram classes in ROOT.
TVirtualHistPainter * GetPainter(Option_t *option="")
Return pointer to painter.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
static void Optimize(Double_t A1, Double_t A2, Int_t nold, Double_t &BinLow, Double_t &BinHigh, Int_t &nbins, Double_t &BWID, Option_t *option="")
Static function to compute reasonable axis limits.
The histogram painter class.
static Int_t ProjectSinusoidal2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function code for sinusoidal projection from Ernst-Jan Buis Source https://en....
static Int_t ProjectMollweide2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
static Int_t ProjectAitoff2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
static Int_t ProjectParabolic2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function code for parabolic projection from Ernst-Jan Buis.
static Int_t ProjectMercator2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
Bool_t IsInside(Int_t x, Int_t y) override
Return kTRUE if the cell ix, iy is inside one of the graphical cuts.
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
std::vector< Int_t > fColorMain
void MarchingCubeCase06(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 6.
Int_t fSystem
Coordinate system.
void DrawFaceMove3(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 3rd variant for "MOVING SCREEN" algorithm (draw level lines only)
void SetDrawFace(DrawFaceFunc_t pointer)
Store pointer to current algorithm to draw faces.
void MarchingCubeSetTriangles(Int_t ntria, Int_t it[][3], Int_t itria[48][3])
Set triangles (if parameter IALL=1, all edges will be visible)
void IsoSurface(Int_t ns, Double_t *s, Int_t nx, Int_t ny, Int_t nz, Double_t *x, Double_t *y, Double_t *z, const char *chopt)
Draw set of iso-surfaces for a scalar function defined on a grid.
Double_t fRmax[3]
Upper limits of lego.
std::vector< Int_t > fRaster
Pointer to raster buffer.
void DrawLevelLines(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw level lines without hidden line removal.
void ClearRaster()
Clear screen.
std::vector< Int_t > fColorDark
void MarchingCubeFindNodes(Int_t nnod, Int_t *ie, Double_t xyz[52][3], Double_t grad[52][3])
Find nodes and normales.
DrawFaceFunc_t fDrawFace
Pointer to face drawing function.
void SetLegoFunction(LegoFunc_t pointer)
Store pointer to current lego function.
void SurfaceCylindrical(Int_t iordr, Int_t na, Int_t nb, const char *chopt)
Draw surface in cylindrical coordinates.
void MarchingCubeMiddlePoint(Int_t nnod, Double_t xyz[52][3], Double_t grad[52][3], Int_t it[][3], Double_t *pxyz, Double_t *pgrad)
Find middle point of a polygon.
Double_t fFunLevel[NumOfColorLevels+1]
std::vector< Int_t > fEdgeStyle
void SurfaceFunction(Int_t ia, Int_t ib, Double_t *f, Double_t *t)
Service function for Surfaces.
void MarchingCubeCase03(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 3.
void LegoCylindrical(Int_t iordr, Int_t na, Int_t nb, const char *chopt)
Draw stack of lego-plots in cylindrical coordinates.
Int_t fIc3
Base colour for the 3rd Iso Surface.
void SideVisibilityDecode(Double_t val, Int_t &iv1, Int_t &iv2, Int_t &iv3, Int_t &iv4, Int_t &iv5, Int_t &iv6, Int_t &ir)
Decode side visibilities and order along R for sector.
void MarchingCubeCase12(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 12.
void FindLevelLines(Int_t np, Double_t *f, Double_t *t)
Find level lines for face.
void FillPolygonBorder(Int_t nn, Double_t *xy)
Fill a polygon including border ("RASTER SCREEN")
Double_t fF8[8]
Function values.
void FindVisibleDraw(Double_t *r1, Double_t *r2)
Find visible parts of line (draw line)
static const Int_t NumOfSlices
Int_t fNaphi
Size of fAphi.
void LegoSpherical(Int_t ipsdr, Int_t iordr, Int_t na, Int_t nb, const char *chopt)
Draw stack of lego-plots spheric coordinates.
void SurfaceCartesian(Double_t ang, Int_t nx, Int_t ny, const char *chopt)
Draw surface in cartesian coordinate system.
void SurfaceProperty(Double_t qqa, Double_t qqd, Double_t qqs, Int_t nnqs, Int_t &irep)
Set surface property coefficients.
void InitMoveScreen(Double_t xmin, Double_t xmax)
Initialize "MOVING SCREEN" method.
Double_t fYls[NumOfLights]
void FindVisibleLine(Double_t *p1, Double_t *p2, Int_t ntmax, Int_t &nt, Double_t *t)
Find visible part of a line ("RASTER SCREEN")
void ZDepth(Double_t xyz[52][3], Int_t &nface, Int_t iface[48][3], Double_t dface[48][6], Double_t abcd[48][4], Int_t *iorder)
Z-depth algorithm for set of triangles.
Double_t fU[NumOfSlices *2]
void LegoCartesian(Double_t ang, Int_t nx, Int_t ny, const char *chopt)
Draw stack of lego-plots in cartesian coordinates.
Int_t fNxrast
Number of pixels in x.
Int_t fNStack
Number of histograms in the stack to be painted.
Double_t fRmin[3]
Lower limits of lego.
void DrawFaceMode1(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *t)
Draw face - 1st variant (2 colors: 1st for external surface, 2nd for internal)
TPainter3dAlgorithms()
Lego default constructor.
void SideVisibilityEncode(Int_t iopt, Double_t phi1, Double_t phi2, Double_t &val)
Encode side visibilities and order along R for sector.
void LightSource(Int_t nl, Double_t yl, Double_t xscr, Double_t yscr, Double_t zscr, Int_t &irep)
Set light source.
void MarchingCubeCase04(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 4.
Int_t fJmask[30]
Indices of subsets of n-bit masks (n is from 1 to 30)
void MarchingCubeCase00(Int_t k1, Int_t k2, Int_t k3, Int_t k4, Int_t k5, Int_t k6, Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consideration of trivial cases: 1,2,5,8,9,11,14.
void GouraudFunction(Int_t ia, Int_t ib, Double_t *f, Double_t *t)
Find part of surface with luminosity in the corners.
Int_t fNcolor
Number of colours per Iso surface.
Int_t fColorLevel[NumOfColorLevels+2]
void DrawFaceMove1(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 1st variant for "MOVING SCREEN" algorithm (draw face with level lines)
void FillPolygon(Int_t n, Double_t *p, Double_t *f)
Fill polygon with function values at vertexes.
void SetSurfaceFunction(SurfaceFunc_t pointer)
Store pointer to current surface function.
void SurfacePolar(Int_t iordr, Int_t na, Int_t nb, const char *chopt)
Draw surface in polar coordinates.
~TPainter3dAlgorithms() override
destructor
std::vector< Double_t > fAphi
Double_t fXrast
Minimal x.
void SurfaceSpherical(Int_t ipsdr, Int_t iordr, Int_t na, Int_t nb, const char *chopt)
Draw surface in spheric coordinates.
void MarchingCubeCase07(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 7.
void BackBox(Double_t ang)
Draw back surfaces of surrounding box.
void ColorFunction(Int_t nl, Double_t *fl, Int_t *icl, Int_t &irep)
Set correspondence between function and color levels.
void DrawFaceRaster2(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 2nd variant for "RASTER SCREEN" algorithm (draw face for stacked lego plot)
void MarchingCubeCase10(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 10.
Double_t fD[NumOfSlices *2]
Double_t fP8[8][3]
Vertices.
Double_t fYrast
Minimal y.
Double_t fPlines[NumOfLevelLines *6]
Double_t fVls[NumOfLights *3]
void LegoPolar(Int_t iordr, Int_t na, Int_t nb, const char *chopt)
Draw stack of lego-plots in polar coordinates.
void SetEdgeAtt(Color_t color=1, Style_t style=1, Width_t width=1, Int_t n=0)
void DrawFaceGouraudShaded(Int_t *icodes, Double_t xyz[][3], Int_t np, Int_t *iface, Double_t *t)
Draw the faces for the Gouraud Shaded Iso surfaces.
Int_t fIc2
Base colour for the 2nd Iso Surface.
void MarchingCubeCase13(Int_t &nnod, Int_t &ntria, Double_t xyz[52][3], Double_t grad[52][3], Int_t itria[48][3])
Consider case No 13.
std::vector< Int_t > fEdgeWidth
void InitRaster(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, Int_t nx, Int_t ny)
Initialize hidden lines removal algorithm (RASTER SCREEN)
void DefineGridLevels(Int_t ndivz)
Define the grid levels drawn in the background of surface and lego plots.
void LegoFunction(Int_t ia, Int_t ib, Int_t &nv, Double_t *ab, Double_t *vv, Double_t *t)
Service function for Legos.
Int_t fLevelLine[NumOfLevelLines]
Double_t fFmin
IsoSurface minimum function value.
void MarchingCube(Double_t fiso, Double_t p[8][3], Double_t f[8], Double_t g[8][3], Int_t &nnod, Int_t &ntria, Double_t xyz[][3], Double_t grad[][3], Int_t itria[][3])
Topological decider for "Marching Cubes" algorithm Find set of triangles approximating the iso-surfac...
Int_t fMask[465]
Set of masks (30+29+28+...+1)=465.
void ModifyScreen(Double_t *r1, Double_t *r2)
Modify SCREEN.
Int_t fMesh
(=1 if mesh to draw, o otherwise)
SurfaceFunc_t fSurfaceFunction
Pointer to surface function.
void DrawFaceMove2(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 2nd variant for "MOVING SCREEN" algorithm (draw face for stacked lego plot)
Int_t fIfrast
Flag, if it not zero them the algorithm is off.
LegoFunc_t fLegoFunction
Pointer to lego function.
void SetColorMain(Color_t color, Int_t n=0)
Store color for stack number n.
void Spectrum(Int_t nl, Double_t fmin, Double_t fmax, Int_t ic, Int_t idc, Int_t &irep)
Set Spectrum.
std::vector< Int_t > fEdgeColor
Double_t fG8[8][3]
Function gradients.
void TestEdge(Double_t del, Double_t xyz[52][3], Int_t i1, Int_t i2, Int_t iface[3], Double_t abcd[4], Int_t &irep)
Test edge against face (triangle)
Int_t fNyrast
Number of pixels in y.
void DrawFaceRaster1(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 1st variant for "RASTER SCREEN" algorithm (draw face with level lines)
void DrawFaceMode3(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *t)
Draw face - 3rd option (draw face for stacked lego plot)
void FrontBox(Double_t ang)
Draw front surfaces of surrounding box & axes.
void SetColorDark(Color_t color, Int_t n=0)
Store dark color for stack number n.
void DrawFaceMode2(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *t)
Draw face - 2nd option (fill in correspondence with function levels)
void FindPartEdge(Double_t *p1, Double_t *p2, Double_t f1, Double_t f2, Double_t fmin, Double_t fmax, Int_t &kpp, Double_t *pp)
Find part of edge where function defined on this edge has value from fmin to fmax
Int_t fIc1
Base colour for the 1st Iso Surface.
void ImplicitFunction(TF3 *f3, Double_t *rmin, Double_t *rmax, Int_t nx, Int_t ny, Int_t nz, const char *chopt)
Draw implicit function FUN(X,Y,Z) = 0 in cartesian coordinates using hidden surface removal algorithm...
Double_t fFmax
IsoSurface maximum function value.
void MarchingCubeSurfacePenetration(Double_t a00, Double_t a10, Double_t a11, Double_t a01, Double_t b00, Double_t b10, Double_t b11, Double_t b01, Int_t &irep)
Check for surface penetration ("bottle neck")
void Luminosity(TView *view, Double_t *anorm, Double_t &flum)
Find surface luminosity at given point.
Float_t GetLegoInnerR() const
virtual Double_t * GetRmax()=0
virtual Double_t * GetRmin()=0
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)=0
static TView * CreateView(Int_t system=1, const Double_t *rmin=nullptr, const Double_t *rmax=nullptr)
Create a concrete default 3-d view via the plug-in manager.
virtual void FindPhiSectors(Int_t iopt, Int_t &kphi, Double_t *aphi, Int_t &iphi1, Int_t &iphi2)=0
virtual Double_t * GetTnorm()=0
virtual void FindThetaSectors(Int_t iopt, Double_t phi, Int_t &kth, Double_t *ath, Int_t &ith1, Int_t &ith2)=0
virtual void SetRange(const Double_t *min, const Double_t *max)=0
virtual void FindNormal(Double_t x, Double_t y, Double_t z, Double_t &zn)=0
virtual void AxisVertex(Double_t ang, Double_t *av, Int_t &ix1, Int_t &ix2, Int_t &iy1, Int_t &iy2, Int_t &iz1, Int_t &iz2)=0
virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)=0
virtual Double_t * GetTN()=0
virtual void NormalWCtoNDC(const Float_t *pw, Float_t *pn)=0
virtual TList * GetStack() const =0
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t ATan(Double_t)
Returns the principal value of the arc tangent of x, expressed in radians.
Double_t Sqrt(Double_t x)
Returns the square root of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Double_t Log10(Double_t x)
Returns the common (base-10) logarithm of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Histograms' drawing options structure.
int Proj
"AITOFF", "MERCATOR", "SINUSOIDAL" and "PARABOLIC" projections for 2d plots.
int Logx
log scale in X. Also set by histogram option
int MinimumZero
"MIN0" or gStyle->GetHistMinimumZero()
int Zero
"0" if selected with any LEGO option the empty bins are not drawn.
int Logz
log scale in Z. Also set by histogram option
int Surf
"SURF" and "SURFn" Draw as a Surface ((1 <= n <= 4).
int Logy
log scale in Y. Also set by histogram option
int System
"POL", "CYL", "SPH" and "PSR" Type of coordinate system for 3D plots.
Histogram parameters structure.
Double_t baroffset
Offset of bin for bars or legos [0,1].
Double_t xmin
Minimum value along X.
Int_t ylast
Last bin number along Y.
Int_t xfirst
First bin number along X.
Double_t zmin
Minimum value along Z.
Double_t ymin
Minimum value along y.
Double_t ymax
Maximum value along y.
Double_t factor
Multiplication factor (normalization)
Int_t xlast
Last bin number along X.
Double_t barwidth
Width of bin for bars and legos [0,1].
Double_t zmax
Maximum value along Z.
Double_t xmax
Maximum value along X.
Int_t yfirst
First bin number along Y.