From: ian Date: Wed, 23 Sep 1998 00:28:30 +0000 (+0000) Subject: X window size is a parameter; scale is a parameter; whether to draw original strip... X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=5095d1eeeeff39305ec3b60d4134ff4929eaabca;p=moebius.git X window size is a parameter; scale is a parameter; whether to draw original strip or enfoldment is a parameter. --- diff --git a/dualx11.cc b/dualx11.cc index dbd3e4b..5c40ba2 100644 --- a/dualx11.cc +++ b/dualx11.cc @@ -5,6 +5,9 @@ #include "dualx11.hh" #include "parameter.hh" +static Parameter dualx11size("dualx11size", "Dual X11 window size", + 500, 100, 10, 10000); + DualX11Output::DualX11Output() { display= XOpenDisplay(0); Colormap cmap= DefaultColormap(display,DefaultScreen(display)); @@ -26,7 +29,7 @@ DualX11Output::DualX11Output() { window= XCreateSimpleWindow(display, DefaultRootWindow(display), - 0,0, 500,500, 0,0, pixelbase); + 0,0, dualx11size,dualx11size, 0,0, pixelbase); XGCValues gcvalues; int i; @@ -69,8 +72,8 @@ void DualX11Output::drawcell(const Point* list, int n) { XPoint xp[n+1]; for (int j=0; j tn("tn", "Number of sections around `strip'", 30, 1, 1, 500); -Parameter un("un", "Number of sections across `strip'", 15, 1, 1, 500); -Parameter theta("theta", "Angle of model rotation", - /*-PI/2.*/0, M_PI/8., -M_PI*2., M_PI*2.); -Parameter eta("eta", "Angle of model elevation", 0., M_PI/8., -M_PI*2., M_PI*2.); -Parameter planedistance("plane", "Distance from projection plane to origin", - 4., .25, 0., 100.); -Parameter eyedistance("eye", "Distance from projection eye to origin", - 1.5, .25, 0., 100.); -Parameter cutoffdistance("cutoff", "Distance from projection cutoff to origin", - 10., .25, -10., 100.); -Parameter width("width", "Width of the `strip' before transformation", - .4, .1, 0., 1.); -Parameter thickness("thick", "Thickness of the `pancake'", 1., .1, 0., 1.); -Parameter bottomportion("bp", "Proportion in the bottom half", - .7, .1, 0., 1.); -//Parameter tear("tear", "Angle factor in tear-open", 0/*1.1*/, .1, -5., 5.); -//Parameter teary("teary", "Axis y coord in tear-open", 1.3, .1, -10., 10.); -//Parameter twist("twist", "Angle per length in twist", 0/*.8*/, .25, -5., 5.); -//Parameter twisty("twisty", "Axis y coord in twist", .85, .1, -10., 10.); -//Parameter bulge("bulge", "Amount of bulge", 0/*1.*/, .25, -15., 15.); -//Parameter bulgesd("bulgesd", "S.D. of bulge", 1., .2, .000001, 20.); -//Parameter bulgey("bulgey", "Axis y coord in bulge", .85, .1, -10., 10.); -//Parameter shearx("shearx", "Amount of shear (x)", 0., .1, -15., 15.); -//Parameter sheary("sheary", "Amount of shear (y)", 0/*1.*/, .1, -15., 15.); -//Parameter shearsdx("shearsdx", "S.D. of shear (x)", .5, .1, -15., 15.); -//Parameter shearsdy("shearsdy", "S.D. of shear (y)", .5, .1, -15., 15.); -//Parameter shearey("shearey", "Centre of shear (y)", 1.3, .1, -10., 10.); +static Parameter tn("tn", "Number of sections around `strip'", 30, 1, 1, 500); +static Parameter un("un", "Number of sections across `strip'", 15, 1, 1, 500); +static Parameter orig("orig", "Use original strip (not reformulated)", 1, 0, 0, 1); +static Parameter theta("theta", "Angle of model rotation", + /*-PI/2.*/0, M_PI/8., -M_PI*2., M_PI*2.); +static Parameter eta("eta", "Angle of model elevation", + 0., M_PI/8., -M_PI*2., M_PI*2.); +static Parameter scale("scale", "Scale factor for resulting object", + 1.0, 0.25, 0.001, 1000.); +static Parameter planedistance("plane", + "Distance from projection plane to origin", + 4., .25, 0., 100.); +static Parameter eyedistance("eye", "Distance from projection eye to origin", + 1.5, .25, 0., 100.); +static Parameter cutoffdistance("cutoff", + "Distance from projection cutoff to origin", + 10., .25, -10., 100.); +static Parameter width("width", "Width of the `strip' before transformation", + .4, .1, 0., 1.); +static Parameter thickness("thick", "Thickness of the `pancake'", 1., .1, 0., 1.); +static Parameter bottomportion("bp", "Proportion in the bottom half", + .7, .1, 0., 1.); +static Parameter tear("tear", "Angle factor in tear-open", + 0/*1.1*/, .1, -5., 5.); +static Parameter teary("teary", "Axis y coord in tear-open", 1.3, .1, -10., 10.); +static Parameter twist("twist", "Angle per length in twist", + 0/*.8*/, .25, -5., 5.); +static Parameter twisty("twisty", "Axis y coord in twist", .85, .1, -10., 10.); +static Parameter bulge("bulge", "Amount of bulge", 0/*1.*/, .25, -15., 15.); +static Parameter bulgesd("bulgesd", "S.D. of bulge", 1., .2, .000001, 20.); +static Parameter bulgey("bulgey", "Axis y coord in bulge", .85, .1, -10., 10.); +static Parameter shearx("shearx", "Amount of shear (x)", 0., .1, -15., 15.); +static Parameter sheary("sheary", "Amount of shear (y)", 0/*1.*/, .1, -15., 15.); +static Parameter shearsdx("shearsdx", "S.D. of shear (x)", .5, .1, -15., 15.); +static Parameter shearsdy("shearsdy", "S.D. of shear (y)", .5, .1, -15., 15.); +static Parameter shearey("shearey", "Centre of shear (y)", 1.3, .1, -10., 10.); SortedCellList *list=0; X11Output *x11= 0; @@ -53,8 +61,12 @@ DualX11Output *dualx11= 0; void generate() { if (list) delete list; - // MoebiusStrip strip(width); - MoebiusEnfoldment strip(thickness,bottomportion); + Moebius *strip; + if (orig) { + strip= new MoebiusStrip(width); + } else { + strip= new MoebiusEnfoldment(thickness,bottomportion); + } list= new SortedCellList; double t0= 0.0; for (int ti=0; tip[0]= strip.middlepoint(t0,u0); + cell->p[0]= strip->middlepoint(t0,u0); //fprintf(stderr,"t %7.4f u %7.4f %7.4f,%7.4f,%7.4f\n", // t0,u0, cell->p[0][0], cell->p[0][1], cell->p[0][2]); - cell->p[1]= strip.middlepoint(t0,u1); - cell->p[2]= strip.middlepoint(t1,u1); - cell->p[3]= strip.middlepoint(t1,u0); + cell->p[1]= strip->middlepoint(t0,u1); + cell->p[2]= strip->middlepoint(t1,u1); + cell->p[3]= strip->middlepoint(t1,u0); list->insert(cell); u0= u1; } t0= t1; } + delete strip; } int main(int argc, char **argv) { @@ -83,13 +96,14 @@ int main(int argc, char **argv) { for (;;) { Point::setobserver(theta,eta,planedistance,eyedistance,cutoffdistance); Point::cleartransform(); -// if (tear != 0.0) Point::appendtransform(new TearOpenTransform(tear,teary)); -// if (twist != 0.0) Point::appendtransform(new TwistTransform(twist,twisty)); -// if (bulge != 0.0) Point::appendtransform(new BulgeTransform(bulge,bulgesd,bulgey)); -// if (shearx != 0.0 || sheary != 0.0) -// Point::appendtransform(new ShearTransform(Point(0.0,shearey,0.0), -// Point(shearx,sheary,0.0), -// Point(shearsdx,shearsdy,1e20))); + if (tear != 0.0) Point::appendtransform(new TearOpenTransform(tear,teary)); + if (twist != 0.0) Point::appendtransform(new TwistTransform(twist,twisty)); + if (bulge != 0.0) Point::appendtransform(new BulgeTransform(bulge,bulgesd,bulgey)); + if (shearx != 0.0 || sheary != 0.0) + Point::appendtransform(new ShearTransform(Point(0.0,shearey,0.0), + Point(shearx,sheary,0.0), + Point(shearsdx,shearsdy,1e20))); + Point::appendtransform(new ScaleTransform(scale)); generate(); if (x11) list->display(*x11); if (dualx11) list->display(*dualx11); @@ -149,4 +163,3 @@ int main(int argc, char **argv) { } } } - diff --git a/transforms.cc b/transforms.cc index d5b6cd6..abd3fce 100644 --- a/transforms.cc +++ b/transforms.cc @@ -68,6 +68,10 @@ Point TwistTransform::operator()(Point in) { return Point(nx,ny,in[2]); } +Point ScaleTransform::operator()(Point in) { + return in*scale; +} + Point MagicTransform::operator()(Point in) { double nz= in[2]*zfactor; double r= sqrt(in[0]*in[0] + in[1]*in[1]); diff --git a/transforms.hh b/transforms.hh index e398d27..bb7c3ce 100644 --- a/transforms.hh +++ b/transforms.hh @@ -78,6 +78,13 @@ public: Point operator()(Point in); }; +class ScaleTransform : public Transform { + double scale; +public: + ScaleTransform(double s) { scale= s; } + Point operator()(Point in); +}; + class MagicTransform : public Transform { double xkonstant, xfactor, yoffset, yfactor, zfactor; public: diff --git a/x11.cc b/x11.cc index b724594..b88a5e9 100644 --- a/x11.cc +++ b/x11.cc @@ -4,13 +4,16 @@ #include "x11.hh" +#include "parameter.hh" + +static Parameter x11size("x11size", "X11 window size", 500, 100, 10, 10000); X11Output::X11Output() { XGCValues gcvalues; display= XOpenDisplay(0); window= XCreateSimpleWindow(display, DefaultRootWindow(display), - 0,0, 500,500, 0,0,0); + 0,0, x11size,x11size, 0,0,0); gcvalues.background= 0; fabric= XCreateGC(display,window,GCBackground,&gcvalues); gcvalues.foreground= 1; @@ -37,8 +40,8 @@ void X11Output::drawcell(const Point* list, int n) { XPoint xp[n+1]; for (int i=0; i