36#define ROOT_Hoption_cxx
38#define ROOT_Hparam_cxx
80 TList *stack =
nullptr;
90 for (i=0;i<3;i++) {
fRmin[i] = 0;
fRmax[i] = 1; }
91 for (i=0;i<4;i++) {
fYls[i] = 0; }
93 for (i=0;i<30;i++) {
fJmask[i] = 0; }
95 for (i=0;i<465;i++) {
fMask[i] = 0; }
97 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
98 for (i=0;i<200;i++) {
fT[i] = 0.; }
100 for (i=0;i<12;i++) {
fVls[i] = 0.; }
101 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
102 for (i=0;i<8;i++) {
fF8[i] = 0.; }
165 for (i=0;i<4;i++) {
fYls[i] = 0; }
167 for (i=0;i<30;i++) {
fJmask[i] = 0; }
169 for (i=0;i<465;i++) {
fMask[i] = 0; }
171 for (i=0;i<1200;i++) {
fPlines[i] = 0.; }
172 for (i=0;i<200;i++) {
fT[i] = 0.; }
174 for (i=0;i<12;i++) {
fVls[i] = 0.; }
175 for (i=0;i<257;i++) {
fFunLevel[i] = 0.; }
176 for (i=0;i<8;i++) {
fF8[i] = 0.; }
229 Error(
"BackBox",
"no TView in current pad");
239 for (
Int_t i = 0; i < 8; ++i) {
240 r[i*3 + 0] =
av[i*3 + 0] +
av[i*3 + 1]*
cosa;
242 r[i*3 + 2] =
av[i*3 + 2];
272 Error(
"FrontBox",
"no TView in current pad");
282 for (
Int_t i = 0; i < 8; ++i) {
283 r[i*3 + 0] =
av[i*3 + 0] +
av[i*3 + 1]*
cosa;
285 r[i*3 + 2] =
av[i*3 + 2];
294 for (
Int_t i = 0; i < 4; ++i) {
299 gPad->PaintPolyLine(4,
x,
y);
300 for (
Int_t i = 0; i < 4; ++i) {
305 gPad->PaintPolyLine(4,
x,
y);
329 static const char *
where =
"ColorFunction";
344 for (
Int_t i = 1; i <
nl; ++i) {
345 if (
fl[i] <=
fl[i - 1]) {
352 for (
Int_t i = 0; i <
nl; ++i) {
374 Error(
"GridLevels",
"no TView in current pad");
380 Double_t binLow = 0, binHigh = 0, binWidth = 0;
386 binLow, binHigh,
nbins, binWidth,
" ");
391 binWidth = (binHigh - binLow)/
nbins;
418 for (
Int_t i = 0; i <
np; ++i) {
420 if (k < 0) { k = -k;
ifneg =
true; }
422 x[i] =
p3[0];
y[i] =
p3[1];
428 for (
Int_t i = 0; i <
np; ++i) {
429 z +=
y[i]*
x[i+1] -
x[i]*
y[i+1];
442 for (
Int_t i = 0; i <
np; ++i) {
443 if (
iface[i] > 0)
gPad->PaintPolyLine(2, &
x[i], &
y[i]);
466 for (
Int_t i = 0; i <
np; ++i) {
469 x[i] =
p3[i*3+0];
y[i] =
p3[i*3+1];
479 Double_t ttt[5] = { t[0], t[1], t[2], t[3], t[0] };
480 for (
Int_t i = 0; i<3; ++i) {
p3[3*4+i] =
p3[i]; }
496 x[1] =
x[2];
y[1] =
y[2];
497 gPad->PaintPolyLine(2, &
x[0], &
y[0]);
524 for (
Int_t i = 0; i <
np; ++i) {
527 x[i] =
p3[0];
y[i] =
p3[1];
571 for (
Int_t i = 0; i <
np; ++i) {
573 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
574 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
575 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
598 for (
Int_t it = 0; it <
fNT; ++it) {
604 gPad->PaintPolyLine(2,
x,
y);
619 for (
Int_t i = 0; i <
np; ++i) {
627 for (
Int_t it = 0; it <
fNT; ++it) {
633 gPad->PaintPolyLine(2,
x,
y);
638 for (
Int_t i = 0; i <
np; ++i) {
661 for (
Int_t i = 0; i <
np; ++i) {
663 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
664 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
665 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
680 for (
Int_t i = 0; i <
np; ++i) {
688 for (
Int_t it = 0; it <
fNT; ++it) {
694 gPad->PaintPolyLine(2,
x,
y);
699 for (
Int_t i = 0; i <
np; ++i) {
735 for (
Int_t i = 0; i <
np; ++i) {
737 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
738 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
739 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
756 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
757 if (
npol[kpol] == 0)
continue;
771 for (
Int_t it = 0; it <
fNT; ++it) {
777 gPad->PaintPolyLine(2,
x,
y);
783 for (
Int_t i = 0; i <
np; ++i) {
819 for (
Int_t i = 0; i <
np; ++i) {
821 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
822 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
823 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
840 for (
Int_t kpol = 0; kpol < 2; ++kpol) {
841 if (
npol[kpol] == 0)
continue;
852 x[0] =
p1[0];
y[0] =
p1[1];
853 x[1] =
p2[0];
y[1] =
p2[1];
854 gPad->PaintPolyLine(2,
x,
y);
875 for (
Int_t i = 0; i <
np; ++i) {
878 p3[i*3 + 0] = xyz[(k-1)*3 + 0];
879 p3[i*3 + 1] = xyz[(k-1)*3 + 1];
880 p3[i*3 + 2] = xyz[(k-1)*3 + 2];
907 for (
Int_t it = 0; it <
fNT; ++it) {
912 gPad->PaintPolyLine(2,
x,
y);
927 for (
Int_t i = 0; i <
np; ++i) {
928 if (
iface[i] < 0)
continue;
934 for (
Int_t it = 0; it <
fNT; ++it) {
939 gPad->PaintPolyLine(2,
x,
y);
963 for (
Int_t i = 0; i <
np; ++i) {
977 for (
Int_t i = 0; i <
np; ++i) {
978 if (
iface[i] < 0)
continue;
984 for (
Int_t it = 0; it <
fNT; ++it) {
989 gPad->PaintPolyLine(2,
x,
y);
1021 Error(
"FillPolygon",
"illegal number of vertices in polygon (%d)",
n);
1034 for (i = 2; i <=
np; ++i) {
1051 if (
fmin > f2)
continue;
1054 for (i = 1; i <=
np; ++i) {
1057 if (i ==
np)
i2 = 1;
1061 if (k < 3)
continue;
1062 for (i = 1; i <= k; ++i) {
1075 gPad->PaintFillArea(k,
x,
y);
1090 ib,
nb,
dx,
dy,
iw,
nx,
xx,
yy,
signdx,
nstart,
xx1,
xx2,
nxa,
nxb;
1101 for (i = 1; i <=
n; ++i) {
1112 for (i = 1; i <=
n; ++i) {
1115 if (
y1[i - 1] <=
y1[i]) {
x2[i - 1] =
x1[i];
y2[i - 1] =
y1[i];}
1117 x2[i - 1] =
x1[i - 1];
1118 y2[i - 1] =
y1[i - 1];
1124 if (
ymax < 0)
return;
1128 for (i = 1; i <
n; ++i) {
1129 if (
y1[i] >=
y1[i - 1])
continue;
1132 for (
j = i - 1;
j >= 1; --
j) {
1133 if (
y <
y1[
j - 1])
continue;
1140 for (
j = i;
j >= k; --
j) {
1153 for (i = 1; i <=
n; ++i) {
1155 dy =
y2[i - 1] -
y1[i - 1];
1156 dx =
x2[i - 1] -
x1[i - 1];
1161 t = -(
dy + 1) / 2 +
dx;
1169 }
else if (
dy != 0) {
1170 step = (
dx - 1) / (
dy +
dy) + 1;
1182 for (i =
nstart; i <=
n; ++i) {
1186 if (
y2[i - 1] !=
yscan)
continue;
1188 if (
x2[i - 1] >=
xcur[i - 1]) {
1201 dy =
y2[i - 1] -
y1[i - 1];
1202 dx =
x2[i - 1] -
x1[i - 1];
1222 if (
test[i - 1] < 0)
continue;
1228 t =
test[i - 1] + step*
dy;
1240 if (
yscan < 0)
continue;
1243 for (i = 1; i <
nxa; ++i) {
1244 for (
j = i;
j >= 1; --
j) {
1254 for (i = 1; i <=
nxa; i += 2) {
1326 for (
Int_t i = 1; i <
np; ++i) {
1327 if (t[i] < tmin) tmin = t[i];
1328 if (t[i] > tmax) tmax = t[i];
1341 for (
Int_t i = 0; i <
np; ++i) {
1346 if (
d1 == 0)
d1 = 1
e-99;
1347 if (
d2 == 0)
d2 = 1
e-99;
1348 if (
d1*
d2 > 0)
continue;
1360 Error(
"FindLevelLines",
"number of points for line not equal 2");
1402 kk = (
k1 + 2)*5 + (
k2 + 2) + 1;
1437 pp[
kpp*3 + 1] =
p1[1];
1438 pp[
kpp*3 + 2] =
p1[2];
1439 pp[
kpp*3 + 3] =
p1[3];
1465 pp[
kpp*3 + 1] =
p1[1];
1466 pp[
kpp*3 + 2] =
p1[2];
1467 pp[
kpp*3 + 3] =
p1[3];
1479 pp[
kpp*3 + 1] =
p1[1];
1480 pp[
kpp*3 + 2] =
p1[2];
1481 pp[
kpp*3 + 3] =
p1[3];
1552 Error(
"FindVisibleDraw",
"invalid TView in current pad");
1556 Error(
"FindVisibleDraw",
"no TView in current pad");
1585 for (i =
i1; i <=
i2 - 1; ++i) {
1639 if (
fNT + 1 >= 100)
break;
1641 if (
iv > 0)
fT[2*
fNT - 1] = 1;
1649 if (
y2 ==
y1) {
fNT = 0;
return;}
1679 if (
fNT == 0)
return;
1680 for (i = 1; i <=
fNT; ++i) {
1681 fT[2*i - 2] = 1 -
fT[2*i - 2];
1682 fT[2*i - 1] = 1 -
fT[2*i - 1];
1700 Int_t i,
incrx,
ivis,
x1,
y1,
x2,
y2,
ib,
kb,
dx,
dy,
iw, ix, iy,
ifinve,
dx2,
dy2;
1734 if (
x1 < 0 &&
x2 < 0)
return;
1764 if (iy < 0)
goto L110;
1766 if (ix < 0)
goto L110;
1771 if (
ivis > 0)
continue;
1777 if (
ivis == 0)
continue;
1794 for (iy =
y1; iy <=
y2; ++iy) {
1803 if (iy < 0)
goto L210;
1804 if (ix < 0)
goto L210;
1809 if (
ivis > 0)
continue;
1815 if (
ivis == 0)
continue;
1824 if (
nt == 0)
return;
1826 if (t[3] <=
dt) t[3] = 0;
1827 if (t[2*
nt + 2] >= 1 -
dt) t[2*
nt + 2] = 1;
1829 for (i = 1; i <=
nt; ++i) {
1832 t[2*i + 1] = 1 -
t2;
1833 t[2*i + 2] = 1 -
t1;
1883 for (
j = 1;
j <= 3; ++
j) {
1884 for (i = 1; i <= 3; ++i) {
1892 for (k = 1; k <= 4; ++k) {
1893 for (i = 1; i <= 3; ++i) {
1894 face[i + k*3] =
f[i + (k + 32)*3 - 52];
1899 for (
j = 1;
j <= 3; ++
j) {
1900 for (i = 1; i <= 3; ++i) {
1901 for (k = 1; k <= 4; ++k) {
1903 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1904 r =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52];
1907 z[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 49];
1909 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1910 r =
f[(k + ((i +
j*3) << 2))*3 - 49];
1913 z[k + ((i +
j*3) << 2) - 17] =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52];
1915 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1916 th =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1917 r =
f[(k + ((i +
j*3) << 2))*3 - 49];
1922 phi =
f[
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1923 th =
f[3 -
iphi + (k + ((i +
j*3) << 2))*3 - 52]*rad;
1924 r =
f[(k + ((i +
j*3) << 2))*3 - 49];
1929 x[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 51];
1930 y[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 50];
1931 z[k + ((i +
j*3) << 2) - 17] =
f[(k + ((i +
j*3) << 2))*3 - 49];
1934 x1 =
x[((i +
j*3) << 2) - 14] -
x[((i +
j*3) << 2) - 16];
1935 x2 =
x[((i +
j*3) << 2) - 13] -
x[((i +
j*3) << 2) - 15];
1936 y1 =
y[((i +
j*3) << 2) - 14] -
y[((i +
j*3) << 2) - 16];
1937 y2 =
y[((i +
j*3) << 2) - 13] -
y[((i +
j*3) << 2) - 15];
1938 z1 = z[((i +
j*3) << 2) - 14] - z[((i +
j*3) << 2) - 16];
1939 z2 = z[((i +
j*3) << 2) - 13] - z[((i +
j*3) << 2) - 15];
1944 (i +
j*3)*3 - 11]*
an[(i +
j*3)*3 - 11] +
an[(i
1945 +
j*3)*3 - 10]*
an[(i +
j*3)*3 - 10]);
1947 an[(i +
j*3)*3 - 12] /= s;
1948 an[(i +
j*3)*3 - 11] /= s;
1949 an[(i +
j*3)*3 - 10] /= s;
1954 for (
j = 1;
j <= 2; ++
j) {
1955 for (i = 1; i <= 2; ++i) {
1956 for (k = 1; k <= 3; ++k) {
1957 bn[k + (i + 2*
j)*3 - 10] =
an[k + (i +
j*3)*3 - 13]
1958 +
an[k + (i + 1 +
j*3)*3 - 13] +
an[k + (i + 1 +
1959 (
j + 1)*3)*3 - 13] +
an[k + (i + (
j + 1)*3)*3 - 13];
2020 for (i = 1; i <= 30; ++i) {
2027 for (
nb = 2;
nb <= 30; ++
nb) {
2028 for (
ib = 1;
ib <= 30 -
nb + 1; ++
ib) {
2030 for (i =
ib; i <=
ib +
nb - 1; ++i) k = k |
fMask[i - 1];
2157 for (i = 2; i <=
nids + 1; ++i) {
2166 for (i = 2; i <=
nv; ++i) {
2182 if (
vv[i] <
vv[i - 1]) {
2194 for (i = 1; i <=
nv; ++i) {
2200 for (i = 1; i <=
nv; ++i) {
2201 for (
j = 1;
j <= 4; ++
j) t[
j + (i << 2)] =
vv[i];
2224 Error(
"LegoCartesian",
"no TView in current pad");
2263 if (!
painter->IsInside(ix,iy))
continue;
2273 for (
Int_t i = 1; i <= 4; ++i) {
2274 xyz[i*3 - 3] =
xy[2*i - 2];
2275 xyz[i*3 - 2] =
xy[2*i - 1];
2276 xyz[(i + 4)*3 - 3] = xyz[i*3 - 3];
2277 xyz[(i + 4)*3 - 2] = xyz[i*3 - 2];
2282 for (
Int_t i = 1; i <= 4; ++i) {
2283 xyz[i*3 - 1] =
v[
iv - 1];
2284 xyz[(i + 4)*3 - 1] =
v[
iv];
2286 if (
v[
iv - 1] ==
v[
iv])
continue;
2288 for (
Int_t i = 1; i <= 4; ++i) {
2289 if (
ivis[i - 1] == 0)
continue;
2311 for (
Int_t i = 1; i <= 4; ++i) {
2312 xyz[i*3 - 1] =
v[0];
2313 iface[i - 1] = 5 - i;
2327 for (
Int_t i = 1; i <= 4; ++i) {
2328 iface[i - 1] = i + 4;
2334 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2336 if (
v[
nv-1] ==
v[
iv-1]) {
2364 Int_t iphi,
jphi,
kphi,
incr,
nphi,
ivis[6],
iopt,
iphi1,
iphi2,
iface[4], i,
j;
2375 Error(
"LegoPolar",
"no TView in current pad");
2394 if (
fAphi.empty()) {
2395 Error(
"LegoPolar",
"failed to allocate array fAphi[%d]",
fNaphi);
2412 for (i = 1; i <=
nphi; ++i) {
2424 for (i = 1; i <=
nphi; ++i) {
2455 for (i = 1; i <= 4; ++i) {
2457 if (
iordr != 0 && i == 2)
j = 4;
2458 if (
iordr != 0 && i == 4)
j = 2;
2461 xyz[(
j + 4)*3 - 3] = xyz[
j*3 - 3];
2462 xyz[(
j + 4)*3 - 2] = xyz[
j*3 - 2];
2467 for (i = 1; i <= 4; ++i) {
2468 xyz[i*3 - 1] =
v[
iv - 1];
2469 xyz[(i + 4)*3 - 1] =
v[
iv];
2471 if (
v[
iv - 1] >=
v[
iv])
continue;
2473 for (i = 1; i <= 4; ++i) {
2474 if (
ivis[i - 1] == 0)
continue;
2478 if (xyz[
k1*3 - 3] == xyz[
k2*3 - 3] && xyz[
k1*3 - 2] ==
2479 xyz[
k2*3 - 2])
continue;
2498 for (i = 1; i <= 4; ++i) {
2499 xyz[i*3 - 1] =
v[0];
2500 iface[i - 1] = 5 - i;
2514 for (i = 1; i <= 4; ++i) {
2515 iface[i - 1] = i + 4;
2521 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2523 if (
v[
nv-1] ==
v[
iv-1]) {
2566 Int_t iphi,
jphi,
kphi,
incr,
nphi,
ivis[6],
iopt,
iphi1,
iphi2,
iface[4], i,
j;
2579 Error(
"LegoCylindrical",
"no TView in current pad");
2598 if (
fAphi.empty()) {
2599 Error(
"LegoCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
2616 for (i = 1; i <=
nphi; ++i) {
2628 for (i = 1; i <=
nphi; ++i) {
2639 if ((z <= 0 &&
iopt == 1) || (z > 0 &&
iopt == 2)) {
2660 for (i = 1; i <= 4; ++i) {
2662 if (
iordr != 0 && i == 2)
j = 4;
2663 if (
iordr != 0 && i == 4)
j = 2;
2666 xyz[
j*3 - 1] =
ab[
jz + 2*i - 3];
2667 xyz[(
j + 4)*3 - 1] =
ab[
jz + 2*i - 3];
2672 for (i = 1; i <= 4; ++i) {
2675 xyz[(i + 4)*3 - 3] =
v[
iv]*
cosphi[i - 1];
2676 xyz[(i + 4)*3 - 2] =
v[
iv]*
sinphi[i - 1];
2678 if (
v[
iv - 1] >=
v[
iv])
continue;
2680 for (i = 1; i <= 4; ++i) {
2681 if (
ivis[i - 1] == 0)
continue;
2700 if (
ivis[4] != 0 &&
v[0] > 0) {
2703 for (i = 1; i <= 4; ++i) {
2704 xyz[i*3 - 3] =
v[0]*
cosphi[i - 1];
2705 xyz[i*3 - 2] =
v[0]*
sinphi[i - 1];
2717 if (
ivis[5] != 0 &&
v[
nv - 1] > 0) {
2720 for (i = 1; i <= 4; ++i) {
2721 iface[i - 1] = 5 - i + 4;
2722 tface[i - 1] =
tt[5 - i + (
nv << 2) - 5];
2727 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2729 if (
v[
nv-1] ==
v[
iv-1]) {
2771 Int_t iphi,
jphi,
kphi,
incr,
nphi,
ivis[6],
iopt,
iphi1,
iphi2,
iface[4], i,
j;
2774 Int_t k1,
k2,
ia,
ib,
incrth,
ith,
jth,
kth,
nth,
mth,
ith1,
ith2,
nv;
2787 Error(
"LegoSpherical",
"no TView in current pad");
2806 if (
fAphi.empty()) {
2807 Error(
"LegoSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
2826 for (i = 1; i <=
nphi; ++i) {
2839 for (i = 1; i <=
nth; ++i) {
2872 for (i = 1; i <= 6; ++i)
ivis[i - 1] = 0;
2896 for (i = 1; i <= 4; ++i) {
2898 if (
iordr != 0 && i == 2)
j = 4;
2899 if (
iordr != 0 && i == 4)
j = 2;
2908 for (i = 1; i <= 4; ++i) {
2912 xyz[(i + 4)*3 - 3] =
v[
iv]*
cosphi[i - 1];
2913 xyz[(i + 4)*3 - 2] =
v[
iv]*
sinphi[i - 1];
2917 for (i = 1; i <= 4; ++i) {
2920 xyz[i*3 - 1] =
v[
iv - 1]*
costh[i - 1];
2923 xyz[(i + 4)*3 - 1] =
v[
iv]*
costh[i - 1];
2926 if (
v[
iv - 1] >=
v[
iv])
continue;
2928 for (i = 1; i <= 4; ++i) {
2929 if (
ivis[i - 1] == 0)
continue;
2948 if (
ivis[4] != 0 &&
v[0] > 0) {
2951 for (i = 1; i <= 4; ++i) {
2953 xyz[i*3 - 3] =
v[0]*
cosphi[i - 1];
2954 xyz[i*3 - 2] =
v[0]*
sinphi[i - 1];
2959 xyz[i*3 - 1] =
v[0]*
costh[i - 1];
2961 iface[i - 1] = 5 - i;
2972 if (
ivis[5] != 0 &&
v[
nv - 1] > 0) {
2975 for (i = 1; i <= 4; ++i) {
2976 iface[i - 1] = i + 4;
2982 if (
nv > 2 && (
v[
nv-1] ==
v[
nv-2])) {
2984 if (
v[
nv-1] ==
v[
iv-1]) {
3044 else if (
nl == 0)
goto L200;
3051 for (i = 1; i <= 4; ++i) {
3058 Error(
"LightSource",
"negative light intensity");
3066 if (
nl > 4 ||
yl < 0) {
3067 Error(
"LightSource",
"illegal light source number (nl=%d, yl=%f)",
nl,
yl);
3073 Error(
"LightSource",
"light source is placed at origin");
3084 if (
fYdl != 0)
return;
3085 for (i = 1; i <= 4; ++i) {
3086 if (
fYls[i - 1] != 0)
return;
3103 if (!view ||
fLoff)
return;
3120 for (i = 1; i <= 4; ++i) {
3121 if (
fYls[i - 1] <= 0)
continue;
3126 if (
cosn < 0)
continue;
3160 Error(
"ModifyScreen",
"invalid TView in current pad");
3164 Error(
"ModifyScreen",
"no TView in current pad");
3178 if (
i1 ==
i2)
return;
3182 for (i =
i1; i <=
i2 - 1; ++i) {
3261 for (i = 1; i <= 6; ++i) {
3264 if (k < num)
continue;
3269 if (k == 1)
ir = -1;
3295 Error(
"SideVisibilityEncode",
"no TView in current pad");
3300 if (
zn > 0) k += 64;
3301 if (
zn < 0) k += 32;
3303 if (
zn > 0) k += 16;
3310 if ((
zn <= 0 &&
iopt == 1) || (
zn > 0 &&
iopt == 2)) ++k;
3327 static const char *
where =
"Spectrum";
3348 Error(
where,
"initial color index is negative");
3353 Error(
where,
"color index increment must be positive");
3361 for (i = 1; i <=
nl+1; ++i) {
3389 Error(
"SurfaceCartesian",
"no TView in current pad");
3410 if (!
painter->IsInside(ix,iy))
continue;
3412 for (
Int_t i = 0; i < 4; ++i) {
3413 xyz[i*3 + 0] =
f[i*3 + 0];
3414 xyz[i*3 + 1] =
f[i*3 + 1];
3415 xyz[i*3 + 2] =
f[i*3 + 2];
3494 for (i = 1; i <= 4; ++i) {
3547 t[i] =
f[i * 3 + 3];
3552 for (i = 1; i <= 4; ++i)
f[i * 3 + 3] =
fRmax[2];
3556 for (i = 1; i <= 4; ++i) {
3581 Error(
"SurfacePolar",
"no TView in current pad");
3609 if (
fAphi.empty()) {
3610 Error(
"SurfacePolar",
"failed to allocate array fAphi[%d]",
fNaphi);
3622 for (i = 1; i <=
nphi; ++i) {
3649 if ((z <= 0 &&
iopt == 1) || (z > 0 &&
iopt == 2)) {
3660 for (i = 1; i <= 4; ++i) {
3662 if (
iordr != 0 && i == 2)
j = 4;
3663 if (
iordr != 0 && i == 4)
j = 2;
3666 xyz[
j*3 - 1] =
f[i*3 - 1];
3679 if (
incr == 0)
return;
3718 Error(
"SurfaceCylindrical",
"no TView in current pad");
3737 if (
fAphi.empty()) {
3738 Error(
"SurfaceCylindrical",
"failed to allocate array fAphi[%d]",
fNaphi);
3750 for (i = 1; i <=
nphi; ++i) {
3764 if ((z <= 0 &&
iopt == 1) || (z > 0 &&
iopt == 2)) {
3781 for (i = 1; i <= 4; ++i) {
3783 if (
iordr == 0 && i == 2)
j = 4;
3784 if (
iordr == 0 && i == 4)
j = 2;
3787 xyz[
j*3 - 1] =
f[
jz + i*3 - 4];
3800 if (
incr == 0)
return;
3838 Error(
"SurfaceSpherical",
"no TView in current pad");
3857 if (
fAphi.empty()) {
3858 Error(
"SurfaceSpherical",
"failed to allocate array fAphi[%d]",
fNaphi);
3872 for (i = 1; i <=
nphi; ++i) {
3885 for (i = 1; i <=
nth; ++i) {
3909 phi = (
f[
jphi - 1] +
f[
jphi + 5]) / (
float)2.;
3920 for (i = 1; i <= 4; ++i) {
3922 if (
iordr != 0 && i == 2)
j = 4;
3923 if (
iordr != 0 && i == 4)
j = 2;
3931 for (i = 1; i <= 4; ++i) {
3933 if (
iordr != 0 && i == 2)
j = 4;
3934 if (
iordr != 0 && i == 4)
j = 2;
3964 if (
incr == 0)
return;
3990 Error(
"SurfaceProperty",
"error in coefficients");
4019 Error(
"ImplicitFunction",
"no TF3 function provided");
4038 Error(
"ImplicitFunction",
"no TView in current pad");
4267 for ( i=1 ; i<=
nnod ; i++ ) {
4320 static Int_t irota[24][8] = { { 1,2,3,4,5,6,7,8 }, { 2,3,4,1,6,7,8,5 },
4321 { 3,4,1,2,7,8,5,6 }, { 4,1,2,3,8,5,6,7 },
4322 { 6,5,8,7,2,1,4,3 }, { 5,8,7,6,1,4,3,2 },
4323 { 8,7,6,5,4,3,2,1 }, { 7,6,5,8,3,2,1,4 },
4324 { 2,6,7,3,1,5,8,4 }, { 6,7,3,2,5,8,4,1 },
4325 { 7,3,2,6,8,4,1,5 }, { 3,2,6,7,4,1,5,8 },
4326 { 5,1,4,8,6,2,3,7 }, { 1,4,8,5,2,3,7,6 },
4327 { 4,8,5,1,3,7,6,2 }, { 8,5,1,4,7,6,2,3 },
4328 { 5,6,2,1,8,7,3,4 }, { 6,2,1,5,7,3,4,8 },
4329 { 2,1,5,6,3,4,8,7 }, { 1,5,6,2,4,8,7,3 },
4330 { 4,3,7,8,1,2,6,5 }, { 3,7,8,4,2,6,5,1 },
4331 { 7,8,4,3,6,5,1,2 }, { 8,4,3,7,5,1,2,6 } };
4333 static Int_t iwhat[21] = { 1,3,5,65,50,67,74,51,177,105,113,58,165,178,
4334 254,252,250,190,205,188,181 };
4335 Int_t j, i,
i1,
i2,
i3,
ir,
irt=0, k,
k1,
k2,
incr,
icase=0,
n;
4342 for ( i=1; i<=8 ; i++) {
4345 for (
ir=1 ;
ir<=24 ;
ir++ ) {
4348 for ( i=1 ; i<=8 ; i++ ) {
4352 if (k==0 || k==255)
return;
4353 for ( i=1 ; i<=21 ; i++ ) {
4354 if (k !=
iwhat[i-1])
continue;
4363 for ( i=1 ; i<=8 ; i++ ) {
4366 fP8[i-1][0] =
p[k-1][0];
4367 fP8[i-1][1] =
p[k-1][1];
4368 fP8[i-1][2] =
p[k-1][2];
4369 fG8[i-1][0] =
g[k-1][0];
4370 fG8[i-1][1] =
g[k-1][1];
4371 fG8[i-1][2] =
g[k-1][2];
4376 switch ((
int)
icase) {
4379 MarchingCubeCase00(1, 4, 9, 0, 0, 0,
nnod,
ntria, xyz, grad,
itria);
4383 MarchingCubeCase00(2, 4, 9, 10, 0, 0,
nnod,
ntria, xyz, grad,
itria);
4395 MarchingCubeCase00(6, 2, 1, 9, 8, 0,
nnod,
ntria, xyz, grad,
itria);
4406 MarchingCubeCase00(2, 4, 8, 6, 0, 0,
nnod,
ntria, xyz, grad,
itria);
4409 MarchingCubeCase00(1, 4, 12, 7, 6, 10,
nnod,
ntria, xyz, grad,
itria);
4415 MarchingCubeCase00(1, 4, 8, 7, 11, 10,
nnod,
ntria, xyz, grad,
itria);
4424 MarchingCubeCase00(1, 9, 12, 7, 6, 2,
nnod,
ntria, xyz, grad,
itria);
4430 if (
ntria == 0)
return;
4432 for ( i=1; i<=
ntria ; i++ ) {
4449 for ( i=1 ; i<=3 ; i++ ) {
4452 if (
i2 == 4)
i2 = 1;
4459 if (
i3 == 0)
i3 = 3;
4466 for ( i=1 ; i<=3 ; i++ ) {
4471 if (
ntria == 0)
return;
4475 if (
itr[
i2-1] < 0) {
4479 if (
itr[
i3-1] < 0) {
4484 for ( i=1 ; i<=3 ; i++ ) {
4485 if (
itria[
j-1][i-1] !=
k2)
continue;
4514 static Int_t it[4][4][3] = { { { 1,2, 3 }, { 0,0, 0 }, { 0,0, 0 }, { 0,0, 0 } },
4515 { { 1,2,-3 }, {-1,3, 4 }, { 0,0, 0 }, { 0,0, 0 } },
4516 { { 1,2,-3 }, {-1,3,-4 }, {-1,4, 5 }, { 0,0, 0 } },
4517 { { 1,2,-3 }, {-1,3,-4 }, {-4,6,-1 }, { 4,5,-6 } }
4531 if (
ie[5] == 0)
nnod = 5;
4532 if (
ie[4] == 0)
nnod = 4;
4533 if (
ie[3] == 0)
nnod = 3;
4539 for ( i=0; i<3 ; i++) {
4540 for (
j=0;
j<4 ;
j++) {
4554 static Int_t ie[6] = { 4,9,1, 2,11,3 };
4555 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4556 static Int_t it2[4][3] = { { 1,2,-5 }, { -1,5,6 }, { 5,-2,4 }, { -4,2,3 } };
4583 static Int_t ie[6] = { 4,9,1, 7,11,6 };
4584 static Int_t it1[2][3] = { { 1,2,3 }, { 4,5,6 } };
4585 static Int_t it2[6][3] = { { 1,2,4 }, { 2,3,6 }, { 3,1,5 },
4586 { 4,5,1 }, { 5,6,3 }, { 6,4,2 } };
4613 static Int_t ie[7] = { 2,4,9,10, 6,7,11 };
4614 static Int_t it1[5][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 } };
4615 static Int_t it2[3][3] = { { 1,2,-3 }, { -1,3,4 }, { 5,6,7 } };
4616 static Int_t it3[7][3] = { { 6,7,-1 }, { -6,1,2 }, { 6,2,3 }, { 6,3,-4 }, { -6,4,5 },
4617 { 1,7,-5 }, { -1,5,4 } };
4655 static Int_t ie[9] = { 3,12,4, 1,10,2, 11,6,7 };
4656 static Int_t it[9][9][3] = {
4657 {{ 1,2,3}, { 4,5,6}, { 7,8,9}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4658 {{ 1,2,3}, { 4,9,-7}, { -4,7,6}, { 9,4,-5}, { -9,5,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4659 {{ 4,5,6}, { 8,3,-1}, { -8,1,7}, { 3,8,-9}, { -3,9,2}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4660 {{-10,2,3}, {10,3,-1}, {-10,1,7}, {10,7,-6}, {-10,6,4}, {10,4,-5}, {-10,5,8}, { 10,8,9}, {10,9,-2}},
4661 {{ 7,8,9}, { 2,5,-6}, { -2,6,1}, { 5,2,-3}, { -5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4662 {{-10,1,2}, {10,2,-3}, {-10,3,4}, { 10,4,5}, {10,5,-8}, {-10,8,9}, {10,9,-7}, {-10,7,6}, {10,6,-1}},
4663 {{ 10,2,3}, {10,3,-4}, {-10,4,5}, {10,5,-6}, {-10,6,1}, {10,1,-7}, {-10,7,8}, {10,8,-9}, {-10,9,2}},
4664 {{ 1,7,6}, { -4,2,3}, {-4,9,-2}, {-9,4,-5}, { -9,5,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4665 {{ -1,9,2}, { 1,2,3}, { 1,3,-4}, { 6,-1,4}, { 6,4,5}, { 6,-5,7}, { -7,5,8}, { 7,8,9}, { 7,-9,1}}
4687 switch ((
int)
icase) {
4708 for ( i=0; i<3 ; i++) {
4709 for (
j=0;
j<9 ;
j++) {
4727 for ( i=0; i<3 ; i++) {
4728 for (
j=0;
j<9 ;
j++) {
4743 static Int_t ie[8] = { 1,3,12,9, 5,7,11,10 };
4744 static Int_t it[6][8][3] = {
4745 {{1,2,-3}, {-1,3,4}, {5,6,-7}, {-5,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4746 {{ 9,1,2}, { 9,2,3}, { 9,3,4}, { 9,4,5}, { 9,5,6}, { 9,6,7}, { 9,7,8}, { 9,8,1}},
4747 {{ 9,1,2}, { 9,4,1}, { 9,3,4}, { 9,6,3}, { 9,5,6}, { 9,8,5}, { 9,7,8}, { 9,2,7}},
4748 {{1,2,-7}, {-1,7,8}, {5,6,-3}, {-5,3,4}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4749 {{1,2,-7}, {-1,7,8}, {2,3,-6}, {-2,6,7}, {3,4,-5}, {-3,5,6}, {4,1,-8}, {-4,8,5}},
4750 {{1,2,-3}, {-1,3,4}, {2,7,-6}, {-2,6,3}, {7,8,-5}, {-7,5,6}, {8,1,-4}, {-8,4,5}}
4770 for ( i=0; i<3 ; i++) {
4771 for (
j=0;
j<8 ;
j++) {
4792 for ( i=0; i<3 ; i++) {
4793 for (
j=0;
j<8 ;
j++) {
4808 static Int_t ie[8] = { 3,12,4, 1,9,8,6,2 };
4809 static Int_t it[6][8][3] = {
4810 {{ 1,2,3}, {4,5,-6}, {-4,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4811 {{-9,1,2}, {9,2,-3}, {-9,3,4}, {9,4,-5}, {-9,5,6}, {9,6,-7}, {-9,7,8}, {9,8,-1}},
4812 {{9,1,-2}, {-9,2,6}, {9,6,-7}, {-9,7,8}, {9,8,-4}, {-9,4,5}, {9,5,-3}, {-9,3,1}},
4813 {{ 3,4,5}, {1,2,-6}, {-1,6,8}, { 6,7,8}, { 0,0,0}, { 0,0,0}, { 0,0,0}, { 0,0,0}},
4814 {{ 7,8,6}, {6,8,-1}, {-6,1,2}, {3,1,-8}, {-3,8,4}, { 3,4,5}, {3,5,-6}, {-3,6,2}},
4815 {{ 7,8,6}, {6,8,-4}, {-6,4,5}, {3,4,-8}, {-3,8,1}, { 3,1,2}, {3,2,-6}, {-3,6,5}}
4835 for ( i=0; i<3 ; i++) {
4836 for (
j=0;
j<8 ;
j++) {
4857 for ( i=0; i<3 ; i++) {
4858 for (
j=0;
j<8 ;
j++) {
4875 {1,2,3,4,5,6,7,8}, {1,5,6,2,4,8,7,3}, {1,4,8,5,2,3,7,6},
4876 {3,7,8,4,2,6,5,1}, {3,2,6,7,4,1,5,8}, {3,4,1,2,7,8,5,6},
4877 {6,7,3,2,5,8,4,1}, {6,5,8,7,2,1,4,3}, {6,2,1,5,7,3,4,8},
4878 {8,4,3,7,5,1,2,6}, {8,5,1,4,7,6,2,3}, {8,7,6,5,4,3,2,1} };
4879 static Int_t iwhat[8] = { 63,62,54,26,50,9,1,0 };
4880 static Int_t ie[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
4882 {1,2,3,4}, {5,6,7,8}, {1,2,6,5}, {2,6,7,3}, {4,3,7,8}, {1,5,8,4} };
4883 static Int_t it1[4][3] = { {1,2,10}, {9,5,8}, {6,11,7}, {3,4,12} };
4884 static Int_t it2[4][3] = { {5,6,10}, {1,4,9}, {2,11,3}, {7,8,12} };
4885 static Int_t it3[6][3] = { {10,12,-3}, {-10,3,2}, {12,10,-1}, {-12,1,4},
4886 {9,5,8}, {6,11,7} };
4887 static Int_t it4[6][3] = { {11,9,-1}, {-11,1,2}, {9,11,-3}, {-9,3,4},
4888 {5,6,10}, {7,8,12} };
4889 static Int_t it5[10][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4890 {13,10,1}, {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2}, {5,8,9} };
4891 static Int_t it6[10][3] = { {13,2,-10}, {-13,10,5}, {13,5,-6}, {-13,6,11},
4892 {13,11,3}, {13,3,-4}, {-13,4,9}, {13,9,-1}, {-13,1,2}, {12,7,8} };
4893 static Int_t it7[12][3] = { {13,2,-11}, {-13,11,7}, {13,7,-6}, {-13,6,10},
4894 {13,10,-5}, {-13,5,8}, {13,8,-9}, {-13,9,1},
4895 {13,1,-4}, {-13,4,12}, {13,12,-3}, {-13,3,2} };
4896 static Int_t it8[6][3] = { {3,8,12}, {3,-2,-8}, {-2,5,-8}, {2,10,-5},
4897 {7,6,11}, {1,4,9} };
4898 static Int_t it9[10][3] = { {7,12,-3}, {-7,3,11}, {11,3,2}, {6,11,-2}, {-6,2,10},
4899 {6,10,5}, {7,6,-5}, {-7,5,8}, {7,8,12}, {1,4,9} };
4900 static Int_t it10[10][3] = { {9,1,-10}, {-9,10,5}, {9,5,8}, {4,9,-8}, {-4,8,12},
4901 {4,12,3}, {1,4,-3}, {-1,3,2}, {1,2,10}, {7,6,11} };
4907 for (
nr=1 ;
nr<=12 ;
nr++ ) {
4910 for (
nf=1 ;
nf<=6 ;
nf++ ) {
4915 if ((
f1*f3-f2*f4)/(
f1+f3-f2-f4) >= 0.) k = k +
incr;
4918 for ( i=1 ; i<=8 ; i++ ) {
4919 if (k !=
iwhat[i-1])
continue;
4925 Error(
"MarchingCubeCase13",
"configuration is not found");
4931 for (
n=1 ;
n<=8 ;
n++) {
4934 for ( i=1 ; i<=3 ; i++ ) {
4935 xyz[
n-1][i-1] =
fP8[k-1][i-1];
4936 grad[
n-1][i-1] =
fG8[k-1][i-1];
4939 for (
n=1 ;
n<=8 ;
n++ ) {
4941 for ( i=1 ; i<=3 ; i++ ) {
4942 fP8[
n-1][i-1] = xyz[
n-1][i-1];
4943 fG8[
n-1][i-1] = grad[
n-1][i-1];
4953 switch ((
int)
icase) {
4974 &xyz[
nnod-1][0], &grad[
nnod-1][0]);
4981 &xyz[
nnod-1][0], &grad[
nnod-1][0]);
4988 &xyz[
nnod-1][0], &grad[
nnod-1][0]);
4995 switch ((
int)(
irep+1)) {
5025 for ( i=1 ; i<=3 ; i++ ) {
5051 for ( i=1 ; i<=3 ; i++ ) {
5058 for ( i=1 ; i<=3 ; i++ ) {
5059 p[i-1] =
p[i-1] + xyz[k-1][i-1];
5060 g[i-1] =
g[i-1] + grad[k-1][i-1];
5063 for ( i=1 ; i<=3 ; i++ ) {
5088 if (
a == 0.)
return;
5092 if (
d <= 0.)
return;
5095 s1 = (-
b+
d) / (2*
a);
5098 s2 = (-
b-
d) / (2*
a);
5156 {1,2}, {2,3}, {3,4}, {4,1}, {5,6}, {6,7}, {7,8}, {8,5}, {1,5}, {2,6}, {3,7}, {4,8} };
5164 for ( i=1 ; i<=3 ; i++ ) {
5187 Int_t n,
nf,
i1,
i2,
i3, i,
icur, k,
itst,
kface,
kf,
irep;
5221 for ( i=1 ; i<=3 ; i++ ) {
5232 for ( i=1 ; i<=3 ; i++ ) {
5233 v[0][i-1] = xyz[
i2-1][i-1] - xyz[
i1-1][i-1];
5234 v[1][i-1] = xyz[
i3-1][i-1] - xyz[
i2-1][i-1];
5236 a = (
v[0][1]*
v[1][2] -
v[0][2]*
v[1][1]);
5237 b = (
v[0][2]*
v[1][0] -
v[0][0]*
v[1][2]);
5238 c = (
v[0][0]*
v[1][1] -
v[0][1]*
v[1][0]);
5247 abcd[
n-1][3] =-(
a*xyz[
i1-1][0] +
b*xyz[
i1-1][1] +
c*xyz[
i1-1][2]);
5250 if (
nf <= 1)
return;
5280 for ( k=
kface-1 ; k>=1 ; k-- ) {
5312 if (
abcdk[0]*xyz[nn[0]-1][0]+
abcdk[1]*xyz[nn[0]-1][1]+
5314 if (
abcdk[0]*xyz[nn[1]-1][0]+
abcdk[1]*xyz[nn[1]-1][1]+
5316 if (
abcdk[0]*xyz[nn[2]-1][0]+
abcdk[1]*xyz[nn[2]-1][1]+
5323 for ( i=1 ; i<=3 ; i++ ) {
5326 if (i != 3)
i2 =
kk[i];
5329 if (
irep==0 )
continue;
5333 for ( i=1 ; i<=3 ; i++ ) {
5336 if (i != 3)
i2 = nn[i];
5339 if (
irep==0 )
continue;
5347 for ( i=k+1 ; i<=
kface ; i++ ) {
5380 Double_t a,
b,
c,
d1,
d2,
dd,
xy, tmin, tmax,
tmid,
x,
y, z;
5386 delta[0] = xyz[
i2-1][0] - xyz[
i1-1][0];
5387 delta[1] = xyz[
i2-1][1] - xyz[
i1-1][1];
5388 delta[2] = xyz[
i2-1][2] - xyz[
i1-1][2];
5394 c =-(
a*xyz[
i1-1][0] +
b*xyz[
i1-1][1]);
5399 for ( i=1 ; i<=3 ; i++ ) {
5403 if (
d[
k1-1]>=0. &&
d[
k2-1]>=0.)
continue;
5404 if (
d[
k1-1] <0. &&
d[
k2-1] <0.)
continue;
5409 t[k-1] = (
xy-xyz[
i1-1][
ixy-1]) / delta[
ixy-1];
5410 if (k == 2)
goto L200;
5418 if (tmin>1. || tmax<0)
return;
5419 if (tmin < 0.) tmin = 0.;
5420 if (tmax > 1.) tmax = 1.;
5421 tmid = (tmin + tmax) / 2.;
5422 x = delta[0]*
tmid + xyz[
i1-1][0];
5423 y = delta[1]*
tmid + xyz[
i1-1][1];
5424 z = delta[2]*
tmid + xyz[
i1-1][2];
5462 Int_t i,
i1,
i2,
j,
ibase,
nnod,
knod,
ntria,
ktria,
iopt,
iready;
5464 Int_t ix,
ix1=0,
ix2=0, iy,
iy1=0,
iy2=0, iz,
iz1=0,
iz2=0, k,
kx,
ky,
kz,
isurf,
nsurf;
5470 static Int_t ind[8][3] = { { 0,0,0 }, { 1,0,0 }, { 1,0,1 }, { 0,0,1 },
5471 { 0,1,0 }, { 1,1,0 }, { 1,1,1 }, { 0,1,1 } };
5480 Error(
"ImplicitFunction",
"no TView in current pad");
5486 Warning(
"IsoSurface",
"Number of iso-surfaces too large. Increase kNiso");
5604 for ( i=1 ; i<=8 ; i++ ) {
5605 kx = ix +
ind[i-1][0];
5606 ky = iy +
ind[i-1][1];
5607 kz = iz +
ind[i-1][2];
5608 p[i-1][0] =
x[
kx-1];
5609 p[i-1][1] =
y[
ky-1];
5610 p[i-1][2] = z[
kz-1];
5617 }
else if (
kx ==
nx) {
5641 }
else if (
ky ==
ny) {
5665 }
else if (
kz ==
nz) {
5709 for (
j=1 ;
j<=3 ;
j++ ){
5721 if (
ntria == 0)
continue;
5722 for ( i=1 ; i<=
nnod ; i++ ) {
5728 if (
ntria == 0)
continue;
5768 Error(
"ImplicitFunction",
"no TView in current pad");
5775 for ( i=1 ; i<=
np ; i++) {
5778 view->
WCtoNDC(&xyz[k-1][0], &
p3[i-1][0]);
short Style_t
Style number (short)
int Int_t
Signed integer 4 bytes (int)
short Color_t
Color number (short)
short Width_t
Line width (short)
float Float_t
Float 4 bytes (float)
double Double_t
Double 8 bytes.
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.
TF3 defines a 3D Function with Parameters.
virtual const Double_t * GetClippingBox() const
TH1 is the base class of all histogram classes in ROOT.
TVirtualHistPainter * GetPainter(Option_t *option="")
Return pointer to painter.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
static void Optimize(Double_t A1, Double_t A2, Int_t nold, Double_t &BinLow, Double_t &BinHigh, Int_t &nbins, Double_t &BWID, Option_t *option="")
Static function to compute reasonable axis limits.
The histogram painter class.
static Int_t ProjectSinusoidal2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function code for sinusoidal projection from Ernst-Jan Buis Source https://en....
static Int_t ProjectMollweide2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
static Int_t ProjectAitoff2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
static Int_t ProjectParabolic2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function code for parabolic projection from Ernst-Jan Buis.
static Int_t ProjectMercator2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
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.