9 #include "transforms.hh"
11 double Point::planedistance= 1.0;
12 double Point::eyedistance= 1.0;
13 double Point::cutoffdistance= 10.0;
14 double Point::eyex= 0.0;
16 TransformList Point::usertransforms;
17 TransformList Point::povtransform;
19 Point TransformList::operator()(Point it) {
20 for (int i=0; i<used; i++) { it= (*a[i])(it); }
24 void TransformList::append(Transform *it) {
27 a= (Transform**)realloc(a,sizeof(Transform*)*size);
28 if (!a) { perror("realloc"); exit(1); }
33 void TransformList::clearcontents() {
34 for (int i=0; i<used; i++) delete a[i];
37 Point::operator Onscreen() const {
38 Point it= transformed();
39 double factor= eyedistance / (eyedistance + planedistance - it[2]);
40 return Onscreen(it[0] * factor + eyex * (1.0-factor), it[1] * factor);
43 void Point::setobserver(double theta, double eta, double planedist, double eyedist,
45 planedistance= planedist;
47 cutoffdistance= cutoffdist;
49 if (theta != 0.0) povtransform.append(new XZRotationTransform(theta));
50 if (eta != 0.0) povtransform.append(new YZRotationTransform(eta));