Пример #1
0
void generateSliceXYpoints(sliceExtractData *sliceData, modOrigin modelOrigin, sliceExtent sliceBounds)
{
    int nBranches = sliceBounds.nSections;
    int nGrdPts;
    double deltaLat;
    double deltaLon;
    int count = 0;
    double distX, distY;
    double locationXY[2];
    double dLatRot, dLonRot;
    singleGridPoint rotatedGridPoint;
    
    
    for(int i = 0; i < nBranches; i++)
    {
        nGrdPts = sliceBounds.resXY;
        deltaLat = (sliceBounds.latPtsSlice[i]-sliceBounds.latPtsSlice[i+1])/nGrdPts;
        deltaLon = (sliceBounds.lonPtsSlice[i]-sliceBounds.lonPtsSlice[i+1])/nGrdPts;
        for(int j = 0; j < nGrdPts+1; j++)
        {
            sliceData->lonPts[count] = sliceBounds.lonPtsSlice[i]-j*deltaLon;
            sliceData->latPts[count] = sliceBounds.latPtsSlice[i]-j*deltaLat;
            
            locationXY[0] = modelOrigin.mlat;
            locationXY[1] = sliceData->lonPts[count];
            
            distX = LatLonToDistance(locationXY, modelOrigin);
            
            locationXY[0] =sliceData->latPts[count];
            locationXY[1] = modelOrigin.mlon;
            
            distY = LatLonToDistance(locationXY, modelOrigin);
            
            dLatRot = modelOrigin.mlat - sliceData->latPts[count];
            dLonRot = modelOrigin.mlon - sliceData->lonPts[count];
            
            
            if(dLatRot < 0)
            {
                distY = -distY;
            }
            
            if (dLonRot > 0)
            {
                distX = - distX;
            }
            
            rotatedGridPoint = rotateGrid(modelOrigin.mrot, distX, distY);
            
            sliceData->xPts[count] = rotatedGridPoint.X;
            sliceData->yPts[count] = rotatedGridPoint.Y;
//            printf("%lf %lf\n",sliceData->xPts[count],sliceData->yPts[count]);
            count += 1;
        }
    }
    sliceData->nPts = count;
    assert(sliceData->nPts<=MAX_NUM_SLICE_GRIDPTS);
}
Пример #2
0
void GridTool::update(double deltaTime){

    MsbTool::update(deltaTime);


    if (!bPressLeft || input->hudTarget)
        return;

    if (gridMove==GRID_ROTATE){
        if (bPressLeft)
            rotateGrid(deltaTime);
        return;
    }

    sceneData->grid->bPickable=false;

    if (gridMove==GRID_ABSOLUTE){
        sceneData->grid->setLocation(input->mouse3D);
        gridX=Vector3f(-1,0,0);
        gridY=Vector3f(0,1,0);
        gridZ=Vector3f(0,0,-1);
    }

    if (gridMove==GRID_NORMAL){
        sceneData->grid->setLocation(input->mouse3D);
        if (input->worldNormal!=Vector3f(0,1,0)){
            gridZ=input->worldNormal;
            gridZ.normalize();
            gridX=gridZ.crossProduct(Vector3f(0,1,0));
            gridX.normalize();
            gridY= gridZ.crossProduct(gridX);
            gridY.normalize();
        }
        else if (input->worldNormal!=Vector3f(0,0,0)){
            gridY= input->worldNormal;
            gridY.normalize();
            gridX= gridY.crossProduct(Vector3f(0,0,1));
            gridX.normalize();
            gridZ= gridY.crossProduct(gridX);
            gridZ.normalize();
        }else{
            input->worldNormal=Vector3f(0,1,0);
            gridY= input->worldNormal;
            gridY.normalize();
            gridX= gridY.crossProduct(Vector3f(0,0,1));
            gridX.normalize();
            gridZ= gridY.crossProduct(gridX);
            gridZ.normalize();
        }
    }

}
Пример #3
0
void Maze::drawLines(float * color, int x, int y, float pointX, float pointY) {
    glLineWidth(1.0);    
    
    std::bitset<9> grid;
        
    grid[0] = isWall(x-1, y-1);
    grid[1] = isWall(x+0, y-1);
    grid[2] = isWall(x+1, y-1);
    grid[3] = isWall(x-1, y+0);
    grid[4] = isWall(x+0, y+0);
    grid[5] = isWall(x+1, y+0);
    grid[6] = isWall(x-1, y+1);
    grid[7] = isWall(x+0, y+1);
    grid[8] = isWall(x+1, y+1);
    
    float size = 0.50;
    
    float rawPointX = pointX;
    float rawPointY = pointY;    
    pointX += (1.0 - size) / 2.0;    
    pointY += (1.0 - size) / 2.0;  
    
    std::vector<point> points; 
    
    float z = -19;
    
    int counter = 0;
    int toDraw = -1;
    while (true) {
        int drawType = counter / 4;
        float rotation = (counter % 4) * 90;
        
        switch (drawType) {
            case 0: // Small wall
                if (!grid[1] && !grid[7] && grid[3] && grid[5]) toDraw = 0;
                break;
            case 1: // Small end
                if (!grid[1] && !grid[7] && grid[5]) toDraw = 1;
                break;                
            case 2: // 90 degree corner
                if (!grid[1] && grid[7] && !grid[3] && grid[5] && !grid[8]) toDraw = 2;
                break;
            case 3: // Big wall
                if (!grid[1] && grid[7] && grid[3] && grid[5]) toDraw = 3;
                break;
            case 4: // Big corner
                if (!grid[1] && grid[7] && !grid[3] && grid[5]) toDraw = 4;
                break;
            case 5: // Big inset
                if (grid.count() == 8 && !grid[0]) toDraw = 5;
                break;
            default:
                return;
        }
        
        if (toDraw > -1) {
            glPushMatrix();
            glTranslatef(rawPointX+0.5, rawPointY+0.5, z);
            glRotatef(rotation, 0, 0, 1);
            
            switch (toDraw) {
                case 0: // Small wall
                    drawSmallWall();
                    break;
                case 1: // Small end
                    drawSmallEnd();
                    break;                
                case 2: // 90 degree corner
                    drawSmallCorner();
                    break;
                case 3: // Big wall
                    drawBigWall();
                    break;
                case 4: // Big corner
                    drawBigCorner(false);
                    break;
                case 5: // Big inset
                    glRotatef(180, 0, 0, 1);
                    drawBigCorner(true);
                    break;
            }
            
            glRotatef(0 - rotation, 0, 0, 1);
        	glPopMatrix();
            return;
        }
        grid = rotateGrid(grid);
        counter++;
    }
}