X-Git-Url: http://git.maemo.org/git/?p=speedfreak;a=blobdiff_plain;f=Client%2Froutedialog.cpp;h=42f5faadb9376c23a275beae1b37ceafd8774c69;hp=364879757c5f4fc592928ff6f43f40853ef5a4f7;hb=b8104711348ebb86e8c93b23067af8f699870626;hpb=851f8d2a906cfabfd0fb57a5e41732c1bda41cfe diff --git a/Client/routedialog.cpp b/Client/routedialog.cpp index 3648797..42f5faa 100644 --- a/Client/routedialog.cpp +++ b/Client/routedialog.cpp @@ -11,108 +11,159 @@ #include #include #include -//#include -//#include -//#include #include +#include +#include -typedef struct +/* + * Vector class. + * In starting Qt 4.6 there is QVector3D. + * Later (updating Qt version) this class can be removed. + */ +class Vector { qreal x, y, z; -} VECTOR; - -int left, top, right, bottom; // Limits in screen coordinates -qreal xmax, xmin, ymin, ymax; // Limits in world coordinates - -//QList vertexList; // Vertecies of route -QList vertexList; +public: + Vector() { x=0.; y=0. ; z=0.; }; + Vector( qreal initX, qreal initY, qreal initZ) { x = initX, y = initY; z = initZ; }; + void setX( qreal newX) { x = newX; }; + void setY( qreal newY) { y = newY; }; + void setZ( qreal newZ) { z = newZ; }; + qreal getX() { return x; }; + qreal getY() { return y; }; + qreal getZ() { return z; }; + qreal length() { return sqrt(x*x+y*y+z*z); }; + Vector operator+(Vector v) + { + x = x + v.x; y = y + v.y; z = z + v.z; + return *this; + }; + Vector operator-(Vector v) + { + x = x - v.x; y = y - v.y; z = z - v.z; + return *this; + }; + Vector operator/(qreal c) + { + x = x/c; y = y/c; z = z/c; + return *this; + }; + Vector crossProduct( Vector a, Vector b) + { + x = a.y*b.z - a.z*b.y; + y = a.z*b.x - a.x*b.z; + z = a.x*b.y - a.y*b.x; + return *this; + }; +}; -//QVector3D atPoint, fromPoint, up; -//QVector3D a1, a2, a3; -VECTOR atPoint, fromPoint, up, a1, a2, a3; -// QVector3D dist; -qreal offsx, offsy, offsz; -qreal objxmin, objxmax, objymin, objymax, objzmin, objzmax; -qreal t_from; -qreal angle; -qreal a, b,c,d, dval; +class Viewing +{ + Vector atPoint, fromPoint, up, a1, a2, a3; + qreal offsx, offsy, offsz; + qreal dval; + qreal angle; +public: + qreal getOffsx() { return offsx; }; + qreal getOffsy() { return offsy; }; + qreal getOffsz() { return offsz; }; + qreal getDval() { return dval; }; + void setAngle( qreal newA) { angle = newA; }; + void setUp( qreal newUpX, qreal newUpY, qreal newUpZ) + { + up.setX(newUpX); up.setY(newUpY); up.setZ(newUpZ); + }; + void setAtPoint( qreal newX, qreal newY, qreal newZ) + { + atPoint.setX(newX); atPoint.setY(newY); atPoint.setZ(newZ); + }; + void setFromPoint(qreal newX, qreal newY, qreal newZ) + { + fromPoint.setX(newX); fromPoint.setY(newY); fromPoint.setZ(newZ); + } + void setEye() + { + double amarkmag, tempmag; + Vector temp, dist; + + dval = cos(angle/2.0)/sin(angle/2.0); + dist = atPoint-fromPoint; + amarkmag = dist.length(); + a3 = dist/amarkmag; + + temp.crossProduct( dist, up); + tempmag = temp.length(); + a1 = temp/tempmag; + + temp.crossProduct( a1, a3); + tempmag = temp.length(); + a2 = temp/tempmag; + + offsx = -a1.getX()*fromPoint.getX() - a1.getY()*fromPoint.getY() - a1.getZ()*fromPoint.getZ(); + offsy = -a2.getX()*fromPoint.getX() - a2.getY()*fromPoint.getY() - a2.getZ()*fromPoint.getZ(); + offsz = -a3.getX()*fromPoint.getX() - a3.getY()*fromPoint.getY() - a3.getZ()*fromPoint.getZ(); + //QString jono2 = QString("offsx %1 offsy %2 offsz %3").arg(offsx).arg(offsy).arg(offsz); + //QMessageBox::about(0,"offs x y z", jono2); + } ; + Vector getAtPoint() { return atPoint; }; + Vector getFromPoint() { return fromPoint; }; + Vector getA1() { return a1; }; + Vector getA2() { return a2; }; + Vector getA3() { return a3; }; + Viewing () {}; +}; + +qreal xmax, xmin, ymin, ymax; // Limits in world coordinates + +QList vertexList; // Vertecies of route + +qreal objxmin, objxmax, objymin, objymax, objzmin, objzmax; // data ranges #define maxof(val1,val2) ((val1>val2)?val1:val2) #define toradians( degrees) (degrees*0.017453293) -#define WIDTH 1.8 - -int length = 24; -int connection[24] = { 1, 5, 8, -4, - 5, 6, 7, -8, - 6, 2, 3, -7, - 1, 4, 3, -2, - 8, 7, 3, -4, - 6, 5, 1, -2 }; -/*QVector3D pa[8] = { {1.,1.,1.},{1.,1.,0.}, - {1.,0.,0.},{1.,0.,1.}, - {0.,1.,1.},{0.,1.,0.}, - {0.,0.,0.},{0.,0.,1.}};*/ -//QVector3D pa[8]; -VECTOR pa[8]; - -void setAtPoint(); -void setFromPoint(); -void setEye(); +#define WIDTH 1.8 // For 3d viewing only +qreal a, b,c,d; // Used for 3d viewing to calculate screen coordinates + +Viewing view3d; // Viewing settings for 3d + +// Function prototypes +void dataMinMax( void); +void setAtPoint( Viewing *v); +void setFromPoint( Viewing *v); +void transformseg( Viewing *v, Vector *v1, Vector *v2, int *xscreen1, int *yscreen1, int *xscreen2, int *yscreen2 ); + +#define R 6378.140 // The radius of the earth by kilometers +/* + * count distance of two points (defined by longitude & latitude) + * on the surface of the earth. + */ +qreal countDistance(Vector *p1, Vector *p2) +{ + qreal dLon, dLat; // delta of longitude & latitude + qreal a, c; + + dLon = p2->getX() - p1->getX(); // longitude difference + dLat = p2->getY() - p1->getY(); // latitude difference + if (dLon <0) dLon = -dLon; + if (dLat <0) dLat = -dLat; + + dLon = dLon*3.14/180; + dLat = dLat*3.14/180; + a = (sin(dLat/2.))*(sin(dLat/2.)) + + (cos(p1->getY())*3.14/180)*(cos(p2->getY())*3.14/180)*(sin(dLon/2.))*(sin(dLon/2.)); + c = 2.*atan(sqrt(a)/sqrt(1-a)); // c is angle between points p1 & p2 with circel by radius 1. + + return R*c; // Return distance in kilometers +} RouteDialog::RouteDialog(QWidget *parent) : QDialog(parent), ui(new Ui::RouteDialog) { ui->setupUi(this); - left = 50; - top = 50; - right = 350; - bottom = 200; - xmin =0.0; xmax=100.0; ymin = 0.0; ymax = 20.0; - - /*vertexList.append(QVector3D(40.02, 10.02, 10.02)); - vertexList.append(QVector3D(50.01, 5.01, 10)); - vertexList.append(QVector3D(69.98, 4.98, 10)); - vertexList.append(QVector3D(80.02, 9.98, 10)); - vertexList.append(QVector3D(70.01, 15.01, 10)); - vertexList.append(QVector3D(49.99, 14.97, 10)); - vertexList.append(QVector3D(40.01, 10.01, 10.02)); -*/ - /*pa[0] = QVector3D(1.,1.,1.); - pa[1] = QVector3D(1.,1.,0.); - pa[2] = QVector3D(1.,0.,0.); - pa[3] = QVector3D(1.,0.,1.); - pa[4] = QVector3D(0.,1.,1.); - pa[5] = QVector3D(0.,1.,0.); - pa[6] = QVector3D(0.,0.,0.); - pa[7] = QVector3D(0.,0.,1.); - */ - - pa[0].x = 1.; pa[0].y = 1.; pa[0].z =1.; - pa[1].x = 1.; pa[1].y = 1.; pa[1].z = 0.; - pa[2].x = 1.; pa[2].y = 0.; pa[2].z = 0.; - pa[3].x = 1.; pa[3].y = 0.; pa[3].z = 1.; - pa[4].x = 0.; pa[4].y = 1.; pa[4].z = 1.; - pa[5].x = 0.; pa[5].y = 1.; pa[5].y = 0.; - pa[6].x = 0.; pa[6].y = 0.; pa[6].z = 0.; - pa[7].x = 0.; pa[7].y = 0.; pa[7].z = 1.; - - fromPoint.x = 1.0; fromPoint.y = 0.0; fromPoint.z = 0.0; - atPoint.x = 0.0; atPoint.y = 0.0; atPoint.z = 0.0; - up.x = 0.0; up.y = 0.0; up.z = 1.0; - - a = 350/2; - b = 1 - a*(-1); - c = 200/2; - d = 200 - c*(-1); - angle = toradians(60); - t_from = 1.0; - - setAtPoint(); - setFromPoint(); - setEye(); + left = 5; top = 5; right = 395; bottom = 195; // Limits in screen coordinates } RouteDialog::~RouteDialog() @@ -134,68 +185,179 @@ void RouteDialog::changeEvent(QEvent *e) /** - * Draws route to the route dialog + * Draws route to the route dialog. + * Type 0 is 2d viewing and type 1 is for 3d viewing * @param QPaintEvent - * + */ +/* */ void RouteDialog::paintEvent(QPaintEvent *) { - // 2d draw + int type = 0; // 0 for 2d, 1 for 3d + int startx, starty; // Starting point of the route int i, maxi; qreal x1, y1, x2, y2; - int scx1, scy1, scx2, scy2; + int x1Screen, y1Screen, x2Screen, y2Screen; + Vector v1, v2; + QPainter painter(this); - QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen((Qt::black),2)); + painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern)); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen((Qt::black),2)); - painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern)); + // Draw route window frame + /*painter.drawLine(left,top,right,top); + painter.drawLine(right,top,right,bottom); + painter.drawLine(left,top,left,bottom); + painter.drawLine(left,bottom,right,bottom); + */ + maxi = vertexList.size(); - // Draw route window frsme - painter.drawLine(left,top,right,top); - painter.drawLine(right,top,right,bottom); - painter.drawLine(left,top,left,bottom); - painter.drawLine(left,bottom,right,bottom); + for (i=0; i 0) + { + double x, y, z; + x = str2.toDouble(); + y = str1.toDouble(); + z = str3.toDouble(); + temp.setX( x); // Longitude + temp.setY( y); // Latitude + temp.setZ( z); // altitude + + vertexList.append(temp); + } + } + } + + file.close(); + + /******** in 3d use only */ + a = 400/2.; + b = 1 - a*(-1); + c = -300/2.; + d = 300 - c*(-1); + //angle = toradians(60); + + view3d.setUp( 1.0, 0.0, 0.0); + view3d.setAngle(toradians(60)); + setAtPoint( &view3d); + xmin = objxmin; xmax = objxmax; ymin = objymin; ymax = objymax; // 2d viewing needs this !!!! + setFromPoint( &view3d); + view3d.setEye(); + /****** end of 3d *****/ + + /* + //Testing distance counting + Vector a1, a2; + qreal dist; + //a1.setX( xmin); a1.setY( ymin); + //a2.setX( xmax); a2.setY( ymax); + a1.setX( 25.483); a1.setY( 65.017); // Oulu + a2.setX( 27.767); a2.setY( 64.283); // Kajaani + dist = countDistance( &a1, &a2); + QString str = QString("Min & Max datan välimatka %1").arg(dist); + QMessageBox::about( 0, "Testi", str); + */ + + return true; +} + +/* + * Find out data range for x-, y- and z-coordinates + */ void dataMinMax( void) { int i, maxi; qreal x,y,z; + Vector temp; - objxmax = objxmin = pa[0].x; //vertexList.at(0).x(); - objymax = objymin = pa[0].y; //vertexList.at(0).y(); - objzmax = objzmin = pa[0].z; //vertexList.at(0).z(); + temp = vertexList.at(0); + objxmax = objxmin = temp.getX(); + objymax = objymin = temp.getY(); + objzmax = objzmin = temp.getZ(); - //maxi = vertexList.size(); - maxi = 8; + maxi = vertexList.size(); for (i=1; isetAtPoint( x, y, z); + //QString jono = QString("AtX %1 Aty %2 AtZ %3").arg(atPoint.x()).arg(atPoint.y()).arg(atPoint.z()); + //QString jono = QString("AtX %1 Aty %2 AtZ %3").arg(atPoint.x).arg(atPoint.y).arg(atPoint.z); - return c; + /* * + test = v->getAtPoint(); + QString jono = QString("AtX %1 Aty %2 AtZ %3").arg(test.getX()).arg(test.getY()).arg(test.getZ()); + QMessageBox::about(0,"At point", jono); + * */ } -void setEye() +/* + * Setting the point where the object is viewed by eye. + */ +void setFromPoint( Viewing *v) { - double amarkmag, tempmag; - //QVector3D temp; - //QVector3D dist; - VECTOR temp, dist; - - dval = cos(angle/2.0)/sin(angle/2.0); - //dist = atPoint-fromPoint; - dist.x = atPoint.x - fromPoint.x; - dist.y = atPoint.y - fromPoint.y; - dist.z = atPoint.z - fromPoint.z; - //amarkmag = dist.length(); - amarkmag = sqrt( dist.x*dist.x + dist.y*dist.y + dist.z*dist.z); - //QString jono = QString("amarkmag %1").arg(amarkmag); - //QMessageBox::about(0,"amarkmag", jono); // 1.4 - //a3 = dist.operator /=(amarkmag); - a3.x = dist.x/amarkmag; - a3.y = dist.y/amarkmag; - a3.z = dist.z/amarkmag; - - //temp.crossProduct( dist, up); - temp = CrossProduct( dist, up); - //tempmag = temp.length(); - tempmag = sqrt( temp.x*temp.x + temp.y*temp.y + temp.z*temp.z); - //a1 = temp.operator /=(tempmag); - a1.x = temp.x/tempmag; - a1.y = temp.y/tempmag; - a1.z = temp.z/tempmag; - - //temp.crossProduct( a1, a3); - temp = CrossProduct( a1, a3); - //tempmag = temp.length(); - tempmag = sqrt( temp.x*temp.x + temp.y*temp.y + temp.z*temp.z); - //a2 = temp.operator /=(tempmag); - a2.x = temp.x/tempmag; - a2.y = temp.y/tempmag; - a2.z = temp.z/tempmag; - - /*offsx = -a1.x()*fromPoint.x() - a1.y()*fromPoint.y() - a1.z()*fromPoint.z(); - offsy = -a2.x()*fromPoint.x() - a2.y()*fromPoint.y() - a2.z()*fromPoint.z(); - offsz = -a3.x()*fromPoint.x() - a3.y()*fromPoint.y() - a3.z()*fromPoint.z(); -*/ - offsx = -a1.x*fromPoint.x - a1.y*fromPoint.y - a1.z*fromPoint.z; - offsy = -a2.x*fromPoint.x - a2.y*fromPoint.y - a2.z*fromPoint.z; - offsz = -a3.x*fromPoint.x - a3.y*fromPoint.y - a3.z*fromPoint.z; - - //QString jono2 = QString("offsx %1 offsy %2 offsz %3").arg(offsx).arg(offsy).arg(offsz); - //QMessageBox::about(0,"offs x y z", jono2); + qreal x, y, z; + Vector point; + point = v->getAtPoint(); + //Vector test; + //fromPoint.setX( atPoint.getX() + (objxmax-objxmin)/2.0 + WIDTH*maxof((objzmax-objzmin)/2.0,(objymax-objymin)/2.0)); + //x = 3.0; + //x = point.getX() + (objxmax-objxmin)/2.0 + WIDTH*maxof((objzmax-objzmin)/2.0,(objymax-objymin)/2.0); + x = point.getX(); + //y = point.getY(); + y = point.getY() + 40; // + (objymax-objymin)/2.0 + WIDTH*maxof((objzmax-objzmin)/2.0,(objxmax-objxmin)/2.0); + z = point.getZ(); + + v->setFromPoint(x,y,z); + //QString jono = QString("FromX %1 FromY %2 FromZ %3").arg(fromPoint.x()).arg(fromPoint.y()).arg(fromPoint.z()); + //QString jono = QString("FromX %1 FromY %2 FromZ %3").arg(fromPoint.x).arg(fromPoint.y).arg(fromPoint.z); + /* * + test = v->getFromPoint(); + QString jono = QString("FromX %1 FromY %2 FromZ %3").arg(test.getX()).arg(test.getY()).arg(test.getZ()); + QMessageBox::about(0,"From point", jono); // (1.9, 0.5, 0.5) + * */ } + #define NOEDGE 0x00 #define LEFTEDGE 0x01 #define RIGHTEDGE 0x02 #define BOTTOMEDGE 0x04 #define TOPEDGE 0x08 - +/* + * Returns a code specifying which edge in the viewing pyramid was crossed. + * There may be more than one. + */ int code( qreal x, qreal y, qreal z) { int c; @@ -341,16 +466,22 @@ int code( qreal x, qreal y, qreal z) return c; } -void WORLDtoSCREEN( qreal xw, qreal yw, int *xpc, int *ypc) +/* + * Converts clipped world coordinates to screen coordinates. + */ +void WORLDtoSCREEN( qreal xWorld, qreal yWorld, int *xScreen, int *yScreen) { - *xpc = (int) (a+xw+b); - *ypc = (int) (c+yw+d); + *xScreen = (int) (a*xWorld+b); + *yScreen = (int) (c*yWorld+d); } - -void clip3d( qreal x1, qreal y1, qreal z1, qreal x2, qreal y2, qreal z2, int *xpc1, int *ypc1, int *xpc2, int *ypc2) +/* + * Clips the line segment in three-dimensional coordinates to the + * viewing pyramid. + */ +void clip3d( qreal x1, qreal y1, qreal z1, qreal x2, qreal y2, qreal z2, int *xscreen1, int *yscreen1, int *xscreen2, int *yscreen2) { - int c,c1,c2; //, xpc1, ypc1, xpc2, ypc2; + int c,c1,c2; qreal x,y,z,t; c1 = code(x1,y1,z1); @@ -372,14 +503,14 @@ void clip3d( qreal x1, qreal y1, qreal z1, qreal x2, qreal y2, qreal z2, int *xp else if ((c&RIGHTEDGE) == RIGHTEDGE) { // Crosses right edge - t = (z1-x1)/((x2-x2)-(z2-z1)); + t = (z1-x1)/((x2-x1)-(z2-z1)); z = t*(z2-z1)+z1; x = z; y = t*(y2-y1)+y1; } else if ((c&BOTTOMEDGE) == BOTTOMEDGE) { - // Crosses left edge + // Crosses bottom edge t = (z1+y1)/((y1-y2)-(z2-z1)); z = t*(z2-z1)+z1; x = t*(x2-x1)+x1; @@ -387,7 +518,7 @@ void clip3d( qreal x1, qreal y1, qreal z1, qreal x2, qreal y2, qreal z2, int *xp } else if ((c&TOPEDGE) == TOPEDGE) { - // Crosses left edge + // Crosses top edge t = (z1-y1)/((y2-y1)-(z2-z1)); z = t*(z2-z1)+z1; x = t*(x2-x1)+x1; @@ -408,78 +539,38 @@ void clip3d( qreal x1, qreal y1, qreal z1, qreal x2, qreal y2, qreal z2, int *xp if (z1 != 0) { - WORLDtoSCREEN(x1/z1,y1/z1,xpc1, ypc1); - WORLDtoSCREEN(x2/z2,y2/z2,xpc2, ypc2); + WORLDtoSCREEN(x1/z1,y1/z1,xscreen1, yscreen1); + WORLDtoSCREEN(x2/z2,y2/z2,xscreen2, yscreen2); } else { - WORLDtoSCREEN(x1,y1,xpc1, ypc1); - WORLDtoSCREEN(x2,y2,xpc2, ypc2); + WORLDtoSCREEN(x1,y1,xscreen1, yscreen1); + WORLDtoSCREEN(x2,y2,xscreen2, yscreen2); } - //line( xpc1, ypc1, xpc2, ypc2); - //painter.drawLine(xpc1, ypc1, xpc2, ypc2); + //Now ready to draw line( xscreen1, yscreen1, xscreen2, yscreen2); } -//void transformseg( QVector3D *v1, QVector3D *v2, int *xpc1, int *ypc1, int *xpc2, int *ypc2 ) -void transformseg( VECTOR *v1, VECTOR *v2, int *xpc1, int *ypc1, int *xpc2, int *ypc2 ) -{ - qreal x1, y1, z1, x2, y2, z2; - - /*x1 = (a1.x()*v1->x() + a1.y()*v1->y() + a1.z()*v1->z() + offsx)*dval; - y1 = (a2.x()*v1->x() + a2.y()*v1->y() + a2.z()*v1->z() + offsy)*dval; - z1 = a3.x()*v1->x() + a3.y()*v1->y() + a3.z()*v1->z() + offsz;*/ - x1 = (a1.x*v1->x + a1.y*v1->y + a1.z*v1->z + offsx)*dval; - y1 = (a2.x*v1->x + a2.y*v1->y + a2.z*v1->z + offsy)*dval; - z1 = a3.x*v1->x + a3.y*v1->y + a3.z*v1->z + offsz; - - /*x2 = (a1.x()*v2->x() + a1.y()*v2->y() + a1.z()*v2->z() + offsx)*dval; - y2 = (a2.x()*v2->x() + a2.y()*v2->y() + a2.z()*v2->z() + offsy)*dval; - z2 = a3.x()*v2->x() + a3.y()*v2->y() + a3.z()*v2->z() + offsz;*/ - x2 = (a1.x*v2->x + a1.y*v2->y + a1.z*v2->z + offsx)*dval; - y2 = (a2.x*v2->x + a2.y*v2->y + a2.z*v2->z + offsy)*dval; - z2 = a3.x*v2->x + a3.y*v2->y + a3.z*v2->z + offsz; - - clip3d(x1,y1,z1,x2,y2,z2, xpc1, ypc1, xpc2, ypc2 ); -} +/* + * Transform the segment connecting the two vectors into the viewing plane. + * clip3d() clips the line if needed. + */ +void transformseg( Viewing *v, Vector *v1, Vector *v2, int *xscreen1, int *yscreen1, int *xscreen2, int *yscreen2) -void RouteDialog::paintEvent(QPaintEvent *) { - //int i, maxi; - int i, startofside; - qreal x1, y1, x2, y2; - int scx1, scy1, scx2, scy2; - int xpc1, ypc1, xpc2, ypc2; + qreal x1, y1, z1, x2, y2, z2; + Vector a1, a2, a3; - QPainter painter(this); + a1 = v->getA1(); + a2 = v->getA2(); + a3 = v->getA3(); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen((Qt::black),2)); - painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern)); + x1 = (a1.getX()*v1->getX() + a1.getY()*v1->getY() + a1.getZ()*v1->getZ() + v->getOffsx())*v->getDval(); + y1 = (a2.getX()*v1->getX() + a2.getY()*v1->getY() + a2.getZ()*v1->getZ() + v->getOffsy())*v->getDval(); + z1 = a3.getX()*v1->getX() + a3.getY()*v1->getY() + a3.getZ()*v1->getZ() + v->getOffsz(); - // Draw route window frsme - painter.drawLine(left,top,right,top); - painter.drawLine(right,top,right,bottom); - painter.drawLine(left,top,left,bottom); - painter.drawLine(left,bottom,right,bottom); + x2 = (a1.getX()*v2->getX() + a1.getY()*v2->getY() + a1.getZ()*v2->getZ() + v->getOffsx())*v->getDval(); + y2 = (a2.getX()*v2->getX() + a2.getY()*v2->getY() + a2.getZ()*v2->getZ() + v->getOffsy())*v->getDval(); + z2 = a3.getX()*v2->getX() + a3.getY()*v2->getY() + a3.getZ()*v2->getZ() + v->getOffsz(); -//void view( void) -//{ - //int i, startofside; - i=1; - while(i 0) - { - transformseg( &pa[connection[i-1]],&pa[connection[i]], &xpc1, &ypc1, &xpc2, &ypc2); - painter.drawLine(xpc1, ypc1, xpc2, ypc2); - i++; - } - transformseg( &pa[connection[i-1]],&pa[-connection[i]],&xpc1, &ypc1, &xpc2, &ypc2); - painter.drawLine(xpc1, ypc1, xpc2, ypc2); - transformseg( &pa[-connection[i]],&pa[connection[startofside]],&xpc1, &ypc1, &xpc2, &ypc2); - painter.drawLine(xpc1, ypc1, xpc2, ypc2); - i++; - } + clip3d(x1,y1,z1,x2,y2,z2, xscreen1, yscreen1, xscreen2, yscreen2 ); }