double& operator[](int i) { return xyz[i]; }
operator Onscreen() const;
+ Point halftransformed() const { return usertransforms(*this); }
Point transformed() const { return povtransform(usertransforms(*this)); }
double index() const { return transformed()[2]; }
X11Output *x11= 0;
DualX11Output *dualx11= 0;
+static Moebius *strip= 0;
+
void generate() {
if (list) delete list;
- Moebius *strip;
+ if (strip) { delete strip; strip= 0; }
switch (version) {
case 0: strip= new MoebiusStrip(width); break;
case 1: strip= new MoebiusEnfoldment(thickness,bottomportion); break;
}
t0= t1;
}
- delete strip;
}
int main(int argc, char **argv) {
+ static const char pointmap_cmd[]= "pointmap ";
char buf[100];
+ double pointmap_t, pointmap_u;
for (;;) {
Point::setobserver(theta,eta,planedistance,eyedistance,cutoffdistance);
AnyParameter::help();
} else if (!strcmp(buf,"help")) {
AnyParameter::list();
+ } else if (!strncmp(buf,pointmap_cmd,sizeof(pointmap_cmd)-1)) {
+ if (sscanf(buf+sizeof(pointmap_cmd)-1, "%lf %lf",
+ &pointmap_t, &pointmap_u) != 2) {
+ cerr << "failed to parse pointmap args\n";
+ continue;
+ }
+ Point p= strip->middlepoint(pointmap_t,pointmap_u);
+ cout << "\n";
+ for (int i=0; i<3; i++) cout << p.halftransformed()[i] << "\n";
} else if (!*buf) {
break;
} else {