88 TList *stack =
nullptr;
107 for (i=0;i<3;i++) {
fRmin[i] = 0;
fRmax[i] = 1; }
108 for (i=0;i<4;i++) {
fYls[i] = 0; }
110 for (i=0;i<30;i++) {
fJmask[i] = 0; }
112 for (i=0;i<465;i++) {
fMask[i] = 0; }
114 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
115 for (i=0;i<200;i++) {
fT[i] = 0.; }
117 for (i=0;i<12;i++) {
fVls[i] = 0.; }
118 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
119 for (i=0;i<8;i++) {
fF8[i] = 0.; }
191 for (i=0;i<3;i++) {
fRmin[i] = rmin[i];
fRmax[i] = rmax[i]; }
192 for (i=0;i<4;i++) {
fYls[i] = 0; }
194 for (i=0;i<30;i++) {
fJmask[i] = 0; }
196 for (i=0;i<465;i++) {
fMask[i] = 0; }
198 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
199 for (i=0;i<200;i++) {
fT[i] = 0.; }
201 for (i=0;i<12;i++) {
fVls[i] = 0.; }
202 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
203 for (i=0;i<8;i++) {
fF8[i] = 0.; }
260 static Int_t iface1[4] = { 1, 4, 8, 5 };
261 static Int_t iface2[4] = { 4, 3, 7, 8 };
266 Error(
"BackBox",
"no TView in current pad");
272 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
275 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
276 for (
Int_t i = 0; i < 8; ++i) {
277 r[i*3 + 0] = av[i*3 + 0] + av[i*3 + 1]*cosa;
278 r[i*3 + 1] = av[i*3 + 1]*sina;
279 r[i*3 + 2] = av[i*3 + 2];
283 Int_t icodes[3] = { 0, 0, 0 };
285 tt[0] =
r[(iface1[0]-1)*3 + 2];
286 tt[1] =
r[(iface1[1]-1)*3 + 2];
287 tt[2] =
r[(iface1[2]-1)*3 + 2];
288 tt[3] =
r[(iface1[3]-1)*3 + 2];
290 tt[0] =
r[(iface2[0]-1)*3 + 2];
291 tt[1] =
r[(iface2[1]-1)*3 + 2];
292 tt[2] =
r[(iface2[2]-1)*3 + 2];
293 tt[3] =
r[(iface2[3]-1)*3 + 2];
304 static Int_t iface1[4] = { 1, 2, 6, 5 };
305 static Int_t iface2[4] = { 2, 3, 7, 6 };
310 Error(
"FrontBox",
"no TView in current pad");
316 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
319 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
320 for (
Int_t i = 0; i < 8; ++i) {
321 r[i*3 + 0] = av[i*3 + 0] + av[i*3 + 1]*cosa;
322 r[i*3 + 1] = av[i*3 + 1]*sina;
323 r[i*3 + 2] = av[i*3 + 2];
332 for (
Int_t i = 0; i < 4; ++i) {
333 Int_t k = iface1[i] - 1;
337 gPad->PaintPolyLine(4,
x,
y);
338 for (
Int_t i = 0; i < 4; ++i) {
339 Int_t k = iface2[i] - 1;
343 gPad->PaintPolyLine(4,
x,
y);
367 static const char *where =
"ColorFunction";
376 if (nl < 0 || nl > 256) {
377 Error(where,
"illegal number of levels (%d)", nl);
382 for (
Int_t i = 1; i < nl; ++i) {
383 if (fl[i] <= fl[i - 1]) {
390 for (
Int_t i = 0; i < nl; ++i) {
413 Error(
"GridLevels",
"no TView in current pad");
419 Double_t binLow = 0, binHigh = 0, binWidth = 0;
422 if (!rmin || !rmax)
return;
425 binLow, binHigh, nbins, binWidth,
" ");
430 binWidth = (binHigh - binLow)/nbins;
458 for (
Int_t i = 0; i < np; ++i) {
460 if (k < 0) { k = -k; ifneg =
true; }
461 view->
WCtoNDC(&xyz[(k-1)*3], p3);
462 x[i] = p3[0];
y[i] = p3[1];
464 x[np] =
x[0];
y[np] =
y[0];
468 for (
Int_t i = 0; i < np; ++i) {
469 z +=
y[i]*
x[i+1] -
x[i]*
y[i+1];
476 gPad->PaintFillArea(np,
x,
y);
482 for (
Int_t i = 0; i < np; ++i) {
483 if (iface[i] > 0)
gPad->PaintPolyLine(2, &
x[i], &
y[i]);
486 gPad->PaintPolyLine(np+1,
x,
y);
506 Double_t x[12+1] = {0},
y[12+1] = {0}, p3[3*12];
507 for (
Int_t i = 0; i < np; ++i) {
509 view->
WCtoNDC(&xyz[(k-1)*3], &p3[i*3]);
510 x[i] = p3[i*3+0];
y[i] = p3[i*3+1];
512 x[np] =
x[0];
y[np] =
y[0];
520 Double_t ttt[5] = { t[0], t[1], t[2], t[3], t[0] };
521 for (
Int_t i = 0; i<3; ++i) { p3[3*4+i] = p3[i]; }
522 Int_t k1 = 0, k2 = 2;
523 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]);
524 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]);
525 if (z1 > z2) { k1 = 2; k2 = 0; }
528 gPad->PaintPolyLine(3, &
x[k1], &
y[k1]);
532 gPad->PaintPolyLine(3, &
x[k2], &
y[k2]);
534 x[1] =
x[2];
y[1] =
y[2];
535 gPad->PaintPolyLine(2, &
x[0], &
y[0]);
541 gPad->PaintPolyLine(np+1,
x,
y);
563 for (
Int_t i = 0; i < np; ++i) {
565 view->
WCtoNDC(&xyz[(k-1)*3], p3);
566 x[i] = p3[0];
y[i] = p3[1];
568 x[np] =
x[0];
y[np] =
y[0];
574 if (icodes[3] == 1) icol =
fColorMain[icodes[2] - 1];
575 if (icodes[3] == 2) icol =
fColorDark[icodes[2] - 1];
576 if (icodes[3] == 3) icol =
fColorMain[icodes[2] - 1];
577 if (icodes[3] == 4) icol =
fColorDark[icodes[2] - 1];
581 gPad->PaintFillArea(np,
x,
y);
589 gPad->PaintPolyLine(np+1,
x,
y);
611 for (
Int_t i = 0; i < np; ++i) {
613 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
614 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
615 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
624 if (icodes[2] == 0) {
638 for (
Int_t it = 0; it <
fNT; ++it) {
639 x[0] = p1[0] + xdel*
fT[2*it + 0];
640 y[0] = p1[1] + ydel*
fT[2*it + 0];
641 x[1] = p1[0] + xdel*
fT[2*it + 1];
642 y[1] = p1[1] + ydel*
fT[2*it + 1];
643 gPad->PaintPolyLine(2,
x,
y);
648 if (icodes[2] == 0) {
658 for (
Int_t i = 0; i < np; ++i) {
660 Int_t i2 = (i == np-1) ? 0 : i + 1;
666 for (
Int_t it = 0; it <
fNT; ++it) {
667 x[0] = p1[0] + xdel*
fT[2*it + 0];
668 y[0] = p1[1] + ydel*
fT[2*it + 0];
669 x[1] = p1[0] + xdel*
fT[2*it + 1];
670 y[1] = p1[1] + ydel*
fT[2*it + 1];
671 gPad->PaintPolyLine(2,
x,
y);
676 for (
Int_t i = 0; i < np; ++i) {
678 Int_t i2 = (i == np-1) ? 0 : i + 1;
700 for (
Int_t i = 0; i < np; ++i) {
702 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
703 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
704 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
709 if (icodes[2] == 0) {
719 for (
Int_t i = 0; i < np; ++i) {
721 Int_t i2 = (i == np-1) ? 0 : i + 1;
727 for (
Int_t it = 0; it <
fNT; ++it) {
728 x[0] = p1[0] + xdel*
fT[2*it + 0];
729 y[0] = p1[1] + ydel*
fT[2*it + 0];
730 x[1] = p1[0] + xdel*
fT[2*it + 1];
731 y[1] = p1[1] + ydel*
fT[2*it + 1];
732 gPad->PaintPolyLine(2,
x,
y);
737 for (
Int_t i = 0; i < np; ++i) {
739 Int_t i2 = (i == np-1) ? 0 : i + 1;
761 if (icodes[2] == 0) {
773 Double_t p3[3*12] = {0}, ttt[12] = {0};
774 for (
Int_t i = 0; i < np; ++i) {
776 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
777 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
778 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
783 Int_t npol[2] = { np, 0 };
784 Int_t ipol[2] = { 0, 0 };
785 if (np == 4 && icodes[2] != 0) {
790 npol[0] = 3; npol[1] = 3;
791 ipol[0] = 0; ipol[1] = 2;
795 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
796 if (npol[kpol] == 0)
continue;
797 Int_t nv = npol[kpol];
798 Int_t iv = ipol[kpol];
810 for (
Int_t it = 0; it <
fNT; ++it) {
811 x[0] = p1[0] + xdel*
fT[2*it + 0];
812 y[0] = p1[1] + ydel*
fT[2*it + 0];
813 x[1] = p1[0] + xdel*
fT[2*it + 1];
814 y[1] = p1[1] + ydel*
fT[2*it + 1];
815 gPad->PaintPolyLine(2,
x,
y);
821 for (
Int_t i = 0; i < np; ++i) {
823 Int_t i2 = (i == np - 1) ? 0 : i1 + 1;
845 if (icodes[2] == 0) {
857 Double_t p3[3*12] = {0}, ttt[12] = {0};
858 for (
Int_t i = 0; i < np; ++i) {
860 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
861 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
862 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
867 Int_t npol[2] = { np, 0 };
868 Int_t ipol[2] = { 0, 0 };
869 if (np == 4 && icodes[2] != 0) {
874 npol[0] = 3; npol[1] = 3;
875 ipol[0] = 0; ipol[1] = 2;
879 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
880 if (npol[kpol] == 0)
continue;
881 Int_t nv = npol[kpol];
882 Int_t iv = ipol[kpol];
891 x[0] = p1[0];
y[0] = p1[1];
892 x[1] = p2[0];
y[1] = p2[1];
893 gPad->PaintPolyLine(2,
x,
y);
914 Double_t p3[3*12] = {0}, pp[2*12] = {0};
915 for (
Int_t i = 0; i < np; ++i) {
918 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
919 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
920 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
933 if (icodes[2] == 0) {
947 for (
Int_t it = 0; it <
fNT; ++it) {
948 x[0] = p1[0] + xdel*
fT[2*it + 0];
949 y[0] = p1[1] + ydel*
fT[2*it + 0];
950 x[1] = p1[0] + xdel*
fT[2*it + 1];
951 y[1] = p1[1] + ydel*
fT[2*it + 1];
952 gPad->PaintPolyLine(2,
x,
y);
957 if (icodes[2] == 0) {
967 for (
Int_t i = 0; i < np; ++i) {
968 if (iface[i] < 0)
continue;
970 Int_t i2 = (i == np-1) ? 0 : i + 1;
972 Double_t xdel = pp[2*i2 + 0] - pp[2*i1 + 0];
973 Double_t ydel = pp[2*i2 + 1] - pp[2*i1 + 1];
974 for (
Int_t it = 0; it <
fNT; ++it) {
975 x[0] = pp[2*i1 + 0] + xdel*
fT[2*it + 0];
976 y[0] = pp[2*i1 + 1] + ydel*
fT[2*it + 0];
977 x[1] = pp[2*i1 + 0] + xdel*
fT[2*it + 1];
978 y[1] = pp[2*i1 + 1] + ydel*
fT[2*it + 1];
979 gPad->PaintPolyLine(2,
x,
y);
1004 for (
Int_t i = 0; i < np; ++i) {
1008 view->
WCtoNDC(&xyz[(k-1)*3], p);
1018 for (
Int_t i = 0; i < np; ++i) {
1019 if (iface[i] < 0)
continue;
1021 Int_t i2 = (i == np-1) ? 0 : i + 1;
1023 Double_t xdel = pp[2*i2 + 0] - pp[2*i1 + 0];
1024 Double_t ydel = pp[2*i2 + 1] - pp[2*i1 + 1];
1025 for (
Int_t it = 0; it <
fNT; ++it) {
1026 x[0] = pp[2*i1 + 0] + xdel*
fT[2*it + 0];
1027 y[0] = pp[2*i1 + 1] + ydel*
fT[2*it + 0];
1028 x[1] = pp[2*i1 + 0] + xdel*
fT[2*it + 1];
1029 y[1] = pp[2*i1 + 1] + ydel*
fT[2*it + 1];
1030 gPad->PaintPolyLine(2,
x,
y);
1051 Int_t ilev, i, k, icol, i1, i2, nl, np;
1062 Error(
"FillPolygon",
"illegal number of vertices in polygon (%d)",
n);
1072 if (nl < 0) nl = -nl;
1075 for (i = 2; i <= np; ++i) {
1076 if (fmin >
f[i]) fmin =
f[i];
1077 if (fmax <
f[i]) fmax =
f[i];
1080 if (fmin < funmin) funmin = fmin - 1;
1082 if (fmax > funmax) funmax = fmax + 1;
1086 for (ilev = 1; ilev <= nl+1; ++ilev) {
1089 if (ilev == nl + 1) f2 = funmax;
1091 if (fmax <
f1)
return;
1092 if (fmin > f2)
continue;
1095 for (i = 1; i <= np; ++i) {
1098 if (i == np) i2 = 1;
1102 if (k < 3)
continue;
1103 for (i = 1; i <= k; ++i) {
1109 icol=
gPad->GetFillColor();
1116 gPad->PaintFillArea(k,
x,
y);
1129 i, j, k,
n, ibase, t,
x,
y, xscan[24] ,
1131 ib, nb, dx, dy, iw, nx, xx, yy, signdx, nstart, xx1, xx2, nxa, nxb;
1142 for (i = 1; i <=
n; ++i) {
1153 for (i = 1; i <=
n; ++i) {
1154 if (
ymin > y1[i - 1])
ymin = y1[i - 1];
1155 if (
ymax < y1[i - 1])
ymax = y1[i - 1];
1156 if (y1[i - 1] <= y1[i]) {
x2[i - 1] =
x1[i]; y2[i - 1] = y1[i];}
1158 x2[i - 1] =
x1[i - 1];
1159 y2[i - 1] = y1[i - 1];
1165 if (
ymax < 0)
return;
1169 for (i = 1; i <
n; ++i) {
1170 if (y1[i] >= y1[i - 1])
continue;
1173 for (j = i - 1; j >= 1; --j) {
1174 if (
y < y1[j - 1])
continue;
1181 for (j = i; j >= k; --j) {
1194 for (i = 1; i <=
n; ++i) {
1195 xcur[i - 1] =
x1[i - 1];
1196 dy = y2[i - 1] - y1[i - 1];
1197 dx =
x2[i - 1] -
x1[i - 1];
1199 if (dx < 0) signdx = -1;
1200 if (dx < 0) dx = -dx;
1202 t = -(dy + 1) / 2 + dx;
1205 xnex[i - 1] = xcur[i - 1];
1207 test[i - 1] = t - dy;
1208 xnex[i - 1] = xcur[i - 1] + signdx;
1210 }
else if (dy != 0) {
1211 step = (dx - 1) / (dy + dy) + 1;
1212 test[i - 1] = step*dy - (dx + 1) / 2 - dx;
1213 xnex[i - 1] = xcur[i - 1] + signdx*step;
1219 for (yscan =
ymin; yscan <=
ymax; ++yscan) {
1223 for (i = nstart; i <=
n; ++i) {
1224 if (y1[i - 1] > yscan)
goto L500;
1225 if (y2[i - 1] <= yscan) {
1226 if (i == nstart) ++nstart;
1227 if (y2[i - 1] != yscan)
continue;
1229 if (
x2[i - 1] >= xcur[i - 1]) {
1230 xscan[2*nxb - 2] = xcur[i - 1];
1231 xscan[2*nxb - 1] =
x2[i - 1];
1233 xscan[2*nxb - 2] =
x2[i - 1];
1234 xscan[2*nxb - 1] = xcur[i - 1];
1242 dy = y2[i - 1] - y1[i - 1];
1243 dx =
x2[i - 1] -
x1[i - 1];
1246 xscan[2*nxa - 2] = xcur[i - 1];
1247 xscan[2*nxa - 1] = xnex[i - 1];
1248 if (xscan[2*nxa - 2] != xscan[2*nxa - 1]) {
1254 xscan[2*nxa - 2] = xnex[i - 1];
1255 xscan[2*nxa - 1] = xcur[i - 1];
1256 if (xscan[2*nxa - 2] != xscan[2*nxa - 1]) {
1260 xcur[i - 1] = xnex[i - 1];
1263 if (
test[i - 1] < 0)
continue;
1265 xnex[i - 1] += signdx;
1269 t =
test[i - 1] + step*dy;
1271 test[i - 1] = t - dx;
1272 xnex[i - 1] += signdx*step;
1274 test[i - 1] = t + dy - dx;
1275 xnex[i - 1] += signdx*(step + 1);
1281 if (yscan < 0)
continue;
1284 for (i = 1; i < nxa; ++i) {
1285 for (j = i; j >= 1; --j) {
1286 if (xscan[2*j] >= xscan[2*j - 2])
continue;
1288 xscan[2*j] = xscan[2*j - 2];
1291 xscan[2*j + 1] = xscan[2*j - 1];
1295 for (i = 1; i <= nxa; i += 2) {
1297 xscan[2*nx - 2] = xscan[2*i - 2];
1299 if (xscan[2*i - 1] >
x)
x = xscan[2*i - 1];
1300 xscan[2*nx - 1] =
x;
1304 for (i = nxb; i <=
kLmax; ++i) {
1306 xscan[2*nx - 2] = xscan[2*i - 2];
1307 xscan[2*nx - 1] = xscan[2*i - 1];
1312 xx1 = xscan[2*nx - 2];
1313 xx2 = xscan[2*nx - 1];
1317 if ((xscan[2*k - 2] <= xx2 + 1) && (xscan[2*k - 1] >= xx1 - 1)) {
1318 if (xscan[2*k - 2] < xx1) xx1 = xscan[2*k - 2];
1319 if (xscan[2*k - 1] > xx2) xx2 = xscan[2*k - 1];
1320 xscan[2*k - 2] = xscan[2*nx - 2];
1321 xscan[2*k - 1] = xscan[2*nx - 1];
1325 if (xx1 < 0) xx1 = 0;
1327 nbit = xx2 - xx1 + 1;
1330 ib = kbit - iw*30 + 1;
1333 if (nb > nbit) nb = nbit;
1367 for (
Int_t i = 1; i < np; ++i) {
1368 if (t[i] < tmin) tmin = t[i];
1369 if (t[i] > tmax) tmax = t[i];
1375 for (
Int_t il = 1; il <= nl; ++il) {
1376 if (tmin >=
fFunLevel[il - 1])
continue;
1382 for (
Int_t i = 0; i < np; ++i) {
1384 Int_t i2 = (i == np-1) ? 0 : i+1;
1387 if (d1 == 0) d1 = 1
e-99;
1388 if (d2 == 0) d2 = 1
e-99;
1389 if (d1*d2 > 0)
continue;
1393 d1 /= t[i2] - t[i1];
1394 d2 /= t[i2] - t[i1];
1401 Error(
"FindLevelLines",
"number of points for line not equal 2");
1434 if (
f1 < fmin) k1 = -2;
1435 if (
f1 == fmin) k1 = -1;
1436 if (
f1 == fmax) k1 = 1;
1437 if (
f1 > fmax) k1 = 2;
1439 if (f2 < fmin) k2 = -2;
1440 if (f2 == fmin) k2 = -1;
1441 if (f2 == fmax) k2 = 1;
1442 if (f2 > fmax) k2 = 2;
1443 kk = (k1 + 2)*5 + (k2 + 2) + 1;
1478 pp[kpp*3 + 1] = p1[1];
1479 pp[kpp*3 + 2] = p1[2];
1480 pp[kpp*3 + 3] = p1[3];
1486 d1 = (fmin -
f1) / (
f1 - f2);
1487 d2 = (fmin - f2) / (
f1 - f2);
1488 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1489 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1490 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1496 d1 = (fmax -
f1) / (
f1 - f2);
1497 d2 = (fmax - f2) / (
f1 - f2);
1498 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1499 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1500 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1506 pp[kpp*3 + 1] = p1[1];
1507 pp[kpp*3 + 2] = p1[2];
1508 pp[kpp*3 + 3] = p1[3];
1510 d1 = (fmin -
f1) / (
f1 - f2);
1511 d2 = (fmin - f2) / (
f1 - f2);
1512 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1513 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1514 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1520 pp[kpp*3 + 1] = p1[1];
1521 pp[kpp*3 + 2] = p1[2];
1522 pp[kpp*3 + 3] = p1[3];
1524 d1 = (fmax -
f1) / (
f1 - f2);
1525 d2 = (fmax - f2) / (
f1 - f2);
1526 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1527 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1528 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1534 d1 = (fmin -
f1) / (
f1 - f2);
1535 d2 = (fmin - f2) / (
f1 - f2);
1536 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1537 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1538 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1540 d1 = (fmax -
f1) / (
f1 - f2);
1541 d2 = (fmax - f2) / (
f1 - f2);
1542 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1543 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1544 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1550 d1 = (fmax -
f1) / (
f1 - f2);
1551 d2 = (fmax - f2) / (
f1 - f2);
1552 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1553 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1554 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1556 d1 = (fmin -
f1) / (
f1 - f2);
1557 d2 = (fmin - f2) / (
f1 - f2);
1558 pp[kpp*3 + 1] = d2*p1[1] - d1*p2[1];
1559 pp[kpp*3 + 2] = d2*p1[2] - d1*p2[2];
1560 pp[kpp*3 + 3] = d2*p1[3] - d1*p2[3];
1572 Int_t i, icase, i1, i2, icase1, icase2, iv, ifback;
1575 Double_t tt, uu, ww, yy, yy1, yy2, yy1d, yy2d;
1587 x1 = tn[0]*r1[1] + tn[1]*r1[2] + tn[2]*r1[3] + tn[3];
1588 x2 = tn[0]*r2[1] + tn[1]*r2[2] + tn[2]*r2[3] + tn[3];
1589 y1 = tn[4]*r1[1] + tn[5]*r1[2] + tn[6]*r1[3] + tn[7];
1590 y2 = tn[4]*r2[1] + tn[5]*r2[2] + tn[6]*r2[3] + tn[7];
1591 z1 = tn[8]*r1[1] + tn[9]*r1[2] + tn[10]*r1[3] + tn[11];
1592 z2 = tn[8]*r2[1] + tn[9]*r2[2] + tn[10]*r2[3] + tn[11];
1594 Error(
"FindVisibleDraw",
"invalid TView in current pad");
1598 Error(
"FindVisibleDraw",
"no TView in current pad");
1624 dy = (y2 - y1) / di;
1627 for (i = i1; i <= i2 - 1; ++i) {
1628 yy1 = y1 + dy*(i - i1);
1630 yy1u = yy1 -
fU[2*i - 2];
1631 yy1d = yy1 -
fD[2*i - 2];
1632 yy2u = yy2 -
fU[2*i - 1];
1633 yy2d = yy2 -
fD[2*i - 1];
1637 if (yy1u > kEpsil) icase1 = 0;
1638 if (yy1d < -kEpsil) icase1 = 2;
1639 if ((icase1 == 0 || icase1 == 2) && iv <= 0) {
1644 if (icase1 == 1 && iv >= 0) {
1650 if (yy2u > kEpsil) icase2 = 0;
1651 if (yy2d < -kEpsil) icase2 = 2;
1652 icase = icase1*3 + icase2;
1655 fT[2*
fNT - 1] =
tt + dt*(yy1u / (yy1u - yy2u));
1658 fT[2*
fNT - 1] =
tt + dt*(yy1u / (yy1u - yy2u));
1660 fT[2*
fNT - 2] =
tt + dt*(yy1d / (yy1d - yy2d));
1665 fT[2*
fNT - 2] =
tt + dt*(yy1u / (yy1u - yy2u));
1670 fT[2*
fNT - 2] =
tt + dt*(yy1d / (yy1d - yy2d));
1673 fT[2*
fNT - 1] =
tt + dt*(yy1d / (yy1d - yy2d));
1675 fT[2*
fNT - 2] =
tt + dt*(yy1u / (yy1u - yy2u));
1679 fT[2*
fNT - 1] =
tt + dt*(yy1d / (yy1d - yy2d));
1681 if (
fNT + 1 >= 100)
break;
1683 if (iv > 0)
fT[2*
fNT - 1] = 1;
1691 if (y2 == y1) {
fNT = 0;
return;}
1692 ifback = 1 - ifback;
1700 if (uu <
fU[2*i1 - 3]) uu =
fU[2*i1 - 3];
1701 if (dd >
fD[2*i1 - 3]) dd =
fD[2*i1 - 3];
1704 if (y1 < uu && y2 > dd) {
1705 if (y1 >= dd && y2 <= uu) {
fNT = 0;
return;}
1710 fT[2*
fNT - 1] = (dd - y1) / (y2 - y1);
1714 fT[2*
fNT - 2] = (uu - y1) / (y2 - y1);
1720 if (ifback == 0)
return;
1721 if (
fNT == 0)
return;
1722 for (i = 1; i <=
fNT; ++i) {
1723 fT[2*i - 2] = 1 -
fT[2*i - 2];
1724 fT[2*i - 1] = 1 -
fT[2*i - 1];
1742 Int_t i, incrx, ivis,
x1, y1,
x2, y2, ib, kb, dx, dy, iw, ix, iy, ifinve, dx2, dy2;
1776 if (
x1 < 0 &&
x2 < 0)
return;
1788 if (dy > dx)
goto L200;
1792 ddtt = dt*(float).5;
1797 for (ix =
x1; incrx < 0 ? ix >=
x2 : ix <=
x2; ix += incrx) {
1806 if (iy < 0)
goto L110;
1808 if (ix < 0)
goto L110;
1811 ib = kb - iw*30 + 1;
1813 if (ivis > 0)
continue;
1819 if (ivis == 0)
continue;
1822 if (nt == ntmax)
goto L300;
1824 if (ivis > 0) t[2*nt + 2] = tcur + dt + ddtt;
1830 ddtt = dt*(float).5;
1836 for (iy = y1; iy <= y2; ++iy) {
1845 if (iy < 0)
goto L210;
1846 if (ix < 0)
goto L210;
1849 ib = kb - iw*30 + 1;
1851 if (ivis > 0)
continue;
1857 if (ivis == 0)
continue;
1860 if (nt == ntmax)
goto L300;
1862 if (ivis > 0) t[2*nt + 2] = tcur + dt;
1866 if (nt == 0)
return;
1868 if (t[3] <= dt) t[3] = 0;
1869 if (t[2*nt + 2] >= 1 - dt) t[2*nt + 2] = 1;
1870 if (ifinve == 0)
return;
1871 for (i = 1; i <= nt; ++i) {
1874 t[2*i + 1] = 1 - t2;
1875 t[2*i + 2] = 1 -
t1;
1891 Int_t incrx[3], incry[3];
1915 if (ixt == 1) incrx[0] = 0;
1920 if (iyt == 1) incry[0] = 0;
1925 for (j = 1; j <= 3; ++j) {
1926 for (i = 1; i <= 3; ++i) {
1927 i1 = ia + incrx[i - 1];
1928 i2 = ib + incry[j - 1];
1934 for (k = 1; k <= 4; ++k) {
1935 for (i = 1; i <= 3; ++i) {
1936 face[i + k*3] =
f[i + (k + 32)*3 - 52];
1941 for (j = 1; j <= 3; ++j) {
1942 for (i = 1; i <= 3; ++i) {
1943 for (k = 1; k <= 4; ++k) {
1945 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1946 r =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52];
1949 z[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 49];
1951 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1952 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1955 z[k + ((i + j*3) << 2) - 17] =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52];
1957 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1958 th =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1959 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1964 phi =
f[iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1965 th =
f[3 - iphi + (k + ((i + j*3) << 2))*3 - 52]*rad;
1966 r =
f[(k + ((i + j*3) << 2))*3 - 49];
1971 x[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 51];
1972 y[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 50];
1973 z[k + ((i + j*3) << 2) - 17] =
f[(k + ((i + j*3) << 2))*3 - 49];
1976 x1 =
x[((i + j*3) << 2) - 14] -
x[((i + j*3) << 2) - 16];
1977 x2 =
x[((i + j*3) << 2) - 13] -
x[((i + j*3) << 2) - 15];
1978 y1 =
y[((i + j*3) << 2) - 14] -
y[((i + j*3) << 2) - 16];
1979 y2 =
y[((i + j*3) << 2) - 13] -
y[((i + j*3) << 2) - 15];
1980 z1 = z[((i + j*3) << 2) - 14] - z[((i + j*3) << 2) - 16];
1981 z2 = z[((i + j*3) << 2) - 13] - z[((i + j*3) << 2) - 15];
1982 an[(i + j*3)*3 - 12] = y1*z2 - y2*z1;
1983 an[(i + j*3)*3 - 11] = z1*
x2 - z2*
x1;
1984 an[(i + j*3)*3 - 10] =
x1*y2 -
x2*y1;
1985 s =
TMath::Sqrt(an[(i + j*3)*3 - 12]*an[(i + j*3)*3 - 12] + an[
1986 (i + j*3)*3 - 11]*an[(i + j*3)*3 - 11] + an[(i
1987 + j*3)*3 - 10]*an[(i + j*3)*3 - 10]);
1989 an[(i + j*3)*3 - 12] /= s;
1990 an[(i + j*3)*3 - 11] /= s;
1991 an[(i + j*3)*3 - 10] /= s;
1996 for (j = 1; j <= 2; ++j) {
1997 for (i = 1; i <= 2; ++i) {
1998 for (k = 1; k <= 3; ++k) {
1999 bn[k + (i + 2*j)*3 - 10] = an[k + (i + j*3)*3 - 13]
2000 + an[k + (i + 1 + j*3)*3 - 13] + an[k + (i + 1 +
2001 (j + 1)*3)*3 - 13] + an[k + (i + (j + 1)*3)*3 - 13];
2027 fU[2*i + 0] = -VERY_BIG;
2028 fU[2*i + 1] = -VERY_BIG;
2029 fD[2*i + 0] = VERY_BIG;
2030 fD[2*i + 1] = VERY_BIG;
2046 Int_t i, j, k, ib, nb;
2056 Int_t buffersize = nx*ny/30 + 1;
2062 for (i = 1; i <= 30; ++i) {
2065 fMask[i - 1] = pow2;
2069 for (nb = 2; nb <= 30; ++nb) {
2070 for (ib = 1; ib <= 30 - nb + 1; ++ib) {
2072 for (i = ib; i <= ib + nb - 1; ++i) k = k |
fMask[i - 1];
2087 Int_t i, j, ixt, iyt;
2089 Double_t xlab1l, xlab2l, ylab1l, ylab2l;
2155 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2156 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2157 ab[4] = (ab[4] - yval1l) / (yval2l - yval1l);
2158 ab[8] = (ab[8] - yval1l) / (yval2l - yval1l);
2160 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2161 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2163 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2164 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2165 ab[4] = 180*(ab[4] - ylab1l) / (ylab2l - ylab1l);
2166 ab[8] = 180*(ab[8] - ylab1l) / (ylab2l - ylab1l);
2168 ab[3] = 360*(ab[3] - xlab1l) / (xlab2l - xlab1l);
2169 ab[5] = 360*(ab[5] - xlab1l) / (xlab2l - xlab1l);
2170 ab[4] = (180 - dangle*2)*(ab[4] - ylab1l) / (ylab2l - ylab1l) + dangle;
2171 ab[8] = (180 - dangle*2)*(ab[8] - ylab1l) / (ylab2l - ylab1l) + dangle;
2197 if (stack) nids = stack->
GetSize();
2199 for (i = 2; i <= nids + 1; ++i) {
2208 for (i = 2; i <= nv; ++i) {
2224 if (vv[i] < vv[i - 1]) {
2236 for (i = 1; i <= nv; ++i) {
2237 vv[i] = (1 - rinrad)*((vv[i] -
Hparam.
zmin) /
2242 for (i = 1; i <= nv; ++i) {
2243 for (j = 1; j <= 4; ++j) t[j + (i << 2)] = vv[i];
2259 Int_t icodes[4], iface[4];
2261 Int_t firstStackNumberDrawn=-1 ;
2266 Error(
"LegoCartesian",
"no TView in current pad");
2285 Int_t incrx = (tnorm[8] < 0.) ? -1 : +1;
2286 Int_t incry = (tnorm[9] < 0.) ? -1 : +1;
2287 if (*chopt !=
'B' && *chopt !=
'b') {
2288 incrx = -incrx; incry = -incry;
2290 Int_t ix1 = (incrx == +1) ? 1 : nx;
2291 Int_t iy1 = (incry == +1) ? 1 : ny;
2292 Int_t ix2 = (incrx == +1) ? nx : 1;
2293 Int_t iy2 = (incry == +1) ? ny : 1;
2297 Int_t ivis[6] = { 0,0,0,0,0,0 };
2299 if (zn < 0) ivis[0] = 1;
2300 if (zn > 0) ivis[2] = 1;
2302 if (zn > 0) ivis[1] = 1;
2303 if (zn < 0) ivis[3] = 1;
2305 if (zn > 0) ivis[5] = 1;
2306 if (zn < 0) ivis[4] = 1;
2311 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
2312 for (
Int_t ix = ix1; ix != ix2+incrx; ix += incrx) {
2313 if (!painter->
IsInside(ix,iy))
continue;
2315 if (nv < 2 || nv > vSize)
continue;
2318 for (
Int_t iv = 1; iv < nv; ++iv) { total_content +=
v[iv]; }
2323 for (
Int_t i = 1; i <= 4; ++i) {
2324 xyz[i*3 - 3] =
xy[2*i - 2];
2325 xyz[i*3 - 2] =
xy[2*i - 1];
2326 xyz[(i + 4)*3 - 3] = xyz[i*3 - 3];
2327 xyz[(i + 4)*3 - 2] = xyz[i*3 - 2];
2330 firstStackNumberDrawn = -1;
2331 for (
Int_t iv = 1; iv < nv; ++iv) {
2332 for (
Int_t i = 1; i <= 4; ++i) {
2333 xyz[i*3 - 1] =
v[iv - 1];
2334 xyz[(i + 4)*3 - 1] =
v[iv];
2336 if (
v[iv - 1] ==
v[iv])
continue;
2338 for (
Int_t i = 1; i <= 4; ++i) {
2339 if (ivis[i - 1] == 0)
continue;
2348 tface[0] =
tt[k1 + (iv << 2) - 5];
2349 tface[1] =
tt[k2 + (iv << 2) - 5];
2350 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2351 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2353 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2355 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2361 for (
Int_t i = 1; i <= 4; ++i) {
2362 xyz[i*3 - 1] =
v[0];
2363 iface[i - 1] = 5 - i;
2364 tface[i - 1] =
tt[5 - i - 1];
2371 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2377 for (
Int_t i = 1; i <= 4; ++i) {
2378 iface[i - 1] = i + 4;
2379 tface[i - 1] =
tt[i + (nv << 2) - 5];
2384 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2385 for (
Int_t iv = nv-1; iv > 2; --iv) {
2386 if (
v[nv-1] ==
v[iv-1]) {
2393 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2417 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2419 Int_t incrr, k1, k2, ia, ib, ir1, ir2;
2421 Int_t ir, jr, iv, nr, nv, icodes[4];
2425 Int_t firstStackNumberDrawn=-1 ;
2429 Error(
"LegoPolar",
"no TView in current pad");
2450 Error(
"LegoPolar",
"failed to allocate array fAphi[%d]",
fNaphi);
2455 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2473 if (iordr == 0) ia = nr;
2474 if (iordr != 0) ib = nr;
2475 for (i = 1; i <= nphi; ++i) {
2476 if (iordr == 0) ib = i;
2477 if (iordr != 0) ia = i;
2479 if (i == 1)
fAphi[0] = ab[jphi - 1];
2480 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2481 fAphi[i] = ab[jphi + 3];
2487 for (i = 1; i <= nphi; ++i) {
2498 if (iphi > nphi)
goto L300;
2503 if (incrr < 0) ir1 = nr;
2506 for (ir = ir1; incrr < 0 ? ir >= ir2 : ir <= ir2; ir += incrr) {
2507 if (iordr == 0) { ia = ir; ib = iphi; }
2508 else { ia = iphi; ib = ir; }
2510 if (nv < 2 || nv > vSize)
continue;
2513 for (iv = 1; iv < nv; ++iv) total_content +=
v[iv];
2514 if (total_content==0)
continue;
2518 for (i = 1; i <= 4; ++i) {
2520 if (iordr != 0 && i == 2) j = 4;
2521 if (iordr != 0 && i == 4) j = 2;
2522 xyz[j*3 - 3] = ab[jr + 2*i - 3]*
TMath::Cos(ab[jphi + 2*i - 3]*
kRad);
2523 xyz[j*3 - 2] = ab[jr + 2*i - 3]*
TMath::Sin(ab[jphi + 2*i - 3]*
kRad);
2524 xyz[(j + 4)*3 - 3] = xyz[j*3 - 3];
2525 xyz[(j + 4)*3 - 2] = xyz[j*3 - 2];
2528 firstStackNumberDrawn = -1;
2529 for (iv = 1; iv < nv; ++iv) {
2530 for (i = 1; i <= 4; ++i) {
2531 xyz[i*3 - 1] =
v[iv - 1];
2532 xyz[(i + 4)*3 - 1] =
v[iv];
2534 if (
v[iv - 1] >=
v[iv])
continue;
2536 for (i = 1; i <= 4; ++i) {
2537 if (ivis[i - 1] == 0)
continue;
2541 if (xyz[k1*3 - 3] == xyz[k2*3 - 3] && xyz[k1*3 - 2] ==
2542 xyz[k2*3 - 2])
continue;
2547 tface[0] =
tt[k1 + (iv << 2) - 5];
2548 tface[1] =
tt[k2 + (iv << 2) - 5];
2549 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2550 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2553 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2555 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2561 for (i = 1; i <= 4; ++i) {
2562 xyz[i*3 - 1] =
v[0];
2563 iface[i - 1] = 5 - i;
2564 tface[i - 1] =
tt[5 - i - 1];
2571 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2577 for (i = 1; i <= 4; ++i) {
2578 iface[i - 1] = i + 4;
2579 tface[i - 1] =
tt[i + (nv << 2) - 5];
2584 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2585 for (iv = nv-1; iv>2; iv--) {
2586 if (
v[nv-1] ==
v[iv-1]) {
2593 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2600 if (iphi == 0) iphi = kphi;
2601 if (iphi > kphi) iphi = 1;
2602 if (iphi != iphi2)
goto L100;
2633 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2636 Int_t ia, ib, idummy, iz1, iz2, nz, incrz, k1, k2, nv;
2637 Int_t iv, iz, jz, icodes[4];
2643 Int_t firstStackNumberDrawn=-1 ;
2647 Error(
"LegoCylindrical",
"no TView in current pad");
2668 Error(
"LegoCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
2673 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2691 if (iordr == 0) ia = nz;
2692 if (iordr != 0) ib = nz;
2693 for (i = 1; i <= nphi; ++i) {
2694 if (iordr == 0) ib = i;
2695 if (iordr != 0) ia = i;
2697 if (i == 1)
fAphi[0] = ab[jphi - 1];
2698 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2699 fAphi[i] = ab[jphi + 3];
2705 for (i = 1; i <= nphi; ++i) {
2706 if (iordr == 0) ib = i;
2707 if (iordr != 0) ia = i;
2716 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
2726 if (iphi > nphi)
goto L400;
2730 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
2731 if (iordr == 0) {ia = iz; ib = iphi;}
2732 else {ia = iphi; ib = iz;}
2734 if (nv < 2 || nv > vSize)
continue;
2737 for (i = 1; i <= 4; ++i) {
2739 if (iordr != 0 && i == 2) j = 4;
2740 if (iordr != 0 && i == 4) j = 2;
2743 xyz[j*3 - 1] = ab[jz + 2*i - 3];
2744 xyz[(j + 4)*3 - 1] = ab[jz + 2*i - 3];
2747 firstStackNumberDrawn = -1;
2748 for (iv = 1; iv < nv; ++iv) {
2749 for (i = 1; i <= 4; ++i) {
2750 xyz[i*3 - 3] =
v[iv - 1]*cosphi[i - 1];
2751 xyz[i*3 - 2] =
v[iv - 1]*sinphi[i - 1];
2752 xyz[(i + 4)*3 - 3] =
v[iv]*cosphi[i - 1];
2753 xyz[(i + 4)*3 - 2] =
v[iv]*sinphi[i - 1];
2755 if (
v[iv - 1] >=
v[iv])
continue;
2757 for (i = 1; i <= 4; ++i) {
2758 if (ivis[i - 1] == 0)
continue;
2766 tface[0] =
tt[k1 + (iv << 2) - 5];
2767 tface[1] =
tt[k2 + (iv << 2) - 5];
2768 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
2769 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
2772 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2774 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
2777 if (ivis[4] != 0 &&
v[0] > 0) {
2780 for (i = 1; i <= 4; ++i) {
2781 xyz[i*3 - 3] =
v[0]*cosphi[i - 1];
2782 xyz[i*3 - 2] =
v[0]*sinphi[i - 1];
2784 tface[i - 1] =
tt[i - 1];
2791 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2794 if (ivis[5] != 0 &&
v[nv - 1] > 0) {
2797 for (i = 1; i <= 4; ++i) {
2798 iface[i - 1] = 5 - i + 4;
2799 tface[i - 1] =
tt[5 - i + (nv << 2) - 5];
2804 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
2805 for (iv = nv-1; iv>2; iv--) {
2806 if (
v[nv-1] ==
v[iv-1]) {
2813 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
2820 if (iphi == 0) iphi = kphi;
2821 if (iphi > kphi) iphi = 1;
2822 if (iphi != iphi2)
goto L100;
2852 Int_t iphi, jphi, kphi, incr, nphi, ivis[6], iopt, iphi1, iphi2, iface[4], i, j;
2855 Int_t k1, k2, ia, ib, incrth, ith, jth, kth, nth, mth, ith1, ith2, nv;
2858 Int_t iv, icodes[4];
2865 Int_t firstStackNumberDrawn=-1 ;
2869 Error(
"LegoSpherical",
"no TView in current pad");
2890 Error(
"LegoSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
2895 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
2914 if (mth == 0) mth = 1;
2915 if (iordr == 0) ia = mth;
2916 if (iordr != 0) ib = mth;
2917 for (i = 1; i <= nphi; ++i) {
2918 if (iordr == 0) ib = i;
2919 if (iordr != 0) ia = i;
2921 if (i == 1)
fAphi[0] = ab[jphi - 1];
2922 fAphi[i - 1] = (
fAphi[i - 1] + ab[jphi - 1]) / (
float)2.;
2923 fAphi[i] = ab[jphi + 3];
2928 if (iordr == 0) ib = 1;
2929 if (iordr != 0) ia = 1;
2930 for (i = 1; i <= nth; ++i) {
2931 if (iordr == 0) ia = i;
2932 if (iordr != 0) ib = i;
2934 if (i == 1)
fAphi[0] = ab[jth - 1];
2935 fAphi[i - 1] = (
fAphi[i - 1] + ab[jth - 1]) / (
float)2.;
2936 fAphi[i] = ab[jth + 3];
2945 if (iphi > nphi)
goto L500;
2948 if (!iordr) {ia = mth; ib = iphi; }
2949 else {ia = iphi;ib = mth; }
2951 phi = (ab[jphi - 1] + ab[jphi + 3]) / (
float)2.;
2956 if (ith > nth)
goto L400;
2957 if (iordr == 0) ia = ith;
2958 if (iordr != 0) ib = ith;
2960 if (nv < 2 || nv > vSize)
goto L400;
2963 for (i = 1; i <= 6; ++i) ivis[i - 1] = 0;
2965 phi1 =
kRad*ab[jphi - 1];
2966 phi2 =
kRad*ab[jphi + 3];
2970 if (zn > 0) ivis[1] = 1;
2972 if (zn > 0) ivis[3] = 1;
2973 phi = (phi1 + phi2) / (
float)2.;
2975 if (zn > 0) ivis[0] = 1;
2977 if (zn > 0) ivis[2] = 1;
2978 th = (
th1 +
th2) / (
float)2.;
2979 if (ipsdr == 1) th =
kRad*90;
2981 if (zn < 0) ivis[4] = 1;
2982 if (zn > 0) ivis[5] = 1;
2987 for (i = 1; i <= 4; ++i) {
2989 if (iordr != 0 && i == 2) j = 4;
2990 if (iordr != 0 && i == 4) j = 2;
2996 firstStackNumberDrawn = -1;
2997 for (iv = 1; iv < nv; ++iv) {
2999 for (i = 1; i <= 4; ++i) {
3000 xyz[i*3 - 3] =
v[iv - 1]*cosphi[i - 1];
3001 xyz[i*3 - 2] =
v[iv - 1]*sinphi[i - 1];
3002 xyz[i*3 - 1] =
v[iv - 1]*costh[i - 1] / sinth[i - 1];
3003 xyz[(i + 4)*3 - 3] =
v[iv]*cosphi[i - 1];
3004 xyz[(i + 4)*3 - 2] =
v[iv]*sinphi[i - 1];
3005 xyz[(i + 4)*3 - 1] =
v[iv]*costh[i - 1] / sinth[i - 1];
3008 for (i = 1; i <= 4; ++i) {
3009 xyz[i*3 - 3] =
v[iv - 1]*sinth[i - 1]*cosphi[i - 1];
3010 xyz[i*3 - 2] =
v[iv - 1]*sinth[i - 1]*sinphi[i - 1];
3011 xyz[i*3 - 1] =
v[iv - 1]*costh[i - 1];
3012 xyz[(i + 4)*3 - 3] =
v[iv]*sinth[i - 1]*cosphi[i - 1];
3013 xyz[(i + 4)*3 - 2] =
v[iv]*sinth[i - 1]*sinphi[i - 1];
3014 xyz[(i + 4)*3 - 1] =
v[iv]*costh[i - 1];
3017 if (
v[iv - 1] >=
v[iv])
continue;
3019 for (i = 1; i <= 4; ++i) {
3020 if (ivis[i - 1] == 0)
continue;
3028 tface[0] =
tt[k1 + (iv << 2) - 5];
3029 tface[1] =
tt[k2 + (iv << 2) - 5];
3030 tface[2] =
tt[k2 + ((iv + 1) << 2) - 5];
3031 tface[3] =
tt[k1 + ((iv + 1) << 2) - 5];
3034 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
3036 if ( firstStackNumberDrawn==-1 ) firstStackNumberDrawn =
fEdgeIdx;
3039 if (ivis[4] != 0 &&
v[0] > 0) {
3042 for (i = 1; i <= 4; ++i) {
3044 xyz[i*3 - 3] =
v[0]*cosphi[i - 1];
3045 xyz[i*3 - 2] =
v[0]*sinphi[i - 1];
3046 xyz[i*3 - 1] =
v[0]*costh[i - 1] / sinth[i - 1];
3048 xyz[i*3 - 3] =
v[0]*sinth[i - 1]*cosphi[i - 1];
3049 xyz[i*3 - 2] =
v[0]*sinth[i - 1]*sinphi[i - 1];
3050 xyz[i*3 - 1] =
v[0]*costh[i - 1];
3052 iface[i - 1] = 5 - i;
3053 tface[i - 1] =
tt[5 - i - 1];
3060 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
3063 if (ivis[5] != 0 &&
v[nv - 1] > 0) {
3066 for (i = 1; i <= 4; ++i) {
3067 iface[i - 1] = i + 4;
3068 tface[i - 1] =
tt[i + 4 + 2*nv - 5];
3073 if ( nv > 2 && (
v[nv-1] ==
v[nv-2])) {
3074 for (iv = nv-1; iv>2; iv--) {
3075 if (
v[nv-1] ==
v[iv-1]) {
3082 (this->*
fDrawFace)(icodes, xyz, 4, iface, tface);
3088 if (ith == 0) ith = kth;
3089 if (ith > kth) ith = 1;
3090 if (ith != ith2)
goto L200;
3091 if (incrth == 0)
goto L500;
3102 if (iphi == 0) iphi = kphi;
3103 if (iphi > kphi) iphi = 1;
3104 if (iphi != iphi2)
goto L100;
3139 if (nl < 0)
goto L100;
3140 else if (nl == 0)
goto L200;
3147 for (i = 1; i <= 4; ++i) {
3154 Error(
"LightSource",
"negative light intensity");
3162 if (nl > 4 || yl < 0) {
3163 Error(
"LightSource",
"illegal light source number (nl=%d, yl=%f)", nl, yl);
3167 s =
TMath::Sqrt(xscr*xscr + yscr*yscr + zscr*zscr);
3169 Error(
"LightSource",
"light source is placed at origin");
3174 fVls[nl*3 - 3] = xscr / s;
3175 fVls[nl*3 - 2] = yscr / s;
3176 fVls[nl*3 - 1] = zscr / s;
3180 if (
fYdl != 0)
return;
3181 for (i = 1; i <= 4; ++i) {
3182 if (
fYls[i - 1] != 0)
return;
3199 if (!view ||
fLoff)
return;
3208 s =
TMath::Sqrt(vn[0]*vn[0] + vn[1]*vn[1] + vn[2]*vn[2]);
3216 for (i = 1; i <= 4; ++i) {
3217 if (
fYls[i - 1] <= 0)
continue;
3218 vl[0] =
fVls[i*3 - 3];
3219 vl[1] =
fVls[i*3 - 2];
3220 vl[2] =
fVls[i*3 - 1];
3221 cosn = vl[0]*vn[0] + vl[1]*vn[1] + vl[2]*vn[2];
3222 if (cosn < 0)
continue;
3223 cosr = vn[1]*(vn[2]*vl[1] - vn[1]*vl[2]) - vn[0]*(vn[0]*vl[2]
3224 - vn[2]*vl[0]) + vn[2]*cosn;
3225 if (cosr <= 0) cosr = 0;
3252 x1 = tn[0]*r1[1] + tn[1]*r1[2] + tn[2]*r1[3] + tn[3];
3253 x2 = tn[0]*r2[1] + tn[1]*r2[2] + tn[2]*r2[3] + tn[3];
3254 y1 = tn[4]*r1[1] + tn[5]*r1[2] + tn[6]*r1[3] + tn[7];
3255 y2 = tn[4]*r2[1] + tn[5]*r2[2] + tn[6]*r2[3] + tn[7];
3257 Error(
"ModifyScreen",
"invalid TView in current pad");
3261 Error(
"ModifyScreen",
"no TView in current pad");
3275 if (i1 == i2)
return;
3278 dy = (y2 - y1) / (i2 - i1);
3279 for (i = i1; i <= i2 - 1; ++i) {
3280 yy1 = y1 + dy*(i - i1);
3282 if (
fD[2*i - 2] > yy1)
fD[2*i - 2] = yy1;
3283 if (
fD[2*i - 1] > yy2)
fD[2*i - 1] = yy2;
3284 if (
fU[2*i - 2] < yy1)
fU[2*i - 2] = yy1;
3285 if (
fU[2*i - 1] < yy2)
fU[2*i - 1] = yy2;
3354 Int_t ivis[6], i, k, num;
3358 for (i = 1; i <= 6; ++i) {
3361 if (k < num)
continue;
3366 if (k == 1) ir = -1;
3393 Error(
"SideVisibilityEncode",
"no TView in current pad");
3398 if (zn > 0) k += 64;
3399 if (zn < 0) k += 32;
3401 if (zn > 0) k += 16;
3404 phi = (phi1 + phi2) / (
float)2.;
3408 if ((zn <= 0 && iopt == 1) || (zn > 0 && iopt == 2)) ++k;
3425 static const char *where =
"Spectrum";
3432 if (nl == 0) {
fNlevel = 0;
return; }
3436 Error(where,
"fmax (%f) less than fmin (%f)", fmax, fmin);
3440 if (nl < 0 || nl > 256) {
3441 Error(where,
"illegal number of levels (%d)", nl);
3446 Error(where,
"initial color index is negative");
3451 Error(where,
"color index increment must be positive");
3456 const Int_t kMAXCOL = 50;
3457 delf = (fmax - fmin) / nl;
3459 for (i = 1; i <= nl+1; ++i) {
3480 Int_t iface[4] = { 1,2,3,4 };
3487 Error(
"SurfaceCartesian",
"no TView in current pad");
3494 Int_t incrx = (tnorm[8] < 0.) ? -1 : +1;
3495 Int_t incry = (tnorm[9] < 0.) ? -1 : +1;
3496 if (*chopt !=
'B' && *chopt !=
'b') {
3497 incrx = -incrx; incry = -incry;
3499 Int_t ix1 = (incrx == +1) ? 1 : nx;
3500 Int_t iy1 = (incry == +1) ? 1 : ny;
3501 Int_t ix2 = (incrx == +1) ? nx : 1;
3502 Int_t iy2 = (incry == +1) ? ny : 1;
3506 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
3507 for (
Int_t ix = ix1; ix != ix2+incrx; ix += incrx) {
3508 if (!painter->
IsInside(ix,iy))
continue;
3510 for (
Int_t i = 0; i < 4; ++i) {
3511 xyz[i*3 + 0] =
f[i*3 + 0];
3512 xyz[i*3 + 1] =
f[i*3 + 1];
3513 xyz[i*3 + 2] =
f[i*3 + 2];
3548 static Int_t ixadd[4] = { 0,1,1,0 };
3549 static Int_t iyadd[4] = { 0,0,1,1 };
3554 Double_t xlab1l, xlab2l, ylab1l, ylab2l;
3555 Int_t i, ixa, iya, icx, ixt, iyt;
3588 for (i = 1; i <= 4; ++i) {
3609 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3610 f[i*3 + 2] = (
f[i*3 + 2] - yval1l) / (yval2l - yval1l);
3612 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3614 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3615 f[i*3 + 2] = 360*(
f[i*3 + 2] - ylab1l) / (ylab2l - ylab1l);
3617 f[i*3 + 1] = 360*(
f[i*3 + 1] - xlab1l) / (xlab2l - xlab1l);
3618 f[i*3 + 2] = (180 - dangle*2)*(
f[i*3 + 2] - ylab1l) / (ylab2l - ylab1l) + dangle;
3641 t[i] =
f[i * 3 + 3];
3646 for (i = 1; i <= 4; ++i)
f[i * 3 + 3] =
fRmax[2];
3650 for (i = 1; i <= 4; ++i) {
3651 f[i*3 + 3] = (1 - rinrad)*((
f[i*3 + 3] -
Hparam.
zmin) /
3670 static Int_t iface[4] = { 1,2,3,4 };
3675 Error(
"SurfacePolar",
"no TView in current pad");
3679 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3681 Int_t i, j, incrr, ir1, ir2;
3683 Int_t ia, ib, ir, jr, nr, icodes[3];
3705 Error(
"SurfacePolar",
"failed to allocate array fAphi[%d]",
fNaphi);
3710 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3715 if (iordr == 0) ia = nr;
3716 if (iordr != 0) ib = nr;
3717 for (i = 1; i <= nphi; ++i) {
3718 if (iordr == 0) ib = i;
3719 if (iordr != 0) ia = i;
3721 if (i == 1)
fAphi[0] =
f[jphi - 1];
3722 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3733 if (iphi > nphi)
goto L300;
3736 if (iordr == 0) {ia = nr; ib = iphi;}
3737 else {ia = iphi;ib = nr;}
3740 phi =
kRad*((
f[jphi - 1] +
f[jphi + 5]) / 2);
3744 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
3750 for (ir = ir1; incrr < 0 ? ir >= ir2 : ir <= ir2; ir += incrr) {
3751 if (iordr == 0) ia = ir;
3752 if (iordr != 0) ib = ir;
3755 for (i = 1; i <= 4; ++i) {
3757 if (iordr != 0 && i == 2) j = 4;
3758 if (iordr != 0 && i == 4) j = 2;
3761 xyz[j*3 - 1] =
f[i*3 - 1];
3762 ttt[j - 1] =
tt[i - 1];
3766 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3771 if (iphi == 0) iphi = kphi;
3772 if (iphi > kphi) iphi = 1;
3773 if (iphi != iphi2)
goto L100;
3774 if (incr == 0)
return;
3799 static Int_t iface[4] = { 1,2,3,4 };
3801 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3802 Int_t i, j, incrz, nz, iz1, iz2;
3803 Int_t ia, ib, iz, jz, icodes[3];
3813 Error(
"SurfaceCylindrical",
"no TView in current pad");
3834 Error(
"SurfaceCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
3839 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3844 if (iordr == 0) ia = nz;
3845 if (iordr != 0) ib = nz;
3846 for (i = 1; i <= nphi; ++i) {
3847 if (iordr == 0) ib = i;
3848 if (iordr != 0) ia = i;
3850 if (i == 1)
fAphi[0] =
f[jphi - 1];
3851 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3860 if ((z <= 0 && iopt == 1) || (z > 0 && iopt == 2)) {
3872 if (iphi > nphi)
goto L400;
3873 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
3874 if (iordr == 0) {ia = iz; ib = iphi;}
3875 else {ia = iphi; ib = iz;}
3877 for (i = 1; i <= 4; ++i) {
3879 if (iordr == 0 && i == 2) j = 4;
3880 if (iordr == 0 && i == 4) j = 2;
3883 xyz[j*3 - 1] =
f[jz + i*3 - 4];
3884 ttt[j - 1] =
tt[i - 1];
3888 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
3893 if (iphi == 0) iphi = kphi;
3894 if (iphi > kphi) iphi = 1;
3895 if (iphi != iphi2)
goto L100;
3896 if (incr == 0)
return;
3920 static Int_t iface[4] = { 1,2,3,4 };
3922 Int_t iphi, jphi, kphi, incr, nphi, iopt, iphi1, iphi2;
3923 Int_t i, j, incrth, ith, jth, kth, nth, mth, ith1, ith2;
3924 Int_t ia, ib, icodes[3];
3934 Error(
"SurfaceSpherical",
"no TView in current pad");
3955 Error(
"SurfaceSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
3960 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
3966 if (mth == 0) mth = 1;
3967 if (iordr == 0) ia = mth;
3968 if (iordr != 0) ib = mth;
3969 for (i = 1; i <= nphi; ++i) {
3970 if (iordr == 0) ib = i;
3971 if (iordr != 0) ia = i;
3973 if (i == 1)
fAphi[0] =
f[jphi - 1];
3974 fAphi[i - 1] = (
fAphi[i - 1] +
f[jphi - 1]) / (
float)2.;
3980 if (iordr == 0) ib = 1;
3981 if (iordr != 0) ia = 1;
3982 for (i = 1; i <= nth; ++i) {
3983 if (iordr == 0) ia = i;
3984 if (iordr != 0) ib = i;
3987 if (i == 1)
fAphi[0] =
f[jth - 1];
3988 fAphi[i - 1] = (
fAphi[i - 1] +
f[jth - 1]) / (
float)2.;
3999 if (iphi > nphi)
goto L500;
4002 if (iordr == 0) {ia = mth; ib = iphi;}
4003 else {ia = iphi;ib = mth;}
4006 phi = (
f[jphi - 1] +
f[jphi + 5]) / (
float)2.;
4011 if (ith > nth)
goto L400;
4012 if (iordr == 0) ia = ith;
4013 if (iordr != 0) ib = ith;
4017 for (i = 1; i <= 4; ++i) {
4019 if (iordr != 0 && i == 2) j = 4;
4020 if (iordr != 0 && i == 4) j = 2;
4025 ttt[j - 1] =
tt[i - 1];
4028 for (i = 1; i <= 4; ++i) {
4030 if (iordr != 0 && i == 2) j = 4;
4031 if (iordr != 0 && i == 4) j = 2;
4035 ttt[j - 1] =
tt[i - 1];
4040 (this->*
fDrawFace)(icodes, xyz, 4, iface, ttt);
4044 if (ith == 0) ith = kth;
4045 if (ith > kth) ith = 1;
4046 if (ith != ith2)
goto L200;
4047 if (incrth == 0)
goto L500;
4058 if (iphi == 0) iphi = kphi;
4059 if (iphi > kphi) iphi = 1;
4060 if (iphi != iphi2)
goto L100;
4061 if (incr == 0)
return;
4086 if (qqa < 0 || qqa > 1 || qqd < 0 || qqd > 1 || qqs < 0 || qqs > 1 || nnqs < 1) {
4087 Error(
"SurfaceProperty",
"error in coefficients");
4114 Error(
"ImplicitFunction",
"no TF3 function provided");
4119 Int_t ix1, iy1, iz1;
4120 Int_t ix2, iy2, iz2;
4121 Int_t incr, incrx, incry, incrz;
4122 Int_t icodes[3], i, i1, i2, k, nnod, ntria;
4125 Double_t p[8][3], pf[8], pn[8][3], t[3], fsurf, w;
4133 Error(
"ImplicitFunction",
"no TView in current pad");
4141 Double_t fgF3XClip = 0., fgF3YClip = 0., fgF3ZClip = 0.;
4144 fgF3Clipping =
kTRUE;
4145 fgF3XClip = clip[0];
4146 fgF3YClip = clip[1];
4147 fgF3ZClip = clip[2];
4151 if (*chopt ==
'B' || *chopt ==
'b') {
4160 if (tnorm[8] < 0.) incrx =-incrx;
4161 if (tnorm[9] < 0.) incry =-incry;
4162 if (tnorm[10] < 0.) incrz =-incrz;
4166 if (incrx == -1) ix1 = nx;
4167 if (incry == -1) iy1 = ny;
4168 if (incrz == -1) iz1 = nz;
4172 dx = (rmax[0]-rmin[0]) / nx;
4173 dy = (rmax[1]-rmin[1]) / ny;
4174 dz = (rmax[2]-rmin[2]) / nz;
4177 Float_t r=0.,
g=0.,
b=0., hue, light, satur, light2;
4187 light2 = 1-.5*light;
4198 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
4199 z1 = (iz-1)*dz + rmin[2];
4209 for (iy = iy1; incry < 0 ? iy >= iy2 : iy <= iy2; iy += incry) {
4210 y1 = (iy-1)*dy + rmin[1];
4222 pf[1] = f3->
Eval(
x2,y1,z1);
4223 pf[2] = f3->
Eval(
x2,y2,z1);
4224 pf[5] = f3->
Eval(
x2,y1,z2);
4225 pf[6] = f3->
Eval(
x2,y2,z2);
4228 pf[0] = f3->
Eval(
x1,y1,z1);
4229 pf[3] = f3->
Eval(
x1,y2,z1);
4230 pf[4] = f3->
Eval(
x1,y1,z2);
4231 pf[7] = f3->
Eval(
x1,y2,z2);
4233 for (ix = ix1; incrx < 0 ? ix >= ix2 : ix <= ix2; ix += incrx) {
4244 pf[1] = f3->
Eval(
x2,y1,z1);
4245 pf[2] = f3->
Eval(
x2,y2,z1);
4246 pf[5] = f3->
Eval(
x2,y1,z2);
4247 pf[6] = f3->
Eval(
x2,y2,z2);
4255 pf[0] = f3->
Eval(
x1,y1,z1);
4256 pf[3] = f3->
Eval(
x1,y2,z1);
4257 pf[4] = f3->
Eval(
x1,y1,z2);
4258 pf[7] = f3->
Eval(
x1,y2,z2);
4260 if (pf[0] >= -
kFdel)
goto L110;
4261 if (pf[1] >= -
kFdel)
goto L120;
4262 if (pf[2] >= -
kFdel)
goto L120;
4263 if (pf[3] >= -
kFdel)
goto L120;
4264 if (pf[4] >= -
kFdel)
goto L120;
4265 if (pf[5] >= -
kFdel)
goto L120;
4266 if (pf[6] >= -
kFdel)
goto L120;
4267 if (pf[7] >= -
kFdel)
goto L120;
4270 if (pf[1] < -
kFdel)
goto L120;
4271 if (pf[2] < -
kFdel)
goto L120;
4272 if (pf[3] < -
kFdel)
goto L120;
4273 if (pf[4] < -
kFdel)
goto L120;
4274 if (pf[5] < -
kFdel)
goto L120;
4275 if (pf[6] < -
kFdel)
goto L120;
4276 if (pf[7] < -
kFdel)
goto L120;
4291 pn[0][0] = (pf[1] - pf[0]) / dx;
4292 pn[3][0] = (pf[2] - pf[3]) / dx;
4293 pn[4][0] = (pf[5] - pf[4]) / dx;
4294 pn[7][0] = (pf[6] - pf[7]) / dx;
4296 pn[0][0] = (pf[1] - f3->
Eval(
x1-dx,y1,z1)) / (dx + dx);
4297 pn[3][0] = (pf[2] - f3->
Eval(
x1-dx,y2,z1)) / (dx + dx);
4298 pn[4][0] = (pf[5] - f3->
Eval(
x1-dx,y1,z2)) / (dx + dx);
4299 pn[7][0] = (pf[6] - f3->
Eval(
x1-dx,y2,z2)) / (dx + dx);
4302 pn[1][0] = (pf[1] - pf[0]) / dx;
4303 pn[2][0] = (pf[2] - pf[3]) / dx;
4304 pn[5][0] = (pf[5] - pf[4]) / dx;
4305 pn[6][0] = (pf[6] - pf[7]) / dx;
4307 pn[1][0] = (f3->
Eval(
x2+dx,y1,z1) - pf[0]) / (dx + dx);
4308 pn[2][0] = (f3->
Eval(
x2+dx,y2,z1) - pf[3]) / (dx + dx);
4309 pn[5][0] = (f3->
Eval(
x2+dx,y1,z2) - pf[4]) / (dx + dx);
4310 pn[6][0] = (f3->
Eval(
x2+dx,y2,z2) - pf[7]) / (dx + dx);
4314 pn[0][1] = (pf[3] - pf[0]) / dy;
4315 pn[1][1] = (pf[2] - pf[1]) / dy;
4316 pn[4][1] = (pf[7] - pf[4]) / dy;
4317 pn[5][1] = (pf[6] - pf[5]) / dy;
4319 pn[0][1] = (pf[3] - f3->
Eval(
x1,y1-dy,z1)) / (dy + dy);
4320 pn[1][1] = (pf[2] - f3->
Eval(
x2,y1-dy,z1)) / (dy + dy);
4321 pn[4][1] = (pf[7] - f3->
Eval(
x1,y1-dy,z2)) / (dy + dy);
4322 pn[5][1] = (pf[6] - f3->
Eval(
x2,y1-dy,z2)) / (dy + dy);
4325 pn[2][1] = (pf[2] - pf[1]) / dy;
4326 pn[3][1] = (pf[3] - pf[0]) / dy;
4327 pn[6][1] = (pf[6] - pf[5]) / dy;
4328 pn[7][1] = (pf[7] - pf[4]) / dy;
4330 pn[2][1] = (f3->
Eval(
x2,y2+dy,z1) - pf[1]) / (dy + dy);
4331 pn[3][1] = (f3->
Eval(
x1,y2+dy,z1) - pf[0]) / (dy + dy);
4332 pn[6][1] = (f3->
Eval(
x2,y2+dy,z2) - pf[5]) / (dy + dy);
4333 pn[7][1] = (f3->
Eval(
x1,y2+dy,z2) - pf[4]) / (dy + dy);
4337 pn[0][2] = (pf[4] - pf[0]) / dz;
4338 pn[1][2] = (pf[5] - pf[1]) / dz;
4339 pn[2][2] = (pf[6] - pf[2]) / dz;
4340 pn[3][2] = (pf[7] - pf[3]) / dz;
4342 pn[0][2] = (pf[4] - f3->
Eval(
x1,y1,z1-dz)) / (dz + dz);
4343 pn[1][2] = (pf[5] - f3->
Eval(
x2,y1,z1-dz)) / (dz + dz);
4344 pn[2][2] = (pf[6] - f3->
Eval(
x2,y2,z1-dz)) / (dz + dz);
4345 pn[3][2] = (pf[7] - f3->
Eval(
x1,y2,z1-dz)) / (dz + dz);
4348 pn[4][2] = (pf[4] - pf[0]) / dz;
4349 pn[5][2] = (pf[5] - pf[1]) / dz;
4350 pn[6][2] = (pf[6] - pf[2]) / dz;
4351 pn[7][2] = (pf[7] - pf[3]) / dz;
4353 pn[4][2] = (f3->
Eval(
x1,y1,z2+dz) - pf[0]) / (dz + dz);
4354 pn[5][2] = (f3->
Eval(
x2,y1,z2+dz) - pf[1]) / (dz + dz);
4355 pn[6][2] = (f3->
Eval(
x2,y2,z2+dz) - pf[2]) / (dz + dz);
4356 pn[7][2] = (f3->
Eval(
x1,y2,z2+dz) - pf[3]) / (dz + dz);
4359 MarchingCube(fsurf, p, pf, pn, nnod, ntria, xyz, grad, itria);
4360 if (ntria == 0)
goto L510;
4362 for ( i=1 ; i<=nnod ; i++ ) {
4363 view->
WCtoNDC(&xyz[i-1][0], &xyzn[i-1][0]);
4367 ZDepth(xyzn, ntria, itria, dtria, abcd, (
Int_t*)iorder);
4368 if (ntria == 0)
goto L510;
4370 if (*chopt ==
'B' || *chopt ==
'b') incr =-1;
4372 if (incr == -1) i1 = ntria;
4373 i2 = ntria - i1 + 1;
4376 if(
x2<=fgF3XClip && y2 <=fgF3YClip && z2>=fgF3ZClip)
goto L510;
4379 for (i=i1; incr < 0 ? i >= i2 : i <= i2; i += incr) {
4415 static Int_t irota[24][8] = { { 1,2,3,4,5,6,7,8 }, { 2,3,4,1,6,7,8,5 },
4416 { 3,4,1,2,7,8,5,6 }, { 4,1,2,3,8,5,6,7 },
4417 { 6,5,8,7,2,1,4,3 }, { 5,8,7,6,1,4,3,2 },
4418 { 8,7,6,5,4,3,2,1 }, { 7,6,5,8,3,2,1,4 },
4419 { 2,6,7,3,1,5,8,4 }, { 6,7,3,2,5,8,4,1 },
4420 { 7,3,2,6,8,4,1,5 }, { 3,2,6,7,4,1,5,8 },
4421 { 5,1,4,8,6,2,3,7 }, { 1,4,8,5,2,3,7,6 },
4422 { 4,8,5,1,3,7,6,2 }, { 8,5,1,4,7,6,2,3 },
4423 { 5,6,2,1,8,7,3,4 }, { 6,2,1,5,7,3,4,8 },
4424 { 2,1,5,6,3,4,8,7 }, { 1,5,6,2,4,8,7,3 },
4425 { 4,3,7,8,1,2,6,5 }, { 3,7,8,4,2,6,5,1 },
4426 { 7,8,4,3,6,5,1,2 }, { 8,4,3,7,5,1,2,6 } };
4428 static Int_t iwhat[21] = { 1,3,5,65,50,67,74,51,177,105,113,58,165,178,
4429 254,252,250,190,205,188,181 };
4430 Int_t j, i, i1, i2, i3, ir, irt=0, k, k1, k2, incr, icase=0,
n;
4437 for ( i=1; i<=8 ; i++) {
4438 fF8[i-1] =
f[i-1] - fiso;
4440 for ( ir=1 ; ir<=24 ; ir++ ) {
4443 for ( i=1 ; i<=8 ; i++ ) {
4444 if (
fF8[irota[ir-1][i-1]-1] >= 0.) k = k + incr;
4447 if (k==0 || k==255)
return;
4448 for ( i=1 ; i<=21 ; i++ ) {
4449 if (k != iwhat[i-1])
continue;
4458 for ( i=1 ; i<=8 ; i++ ) {
4459 k = irota[irt-1][i-1];
4460 fF8[i-1] =
f[k-1] - fiso;
4461 fP8[i-1][0] = p[k-1][0];
4462 fP8[i-1][1] = p[k-1][1];
4463 fP8[i-1][2] = p[k-1][2];
4464 fG8[i-1][0] =
g[k-1][0];
4465 fG8[i-1][1] =
g[k-1][1];
4466 fG8[i-1][2] =
g[k-1][2];
4471 switch ((
int)icase) {
4474 MarchingCubeCase00(1, 4, 9, 0, 0, 0, nnod, ntria, xyz, grad, itria);
4478 MarchingCubeCase00(2, 4, 9, 10, 0, 0, nnod, ntria, xyz, grad, itria);
4490 MarchingCubeCase00(6, 2, 1, 9, 8, 0, nnod, ntria, xyz, grad, itria);
4501 MarchingCubeCase00(2, 4, 8, 6, 0, 0, nnod, ntria, xyz, grad, itria);
4504 MarchingCubeCase00(1, 4, 12, 7, 6, 10, nnod, ntria, xyz, grad, itria);
4510 MarchingCubeCase00(1, 4, 8, 7, 11, 10, nnod, ntria, xyz, grad, itria);
4519 MarchingCubeCase00(1, 9, 12, 7, 6, 2, nnod, ntria, xyz, grad, itria);
4525 if (ntria == 0)
return;
4526 if (icase <= 14)
goto L500;
4527 for ( i=1; i<=ntria ; i++ ) {
4531 if (itria[i-1][2] < 0) i1 =-i1;
4532 if (itria[i-1][1] < 0) i3 =-i3;
4533 if (itria[i-1][0] < 0) i2 =-i2;
4543 if (
n > ntria)
return;
4544 for ( i=1 ; i<=3 ; i++ ) {
4547 if (i2 == 4) i2 = 1;
4554 if (i3 == 0) i3 = 3;
4561 for ( i=1 ; i<=3 ; i++ ) {
4562 itr[i-1] = itria[
n-1][i-1];
4563 itria[
n-1][i-1] = itria[ntria-1][i-1];
4566 if (ntria == 0)
return;
4567 if (itr[i2-1]*itr[i3-1] > 0)
goto L510;
4570 if (itr[i2-1] < 0) {
4574 if (itr[i3-1] < 0) {
4578 for ( j=1 ; j<=ntria ; j++ ) {
4579 for ( i=1 ; i<=3 ; i++ ) {
4580 if (itria[j-1][i-1] != k2)
continue;
4583 if (i2 == k1) itria[j-1][i-1] =-itria[j-1][i-1];
4604 static Int_t it[4][4][3] = { { { 1,2, 3 }, { 0,0, 0 }, { 0,0, 0 }, { 0,0, 0 } },
4605 { { 1,2,-3 }, {-1,3, 4 }, { 0,0, 0 }, { 0,0, 0 } },
4606 { { 1,2,-3 }, {-1,3,-4 }, {-1,4, 5 }, { 0,0, 0 } },
4607 { { 1,2,-3 }, {-1,3,-4 }, {-4,6,-1 }, { 4,5,-6 } }
4609 Int_t it2[4][3], i, j;
4621 if (ie[5] == 0) nnod = 5;
4622 if (ie[4] == 0) nnod = 4;
4623 if (ie[3] == 0) nnod = 3;
4629 for ( i=0; i<3 ; i++) {
4630 for ( j=0; j<4 ; j++) {
4631 it2[j][i] = it[ntria-1][j][i];
4644 static Int_t ie[6] = { 4,9,1, 2,11,3 };
4645 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4646 static Int_t it2[4][3] = { { 1,2,-5 }, { -1,5,6 }, { 5,-2,4 }, { -4,2,3 } };
4654 if (f0>=0. &&
fF8[0]>=0.)
goto L100;
4655 if (f0<0. &&
fF8[0]<0.)
goto L100;
4673 static Int_t ie[6] = { 4,9,1, 7,11,6 };
4674 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4675 static Int_t it2[6][3] = { { 1,2,4 }, { 2,3,6 }, { 3,1,5 },
4676 { 4,5,1 }, { 5,6,3 }, { 6,4,2 } };
4703 static Int_t ie[7] = { 2,4,9,10, 6,7,11 };
4704 static Int_t it1[5][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 } };
4705 static Int_t it2[3][3] = { { 1,2,-3 }, { -1,3,4 }, { 5,6,7 } };
4706 static Int_t it3[7][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 },
4707 { 1,7,-5 }, { -1,5,4 } };
4715 if (f0>=0. &&
fF8[1]>=0.)
goto L100;
4716 if (f0<0. &&
fF8[1]<0.)
goto L100;
4745 static Int_t ie[9] = { 3,12,4, 1,10,2, 11,6,7 };
4746 static Int_t it[9][9][3] = {
4747 {{ 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}},
4748 {{ 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}},
4749 {{ 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}},
4750 {{-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}},
4751 {{ 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}},
4752 {{-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}},
4753 {{ 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}},
4754 {{ 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}},
4755 {{ -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}}
4758 Int_t it2[9][3], i, j;
4769 if (
f1>=0. &&
fF8[2] <0.) icase = icase + 1;
4770 if (
f1 <0. &&
fF8[2]>=0.) icase = icase + 1;
4771 if (f2>=0. &&
fF8[2] <0.) icase = icase + 2;
4772 if (f2 <0. &&
fF8[2]>=0.) icase = icase + 2;
4773 if (f3>=0. &&
fF8[2] <0.) icase = icase + 4;
4774 if (f3 <0. &&
fF8[2]>=0.) icase = icase + 4;
4777 switch ((
int)icase) {
4798 for ( i=0; i<3 ; i++) {
4799 for ( j=0; j<9 ; j++) {
4800 it2[j][i] = it[icase-1][j][i];
4810 if (irep != 2)
goto L400;
4817 for ( i=0; i<3 ; i++) {
4818 for ( j=0; j<9 ; j++) {
4819 it2[j][i] = it[icase-1][j][i];
4833 static Int_t ie[8] = { 1,3,12,9, 5,7,11,10 };
4834 static Int_t it[6][8][3] = {
4835 {{1,2,-3}, {-1,3,4}, {5,6,-7}, {-5,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4836 {{ 9,1,2}, { 9,2,3}, { 9,3,4}, { 9,4,5}, { 9,5,6}, { 9,6,7}, { 9,7,8}, { 9,8,1}},
4837 {{ 9,1,2}, { 9,4,1}, { 9,3,4}, { 9,6,3}, { 9,5,6}, { 9,8,5}, { 9,7,8}, { 9,2,7}},
4838 {{1,2,-7}, {-1,7,8}, {5,6,-3}, {-5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4839 {{1,2,-7}, {-1,7,8}, {2,3,-6}, {-2,6,7}, {3,4,-5}, {-3,5,6}, {4,1,-8}, {-4,8,5}},
4840 {{1,2,-3}, {-1,3,4}, {2,7,-6}, {-2,6,3}, {7,8,-5}, {-7,5,6}, {8,1,-4}, {-8,4,5}}
4842 Int_t it2[8][3], i, j;
4852 if (
f1 >= 0.) icase = icase + 1;
4853 if (f2 >= 0.) icase = icase + 2;
4854 if (icase==1 || icase==4)
goto L100;
4860 for ( i=0; i<3 ; i++) {
4861 for ( j=0; j<8 ; j++) {
4862 it2[j][i] = it[icase-1][j][i];
4873 if (irep == 0)
goto L200;
4876 if (icase == 1) icase = 5;
4877 if (icase == 4) icase = 6;
4882 for ( i=0; i<3 ; i++) {
4883 for ( j=0; j<8 ; j++) {
4884 it2[j][i] = it[icase-1][j][i];
4898 static Int_t ie[8] = { 3,12,4, 1,9,8,6,2 };
4899 static Int_t it[6][8][3] = {
4900 {{ 1,2,3}, {4,5,-6}, {-4,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4901 {{-9,1,2}, {9,2,-3}, {-9,3,4}, {9,4,-5}, {-9,5,6}, {9,6,-7}, {-9,7,8}, {9,8,-1}},
4902 {{9,1,-2}, {-9,2,6}, {9,6,-7}, {-9,7,8}, {9,8,-4}, {-9,4,5}, {9,5,-3}, {-9,3,1}},
4903 {{ 3,4,5}, {1,2,-6}, {-1,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4904 {{ 7,8,6}, {6,8,-1}, {-6,1,2}, {3,1,-8}, {-3,8,4}, { 3,4,5}, {3,5,-6}, {-3,6,2}},
4905 {{ 7,8,6}, {6,8,-4}, {-6,4,5}, {3,4,-8}, {-3,8,1}, { 3,1,2}, {3,2,-6}, {-3,6,5}}
4907 Int_t it2[8][3], i, j;
4917 if (
f1 >= 0.) icase = icase + 1;
4918 if (f2 >= 0.) icase = icase + 2;
4919 if (icase==1 || icase==4)
goto L100;
4925 for ( i=0; i<3 ; i++) {
4926 for ( j=0; j<8 ; j++) {
4927 it2[j][i] = it[icase-1][j][i];
4938 if (irep != 1)
goto L200;
4941 if (icase == 1) icase = 5;
4942 if (icase == 4) icase = 6;
4947 for ( i=0; i<3 ; i++) {
4948 for ( j=0; j<8 ; j++) {
4949 it2[j][i] = it[icase-1][j][i];
4963 Int_t nr, nf, i, k, incr,
n, kr, icase, irep;
4964 static Int_t irota[12][8] = {
4965 {1,2,3,4,5,6,7,8}, {1,5,6,2,4,8,7,3}, {1,4,8,5,2,3,7,6},
4966 {3,7,8,4,2,6,5,1}, {3,2,6,7,4,1,5,8}, {3,4,1,2,7,8,5,6},
4967 {6,7,3,2,5,8,4,1}, {6,5,8,7,2,1,4,3}, {6,2,1,5,7,3,4,8},
4968 {8,4,3,7,5,1,2,6}, {8,5,1,4,7,6,2,3}, {8,7,6,5,4,3,2,1} };
4969 static Int_t iwhat[8] = { 63,62,54,26,50,9,1,0 };
4970 static Int_t ie[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
4971 static Int_t iface[6][4] = {
4972 {1,2,3,4}, {5,6,7,8}, {1,2,6,5}, {2,6,7,3}, {4,3,7,8}, {1,5,8,4} };
4973 static Int_t it1[4][3] = { {1,2,10}, {9,5,8}, {6,11,7}, {3,4,12} };
4974 static Int_t it2[4][3] = { {5,6,10}, {1,4,9}, {2,11,3}, {7,8,12} };
4975 static Int_t it3[6][3] = { {10,12,-3}, {-10,3,2}, {12,10,-1}, {-12,1,4},
4976 {9,5,8}, {6,11,7} };
4977 static Int_t it4[6][3] = { {11,9,-1}, {-11,1,2}, {9,11,-3}, {-9,3,4},
4978 {5,6,10}, {7,8,12} };
4979 static Int_t it5[10][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4980 {13,10,1}, {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2}, {5,8,9} };
4981 static Int_t it6[10][3] = { {13,2,-10}, {-13,10,5}, {13,5,-6}, {-13,6,11},
4982 {13,11,3}, {13,3,-4}, {-13,4,9}, {13,9,-1}, {-13,1,2}, {12,7,8} };
4983 static Int_t it7[12][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4984 {13,10,-5}, {-13,5,8}, {13,8,-9}, {-13,9,1},
4985 {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2} };
4986 static Int_t it8[6][3] = { {3,8,12}, {3,-2,-8}, {-2,5,-8}, {2,10,-5},
4987 {7,6,11}, {1,4,9} };
4988 static Int_t it9[10][3] = { {7,12,-3}, {-7,3,11}, {11,3,2}, {6,11,-2}, {-6,2,10},
4989 {6,10,5}, {7,6,-5}, {-7,5,8}, {7,8,12}, {1,4,9} };
4990 static Int_t it10[10][3] = { {9,1,-10}, {-9,10,5}, {9,5,8}, {4,9,-8}, {-4,8,12},
4991 {4,12,3}, {1,4,-3}, {-1,3,2}, {1,2,10}, {7,6,11} };
4997 for ( nr=1 ; nr<=12 ; nr++ ) {
5000 for ( nf=1 ; nf<=6 ; nf++ ) {
5001 f1 =
fF8[irota[nr-1][iface[nf-1][0]-1]-1];
5002 f2 =
fF8[irota[nr-1][iface[nf-1][1]-1]-1];
5003 f3 =
fF8[irota[nr-1][iface[nf-1][2]-1]-1];
5004 f4 =
fF8[irota[nr-1][iface[nf-1][3]-1]-1];
5005 if ((
f1*f3-f2*f4)/(
f1+f3-f2-f4) >= 0.) k = k + incr;
5008 for ( i=1 ; i<=8 ; i++ ) {
5009 if (k != iwhat[i-1])
continue;
5015 Error(
"MarchingCubeCase13",
"configuration is not found");
5020 if (icase==1 || icase==8)
goto L300;
5021 for (
n=1 ;
n<=8 ;
n++) {
5022 k = irota[kr-1][
n-1];
5024 for ( i=1 ; i<=3 ; i++ ) {
5025 xyz[
n-1][i-1] =
fP8[k-1][i-1];
5026 grad[
n-1][i-1] =
fG8[k-1][i-1];
5029 for (
n=1 ;
n<=8 ;
n++ ) {
5031 for ( i=1 ; i<=3 ; i++ ) {
5032 fP8[
n-1][i-1] = xyz[
n-1][i-1];
5033 fG8[
n-1][i-1] = grad[
n-1][i-1];
5043 switch ((
int)icase) {
5064 &xyz[nnod-1][0], &grad[nnod-1][0]);
5071 &xyz[nnod-1][0], &grad[nnod-1][0]);
5078 &xyz[nnod-1][0], &grad[nnod-1][0]);
5085 switch ((
int)(irep+1)) {
5114 for (
n=1 ;
n<=ntria ;
n++ ) {
5115 for ( i=1 ; i<=3 ; i++ ) {
5117 itria[
n-1][i-1] = k;
5141 for ( i=1 ; i<=3 ; i++ ) {
5145 for (
n=1 ;
n<=nnod ;
n++ ) {
5148 for ( i=1 ; i<=3 ; i++ ) {
5149 p[i-1] = p[i-1] + xyz[k-1][i-1];
5150 g[i-1] =
g[i-1] + grad[k-1][i-1];
5153 for ( i=1 ; i<=3 ; i++ ) {
5154 pxyz[i-1] = p[i-1] / nnod;
5155 pgrad[i-1] =
g[i-1] / nnod;
5177 a = (a11-a01)*(b00-b10) - (a00-a10)*(b11-b01);
5178 if (
a == 0.)
return;
5179 b = a01*(b00-b10)-(a11-a01)*b00-(a00-a10)*b01+a00*(b11-b01);
5180 c = a00*b01 - a01*b00;
5182 if (
d <= 0.)
return;
5185 s1 = (-
b+
d) / (2*
a);
5186 if (s1<0. || s1>1.)
return;
5188 s2 = (-
b-
d) / (2*
a);
5189 if (s2<0. || s2>1.)
return;
5193 if (a00 >= 0) iposa = iposa + 1;
5194 if (a01 >= 0) iposa = iposa + 2;
5195 if (a10 >= 0) iposa = iposa + 4;
5196 if (a11 >= 0) iposa = iposa + 8;
5197 if (iposa==6 || iposa==9)
goto L100;
5203 s0 = (a00-a01) / (a00+a11-a10-a01);
5204 if (
s1>=
s0 && s2<
s0)
return;
5205 if (s1<s0 && s2>=
s0)
return;
5207 if (
s1 >=
s0) irep = 2;
5211 if (b00 >= 0) iposb = iposb + 1;
5212 if (b01 >= 0) iposb = iposb + 2;
5213 if (b10 >= 0) iposb = iposb + 4;
5214 if (b11 >= 0) iposb = iposb + 8;
5215 if (iposb!=6 && iposb!=9)
return;
5216 s0 = (b00-b01) / (b00+b11-b10-b01);
5217 if (iposa != iposb)
goto L200;
5219 if (irep==1 &&
s1>
s0)
return;
5220 if (irep==2 &&
s1<
s0)
return;
5225 if (irep==1 &&
s1<
s0)
return;
5226 if (irep==2 &&
s1>
s0)
return;
5245 static Int_t iedge[12][2] = {
5246 {1,2}, {2,3}, {3,4}, {4,1}, {5,6}, {6,7}, {7,8}, {8,5}, {1,5}, {2,6}, {3,7}, {4,8} };
5248 for (
n=1 ;
n<=nnod ;
n++ ) {
5254 for ( i=1 ; i<=3 ; i++ ) {
5255 xyz[
n-1][i-1] = (
fP8[n2-1][i-1]-
fP8[n1-1][i-1])*t +
fP8[n1-1][i-1];
5256 grad[
n-1][i-1] = (
fG8[n2-1][i-1]-
fG8[n1-1][i-1])*t +
fG8[n1-1][i-1];
5277 Int_t n, nf, i1, i2, i3, i, icur, k, itst, kface, kf, irep;
5287 for (
n=1 ;
n<=nface ;
n++ ) {
5311 for ( i=1 ; i<=3 ; i++ ) {
5312 wmin = xyz[i1-1][i-1];
5313 wmax = xyz[i1-1][i-1];
5314 if (wmin > xyz[i2-1][i-1]) wmin = xyz[i2-1][i-1];
5315 if (wmax < xyz[i2-1][i-1]) wmax = xyz[i2-1][i-1];
5316 if (wmin > xyz[i3-1][i-1]) wmin = xyz[i3-1][i-1];
5317 if (wmax < xyz[i3-1][i-1]) wmax = xyz[i3-1][i-1];
5318 dface[
n-1][i-1] = wmin;
5319 dface[
n-1][i+2] = wmax;
5322 for ( i=1 ; i<=3 ; i++ ) {
5323 v[0][i-1] = xyz[i2-1][i-1] - xyz[i1-1][i-1];
5324 v[1][i-1] = xyz[i3-1][i-1] - xyz[i2-1][i-1];
5326 a = (
v[0][1]*
v[1][2] -
v[0][2]*
v[1][1]);
5327 b = (
v[0][2]*
v[1][0] -
v[0][0]*
v[1][2]);
5328 c = (
v[0][0]*
v[1][1] -
v[0][1]*
v[1][0]);
5337 abcd[
n-1][3] =-(
a*xyz[i1-1][0] +
b*xyz[i1-1][1] +
c*xyz[i1-1][2]);
5340 if (nf <= 1)
return;
5343 for ( icur=2 ; icur<=nface ; icur++ ) {
5345 zcur = dface[k-1][2];
5346 for ( itst=icur-1 ; itst>=1 ; itst-- ) {
5348 if (zcur < dface[k-1][2])
break;
5350 iorder[itst-1] = iorder[itst];
5358 if (kface == 1)
goto L900;
5359 nf = iorder[kface-1];
5360 if (nf < 0) nf =-nf;
5361 abcdn[0] = abcd[nf-1][0];
5362 abcdn[1] = abcd[nf-1][1];
5363 abcdn[2] = abcd[nf-1][2];
5364 abcdn[3] = abcd[nf-1][3];
5370 for ( k=kface-1 ; k>=1 ; k-- ) {
5372 if (kf < 0) kf =-kf;
5373 if (dface[nf-1][5] > dface[kf-1][2]+
kDel)
goto L400;
5374 if (iorder[k-1] > 0)
goto L900;
5379 if (dface[kf-1][0] >= dface[nf-1][3]-
kDel)
goto L800;
5380 if (dface[kf-1][3] <= dface[nf-1][0]+
kDel)
goto L800;
5381 if (dface[kf-1][1] >= dface[nf-1][4]-
kDel)
goto L800;
5382 if (dface[kf-1][4] <= dface[nf-1][1]+
kDel)
goto L800;
5388 if (abcdn[0]*xyz[kk[0]-1][0]+abcdn[1]*xyz[kk[0]-1][1]+
5389 abcdn[2]*xyz[kk[0]-1][2]+abcdn[3] < -
kDel)
goto L500;
5390 if (abcdn[0]*xyz[kk[1]-1][0]+abcdn[1]*xyz[kk[1]-1][1]+
5391 abcdn[2]*xyz[kk[1]-1][2]+abcdn[3] < -
kDel)
goto L500;
5392 if (abcdn[0]*xyz[kk[2]-1][0]+abcdn[1]*xyz[kk[2]-1][1]+
5393 abcdn[2]*xyz[kk[2]-1][2]+abcdn[3] < -
kDel)
goto L500;
5398 abcdk[0] = abcd[kf-1][0];
5399 abcdk[1] = abcd[kf-1][1];
5400 abcdk[2] = abcd[kf-1][2];
5401 abcdk[3] = abcd[kf-1][3];
5402 if (abcdk[0]*xyz[nn[0]-1][0]+abcdk[1]*xyz[nn[0]-1][1]+
5403 abcdk[2]*xyz[nn[0]-1][2]+abcdk[3] >
kDel)
goto L600;
5404 if (abcdk[0]*xyz[nn[1]-1][0]+abcdk[1]*xyz[nn[1]-1][1]+
5405 abcdk[2]*xyz[nn[1]-1][2]+abcdk[3] >
kDel)
goto L600;
5406 if (abcdk[0]*xyz[nn[2]-1][0]+abcdk[1]*xyz[nn[2]-1][1]+
5407 abcdk[2]*xyz[nn[2]-1][2]+abcdk[3] >
kDel)
goto L600;
5413 for ( i=1 ; i<=3 ; i++ ) {
5416 if (i != 3) i2 = kk[i];
5418 if ( irep<0 )
goto L700;
5419 if ( irep==0 )
continue;
5420 if ( irep>0 )
goto L800;
5423 for ( i=1 ; i<=3 ; i++ ) {
5426 if (i != 3) i2 = nn[i];
5428 if ( irep<0 )
goto L800;
5429 if ( irep==0 )
continue;
5430 if ( irep>0 )
goto L700;
5437 for ( i=k+1 ; i<=kface ; i++ ) {
5438 iorder[i-2] = iorder[i-1];
5440 iorder[kface-1] =-kf;
5441 if (kf > 0)
goto L300;
5449 if (iorder[kface-1] < 0) iorder[kface-1] =-iorder[kface-1];
5451 if (kface > 0)
goto L300;
5469 Int_t k, k1, k2, ixy, i;
5470 Double_t a,
b,
c, d1, d2, dd,
xy, tmin, tmax, tmid,
x,
y, z;
5476 delta[0] = xyz[i2-1][0] - xyz[i1-1][0];
5477 delta[1] = xyz[i2-1][1] - xyz[i1-1][1];
5478 delta[2] = xyz[i2-1][2] - xyz[i1-1][2];
5484 c =-(
a*xyz[i1-1][0] +
b*xyz[i1-1][1]);
5485 d[0] =
a*xyz[iface[0]-1][0] +
b*xyz[iface[0]-1][1] +
c;
5486 d[1] =
a*xyz[iface[1]-1][0] +
b*xyz[iface[1]-1][1] +
c;
5487 d[2] =
a*xyz[iface[2]-1][0] +
b*xyz[iface[2]-1][1] +
c;
5489 for ( i=1 ; i<=3 ; i++ ) {
5493 if (
d[k1-1]>=0. &&
d[k2-1]>=0.)
continue;
5494 if (
d[k1-1] <0. &&
d[k2-1] <0.)
continue;
5495 d1 =
d[k1-1] / (
d[k1-1] -
d[k2-1]);
5496 d2 =
d[k2-1] / (
d[k1-1] -
d[k2-1]);
5497 xy = d1*xyz[iface[k2-1]-1][ixy-1] - d2*xyz[iface[k1-1]-1][ixy-1];
5499 t[k-1] = (
xy-xyz[i1-1][ixy-1]) / delta[ixy-1];
5500 if (k == 2)
goto L200;
5508 if (tmin>1. || tmax<0)
return;
5509 if (tmin < 0.) tmin = 0.;
5510 if (tmax > 1.) tmax = 1.;
5511 tmid = (tmin + tmax) / 2.;
5512 x = delta[0]*tmid + xyz[i1-1][0];
5513 y = delta[1]*tmid + xyz[i1-1][1];
5514 z = delta[2]*tmid + xyz[i1-1][2];
5515 dd = abcd[0]*
x + abcd[1]*
y + abcd[2]*z + abcd[3];
5516 if (dd > del)
goto L997;
5517 if (dd <-del)
goto L998;
5548 Double_t p0[3], p1[3], p2[3], p3[3], t[3];
5549 Double_t fsurf, w, d1, d2, df1, df2;
5551 Int_t i, i1, i2, j, ibase, nnod, knod, ntria, ktria, iopt, iready;
5552 Int_t ixcrit, iycrit, izcrit, incrx, incry, incrz, incr;
5553 Int_t ix, ix1=0, ix2=0, iy, iy1=0, iy2=0, iz, iz1=0, iz2=0, k, kx, ky, kz, isurf, nsurf;
5559 static Int_t ind[8][3] = { { 0,0,0 }, { 1,0,0 }, { 1,0,1 }, { 0,0,1 },
5560 { 0,1,0 }, { 1,1,0 }, { 1,1,1 }, { 0,1,1 } };
5571 Error(
"ImplicitFunction",
"no TView in current pad");
5576 if (nsurf >
kNiso) {
5577 Warning(
"IsoSurface",
"Number of iso-surfaces too large. Increase kNiso");
5580 if (*chopt ==
'B' || *chopt ==
'b') iopt = 1;
5604 if (p1[2] < p0[2]) ixcrit = 1;
5605 if (p2[2] < p0[2]) iycrit = 1;
5606 if (p3[2] < p0[2]) izcrit = 1;
5615 if (iopt == 1) iz1 = 1;
5616 if (iopt == 1) iz2 = izcrit-1;
5617 if (iopt == 2) iz1 = izcrit;
5618 if (iopt == 2) iz2 = nz - 1;
5620 if (iopt == 1) iz1 = nz - 1;
5621 if (iopt == 1) iz2 = izcrit;
5622 if (iopt == 2) iz1 = izcrit-1;
5623 if (iopt == 2) iz2 = 1;
5625 for (iz = iz1; incrz < 0 ? iz >= iz2 : iz <= iz2; iz += incrz) {
5628 if (iopt == 1) iy1 = 1;
5629 if (iopt == 1) iy2 = iycrit-1;
5630 if (iopt == 2) iy1 = iycrit;
5631 if (iopt == 2) iy2 = ny - 1;
5633 if (iopt == 1) iy1 = ny - 1;
5634 if (iopt == 1) iy2 = iycrit;
5635 if (iopt == 2) iy1 = iycrit-1;
5636 if (iopt == 2) iy2 = 1;
5638 for (iy = iy1; incry < 0 ? iy >= iy2 : iy <= iy2; iy += incry) {
5641 if (iopt == 1) ix1 = 1;
5642 if (iopt == 1) ix2 = ixcrit-1;
5643 if (iopt == 2) ix1 = ixcrit;
5644 if (iopt == 2) ix2 = nx - 1;
5646 if (iopt == 1) ix1 = nx - 1;
5647 if (iopt == 1) ix2 = ixcrit;
5648 if (iopt == 2) ix1 = ixcrit-1;
5649 if (iopt == 2) ix2 = 1;
5651 for (ix = ix1; incrx < 0 ? ix >= ix2 : ix <= ix2; ix += incrx) {
5655 for ( isurf=1 ; isurf<=nsurf ; isurf++ ) {
5693 if (iready !=0)
goto L310;
5695 for ( i=1 ; i<=8 ; i++ ) {
5696 kx = ix + ind[i-1][0];
5697 ky = iy + ind[i-1][1];
5698 kz = iz + ind[i-1][2];
5699 p[i-1][0] =
x[kx-1];
5700 p[i-1][1] =
y[ky-1];
5701 p[i-1][2] = z[kz-1];
5708 }
else if (kx == nx) {
5713 d1 =
x[kx-1] -
x[kx-2];
5714 d2 =
x[kx] -
x[kx-1];
5724 pn[i-1][0] = (df1*d2*d2+df2*d1*d1)/(d1*d2*d2+d2*d1*d1);
5732 }
else if (ky == ny) {
5737 d1 =
y[ky-1] -
y[ky-2];
5738 d2 =
y[ky] -
y[ky-1];
5748 pn[i-1][1] = (df1*d2*d2+df2*d1*d1)/(d1*d2*d2+d2*d1*d1);
5756 }
else if (kz == nz) {
5761 d1 = z[kz-1] - z[kz-2];
5762 d2 = z[kz] - z[kz-1];
5772 pn[i-1][2] = (df1*d2*d2+df2*d1*d1)/(d1*d2*d2+d2*d1*d1);
5783 xyz_tmp, grad_tmp, itria_tmp);
5785 for(
l=0 ;
l<knod ;
l++) {
5786 xyz[nnod+
l][0] = xyz_tmp[
l][0];
5787 xyz[nnod+
l][1] = xyz_tmp[
l][1];
5788 xyz[nnod+
l][2] = xyz_tmp[
l][2];
5789 grad[nnod+
l][0] = grad_tmp[
l][0];
5790 grad[nnod+
l][1] = grad_tmp[
l][1];
5791 grad[nnod+
l][2] = grad_tmp[
l][2];
5793 for(
l=0 ;
l<ktria ;
l++) {
5794 itria[ntria+
l][0] = itria_tmp[
l][0];
5795 itria[ntria+
l][1] = itria_tmp[
l][1];
5796 itria[ntria+
l][2] = itria_tmp[
l][2];
5799 for ( i=ntria+1 ; i<=ntria+ktria ; i++ ) {
5800 for ( j=1 ; j<=3 ; j++ ){
5802 if (itria[i-1][j-1] < 0) ibase =-nnod;
5803 itria[i-1][j-1] = itria[i-1][j-1] + ibase;
5808 ntria = ntria + ktria;
5812 if (ntria == 0)
continue;
5813 for ( i=1 ; i<=nnod ; i++ ) {
5814 view->
WCtoNDC(&xyz[i-1][0], &xyzn[i-1][0]);
5818 ZDepth(xyzn, ntria, itria, dtria, abcd, (
Int_t*)iorder);
5819 if (ntria == 0)
continue;
5821 if (iopt == 1) incr = -1;
5823 if (incr == -1) i1 = ntria;
5824 i2 = ntria - i1 + 1;
5825 for (i = i1; incr < 0 ? i >= i2 : i <= i2; i += incr) {
5830 icodes[0] = iattr[k-1];
5831 icodes[1] = iattr[k-1];
5832 icodes[2] = iattr[k-1];
5837 if (incrx < 0)
goto L130;
5840 if (incry < 0)
goto L120;
5843 if (incrz < 0)
goto L110;
5860 Error(
"ImplicitFunction",
"no TView in current pad");
5867 for ( i=1 ; i<=np ; i++) {
5870 view->
WCtoNDC(&xyz[k-1][0], &p3[i-1][0]);
static const double x2[5]
static const double x1[5]
include TDocParser_001 C image html pict1_TDocParser_001 png width
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.
R__EXTERN TH1 * gCurrentHist
R__EXTERN Hoption_t Hoption
static Int_t gEdgeColor[kVSizeMax+1]
static Double_t gV[kVSizeMax]
static Int_t gEdgeStyle[kVSizeMax+1]
const Int_t kF3FillColor2
static Int_t gColorDark[kVSizeMax+1]
static Int_t gEdgeWidth[kVSizeMax+1]
static Double_t gTT[4 *kVSizeMax]
static Int_t gColorMain[kVSizeMax+1]
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 void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
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 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.
A 3-Dim function with parameters.
virtual const Double_t * GetClippingBox() const
TH1 is the base class of all histogram classes in ROOT.
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
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 from Ernst-Jan Buis.
virtual Bool_t IsInside(Int_t x, Int_t y)
Return kTRUE if the cell ix, iy is inside one of the graphical cuts.
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 from Ernst-Jan Buis.
static Int_t ProjectMercator2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
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.
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.
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]
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]
virtual ~TPainter3dAlgorithms()
Lego default destructor.
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.
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 * fRaster
Pointer to raster buffer.
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.
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.
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
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
static TView * CreateView(Int_t system=1, const Double_t *rmin=0, const Double_t *rmax=0)
Create a concrete default 3-d view via the plug-in manager.
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)
Double_t Sqrt(Double_t x)
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Short_t Min(Short_t a, Short_t b)
Double_t Log10(Double_t x)
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.