Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw polygons with CGPath?

I have been reading thru the documentation however it is not immediatly clear to me how to draw a polygon using CGPath. All I need to do is to draw CGPath around something like this:

__
\  \ 
 \  \
  \__\

Could anyone please provide an snippet on how to do this?

Additionally I assume CGPathContainsPoint will help me determine if a point is inside such path?, or does the path have to be a solid drawing

Also how can i move the cgpath around? Is this as easy as changing something like the origin just like in cgrect?

Thank you.

-Oscar

like image 378
Oscar Gomez Avatar asked Feb 12 '10 04:02

Oscar Gomez


People also ask

How do you sketch a polygon?

To draw a polygon, start by drawing a circle on a piece of paper using a protractor. Then, decide how many sides you want your polygon to have. Once you've decided, divide 360 by the number of sides to find out what the angle between each set of neighboring lines should be.

Which tool we use to draw a polygon?

Use the Polygon tool to create triangles and other shapes. The polygon tool makes it easy to create more complex vector shapes like stars, triangles, hexagons and more. Control the number of sides a polygon has, and adjust the corner roundness all from the property inspector panel in Adobe XD.


2 Answers

This is an example of how to create a triangle using CGPath, you only have to put the points.

var path = CGPathCreateMutable()
CGPathMoveToPoint(path, nil, 0, 0) //start from here
CGPathAddLineToPoint(path, nil, 20, 44) 
CGPathAddLineToPoint(path, nil, 40, 0) 
CGPathAddLineToPoint(path, nil, 0, 0)

//and to use in SpriteKit, for example

var tri = SKShapeNode(path: path) 
var color = NSColor.blueColor()
tri.strokeColor = color
tri.fillColor = color

This is the result

Triangle with CGPath

like image 87
Draelach Avatar answered Oct 12 '22 13:10

Draelach


You should do it like this:

- (void)drawRect:(CGRect)rect { 

        CGContextRef context = UIGraphicsGetCurrentContext(); 

        CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
        CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);

        // Draw them with a 2.0 stroke width so they are a bit more visible.
        CGContextSetLineWidth(context, 2.0);

        for(int idx = 0; idx < self.points.count; idx++)
        {

            point = [self.points objectAtIndex:idx];//Edited 
            if(idx == 0)
            {
                // move to the first point
                CGContextMoveToPoint(context, point.x, point.y);
            }
            else
            {
                CGContextAddLineToPoint(context, point.x, point.y);
            }
        }

        CGContextStrokePath(context);
}

Note here, the points is the array of points you want to draw the polygon for. So it should be circular path like: You are drawing a triangle of points (x1, x2, x3) then you should pass into array (x1, x2, x3, x1).

Hope this helps.

like image 32
Madhup Singh Yadav Avatar answered Oct 12 '22 11:10

Madhup Singh Yadav