78 TList *stack =
nullptr;
88 for (i=0;i<3;i++) {
fRmin[i] = 0;
fRmax[i] = 1; }
89 for (i=0;i<4;i++) {
fYls[i] = 0; }
91 for (i=0;i<30;i++) {
fJmask[i] = 0; }
93 for (i=0;i<465;i++) {
fMask[i] = 0; }
95 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
96 for (i=0;i<200;i++) {
fT[i] = 0.; }
98 for (i=0;i<12;i++) {
fVls[i] = 0.; }
99 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
100 for (i=0;i<8;i++) {
fF8[i] = 0.; }
163 for (i=0;i<4;i++) {
fYls[i] = 0; }
165 for (i=0;i<30;i++) {
fJmask[i] = 0; }
167 for (i=0;i<465;i++) {
fMask[i] = 0; }
169 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
170 for (i=0;i<200;i++) {
fT[i] = 0.; }
172 for (i=0;i<12;i++) {
fVls[i] = 0.; }
173 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
174 for (i=0;i<8;i++) {
fF8[i] = 0.; }
227 Error(
"BackBox",
"no TView in current pad");
237 for (
Int_t i = 0; i < 8; ++i) {
238 r[i*3 + 0] =
av[i*3 + 0] +
av[i*3 + 1]*
cosa;
240 r[i*3 + 2] =
av[i*3 + 2];
270 Error(
"FrontBox",
"no TView in current pad");
280 for (
Int_t i = 0; i < 8; ++i) {
281 r[i*3 + 0] =
av[i*3 + 0] +
av[i*3 + 1]*
cosa;
283 r[i*3 + 2] =
av[i*3 + 2];
292 for (
Int_t i = 0; i < 4; ++i) {
297 gPad->PaintPolyLine(4,
x,
y);
298 for (
Int_t i = 0; i < 4; ++i) {
303 gPad->PaintPolyLine(4,
x,
y);
327 static const char *
where =
"ColorFunction";
342 for (
Int_t i = 1; i <
nl; ++i) {
343 if (
fl[i] <=
fl[i - 1]) {
350 for (
Int_t i = 0; i <
nl; ++i) {
372 Error(
"GridLevels",
"no TView in current pad");
378 Double_t binLow = 0, binHigh = 0, binWidth = 0;
384 binLow, binHigh, nbins, binWidth,
" ");
389 binWidth = (binHigh - binLow)/nbins;
416 for (
Int_t i = 0; i <
np; ++i) {
418 if (k < 0) { k = -k;
ifneg =
true; }
420 x[i] =
p3[0];
y[i] =
p3[1];
426 for (
Int_t i = 0; i <
np; ++i) {
427 z +=
y[i]*
x[i+1] -
x[i]*
y[i+1];
440 for (
Int_t i = 0; i <
np; ++i) {
441 if (
iface[i] > 0)
gPad->PaintPolyLine(2, &
x[i], &
y[i]);
464 for (
Int_t i = 0; i <
np; ++i) {
467 x[i] =
p3[i*3+0];
y[i] =
p3[i*3+1];
477 Double_t ttt[5] = { t[0], t[1], t[2], t[3], t[0] };
478 for (
Int_t i = 0; i<3; ++i) {
p3[3*4+i] =
p3[i]; }
494 x[1] =
x[2];
y[1] =
y[2];
495 gPad->PaintPolyLine(2, &
x[0], &
y[0]);
522 for (
Int_t i = 0; i <
np; ++i) {
525 x[i] =
p3[0];
y[i] =
p3[1];
569 for (
Int_t i = 0; i <
np; ++i) {
571 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
572 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
573 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
596 for (
Int_t it = 0; it <
fNT; ++it) {
602 gPad->PaintPolyLine(2,
x,
y);
617 for (
Int_t i = 0; i <
np; ++i) {
625 for (
Int_t it = 0; it <
fNT; ++it) {
631 gPad->PaintPolyLine(2,
x,
y);
636 for (
Int_t i = 0; i <
np; ++i) {
659 for (
Int_t i = 0; i <
np; ++i) {
661 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
662 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
663 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
678 for (
Int_t i = 0; i <
np; ++i) {
686 for (
Int_t it = 0; it <
fNT; ++it) {
692 gPad->PaintPolyLine(2,
x,
y);
697 for (
Int_t i = 0; i <
np; ++i) {
733 for (
Int_t i = 0; i <
np; ++i) {
735 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
736 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
737 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
754 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
755 if (
npol[kpol] == 0)
continue;
769 for (
Int_t it = 0; it <
fNT; ++it) {
775 gPad->PaintPolyLine(2,
x,
y);
781 for (
Int_t i = 0; i <
np; ++i) {
817 for (
Int_t i = 0; i <
np; ++i) {
819 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
820 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
821 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
838 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
839 if (
npol[kpol] == 0)
continue;
850 x[0] =
p1[0];
y[0] =
p1[1];
851 x[1] =
p2[0];
y[1] =
p2[1];
852 gPad->PaintPolyLine(2,
x,
y);
873 for (
Int_t i = 0; i <
np; ++i) {
876 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
877 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
878 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
905 for (
Int_t it = 0; it <
fNT; ++it) {
910 gPad->PaintPolyLine(2,
x,
y);
925 for (
Int_t i = 0; i <
np; ++i) {
926 if (
iface[i] < 0)
continue;
932 for (
Int_t it = 0; it <
fNT; ++it) {
937 gPad->PaintPolyLine(2,
x,
y);
961 for (
Int_t i = 0; i <
np; ++i) {
975 for (
Int_t i = 0; i <
np; ++i) {
976 if (
iface[i] < 0)
continue;
982 for (
Int_t it = 0; it <
fNT; ++it) {
987 gPad->PaintPolyLine(2,
x,
y);
1019 Error(
"FillPolygon",
"illegal number of vertices in polygon (%d)",
n);
1032 for (i = 2; i <=
np; ++i) {
1049 if (
fmin > f2)
continue;
1052 for (i = 1; i <=
np; ++i) {
1055 if (i ==
np)
i2 = 1;
1059 if (k < 3)
continue;
1060 for (i = 1; i <= k; ++i) {
1073 gPad->PaintFillArea(k,
x,
y);
1088 ib,
nb,
dx,
dy,
iw,
nx,
xx,
yy,
signdx,
nstart,
xx1,
xx2,
nxa,
nxb;
1099 for (i = 1; i <=
n; ++i) {
1110 for (i = 1; i <=
n; ++i) {
1113 if (
y1[i - 1] <=
y1[i]) {
x2[i - 1] =
x1[i];
y2[i - 1] =
y1[i];}
1115 x2[i - 1] =
x1[i - 1];
1116 y2[i - 1] =
y1[i - 1];
1122 if (
ymax < 0)
return;
1126 for (i = 1; i <
n; ++i) {
1127 if (
y1[i] >=
y1[i - 1])
continue;
1130 for (
j = i - 1;
j >= 1; --
j) {
1131 if (
y <
y1[
j - 1])
continue;
1138 for (
j = i;
j >= k; --
j) {
1151 for (i = 1; i <=
n; ++i) {
1153 dy =
y2[i - 1] -
y1[i - 1];
1154 dx =
x2[i - 1] -
x1[i - 1];
1159 t = -(
dy + 1) / 2 +
dx;
1167 }
else if (
dy != 0) {
1168 step = (
dx - 1) / (
dy +
dy) + 1;
1180 for (i =
nstart; i <=
n; ++i) {
1184 if (
y2[i - 1] !=
yscan)
continue;
1186 if (
x2[i - 1] >=
xcur[i - 1]) {
1199 dy =
y2[i - 1] -
y1[i - 1];
1200 dx =
x2[i - 1] -
x1[i - 1];
1220 if (
test[i - 1] < 0)
continue;
1226 t =
test[i - 1] + step*
dy;
1238 if (
yscan < 0)
continue;
1241 for (i = 1; i <
nxa; ++i) {
1242 for (
j = i;
j >= 1; --
j) {
1252 for (i = 1; i <=
nxa; i += 2) {
1324 for (
Int_t i = 1; i <
np; ++i) {
1325 if (t[i] < tmin) tmin = t[i];
1326 if (t[i] > tmax) tmax = t[i];
1339 for (
Int_t i = 0; i <
np; ++i) {
1344 if (
d1 == 0)
d1 = 1
e-99;
1345 if (
d2 == 0)
d2 = 1
e-99;
1346 if (
d1*
d2 > 0)
continue;
1358 Error(
"FindLevelLines",
"number of points for line not equal 2");
1400 kk = (
k1 + 2)*5 + (
k2 + 2) + 1;
1435 pp[
kpp*3 + 1] =
p1[1];
1436 pp[
kpp*3 + 2] =
p1[2];
1437 pp[
kpp*3 + 3] =
p1[3];
1463 pp[
kpp*3 + 1] =
p1[1];
1464 pp[
kpp*3 + 2] =
p1[2];
1465 pp[
kpp*3 + 3] =
p1[3];
1477 pp[
kpp*3 + 1] =
p1[1];
1478 pp[
kpp*3 + 2] =
p1[2];
1479 pp[
kpp*3 + 3] =
p1[3];
1550 Error(
"FindVisibleDraw",
"invalid TView in current pad");
1554 Error(
"FindVisibleDraw",
"no TView in current pad");
1583 for (i =
i1; i <=
i2 - 1; ++i) {
1637 if (
fNT + 1 >= 100)
break;
1639 if (
iv > 0)
fT[2*
fNT - 1] = 1;
1647 if (
y2 ==
y1) {
fNT = 0;
return;}
1657 if (dd >
fD[2*
i1 - 3]) dd =
fD[2*
i1 - 3];
1661 if (
y1 >= dd &&
y2 <=
uu) {
fNT = 0;
return;}
1677 if (
fNT == 0)
return;
1678 for (i = 1; i <=
fNT; ++i) {
1679 fT[2*i - 2] = 1 -
fT[2*i - 2];
1680 fT[2*i - 1] = 1 -
fT[2*i - 1];
1698 Int_t i,
incrx,
ivis,
x1,
y1,
x2,
y2,
ib,
kb,
dx,
dy,
iw, ix, iy,
ifinve,
dx2,
dy2;
1732 if (
x1 < 0 &&
x2 < 0)
return;
1762 if (iy < 0)
goto L110;
1764 if (ix < 0)
goto L110;
1769 if (
ivis > 0)
continue;
1775 if (
ivis == 0)
continue;
1792 for (iy =
y1; iy <=
y2; ++iy) {
1801 if (iy < 0)
goto L210;
1802 if (ix < 0)
goto L210;
1807 if (
ivis > 0)
continue;
1813 if (
ivis == 0)
continue;
1822 if (
nt == 0)
return;
1824 if (t[3] <=
dt) t[3] = 0;
1825 if (t[2*
nt + 2] >= 1 -
dt) t[2*
nt + 2] = 1;
1827 for (i = 1; i <=
nt; ++i) {
1830 t[2*i + 1] = 1 -
t2;
1831 t[2*i + 2] = 1 -
t1;
1881 for (
j = 1;
j <= 3; ++
j) {
1882 for (i = 1; i <= 3; ++i) {
1890 for (k = 1; k <= 4; ++k) {
1891 for (i = 1; i <= 3; ++i) {
1892 face[i + k*3] =
f[i + (k + 32)*3 - 52];
1897 for (
j = 1;
j <= 3; ++
j) {
1898 for (i = 1; i <= 3; ++i) {
1899 for (k = 1; k <= 4; ++k) {
1901 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1902 r =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52];
1905 z[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 49];
1907 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1908 r =
f[(k + ((i +
j*3) << 2))*3 - 49];
1911 z[k + ((i +
j*3) << 2) - 17] =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52];
1913 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1914 th =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1915 r =
f[(k + ((i +
j*3) << 2))*3 - 49];
1920 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1921 th =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1922 r =
f[(k + ((i +
j*3) << 2))*3 - 49];
1927 x[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 51];
1928 y[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 50];
1929 z[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 49];
1932 x1 =
x[((i +
j*3) << 2) - 14] -
x[((i +
j*3) << 2) - 16];
1933 x2 =
x[((i +
j*3) << 2) - 13] -
x[((i +
j*3) << 2) - 15];
1934 y1 =
y[((i +
j*3) << 2) - 14] -
y[((i +
j*3) << 2) - 16];
1935 y2 =
y[((i +
j*3) << 2) - 13] -
y[((i +
j*3) << 2) - 15];
1936 z1 = z[((i +
j*3) << 2) - 14] - z[((i +
j*3) << 2) - 16];
1937 z2 = z[((i +
j*3) << 2) - 13] - z[((i +
j*3) << 2) - 15];
1942 (i +
j*3)*3 - 11]*
an[(i +
j*3)*3 - 11] +
an[(i
1943 +
j*3)*3 - 10]*
an[(i +
j*3)*3 - 10]);
1945 an[(i +
j*3)*3 - 12] /= s;
1946 an[(i +
j*3)*3 - 11] /= s;
1947 an[(i +
j*3)*3 - 10] /= s;
1952 for (
j = 1;
j <= 2; ++
j) {
1953 for (i = 1; i <= 2; ++i) {
1954 for (k = 1; k <= 3; ++k) {
1955 bn[k + (i + 2*
j)*3 - 10] =
an[k + (i +
j*3)*3 - 13]
1956 +
an[k + (i + 1 +
j*3)*3 - 13] +
an[k + (i + 1 +
1957 (
j + 1)*3)*3 - 13] +
an[k + (i + (
j + 1)*3)*3 - 13];
2018 for (i = 1; i <= 30; ++i) {
2025 for (
nb = 2;
nb <= 30; ++
nb) {
2026 for (
ib = 1;
ib <= 30 -
nb + 1; ++
ib) {
2028 for (i =
ib; i <=
ib +
nb - 1; ++i) k = k |
fMask[i - 1];
2155 for (i = 2; i <=
nids + 1; ++i) {
2164 for (i = 2; i <=
nv; ++i) {
2180 if (
vv[i] <
vv[i - 1]) {
2192 for (i = 1; i <=
nv; ++i) {
2198 for (i = 1; i <=
nv; ++i) {
2199 for (
j = 1;
j <= 4; ++
j) t[
j + (i << 2)] =
vv[i];
2222 Error(
"LegoCartesian",
"no TView in current pad");
2261 if (!
painter->IsInside(ix,iy))
continue;
2271 for (
Int_t i = 1; i <= 4; ++i) {
2272 xyz[i*3 - 3] =
xy[2*i - 2];
2273 xyz[i*3 - 2] =
xy[2*i - 1];
2274 xyz[(i + 4)*3 - 3] = xyz[i*3 - 3];
2275 xyz[(i + 4)*3 - 2] = xyz[i*3 - 2];
2280 for (
Int_t i = 1; i <= 4; ++i) {
2281 xyz[i*3 - 1] =
v[
iv - 1];
2282 xyz[(i + 4)*3 - 1] =
v[
iv];
2284 if (
v[
iv - 1] ==
v[
iv])
continue;
2286 for (
Int_t i = 1; i <= 4; ++i) {
2287 if (
ivis[i - 1] == 0)
continue;
2309 for (
Int_t i = 1; i <= 4; ++i) {
2310 xyz[i*3 - 1] =
v[0];
2311 iface[i - 1] = 5 - i;
2325 for (
Int_t i = 1; i <= 4; ++i) {
2326 iface[i - 1] = i + 4;
2332 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2334 if (
v[
nv-1] ==
v[
iv-1]) {
2362 Int_t iphi,
jphi,
kphi,
incr,
nphi,
ivis[6],
iopt,
iphi1,
iphi2,
iface[4], i,
j;
2373 Error(
"LegoPolar",
"no TView in current pad");
2392 if (
fAphi.empty()) {
2393 Error(
"LegoPolar",
"failed to allocate array fAphi[%d]",
fNaphi);
2410 for (i = 1; i <=
nphi; ++i) {
2422 for (i = 1; i <=
nphi; ++i) {
2453 for (i = 1; i <= 4; ++i) {
2455 if (
iordr != 0 && i == 2)
j = 4;
2456 if (
iordr != 0 && i == 4)
j = 2;
2459 xyz[(
j + 4)*3 - 3] = xyz[
j*3 - 3];
2460 xyz[(
j + 4)*3 - 2] = xyz[
j*3 - 2];
2465 for (i = 1; i <= 4; ++i) {
2466 xyz[i*3 - 1] =
v[
iv - 1];
2467 xyz[(i + 4)*3 - 1] =
v[
iv];
2469 if (
v[
iv - 1] >=
v[
iv])
continue;
2471 for (i = 1; i <= 4; ++i) {
2472 if (
ivis[i - 1] == 0)
continue;
2476 if (xyz[
k1*3 - 3] == xyz[
k2*3 - 3] && xyz[
k1*3 - 2] ==
2477 xyz[
k2*3 - 2])
continue;
2496 for (i = 1; i <= 4; ++i) {
2497 xyz[i*3 - 1] =
v[0];
2498 iface[i - 1] = 5 - i;
2512 for (i = 1; i <= 4; ++i) {
2513 iface[i - 1] = i + 4;
2519 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2521 if (
v[
nv-1] ==
v[
iv-1]) {
2564 Int_t iphi,
jphi,
kphi,
incr,
nphi,
ivis[6],
iopt,
iphi1,
iphi2,
iface[4], i,
j;
2577 Error(
"LegoCylindrical",
"no TView in current pad");
2596 if (
fAphi.empty()) {
2597 Error(
"LegoCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
2614 for (i = 1; i <=
nphi; ++i) {
2626 for (i = 1; i <=
nphi; ++i) {
2637 if ((z <= 0 &&
iopt == 1) || (z > 0 &&
iopt == 2)) {
2658 for (i = 1; i <= 4; ++i) {
2660 if (
iordr != 0 && i == 2)
j = 4;
2661 if (
iordr != 0 && i == 4)
j = 2;
2664 xyz[
j*3 - 1] =
ab[
jz + 2*i - 3];
2665 xyz[(
j + 4)*3 - 1] =
ab[
jz + 2*i - 3];
2670 for (i = 1; i <= 4; ++i) {
2673 xyz[(i + 4)*3 - 3] =
v[
iv]*
cosphi[i - 1];
2674 xyz[(i + 4)*3 - 2] =
v[
iv]*
sinphi[i - 1];
2676 if (
v[
iv - 1] >=
v[
iv])
continue;
2678 for (i = 1; i <= 4; ++i) {
2679 if (
ivis[i - 1] == 0)
continue;
2698 if (
ivis[4] != 0 &&
v[0] > 0) {
2701 for (i = 1; i <= 4; ++i) {
2702 xyz[i*3 - 3] =
v[0]*
cosphi[i - 1];
2703 xyz[i*3 - 2] =
v[0]*
sinphi[i - 1];
2715 if (
ivis[5] != 0 &&
v[
nv - 1] > 0) {
2718 for (i = 1; i <= 4; ++i) {
2719 iface[i - 1] = 5 - i + 4;
2720 tface[i - 1] =
tt[5 - i + (
nv << 2) - 5];
2725 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2727 if (
v[
nv-1] ==
v[
iv-1]) {
2769 Int_t iphi,
jphi,
kphi,
incr,
nphi,
ivis[6],
iopt,
iphi1,
iphi2,
iface[4], i,
j;
2772 Int_t k1,
k2,
ia,
ib,
incrth,
ith,
jth,
kth,
nth,
mth,
ith1,
ith2,
nv;
2785 Error(
"LegoSpherical",
"no TView in current pad");
2804 if (
fAphi.empty()) {
2805 Error(
"LegoSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
2824 for (i = 1; i <=
nphi; ++i) {
2837 for (i = 1; i <=
nth; ++i) {
2870 for (i = 1; i <= 6; ++i)
ivis[i - 1] = 0;
2885 th = (
th1 +
th2) / (
float)2.;
2894 for (i = 1; i <= 4; ++i) {
2896 if (
iordr != 0 && i == 2)
j = 4;
2897 if (
iordr != 0 && i == 4)
j = 2;
2906 for (i = 1; i <= 4; ++i) {
2910 xyz[(i + 4)*3 - 3] =
v[
iv]*
cosphi[i - 1];
2911 xyz[(i + 4)*3 - 2] =
v[
iv]*
sinphi[i - 1];
2915 for (i = 1; i <= 4; ++i) {
2918 xyz[i*3 - 1] =
v[
iv - 1]*
costh[i - 1];
2921 xyz[(i + 4)*3 - 1] =
v[
iv]*
costh[i - 1];
2924 if (
v[
iv - 1] >=
v[
iv])
continue;
2926 for (i = 1; i <= 4; ++i) {
2927 if (
ivis[i - 1] == 0)
continue;
2946 if (
ivis[4] != 0 &&
v[0] > 0) {
2949 for (i = 1; i <= 4; ++i) {
2951 xyz[i*3 - 3] =
v[0]*
cosphi[i - 1];
2952 xyz[i*3 - 2] =
v[0]*
sinphi[i - 1];
2957 xyz[i*3 - 1] =
v[0]*
costh[i - 1];
2959 iface[i - 1] = 5 - i;
2970 if (
ivis[5] != 0 &&
v[
nv - 1] > 0) {
2973 for (i = 1; i <= 4; ++i) {
2974 iface[i - 1] = i + 4;
2980 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2982 if (
v[
nv-1] ==
v[
iv-1]) {
3042 else if (
nl == 0)
goto L200;
3049 for (i = 1; i <= 4; ++i) {
3056 Error(
"LightSource",
"negative light intensity");
3064 if (
nl > 4 ||
yl < 0) {
3065 Error(
"LightSource",
"illegal light source number (nl=%d, yl=%f)",
nl,
yl);
3071 Error(
"LightSource",
"light source is placed at origin");
3082 if (
fYdl != 0)
return;
3083 for (i = 1; i <= 4; ++i) {
3084 if (
fYls[i - 1] != 0)
return;
3101 if (!view ||
fLoff)
return;
3118 for (i = 1; i <= 4; ++i) {
3119 if (
fYls[i - 1] <= 0)
continue;
3124 if (
cosn < 0)
continue;
3158 Error(
"ModifyScreen",
"invalid TView in current pad");
3162 Error(
"ModifyScreen",
"no TView in current pad");
3176 if (
i1 ==
i2)
return;
3180 for (i =
i1; i <=
i2 - 1; ++i) {
3259 for (i = 1; i <= 6; ++i) {
3262 if (k < num)
continue;
3267 if (k == 1)
ir = -1;
3293 Error(
"SideVisibilityEncode",
"no TView in current pad");
3298 if (
zn > 0) k += 64;
3299 if (
zn < 0) k += 32;
3301 if (
zn > 0) k += 16;
3308 if ((
zn <= 0 &&
iopt == 1) || (
zn > 0 &&
iopt == 2)) ++k;
3325 static const char *
where =
"Spectrum";
3346 Error(
where,
"initial color index is negative");
3351 Error(
where,
"color index increment must be positive");
3359 for (i = 1; i <=
nl+1; ++i) {
3387 Error(
"SurfaceCartesian",
"no TView in current pad");
3408 if (!
painter->IsInside(ix,iy))
continue;
3410 for (
Int_t i = 0; i < 4; ++i) {
3411 xyz[i*3 + 0] =
f[i*3 + 0];
3412 xyz[i*3 + 1] =
f[i*3 + 1];
3413 xyz[i*3 + 2] =
f[i*3 + 2];
3492 for (i = 1; i <= 4; ++i) {
3545 t[i] =
f[i * 3 + 3];
3550 for (i = 1; i <= 4; ++i)
f[i * 3 + 3] =
fRmax[2];
3554 for (i = 1; i <= 4; ++i) {
3579 Error(
"SurfacePolar",
"no TView in current pad");
3607 if (
fAphi.empty()) {
3608 Error(
"SurfacePolar",
"failed to allocate array fAphi[%d]",
fNaphi);
3620 for (i = 1; i <=
nphi; ++i) {
3647 if ((z <= 0 &&
iopt == 1) || (z > 0 &&
iopt == 2)) {
3658 for (i = 1; i <= 4; ++i) {
3660 if (
iordr != 0 && i == 2)
j = 4;
3661 if (
iordr != 0 && i == 4)
j = 2;
3664 xyz[
j*3 - 1] =
f[i*3 - 1];
3677 if (
incr == 0)
return;
3716 Error(
"SurfaceCylindrical",
"no TView in current pad");
3735 if (
fAphi.empty()) {
3736 Error(
"SurfaceCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
3748 for (i = 1; i <=
nphi; ++i) {
3762 if ((z <= 0 &&
iopt == 1) || (z > 0 &&
iopt == 2)) {
3779 for (i = 1; i <= 4; ++i) {
3781 if (
iordr == 0 && i == 2)
j = 4;
3782 if (
iordr == 0 && i == 4)
j = 2;
3785 xyz[
j*3 - 1] =
f[
jz + i*3 - 4];
3798 if (
incr == 0)
return;
3836 Error(
"SurfaceSpherical",
"no TView in current pad");
3855 if (
fAphi.empty()) {
3856 Error(
"SurfaceSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
3870 for (i = 1; i <=
nphi; ++i) {
3883 for (i = 1; i <=
nth; ++i) {
3907 phi = (
f[
jphi - 1] +
f[
jphi + 5]) / (
float)2.;
3918 for (i = 1; i <= 4; ++i) {
3920 if (
iordr != 0 && i == 2)
j = 4;
3921 if (
iordr != 0 && i == 4)
j = 2;
3929 for (i = 1; i <= 4; ++i) {
3931 if (
iordr != 0 && i == 2)
j = 4;
3932 if (
iordr != 0 && i == 4)
j = 2;
3962 if (
incr == 0)
return;
3988 Error(
"SurfaceProperty",
"error in coefficients");
4017 Error(
"ImplicitFunction",
"no TF3 function provided");
4036 Error(
"ImplicitFunction",
"no TView in current pad");
4265 for ( i=1 ; i<=
nnod ; i++ ) {
4318 static Int_t irota[24][8] = { { 1,2,3,4,5,6,7,8 }, { 2,3,4,1,6,7,8,5 },
4319 { 3,4,1,2,7,8,5,6 }, { 4,1,2,3,8,5,6,7 },
4320 { 6,5,8,7,2,1,4,3 }, { 5,8,7,6,1,4,3,2 },
4321 { 8,7,6,5,4,3,2,1 }, { 7,6,5,8,3,2,1,4 },
4322 { 2,6,7,3,1,5,8,4 }, { 6,7,3,2,5,8,4,1 },
4323 { 7,3,2,6,8,4,1,5 }, { 3,2,6,7,4,1,5,8 },
4324 { 5,1,4,8,6,2,3,7 }, { 1,4,8,5,2,3,7,6 },
4325 { 4,8,5,1,3,7,6,2 }, { 8,5,1,4,7,6,2,3 },
4326 { 5,6,2,1,8,7,3,4 }, { 6,2,1,5,7,3,4,8 },
4327 { 2,1,5,6,3,4,8,7 }, { 1,5,6,2,4,8,7,3 },
4328 { 4,3,7,8,1,2,6,5 }, { 3,7,8,4,2,6,5,1 },
4329 { 7,8,4,3,6,5,1,2 }, { 8,4,3,7,5,1,2,6 } };
4331 static Int_t iwhat[21] = { 1,3,5,65,50,67,74,51,177,105,113,58,165,178,
4332 254,252,250,190,205,188,181 };
4333 Int_t j, i,
i1,
i2,
i3,
ir,
irt=0, k,
k1,
k2,
incr,
icase=0,
n;
4340 for ( i=1; i<=8 ; i++) {
4343 for (
ir=1 ;
ir<=24 ;
ir++ ) {
4346 for ( i=1 ; i<=8 ; i++ ) {
4350 if (k==0 || k==255)
return;
4351 for ( i=1 ; i<=21 ; i++ ) {
4352 if (k !=
iwhat[i-1])
continue;
4361 for ( i=1 ; i<=8 ; i++ ) {
4364 fP8[i-1][0] =
p[k-1][0];
4365 fP8[i-1][1] =
p[k-1][1];
4366 fP8[i-1][2] =
p[k-1][2];
4367 fG8[i-1][0] =
g[k-1][0];
4368 fG8[i-1][1] =
g[k-1][1];
4369 fG8[i-1][2] =
g[k-1][2];
4374 switch ((
int)
icase) {
4377 MarchingCubeCase00(1, 4, 9, 0, 0, 0,
nnod,
ntria, xyz, grad,
itria);
4381 MarchingCubeCase00(2, 4, 9, 10, 0, 0,
nnod,
ntria, xyz, grad,
itria);
4393 MarchingCubeCase00(6, 2, 1, 9, 8, 0,
nnod,
ntria, xyz, grad,
itria);
4404 MarchingCubeCase00(2, 4, 8, 6, 0, 0,
nnod,
ntria, xyz, grad,
itria);
4407 MarchingCubeCase00(1, 4, 12, 7, 6, 10,
nnod,
ntria, xyz, grad,
itria);
4413 MarchingCubeCase00(1, 4, 8, 7, 11, 10,
nnod,
ntria, xyz, grad,
itria);
4422 MarchingCubeCase00(1, 9, 12, 7, 6, 2,
nnod,
ntria, xyz, grad,
itria);
4428 if (
ntria == 0)
return;
4430 for ( i=1; i<=
ntria ; i++ ) {
4447 for ( i=1 ; i<=3 ; i++ ) {
4450 if (
i2 == 4)
i2 = 1;
4457 if (
i3 == 0)
i3 = 3;
4464 for ( i=1 ; i<=3 ; i++ ) {
4469 if (
ntria == 0)
return;
4473 if (
itr[
i2-1] < 0) {
4477 if (
itr[
i3-1] < 0) {
4482 for ( i=1 ; i<=3 ; i++ ) {
4483 if (
itria[
j-1][i-1] !=
k2)
continue;
4512 static Int_t it[4][4][3] = { { { 1,2, 3 }, { 0,0, 0 }, { 0,0, 0 }, { 0,0, 0 } },
4513 { { 1,2,-3 }, {-1,3, 4 }, { 0,0, 0 }, { 0,0, 0 } },
4514 { { 1,2,-3 }, {-1,3,-4 }, {-1,4, 5 }, { 0,0, 0 } },
4515 { { 1,2,-3 }, {-1,3,-4 }, {-4,6,-1 }, { 4,5,-6 } }
4529 if (
ie[5] == 0)
nnod = 5;
4530 if (
ie[4] == 0)
nnod = 4;
4531 if (
ie[3] == 0)
nnod = 3;
4537 for ( i=0; i<3 ; i++) {
4538 for (
j=0;
j<4 ;
j++) {
4552 static Int_t ie[6] = { 4,9,1, 2,11,3 };
4553 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4554 static Int_t it2[4][3] = { { 1,2,-5 }, { -1,5,6 }, { 5,-2,4 }, { -4,2,3 } };
4581 static Int_t ie[6] = { 4,9,1, 7,11,6 };
4582 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4583 static Int_t it2[6][3] = { { 1,2,4 }, { 2,3,6 }, { 3,1,5 },
4584 { 4,5,1 }, { 5,6,3 }, { 6,4,2 } };
4611 static Int_t ie[7] = { 2,4,9,10, 6,7,11 };
4612 static Int_t it1[5][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 } };
4613 static Int_t it2[3][3] = { { 1,2,-3 }, { -1,3,4 }, { 5,6,7 } };
4614 static Int_t it3[7][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 },
4615 { 1,7,-5 }, { -1,5,4 } };
4653 static Int_t ie[9] = { 3,12,4, 1,10,2, 11,6,7 };
4654 static Int_t it[9][9][3] = {
4655 {{ 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}},
4656 {{ 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}},
4657 {{ 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}},
4658 {{-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}},
4659 {{ 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}},
4660 {{-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}},
4661 {{ 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}},
4662 {{ 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}},
4663 {{ -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}}
4685 switch ((
int)
icase) {
4706 for ( i=0; i<3 ; i++) {
4707 for (
j=0;
j<9 ;
j++) {
4725 for ( i=0; i<3 ; i++) {
4726 for (
j=0;
j<9 ;
j++) {
4741 static Int_t ie[8] = { 1,3,12,9, 5,7,11,10 };
4742 static Int_t it[6][8][3] = {
4743 {{1,2,-3}, {-1,3,4}, {5,6,-7}, {-5,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4744 {{ 9,1,2}, { 9,2,3}, { 9,3,4}, { 9,4,5}, { 9,5,6}, { 9,6,7}, { 9,7,8}, { 9,8,1}},
4745 {{ 9,1,2}, { 9,4,1}, { 9,3,4}, { 9,6,3}, { 9,5,6}, { 9,8,5}, { 9,7,8}, { 9,2,7}},
4746 {{1,2,-7}, {-1,7,8}, {5,6,-3}, {-5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4747 {{1,2,-7}, {-1,7,8}, {2,3,-6}, {-2,6,7}, {3,4,-5}, {-3,5,6}, {4,1,-8}, {-4,8,5}},
4748 {{1,2,-3}, {-1,3,4}, {2,7,-6}, {-2,6,3}, {7,8,-5}, {-7,5,6}, {8,1,-4}, {-8,4,5}}
4768 for ( i=0; i<3 ; i++) {
4769 for (
j=0;
j<8 ;
j++) {
4790 for ( i=0; i<3 ; i++) {
4791 for (
j=0;
j<8 ;
j++) {
4806 static Int_t ie[8] = { 3,12,4, 1,9,8,6,2 };
4807 static Int_t it[6][8][3] = {
4808 {{ 1,2,3}, {4,5,-6}, {-4,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4809 {{-9,1,2}, {9,2,-3}, {-9,3,4}, {9,4,-5}, {-9,5,6}, {9,6,-7}, {-9,7,8}, {9,8,-1}},
4810 {{9,1,-2}, {-9,2,6}, {9,6,-7}, {-9,7,8}, {9,8,-4}, {-9,4,5}, {9,5,-3}, {-9,3,1}},
4811 {{ 3,4,5}, {1,2,-6}, {-1,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4812 {{ 7,8,6}, {6,8,-1}, {-6,1,2}, {3,1,-8}, {-3,8,4}, { 3,4,5}, {3,5,-6}, {-3,6,2}},
4813 {{ 7,8,6}, {6,8,-4}, {-6,4,5}, {3,4,-8}, {-3,8,1}, { 3,1,2}, {3,2,-6}, {-3,6,5}}
4833 for ( i=0; i<3 ; i++) {
4834 for (
j=0;
j<8 ;
j++) {
4855 for ( i=0; i<3 ; i++) {
4856 for (
j=0;
j<8 ;
j++) {
4873 {1,2,3,4,5,6,7,8}, {1,5,6,2,4,8,7,3}, {1,4,8,5,2,3,7,6},
4874 {3,7,8,4,2,6,5,1}, {3,2,6,7,4,1,5,8}, {3,4,1,2,7,8,5,6},
4875 {6,7,3,2,5,8,4,1}, {6,5,8,7,2,1,4,3}, {6,2,1,5,7,3,4,8},
4876 {8,4,3,7,5,1,2,6}, {8,5,1,4,7,6,2,3}, {8,7,6,5,4,3,2,1} };
4877 static Int_t iwhat[8] = { 63,62,54,26,50,9,1,0 };
4878 static Int_t ie[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
4880 {1,2,3,4}, {5,6,7,8}, {1,2,6,5}, {2,6,7,3}, {4,3,7,8}, {1,5,8,4} };
4881 static Int_t it1[4][3] = { {1,2,10}, {9,5,8}, {6,11,7}, {3,4,12} };
4882 static Int_t it2[4][3] = { {5,6,10}, {1,4,9}, {2,11,3}, {7,8,12} };
4883 static Int_t it3[6][3] = { {10,12,-3}, {-10,3,2}, {12,10,-1}, {-12,1,4},
4884 {9,5,8}, {6,11,7} };
4885 static Int_t it4[6][3] = { {11,9,-1}, {-11,1,2}, {9,11,-3}, {-9,3,4},
4886 {5,6,10}, {7,8,12} };
4887 static Int_t it5[10][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4888 {13,10,1}, {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2}, {5,8,9} };
4889 static Int_t it6[10][3] = { {13,2,-10}, {-13,10,5}, {13,5,-6}, {-13,6,11},
4890 {13,11,3}, {13,3,-4}, {-13,4,9}, {13,9,-1}, {-13,1,2}, {12,7,8} };
4891 static Int_t it7[12][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4892 {13,10,-5}, {-13,5,8}, {13,8,-9}, {-13,9,1},
4893 {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2} };
4894 static Int_t it8[6][3] = { {3,8,12}, {3,-2,-8}, {-2,5,-8}, {2,10,-5},
4895 {7,6,11}, {1,4,9} };
4896 static Int_t it9[10][3] = { {7,12,-3}, {-7,3,11}, {11,3,2}, {6,11,-2}, {-6,2,10},
4897 {6,10,5}, {7,6,-5}, {-7,5,8}, {7,8,12}, {1,4,9} };
4898 static Int_t it10[10][3] = { {9,1,-10}, {-9,10,5}, {9,5,8}, {4,9,-8}, {-4,8,12},
4899 {4,12,3}, {1,4,-3}, {-1,3,2}, {1,2,10}, {7,6,11} };
4905 for (
nr=1 ;
nr<=12 ;
nr++ ) {
4908 for (
nf=1 ;
nf<=6 ;
nf++ ) {
4913 if ((
f1*f3-f2*f4)/(
f1+f3-f2-f4) >= 0.) k = k +
incr;
4916 for ( i=1 ; i<=8 ; i++ ) {
4917 if (k !=
iwhat[i-1])
continue;
4923 Error(
"MarchingCubeCase13",
"configuration is not found");
4929 for (
n=1 ;
n<=8 ;
n++) {
4932 for ( i=1 ; i<=3 ; i++ ) {
4933 xyz[
n-1][i-1] =
fP8[k-1][i-1];
4934 grad[
n-1][i-1] =
fG8[k-1][i-1];
4937 for (
n=1 ;
n<=8 ;
n++ ) {
4939 for ( i=1 ; i<=3 ; i++ ) {
4940 fP8[
n-1][i-1] = xyz[
n-1][i-1];
4941 fG8[
n-1][i-1] = grad[
n-1][i-1];
4951 switch ((
int)
icase) {
4972 &xyz[
nnod-1][0], &grad[
nnod-1][0]);
4979 &xyz[
nnod-1][0], &grad[
nnod-1][0]);
4986 &xyz[
nnod-1][0], &grad[
nnod-1][0]);
4993 switch ((
int)(
irep+1)) {
5023 for ( i=1 ; i<=3 ; i++ ) {
5049 for ( i=1 ; i<=3 ; i++ ) {
5056 for ( i=1 ; i<=3 ; i++ ) {
5057 p[i-1] =
p[i-1] + xyz[k-1][i-1];
5058 g[i-1] =
g[i-1] + grad[k-1][i-1];
5061 for ( i=1 ; i<=3 ; i++ ) {
5086 if (
a == 0.)
return;
5090 if (
d <= 0.)
return;
5093 s1 = (-
b+
d) / (2*
a);
5096 s2 = (-
b-
d) / (2*
a);
5154 {1,2}, {2,3}, {3,4}, {4,1}, {5,6}, {6,7}, {7,8}, {8,5}, {1,5}, {2,6}, {3,7}, {4,8} };
5162 for ( i=1 ; i<=3 ; i++ ) {
5185 Int_t n,
nf,
i1,
i2,
i3, i,
icur, k,
itst,
kface,
kf,
irep;
5219 for ( i=1 ; i<=3 ; i++ ) {
5230 for ( i=1 ; i<=3 ; i++ ) {
5231 v[0][i-1] = xyz[
i2-1][i-1] - xyz[
i1-1][i-1];
5232 v[1][i-1] = xyz[
i3-1][i-1] - xyz[
i2-1][i-1];
5234 a = (
v[0][1]*
v[1][2] -
v[0][2]*
v[1][1]);
5235 b = (
v[0][2]*
v[1][0] -
v[0][0]*
v[1][2]);
5236 c = (
v[0][0]*
v[1][1] -
v[0][1]*
v[1][0]);
5245 abcd[
n-1][3] =-(
a*xyz[
i1-1][0] +
b*xyz[
i1-1][1] +
c*xyz[
i1-1][2]);
5248 if (
nf <= 1)
return;
5278 for ( k=
kface-1 ; k>=1 ; k-- ) {
5321 for ( i=1 ; i<=3 ; i++ ) {
5324 if (i != 3)
i2 =
kk[i];
5327 if (
irep==0 )
continue;
5331 for ( i=1 ; i<=3 ; i++ ) {
5334 if (i != 3)
i2 =
nn[i];
5337 if (
irep==0 )
continue;
5345 for ( i=k+1 ; i<=
kface ; i++ ) {
5378 Double_t a,
b,
c,
d1,
d2, dd,
xy, tmin, tmax,
tmid,
x,
y, z;
5384 delta[0] = xyz[
i2-1][0] - xyz[
i1-1][0];
5385 delta[1] = xyz[
i2-1][1] - xyz[
i1-1][1];
5386 delta[2] = xyz[
i2-1][2] - xyz[
i1-1][2];
5392 c =-(
a*xyz[
i1-1][0] +
b*xyz[
i1-1][1]);
5397 for ( i=1 ; i<=3 ; i++ ) {
5401 if (
d[
k1-1]>=0. &&
d[
k2-1]>=0.)
continue;
5402 if (
d[
k1-1] <0. &&
d[
k2-1] <0.)
continue;
5407 t[k-1] = (
xy-xyz[
i1-1][
ixy-1]) / delta[
ixy-1];
5408 if (k == 2)
goto L200;
5416 if (tmin>1. || tmax<0)
return;
5417 if (tmin < 0.) tmin = 0.;
5418 if (tmax > 1.) tmax = 1.;
5419 tmid = (tmin + tmax) / 2.;
5420 x = delta[0]*
tmid + xyz[
i1-1][0];
5421 y = delta[1]*
tmid + xyz[
i1-1][1];
5422 z = delta[2]*
tmid + xyz[
i1-1][2];
5423 dd = abcd[0]*
x + abcd[1]*
y + abcd[2]*z + abcd[3];
5460 Int_t i,
i1,
i2,
j,
ibase,
nnod,
knod,
ntria,
ktria,
iopt,
iready;
5462 Int_t ix,
ix1=0,
ix2=0, iy,
iy1=0,
iy2=0, iz,
iz1=0,
iz2=0, k,
kx,
ky,
kz,
isurf,
nsurf;
5468 static Int_t ind[8][3] = { { 0,0,0 }, { 1,0,0 }, { 1,0,1 }, { 0,0,1 },
5469 { 0,1,0 }, { 1,1,0 }, { 1,1,1 }, { 0,1,1 } };
5478 Error(
"ImplicitFunction",
"no TView in current pad");
5484 Warning(
"IsoSurface",
"Number of iso-surfaces too large. Increase kNiso");
5602 for ( i=1 ; i<=8 ; i++ ) {
5603 kx = ix +
ind[i-1][0];
5604 ky = iy +
ind[i-1][1];
5605 kz = iz +
ind[i-1][2];
5606 p[i-1][0] =
x[
kx-1];
5607 p[i-1][1] =
y[
ky-1];
5608 p[i-1][2] = z[
kz-1];
5615 }
else if (
kx ==
nx) {
5639 }
else if (
ky ==
ny) {
5663 }
else if (
kz ==
nz) {
5707 for (
j=1 ;
j<=3 ;
j++ ){
5719 if (
ntria == 0)
continue;
5720 for ( i=1 ; i<=
nnod ; i++ ) {
5726 if (
ntria == 0)
continue;
5766 Error(
"ImplicitFunction",
"no TView in current pad");
5773 for ( i=1 ; i<=
np ; i++) {
5776 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.
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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.
static void RGBtoHLS(Float_t r, Float_t g, Float_t b, Float_t &h, Float_t &l, Float_t &s)
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.
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.
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.