-
iOS 图形绘制
2017-06-23 12:47:43在许多需要图形显示数据的应用中常常需要进行图形绘制,例如股票金融。在一些特定动画中,我们同样需要结合图形的绘制。 - 重写 drawrect - 外部代理 - CAShapeLayer文章目录
需求
在许多需要图形显示数据的应用中常常需要进行图形绘制,例如股票金融。在一些特定动画中,我们同样需要结合图形的绘制。
重绘视图
UIView 视图中有一个用来绘制当前图形的方法
-drawRect
方法。我们可以重写该方法,将需要的图形绘制到当前上线文。绘制图形一般有两种方式:CGContextRef
和UIBezierPath
。CGContextRef 篇
CGContextRef 属于 Core Graphics 框架,功能强大,我们借助它可以绘制直线、曲线、多边形圆形等各种各样的几何图形,也可以绘制文字、图像等。
Graphics Context 是图形上下文,可以将其理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个画框,CGContextRef 看成 Quartz 2D 绘图环境。
- 使用步骤
1.先在 drawRect 方法中获得上下文 context
2.绘制图形(线,图形,图片等)
3.设置一些修饰属性
4.渲染到上下文,完成绘图drawRect方法什么时候触发?
view第一次显示到屏幕上时,或者主动调用
setNeedsDisplay
或者setNeedsDisplayInRect:
方法时。- 绘图样式
// 矩形 //1.获取图形上下文,即画板 CGContextRef ctx = UIGraphicsGetCurrentContext(); //2.绘制图形 CGContextAddRect(ctx, CGRectMake(10, 10, 40, 40)); //3.设置相关属性 [[UIColor redColor] setStroke]; //颜色 CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor); CGContextSetLineWidth(ctx, 5); //线条到宽度 //4.渲染到画板上 CGContextStrokePath(ctx); //描边 //CGContextFillPath(ctx); //填充 /**以下为核心部分**/ //圆弧、圆 CGContextAddArc(ctx, 100, 30, 30, 0, M_PI, 0); //最后一个参数表示方向(顺时针或者逆时针) //椭圆 CGContextAddEllipseInRect(ctx, CGRectMake(150, 10, 80, 40)); //在矩形内绘制椭圆,宽度和高度相等则为圆形 //直线 CGContextMoveToPoint(ctx, 10, 100); //起点 CGContextAddLineToPoint(ctx, kScreenWidth-10, 100); //其他点 CGContextSetRGBStrokeColor(ctx, 0, 1, 0, 1); //RGB类型的颜色 CGContextSetLineCap(ctx, kCGLineCapSquare); //起点和重点 CGContextSetLineJoin(ctx, kCGLineJoinBevel); //转角 CGContextSetLineWidth(ctx, 5); //线条的宽度 //不规则图形 CGContextMoveToPoint(ctx, 20, 150); //设置起点 CGContextAddLineToPoint(ctx, 100, 180); // CGContextClosePath(ctx); CGContextSetLineWidth(ctx, 5); //线宽 CGContextSetRGBStrokeColor(ctx, 0, 1, 0, 1); //RGB类型的颜色 CGContextSetLineCap(ctx, kCGLineCapSquare); //终点样式 CGContextSetLineJoin(ctx, kCGLineJoinBevel); //连接点样式 CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor); //设置填充色 CGContextSetStrokeColorWithColor(ctx, [UIColor brownColor].CGColor); //路径颜色 /* kCGPathFill, //填充 kCGPathEOFill, kCGPathStroke, //线条 kCGPathFillStroke, //线条+填充 kCGPathEOFillStroke */ CGContextDrawPath(ctx, kCGPathFillStroke); //fill and stroke //绘制图片 UIImage *img = [UIImage imageNamed:@"QQ"]; [img drawAtPoint:CGPointMake( 150, 125)]; //绘制到指定的点,图片size //[img drawInRect:CGRectMake(120, 140, img.size.width, img.size.height)]; //指定位置大小 //[img drawAsPatternInRect:CGRectMake(0, 0, kScreenWidth, kScreenHeight/2.0)]; //多个平铺 //绘制文字 NSString *str = @"少年不识愁滋味,为赋新词强说愁\n而今识得愁滋味,却道天凉好个秋"; NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; style.alignment = NSTextAlignmentCenter; NSDictionary *dic = @{NSForegroundColorAttributeName:[UIColor redColor], NSFontAttributeName:[UIFont systemFontOfSize:18], NSParagraphStyleAttributeName:style}; CGSize size = [str sizeWithAttributes:dic]; CGRect strRect = CGRectMake((kScreenWidth-size.width)/2.0, 200, size.width, size.height); [str drawWithRect:strRect options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
UIBezierPath 篇
UIBezierPath 这个类在 UIKit 中, 是 Core Graphics 框架关于 path 的一个面向对象的封装,使用此类可以定义简单的形状,比如我们常用到,矩形,圆形,椭圆,弧,或者不规则的多边形。
UIBezierPath 使用起来非常的方便,创建一个路径对象,然后调用其相关的属性和方法即可完成绘制。
- 使用步骤
1、 重写View的drawRect方法
2、 创建UIBezierPath的对象
3、 使用相关的方法创建路径信息
4、 使用stroke 或者 fill方法结束绘图- 绘制样式
首先是初始化方式。
// 空路径 UIBezierPath *path = [UIBezierPath bezierPath]; // 矩形路径 UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(10, 20, 40, 40)]; // 椭圆路径 UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(80, 20, 80, 40)]; // 圆角矩形路径 UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(200, 20, 50, 50) cornerRadius:10]; // 圆弧路径,参数:圆弧圆心、圆弧半径、开始弧度、结束弧度、是否为顺时针 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(180, 150) radius:50 startAngle:M_PI endAngle:0 clockwise:YES];
你可以使用 path 进行接下来的图形绘制。
- 绘制直线
// 1、初始化 UIBezierPath *path = [UIBezierPath bezierPath]; // 2、设置路径 [path moveToPoint:CGPointMake(250, 150)]; //起点 [path addLineToPoint:CGPointMake(kScreenWidth-10, 150)]; //移动到下一个点 // 3、设置属性 //[[UIColor redColor] setFill]; //设置填充色 //[UIColor redColor] setStroke]; //设置线条颜色 // 4、渲染绘图 [path stroke]; //描边 // [path fill]; //填充
- 绘制圆弧
圆弧坐标系// 设置起点 [path moveToPoint:CGPointMake(20, 200)]; // 圆弧圆心、圆弧半径、开始弧度、结束弧度、是否为顺时针 [path addArcWithCenter:CGPointMake(80, 200) radius:40 startAngle:M_PI endAngle:0 clockwise:NO];
- 二次贝塞尔曲线
二次贝塞尔曲线需要一个控制点,两个端点。控制点与两个端点的连线分别是圆弧的两条切线。// 设置起点 [path moveToPoint:CGPointMake(160, 200)]; // 曲线的终点位置、控制点 [path addQuadCurveToPoint:CGPointMake(200, 200) controlPoint:CGPointMake(170, 150)];
- 三次贝塞尔曲线
// 起点 [path moveToPoint:CGPointMake(220, 230)]; // 曲线的终点位置、第一控制点、第二控制点 [path addCurveToPoint:CGPointMake(300, 180) controlPoint1:CGPointMake(240, 100) controlPoint2:CGPointMake(250, 300)];
- 其他的属性或方法
// 路径的只读属性 empty //是否为空 bounds //封闭所有路径点的最小矩形范围, 不包括控制点 currentPoint //当前的点 // 可以设置的属性 lineWidth //宽度 lineCapStyle //起点终点的样式 /* kCGLineCapButt, // 默认 (方形结束, 结束位置正好为精确位置),如果线条太宽,看起来不完全封闭 kCGLineCapRound, // (圆形结束, 结束位置超过精确位置半个线宽) kCGLineCapSquare // (方形结束, 结束位置超过精确位置半个线宽) */ lineJoinStyle //线条连接点样式 /* kCGLineJoinMiter, // 默认 kCGLineJoinRound, // 圆形 kCGLineJoinBevel // */ -closePath //封闭路径,可以自动连接起点和终点 -removeAllPoints //移除路径中所有点 -appendPath: //添加一条路径 -bezierPathByReversingPath //路径反转 当前路径的终点作为起点 -applyTransform: //使用CGAffineTransform -containsPoint: //路径区域中是否包含某个点
外部绘制
通常在自定义视图中重写
-drawrect:
方法即可完成视图的重新绘制,也是我比较推荐的。除了重写方法外,在视图外部也是可以实现图形绘制,比如设置图层CALayer
代理、使用CALayer
的子类CAShapeLayer
。图层代理
每一个视图都会拥有自己的图层
CALayer
这图层就是用来显示绘制图像的,而视图用来布局,响应处理用户的触摸、点击、滚动等交互事件。 图层有一个协议CALayerDelegate
,该协议中可以将图层的上下对象CGContextRef
传递过来,我们只需要在该代理方法中完成绘制即可。- 使用步骤
设置图层代理
在代理方法中完成绘制
调用图层setNeedsDisplay
- 演示示例
- (void)viewDidLoad { [super viewDidLoad]; UIView* drawView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; drawView.backgroundColor = UIColor.grayColor; drawView.center = self.view.center; drawView.layer.delegate = self; // 设置图层代理 [drawView.layer setNeedsDisplay]; // 一定要调用 [self.view addSubview:drawView]; } // CALayer的代理,ctx是绘制的上下文 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { CGContextAddRect(ctx, CGRectMake(10, 10, 40, 40)); [[UIColor redColor] setStroke]; CGContextSetLineWidth(ctx, 2); CGContextStrokePath(ctx); }
CAShapeLayer
CAShapeLayer
是图层CALayer
的子类,是和图形相关的图层,单个的 CAShapeLayer 是没有意义的,需要配合路径对象 UIBezierPath 使用。CAShapeLayer 可以看作是 CGContextRef 的面向对象封装,一块图层画板。UIBezierPath 就是这块画板的具体展示。- 使用步骤
创建 UIBezierPath 对象并添加路径
创建 CAShapeLayer 对象,设置图形属性,如颜色
将 UIBezierPath 对象传递给 CAShapeLayer 对象。
将 CAShapeLayer 添加到视图的图层上显示- 演示示例
// 路径 UIBezierPath* path = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)]; CAShapeLayer* shapeLayer = [CAShapeLayer layer]; // 配置相关属性 shapeLayer.strokeColor = UIColor.redColor.CGColor; shapeLayer.fillColor = UIColor.clearColor.CGColor; // 路径传递给 shapeLayer shapeLayer.path = path.CGPath; // 添加到视图的图层上 [self.view.layer addSublayer:shapeLayer];
更多关于 CAShapeLayer 的使用示例可以参考这篇。
CGContextRef 和 UIBezierPath+CAShapeLayer 对比
CGContextRef 属于 CoreGraphic 框架,使用 CPU 渲染图形,消耗内存较大,CAShapeLayer 属于 CoreAnimation ,通过 GPU 渲染图形,优化性能,动画相关的渲染同样交给了 GPU,不消耗内存。UIBezierPath+CAShapeLayer 方式是面向对象的方式绘图,符合 Ojective-C 面向对象的编程思想。
CoreGraphics 是底层绘制框架,CoreAnimation 中大量使用到CoreGraphics中的类,是一套基于 CoreGraphics 的 Ojective-C 语言封装。
总结
图形可以通过 CGContextRef 进行绘制,绘制方式有两种,一种是自定义视图并重写绘制方法
-drawrect:
,另一种是设置图层代理delegate
在视图外部绘制。CGContextRef 使用 CPU 来进行图像渲染,消耗大。UIBezierPath+CAShapeLayer 同样可以用来绘制图形,是 Ojective-C 针对 CGContextRef 面向对象的一种封装,这种通过 CAShapeLayer 和 path 的形式灵活多变,并且使用 GPU 直接进行绘制和动画渲染,相比与传统的 CGContextRef,这种方式比较适合 iOS 中的图形绘制。 -
OpenLayers教程:图形绘制之绘制几何图形
2019-07-27 21:36:33OpenLayers的ol.interaction.Draw类实现了交互式绘制几何图形的功能,可以把它看作一个绘制图形的控件,使用合适的参数初始化它,并将它加入地图对象就可以进行交互式的图形绘制。 我们直接来看一个示例: ...OpenLayers的ol.interaction.Draw类实现了交互式绘制几何图形的功能,可以把它看作一个绘制图形的控件,使用合适的参数初始化它,并将它加入地图对象就可以进行交互式的图形绘制。
我们直接来看一个示例:
drawShapes.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Draw Shapes</title> <link rel="stylesheet" href="../v5.3.0/css/ol.css" /> <script src="../v5.3.0/build/ol.js"></script> </head> <body> <div id="map"></div> <label>Shape type </label> <select id="type"> <option value="Point">Point</option> <option value="LineString">LineString</option> <option value="Polygon">Polygon</option> <option value="Circle">Circle</option> <option value="Square">Square</option> <option value="Box">Box</option> <option value="None">None</option> </select> <script> let vectorSource = new ol.source.Vector(); let vectorLayer = new ol.layer.Vector({ source: vectorSource }); let map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ // 瓦片图层 source: new ol.source.OSM() // OpenStreetMap数据源 }), vectorLayer ], view: new ol.View({ // 地图视图 projection: 'EPSG:3857', center: [0, 0], zoom: 0 }) }); let typeSelect = document.getElementById('type'); let draw; function addInteraction(){ let type = typeSelect.value; if(type !== 'None'){ let geometryFunction; switch(type){ case "Square": type = 'Circle'; // 生成规则的四边形的图形函数 geometryFunction = ol.interaction.Draw.createRegularPolygon(4); break; case 'Box': type = 'Circle'; // 生成盒形状的图形函数 geometryFunction = ol.interaction.Draw.createBox(); break; default:break; } // 初始化Draw绘图控件 draw = new ol.interaction.Draw({ source: vectorSource, type: type, geometryFunction: geometryFunction }); // 将Draw绘图控件加入Map对象 map.addInteraction(draw); } } typeSelect.addEventListener('change', () => { // 移除Draw绘图控件 map.removeInteraction(draw); addInteraction(); }); addInteraction(); </script> </body> </html>
这个示例展示了初始化ol.interaction.Draw对象时设置的三个参数:
- source —— 绘制的几何图形将会被存储到这个地图源中
- type —— 要绘制的几何图形的类型,可以设置为:
'Point'
,'LineString'
,'LinearRing'
,'Polygon'
,'MultiPoint'
,'MultiLineString'
,'MultiPolygon'
,'GeometryCollection'
,'Circle'
geometryFunction —— 这个参数可以比较自由地设置要绘制的几何图形的形状,比如这个示例中使用createBox()和createRegularPolygon()这两个函数来生成特定的图形函数,以代替绘制圆,但是使用这两个函数必须要将type参数设置为'Circle'
另外,还可以按住键盘的Shift键来触发手绘(free hand)模式,Draw类实现了这个功能。
-
pygame图形绘制机制
2019-07-22 16:34:40图形绘制就是向屏幕上绘制一些简单的图形,比如矩形、圆形、椭圆形等等。任何一个图形绘制之后pygame都会用一个Rect类表示该形状。绘制图形pygame使用pygame.draw绘制图形。不管绘制的是什么图形,pygame模块最后...图形绘制就是向屏幕上绘制一些简单的图形,比如矩形、圆形、椭圆形等等。任何一个图形绘制之后pygame都会用一个Rect类表示该形状。绘制图形pygame使用pygame.draw绘制图形。不管绘制的是什么图形,pygame模块最后都会用一个与这个图形四面相切的矩形来表示,用来表达绘制之后需图形所覆盖的区间范围。pygame.Rect类表达绘制之后图形区域范围,仅表达矩形范围。pygame.Rect有四个参数,分别为:矩形左上角的坐标(left,top)以及矩形的宽度width和高度height。矩形的Rect类有很多属性,每个属性都会返回一个数值。比如size返回Rect的大小,width矩形的宽度,height矩形的高度等等。Rect类还提供了许多方法类操纵这个矩形区域,比如:.copy()用来拷贝生成一个新的矩形、.move()用来移动矩形等等。具体的请参考:http://www.pygame.org/docs/ref/rect.htmlpygame的官方文档。pygame.draw可以绘制.rect()矩形、.line()直线、.polygon()多边形、.lines()连续多线、.circle()圆形、.aaline()无锯齿线、.ellipse()椭圆形、.aalines()连续无锯齿线、.arc()椭圆弧形等:
import sys,pygame from math import pi pygame.init() screen = pygame.display.set_mode((600,400)) pygame.display.set_caption("pygame图形绘制") #设置矩形的颜色 GOLD = 255, 251, 0 #金色 RED = pygame.Color('red') #红色 WHITE = 255, 255, 255 #白色 GREEN = pygame.Color('green') #绿色 #分别绘制两个矩形 #rect1 = pygame.draw.rect(screen, GOLD, (100,100,200,100),5) #rect2 = pygame.draw.rect(screen, RED, (210,210,200,100),0) """pygame.draw.rect有四个参数,第一个是屏幕的Surface类型 第二个是矩形的颜色,第三个是矩形的类型,第四个是矩形边框的宽度""" e1rect = pygame.draw.ellipse(screen, GREEN, (50,50,500,300),3) c1rect = pygame.draw.circle(screen, GOLD, (200,180), 30, 5) c2rect = pygame.draw.circle(screen, GOLD, (400, 180), 30) r1rect = pygame.draw.rect(screen, RED, (170,130,60,10), 3) r2rect = pygame.draw.rect(screen, RED, (370,130,60,10)) plist = [(295,170), (285,250), (260,280), (340,280), (315,250), (305,170)] l1rect = pygame.draw.lines(screen, GOLD, True, plist, 2) a1rect = pygame.draw.arc(screen, RED, (200,220,200,100), 1.4*pi, 1.9*pi, 3) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() pygame.display.update()
输出结果:
-
OpenLayers之图形绘制二:绘制几何图形
2018-08-14 14:50:32二、交互式图形绘制 一、根据已有的空间坐标信息绘制图形 编写代码,通过一个矢量图层分别加载单个点、线、多边形矢量要素。 代码如下: <body> <div id="map">&...目录
一、根据已有的空间坐标信息绘制图形
编写代码,通过一个矢量图层分别加载单个点、线、多边形矢量要素。
代码如下:
<body> <div id="map"></div> <script> var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], view: new ol.View({ center: [0, 0], zoom: 3 }) }) //点要素 var pointFeature = new ol.Feature( new ol.geom.Point([0, 0]) ); //线要素 var lineFeature = new ol.Feature( new ol.geom.LineString( [ [-1e7, 1e6], [-1e6, 3e6] ] ) ); //多边形要素 var polygonFeature = new ol.Feature( new ol.geom.Polygon( [ [ [-3e6, -1e6], [-3e6, 1e6], [-1e6, 1e6], [-1e6, -1e6], [-3e6, -1e6] ] ] ) ); //实例化一个矢量图层Vector作为绘制层 var source = new ol.source.Vector({ features: [ pointFeature, lineFeature, polygonFeature ] }); var vectorLayer = new ol.layer.Vector({ source: source, style: new ol.style.Style({ fill: new ol.style.Fill({ //填充样式 color: 'rgba(255, 255, 255, 0.2' }), stroke: new ol.style.Stroke({ //线样式 color: '#ffcc33', width: 2 }), image: new ol.style.Circle({ //点样式 radius: 7, fill: new ol.style.Fill({ color: '#ffcc33' }) }) }) }); //将绘制层添加到地图容器中 map.addLayer(vectorLayer); </script> </body>
二、交互式图形绘制
根据设置的几何图形类型交互绘制图形
代码如下:
<body> <div id="menu"> <label>几何图形类型: </label> <select id="type"> <option value="None">无</option> <option value="Point">点</option> <option value="LineString">线</option> <option value="Polygon">多边形</option> <option value="Circle">圆</option> <option value="Square">正方形</option> <option value="Box">长方形</option> </select> </div> <div id="map"></div> <script> var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], view: new ol.View({ center: [0, 0], zoom: 3 }) }); var typeSelect = document.getElementById('type'); //绘制类型选择对象 var draw; //ol.Interaction.Draw类的对象 //实例化一个矢量图层Vector作为绘制层 var source = new ol.source.Vector(); var vectorLayer = new ol.layer.Vector({ source: source, style: new ol.style.Style({ fill: new ol.style.Fill({ //填充样式 color: 'rgba(255, 255, 255, 0.2' }), stroke: new ol.style.Stroke({ //线样式 color: '#ffcc33', width: 2 }), image: new ol.style.Circle({ //点样式 radius: 7, fill: new ol.style.Fill({ color: '#ffcc33' }) }) }) }); //将绘制层添加到地图容器中 map.addLayer(vectorLayer); //用户更改绘制类型触发的事件 typeSelect.onchange = function(e){ map.removeInteraction(draw); //移除绘制图形控件 addInteraction(); //添加绘制图形控件 }; function addInteraction(){ var typeValue = typeSelect.value; //绘制类型 if(typeValue !== 'None'){ var geometryFunction, maxPoints; if(typeValue === 'Square'){ //正方形 typeValue = 'Circle'; //设置绘制类型为Circle //设置几何信息变更函数,即创建正方形 geometryFunction = ol.interaction.Draw.createRegularPolygon(4); }else if(typeValue === 'Box'){ //长方形 typeValue = 'LineString'; //设置绘制类型为LineString maxPoints = 2; //设置最大点数为2 //设置几何信息变更函数,即设置长方形的坐标点 geometryFunction = function(coordinates, geometry){ if(!geometry){ geometry = new ol.geom.Polygon(null); //多边形 } var start = coordinates[0]; var end = coordinates[1]; geometry.setCoordinates([ [ start, [start[0], end[1]], end, [end[0], start[1]], start ] ]); return geometry; }; } console.log(typeValue); //实例化图形绘制控件对象并添加到地图容器中 draw = new ol.interaction.Draw({ source: source, type: typeValue, //几何图形类型 geometryFunction: geometryFunction, //几何信息变更时的回调函数 maxPoints: maxPoints //最大点数 }); map.addInteraction(draw); }else{ //清空绘制的图形 source.clear(); } } </script> </body>
在本示例中,加载一个矢量图层绘制vector,在实例化此图层对象时统一设置了绘制的几何图形样式,然后通过调用addInteraction()函数加载交互绘制图形控件(ol.interaction.Draw),实现基本几何图形的绘制功能。
交互绘制几何图形的关键是实例化ol.interaction.Draw控件,设置其关键参数,并将此控件添加到地图容器中。直接支持点、线、圆、多边形图形,在创建交互控件时,直接设置控件对象的type参数即可;除此之外,正方形和长方形图形作为规则多边形,需要通过geometryFunction参数单独处理。
ol.interaction.Draw的主要参数:
1. source: 绘制图层的数据源,即承载几何图形要素的数据源。
2. type:绘制的几何图形类型,即ol.geom.GeometryType,包括Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、Circle。
3. geometryFunction:当几何坐标更新时调用此函数,在此当绘制类型为“正方形”和“长方形”时,需要通过此函数设置其几何对象。所以“正方形”时通过ol.interaction.Draw.createRegularPolygon(4)创建该函数,为“长方形”时则调用多边形(ol.geom.Polygon)的setCoordinates方法设置多边形的几何坐标串。
4. maxPoints:绘制图形结束前多边形或线的最大点数,线默认为2,多边形默认为3。
-
Pygame:基本图形绘制
2020-02-11 20:47:47文章目录(一)学习基本图形绘制有什么用(二)绘制各种基本图形1️⃣绘制矩形2️⃣绘制多边形3️⃣绘制圆形4️⃣绘制椭圆形5️⃣绘制弧线6️⃣绘制线段: ????大家好!我是近视的脚踏实地,虽然近视,但是脚踏实地... -
Python基本图形绘制
2019-02-03 20:30:52从Python蟒蛇实例中,来认识和了解 Python 基本图形绘制的方法。 import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("... -
Python:Turtle图形绘制
2020-01-20 16:35:41Python:Turtle图形绘制Turtle库基本绘图命令1.正方形螺旋线的绘制(1)利用 turtle 库绘制一个正方形螺旋线(2)绘制斜螺旋线(3)绘制彩色斜螺旋线2.经典蟒蛇的绘制(1)turtle库绘制蟒蛇(2)绘制彩色蟒蛇3.绘制... -
java之图形绘制
2019-02-21 15:56:42java之图形绘制:https://blog.csdn.net/xietansheng/article/details/55669157 package login; import java.awt.BasicStroke; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics... -
使用WriteableBitmap 提供WPF图形绘制性能
2018-08-14 15:19:33WPF与GDI+ 图形绘制不是完全割裂 开来的图形 绘制方法,当进行大批量图形数据绘制时,利用WriteableBitmap结合GDI+和WPF图形绘制方法,能够大幅提高图形绘制的效率。 关于WriteableBitmap对象的详细属性和方法请... -
WPF中的图形绘制
2018-07-27 10:32:27WPF中一般可采用三种方法进行图形绘制, 1、采用shape进行图形绘制 SHAPE继承至FrameworkElement,具有可视化控件的一般属性,分别有Ellipse(圆或者椭圆)、Line(直线)、Path(绘制复杂图形的路径)、Polygon... -
图形绘制中的PorterDuffXfermode
2015-11-13 21:51:31图形绘制中的PorterDuffXfermode的详细介绍 -
POI Excel 12 图形绘制
2016-04-15 16:51:37图形绘制 POI支持图形绘制,使用的是Microsoft Office的图形绘制工具,开始绘制图形你需要根据HSSFSheet 类createPatriarch 方法创建图形绘制对象,这个将会 擦除该工作簿所有其他图形信息,POI会单独保留图形... -
Visual C++ MFC的图形绘制
2019-11-25 11:55:12Visual C++ MFC的图形绘制 1. 带菜单界面制作 新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的... -
【Matlab】第五章 图形绘制_特殊图形的绘制:柱状图和饼状图 、三维图形
2019-05-02 14:45:55第五章 图形绘制 特殊图形的绘制 1. 柱状图 matlab中主要有四个函数用于绘制条形图 bar() %绘制纵向的二维柱状图 barh() %绘制横向的二维柱状图 bar3() %绘制三维纵向条形图 bar3h() 语法格式 bar... -
【计算机图形学】用python的turtle进行简单的图形绘制
2018-11-13 18:05:26【计算机图形学】用python的turtle进行简单的图形绘制python的turtle模块绘制图形绘制点绘制直线绘制椭圆绘制六边形绘制n次贝塞尔曲线结语 python的turtle模块 Turtle graphics is a popular way for introducing ... -
Qt中的图形绘制
2018-03-19 22:56:10一、基础图形绘制 对于Qt中的图形绘制,最基础的元素之一就是“Qt中画家”——QPainter类,通过这个类,我们可以在任何QWidget上进行绘画,这个类拥有绘图所需的画笔(QPen),画刷(QBrush),字体(QFont),以及... -
Java Graphics 图形绘制
2016-10-26 20:30:45Graphics类提供基本绘图方法,Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形、画字符串等。 画线段 drawLine public abstract void ... -
MATLAB三维图形绘制
2019-06-29 16:08:15三维图形绘制 1. 曲线图绘制 plot3指令: 2. 网格图绘制 绘制函数z=f(x,y)的三维网格图的过程如下: (1)确定自变量x和y的取值范围和取值间隔。 x = x1:dx:x2, y = y1:dy:y2 (2)构成xoy平面上的自变量采样“格点... -
高德地图图形绘制的研究---在地图上绘制的自定义任意基本图形
2019-04-25 17:39:11高德地图自定义图形绘制中坐标转换的问题,绘制高级自定义图形1. 绘制正方形图1图2图3利用高德地图绘制任意旋转角度的椭圆效果图如上图1图4图5 本文主要对需要在高德地图(或其他地图上面绘制规则自定义图形)的... -
基于P5JS创意图形绘制
2019-10-20 21:16:39基于P5JS创意图形绘制 使用p5,webgl等工具,尽量重现所给gif图库中的图像。 所选临摹图形为 主要过程 选用了P5JS在线编辑器进行实现,可以浏览P5JS网站并复制附件txt的代码查看效果。参考了Reference中的各种功能... -
c++ 图形绘制工具
2012-11-19 19:43:32图形绘制工具 使用gawk能够提取或计算我们感兴趣的数据,但是还不能直接地反映问题,所以,需要使用图形绘制工具将所得数据用图形的方式来表示。 [1] Xgraph绘制图形工具 Xgraph是NS2自带的一个小巧的绘图... -
Java Graphics 图形绘制技术
2017-02-19 00:06:49JAVA绘图技术的介绍Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中。...Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画圆、画带颜色的图形、画椭 -
OpenGL(二)图形绘制之点线绘制
2016-07-03 12:47:25本次主要简单学习OpenGL中相关图形绘制的一些API。 以下程序主要是点的大小、直线线性和线宽绘制的示例。 #include #include #include #include #include //窗口的大小 GLsizei windowWidth; GLsizei ... -
13 MATLAB 三维图形绘制
2016-12-26 11:53:36在实际工程应用中,常常遇到三维甚至更多维的数据,需要在图形中表示出来,MATLAB中提供了相应的三维图形 绘制功能,这些绘制功能与二维图形的绘制十分类似,特别是曲线的属性,例如线型、颜色等的设置,是完全相同... -
MATLAB平面几何图形绘制实例
2018-02-28 00:55:42MATLAB平面几何图形绘制实例实例一、运动控制测试图形%以下图形用于运动综合测试,平面图形包含直线、圆弧、整圆、锐拐角、钝拐角,能比较充分的测试各种轨迹 运动控制性能。%输入圆心和半径可以调整图形大小和偏移... -
Java中常见图形绘制方式与实现
2018-11-15 00:11:56Java中常见图形绘制方式与实现
-
盒子模型 浮动
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
软件开发的7大原则
-
jdk-9.0.4_Wind-x64.zip
-
springMVC
-
物联网基础篇:快速玩转MQTT
-
【硬核】一线Python程序员实战经验分享(1)
-
面试:HashMap 底层实现原理
-
3.2 leetcode实现 strStr()
-
基于对偶四元数的姿轨耦合动力学模型1.md
-
唯恩.rar电气设备选型资料大全 (适合刚刚入行的电气工程师对设备进行选型规划)详解 报价
-
华为企业服务风险评估服务主打胶片.ppt
-
Vue项目城市选择页-页面的动态数据渲染(8-5)
-
VMware vSphere ESXi 7 精讲/VCSA/VSAN
-
三级网络技术知识点小礼包.pdf
-
LQ 方案 .pdf
-
基于不确定理论的退化数据分析方法_王浩伟.pdf
-
教你如何摆脱负债上岸,超详细(视频课程)
-
MySQL 多实例安装 及配置主从复制实验环境