From 8b354f84db28d73ba5fcf9ac742bb1707457c194 Mon Sep 17 00:00:00 2001 From: Peter Willendrup Date: Sat, 31 Oct 2026 17:30:15 +0100 Subject: [PATCH] mcdisplay: filled surfaces at --trace=2 for McStas contrib mirrors Replace line-only MCDISPLAY with polygon() facets, so --trace=2 shows surfaces; --trace=1 keeps outlines. Mirror_Elliptic, Mirror_Parabolic, Mirror_Elliptic_Bispectral, Mirror_Curved_Bispectral, Mirror_conic, SupermirrorFlat (triangle/quad faces; other faces keep lines), FlatEllipse_finite_mirror (both +-w(z) sheets of the conic.h FlatSurf, y in [ll,rl]). Display only, no change to simulation results. Co-Authored-By: Claude Opus 5.5 --- .../contrib/FlatEllipse_finite_mirror.comp | 27 +++++++------------ .../contrib/Mirror_Curved_Bispectral.comp | 7 +---- mcstas-comps/contrib/Mirror_Elliptic.comp | 5 +--- .../contrib/Mirror_Elliptic_Bispectral.comp | 7 +---- mcstas-comps/contrib/Mirror_Parabolic.comp | 5 +--- mcstas-comps/contrib/Mirror_conic.comp | 2 +- mcstas-comps/contrib/SupermirrorFlat.comp | 10 +++++++ 7 files changed, 24 insertions(+), 39 deletions(-) diff --git a/mcstas-comps/contrib/FlatEllipse_finite_mirror.comp b/mcstas-comps/contrib/FlatEllipse_finite_mirror.comp index bbeda4463f..91de4c5552 100644 --- a/mcstas-comps/contrib/FlatEllipse_finite_mirror.comp +++ b/mcstas-comps/contrib/FlatEllipse_finite_mirror.comp @@ -255,23 +255,18 @@ MCDISPLAY for (i = 0; i < s.num_f; i++) { double step = (s.f[i].ze - s.f[i].zs) / 100; double cz, rp, rc; - double last_cz = 0; + double last_cz = 0; cz = s.f[i].zs; - // front line - rp = wFlat (cz, s.f[i]); - line (rp, -half_mirror_sidelength, cz, rp, half_mirror_sidelength, cz); - line (-rp, -half_mirror_sidelength, cz, -rp, half_mirror_sidelength, cz); - for (cz = s.f[i].zs + step; cz < s.f[i].ze; cz += step) { rp = wFlat (cz - step, s.f[i]); rc = wFlat (cz, s.f[i]); - line (rp, -half_mirror_sidelength, cz - step, rc, -half_mirror_sidelength, cz); - line (rp, half_mirror_sidelength, cz - step, rc, half_mirror_sidelength, cz); - line (-rp, -half_mirror_sidelength, cz - step, -rc, -half_mirror_sidelength, cz); - line (-rp, half_mirror_sidelength, cz - step, -rc, half_mirror_sidelength, cz); + polygon (4, rp, -half_mirror_sidelength, cz - step, rp, half_mirror_sidelength, cz - step, rc, half_mirror_sidelength, cz, rc, -half_mirror_sidelength, + cz); + polygon (4, -rp, -half_mirror_sidelength, cz - step, -rp, half_mirror_sidelength, cz - step, -rc, half_mirror_sidelength, cz, -rc, + -half_mirror_sidelength, cz); last_cz = cz; } @@ -280,14 +275,10 @@ MCDISPLAY // cz to s.f[i].ze rp = wFlat (last_cz, s.f[i]); rc = wFlat (s.f[i].ze, s.f[i]); - line (rp, -half_mirror_sidelength, last_cz, rc, -half_mirror_sidelength, s.f[i].ze); - line (rp, half_mirror_sidelength, last_cz, rc, half_mirror_sidelength, s.f[i].ze); - line (-rp, -half_mirror_sidelength, last_cz, -rc, -half_mirror_sidelength, s.f[i].ze); - line (-rp, half_mirror_sidelength, last_cz, -rc, half_mirror_sidelength, s.f[i].ze); - - // end line - line (rc, -half_mirror_sidelength, s.f[i].ze, rc, half_mirror_sidelength, s.f[i].ze); - line (-rc, -half_mirror_sidelength, s.f[i].ze, -rc, half_mirror_sidelength, s.f[i].ze); + polygon (4, rp, -half_mirror_sidelength, last_cz, rp, half_mirror_sidelength, last_cz, rc, half_mirror_sidelength, s.f[i].ze, rc, -half_mirror_sidelength, + s.f[i].ze); + polygon (4, -rp, -half_mirror_sidelength, last_cz, -rp, half_mirror_sidelength, last_cz, -rc, half_mirror_sidelength, s.f[i].ze, -rc, + -half_mirror_sidelength, s.f[i].ze); } %} diff --git a/mcstas-comps/contrib/Mirror_Curved_Bispectral.comp b/mcstas-comps/contrib/Mirror_Curved_Bispectral.comp index 69b846a26a..e647642ec3 100644 --- a/mcstas-comps/contrib/Mirror_Curved_Bispectral.comp +++ b/mcstas-comps/contrib/Mirror_Curved_Bispectral.comp @@ -681,7 +681,6 @@ TRACE MCDISPLAY %{ - /* if (xcenter==0){ @@ -788,13 +787,9 @@ MCDISPLAY } for (j = 0; j < n_lines; j++) { - line (x_plot[j], -ypos[j], zpos[j], x_plot[j + 1], -ypos[j + 1], zpos[j + 1]); - line (x_plot[j], ypos[j], zpos[j], x_plot[j + 1], ypos[j + 1], zpos[j + 1]); + polygon (4, x_plot[j], -ypos[j], zpos[j], x_plot[j], ypos[j], zpos[j], x_plot[j + 1], ypos[j + 1], zpos[j + 1], x_plot[j + 1], -ypos[j + 1], zpos[j + 1]); } - line (x_plot[0], -ypos[0], zpos[0], x_plot[0], ypos[0], zpos[0]); - line (x_plot[50], -ypos[50], zpos[50], x_plot[50], ypos[50], zpos[50]); - // printf("ypos0=%f xpos0=%f ypos50=%f xpos50=%f",ypos[0], x_plot[0], ypos[50], x_plot[50]); /* double xmax, xmin, ymax, ymin; diff --git a/mcstas-comps/contrib/Mirror_Elliptic.comp b/mcstas-comps/contrib/Mirror_Elliptic.comp index e0e4f0a897..7f8ebb3f6b 100644 --- a/mcstas-comps/contrib/Mirror_Elliptic.comp +++ b/mcstas-comps/contrib/Mirror_Elliptic.comp @@ -207,15 +207,12 @@ MCDISPLAY delta_z = (zmax - zmin) / 99; xi = -beta1 * sqrt (1 - zmin * zmin / alpha2); - line (xi, -yheight, zmin, xi, yheight, zmin); zi = zmin; /* printf("delta_z : %f / xi : %f / zi : %f\n",delta_z,xi,zi); */ do { zf = zi + delta_z; xf = -beta1 * sqrt (1 - zf * zf / alpha2); - line (xi, yheight, zi, xf, yheight, zf); - line (xf, yheight, zf, xf, -yheight, zf); - line (xf, -yheight, zf, xi, -yheight, zi); + polygon (4, xi, -yheight, zi, xi, yheight, zi, xf, yheight, zf, xf, -yheight, zf); xi = xf; zi = zf; } while (zf <= zmax); diff --git a/mcstas-comps/contrib/Mirror_Elliptic_Bispectral.comp b/mcstas-comps/contrib/Mirror_Elliptic_Bispectral.comp index 83f788a643..43698c15a5 100644 --- a/mcstas-comps/contrib/Mirror_Elliptic_Bispectral.comp +++ b/mcstas-comps/contrib/Mirror_Elliptic_Bispectral.comp @@ -423,7 +423,6 @@ TRACE MCDISPLAY %{ - double xstart; double xend; double xprime_start; @@ -491,13 +490,9 @@ MCDISPLAY } for (j = 0; j < n_lines; j++) { - line (x_plot[j], -ypos[j], zpos[j], x_plot[j + 1], -ypos[j + 1], zpos[j + 1]); - line (x_plot[j], ypos[j], zpos[j], x_plot[j + 1], ypos[j + 1], zpos[j + 1]); + polygon (4, x_plot[j], -ypos[j], zpos[j], x_plot[j], ypos[j], zpos[j], x_plot[j + 1], ypos[j + 1], zpos[j + 1], x_plot[j + 1], -ypos[j + 1], zpos[j + 1]); } - line (x_plot[0], -ypos[0], zpos[0], x_plot[0], ypos[0], zpos[0]); - line (x_plot[50], -ypos[50], zpos[50], x_plot[50], ypos[50], zpos[50]); - // printf("ypos0=%f xpos0=%f ypos50=%f xpos50=%f",ypos[0], x_plot[0], ypos[50], x_plot[50]); /* double xmax, xmin, ymax, ymin; diff --git a/mcstas-comps/contrib/Mirror_Parabolic.comp b/mcstas-comps/contrib/Mirror_Parabolic.comp index 08d9a2a362..bab93d7134 100644 --- a/mcstas-comps/contrib/Mirror_Parabolic.comp +++ b/mcstas-comps/contrib/Mirror_Parabolic.comp @@ -203,14 +203,11 @@ MCDISPLAY delta0 = xwidth / 99; xi = xwidth + xshift; - line (xi, -yheight, 0, xi, yheight, 0); do { xf = xi - delta0; zi = gamma1 * xi * xi + beta1; zf = gamma1 * xf * xf + beta1; - line (xi, yheight, zi, xf, yheight, zf); - line (xi, -yheight, zi, xf, -yheight, zf); - line (xf, yheight, zf, xf, -yheight, zf); + polygon (4, xi, -yheight, zi, xi, yheight, zi, xf, yheight, zf, xf, -yheight, zf); xi = xf; } while (xf >= xshift); %} diff --git a/mcstas-comps/contrib/Mirror_conic.comp b/mcstas-comps/contrib/Mirror_conic.comp index 49f0aac177..ef564582df 100644 --- a/mcstas-comps/contrib/Mirror_conic.comp +++ b/mcstas-comps/contrib/Mirror_conic.comp @@ -133,7 +133,7 @@ TRACE MCDISPLAY %{ - rectangle ("yz", 0, 0, length / 2, length, yheight); + polygon (4, 0.0, -yheight / 2, 0.0, 0.0, -yheight / 2, length, 0.0, yheight / 2, length, 0.0, yheight / 2, 0.0); %} END diff --git a/mcstas-comps/contrib/SupermirrorFlat.comp b/mcstas-comps/contrib/SupermirrorFlat.comp index d3427c4928..540f19b85c 100644 --- a/mcstas-comps/contrib/SupermirrorFlat.comp +++ b/mcstas-comps/contrib/SupermirrorFlat.comp @@ -414,6 +414,16 @@ MCDISPLAY for (i = 0; i < n; i++) { m = sm.geo.afvi[i].nfvi; ifvi1 = sm.geo.afvi[i].ifvi; + if (m == 3) { + polygon (3, vp1[ifvi1[0]].x, vp1[ifvi1[0]].y, vp1[ifvi1[0]].z, vp1[ifvi1[1]].x, vp1[ifvi1[1]].y, vp1[ifvi1[1]].z, vp1[ifvi1[2]].x, vp1[ifvi1[2]].y, + vp1[ifvi1[2]].z); + continue; + } + if (m == 4) { + polygon (4, vp1[ifvi1[0]].x, vp1[ifvi1[0]].y, vp1[ifvi1[0]].z, vp1[ifvi1[1]].x, vp1[ifvi1[1]].y, vp1[ifvi1[1]].z, vp1[ifvi1[2]].x, vp1[ifvi1[2]].y, + vp1[ifvi1[2]].z, vp1[ifvi1[3]].x, vp1[ifvi1[3]].y, vp1[ifvi1[3]].z); + continue; + } k1 = ifvi1[0]; for (j = 1; j < m; j++) { k2 = ifvi1[j];