在可可中使用NSBezierPath绘制多边形

问题描述

| 我是可可绘画的新手。我想绘制一个国家的地图,然后在地图上显示该国家的所有河流,桥梁,航空等。我在单独的图层中进行所有绘图,例如,一层中的河流,另一层中的桥梁等等。问题是我正在使用nsbezierpath绘制地图,我也想在单独的图层中绘制地图,但是我无法做到这一点。代码如下。
(void) PlotMap
{   
    NSAutoreleasePool *poolPlotMap = [[NSAutoreleasePool alloc] init];

    NSGraphicsContext* gc = [NSGraphicsContext currentContext];

        // Save the current graphics context settings
        [gc saveGraphicsstate];

        // Set the color in the current graphics context for future draw operations
        [[NSColor whiteColor] setstroke];
        [[NSColor greenColor] setFill];

        NSBezierPath* bPath = [NSBezierPath bezierPath];

    // Object Creation for LAmbert
    CLAmbertConformalConicProjection *lLAmbert = [CLAmbertConformalConicProjection new];
    [lLAmbert CLAmbertConformalConicProjection];

    int First_Index = 0;
    double lslat,lslong;
    bool binvalid_point = TRUE;
    double PixX,PixY,OldX,OldY;
    float fPakMapLinestyle[2] = {1,0};
    float fTempMapLinestyle[2] = {2,1}; 

    FirsT_POINT:
    if (First_Index == [MapLatValues count]) 
    {


        // Exit from Method if NO Lat Long Available 
        return ;
    }

    // Extract Point 
    lslat = [ [MapLatValues objectAtIndex:First_Index] doubleValue];
    lslong = [ [MapLongValues objectAtIndex:First_Index] doubleValue];

    /* Is this point in zoom area 
    if ( ( lslat >= GStartLat || lslat <= GEndLat ) || ( lslong <= GStartLong || lslong >= GEndLong ) )
    {

        First_Index++;
        goto FirsT_POINT; 
    }*/



    // Convert to pixel 

    [lLAmbert getdisplayXYFromLatLong:lslat :lslong :&OldX :&OldY];
    //printf(\"\\nOldX : %f\",lslong);
    // Run through the map coord array 

    /********************************************************************/

    int mapLatLongCount = 0;
    int mapLatLongTotalCount = [MapLatValues count];
    NSPoint PakMapPointArray[mapLatLongTotalCount];

    int Coord_Index;
    for (Coord_Index = First_Index; Coord_Index< [MapLatValues count]; Coord_Index++) 
    { 


    // Start of FOR LOOP 
        // Extract Point 
        lslat = [ [MapLatValues objectAtIndex:Coord_Index] doubleValue];
        lslong = [ [MapLongValues objectAtIndex:Coord_Index] doubleValue];
        //Is this point in zoom area 
    if ( ( lslat >= GStartLat || lslat <= GEndLat ) || ( lslong <= GStartLong || lslong >= GEndLong ) )
    {
        lslat = 0;
        lslong = 9999;
    }



    // Convert to pixel
    [lLAmbert getdisplayXYFromLatLong:lslat :lslong :&PixX :&PixY];

    if ( ( floor(lslat) != 0 ) && ( floor(lslong) != 9999) )
    {
        if (binvalid_point)
        {
            PakMapPointArray[mapLatLongCount] = NSMakePoint(PixX,iMaindisplayY - PixY);
            binvalid_point = FALSE;
            mapLatLongCount++;
        }
        else
        {   

            PakMapPointArray[mapLatLongCount] = NSMakePoint(OldX,iMaindisplayY - OldY);
            mapLatLongCount++;

        }
    } 
    else
    {
        binvalid_point = TRUE;
    }
    // Make New Pixel Points the last point 
    OldX = PixX;
    OldY = PixY;

    //[bPath closePath];
    }// END of FOR LOOP 


        //
    [bPath appendBezierPathWithPoints:PakMapPointArray count:mapLatLongCount];
    [bPath stroke];
    [bPath fill];

        // Restore the context to what it was before we messed with it
        [gc restoreGraphicsstate];

    [lLAmbert release];




    [poolPlotMap release];



}
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)