当前位置:文档之家› C#高效绘图

C#高效绘图

C#高效绘图
C#高效绘图

C#高效绘图

来源:https://www.doczj.com/doc/a411216598.html,/suncherrydream/article/details/17585201

双缓冲技术

双缓冲是将图片在显示到DC前,现在要内存建一个DC,也就是用于存储这张图片的内存区,然后在将这部分update到你要显示的地方

这样,可以防止画面抖动很大

这样和你说吧,如果要实现你要的效果,你必须用指针访问内存

比如,把程序声明成unsafe的,然后按照上面的操作进行

this.clear(this.BackColor)不行的invalidate(),闪的厉害所以不行

我再来详细解释一下刚才实现双缓冲的具体步骤:

1、在内存中建立一块“虚拟画布”:

Bitmap bmp = new Bitmap(600, 600);

2、获取这块内存画布的Graphics引用:

Graphics g = Graphics.FromImage(bmp);

3、在这块内存画布上绘图:

g.FillEllipse(brush, i * 10, j * 10, 10, 10);

4、将内存画布画到窗口中

this.CreateGraphics().DrawImage(bmp, 0, 0);

重点:

现在的cpu飞快,其实数学计算一般很快,cpu大部分时间是在处理绘图,而绘图有三种境界:1>每次重绘整体Invalidate()

2>每次局部绘制Invalidate(Rect);

3>有选择的局部绘制。

不能说,一定是第三种方式好,得视情况,境界高程序肯定就复杂,如果对效率要求不高或者绘图量小当然直接用第一种方式。然而,稍微专业点的绘图程序,第一第二种方式肯

定满足不了要求,必须选用第三种方式。而第三种方式的手段多样,也得根据实际情况拿相应的解决之道。这里讲解一般的三种手段,他们可以联合使用。

1. 缓存——Bitmap或者DoubleBuffer。缓存就是先把绘制的图形绘制到一张内存位图上,然后在一次性的贴位图,他可以提高绘图速度,也能避免闪烁。DoubleBuffer=true是C#窗体的属性,设置了此属性估计系统本身会起用无效区的内存位图缓存,而不需要程序员Bitmap处理。

2. 合理利用无效区域。无效区域就是系统保存当前变化需要重绘的区域,可以在OnPaint()中,e.ClipRectangle(e.ClipRectangle.X)直接获得,也可以通过其他方式获得。Windows 系统只会重绘无效区域内的绘图信息,然而我们用户的绘制代码一般是绘制整个区域的,很多时候无效区域只是一小部分区域,虽然执行了所有的绘图代码,但是Windows系统只会重新更新无效区域内的绘图。这里有两个利用点:

1>用户请求重绘时,只请求重绘指定区域的,而不是整个区域,如Invalidate(Rect);

2>在用户绘图代码

Graphics g; g.DrawLine\g.DrawString\g.FillRectangle...前,先判断绘图的内容是否在无效区域,如果不是就不直接g.Draw...绘图代码。

3. 直接贴图。一般绘图或者重绘是Windows根据无效区域绘制的,如果在鼠标移动时需要重绘通过Windows系统处理Paint消息,有时满足不了要求,

比如①鼠标移动绘制十字测量线就得用异或线而不是Paint消息,

又比如②鼠标移动绘制跟随的信息提示框需要频繁擦除上次覆盖的背景,

又比如③台球滚动时台球与球桌背景的关系。

类似的这些问题如何解决?首先肯定不能利用Windows原来的绘图机制。其中一种解决方式是,不断的帧间变化区域贴内存位图——②中的信息框每次鼠标位置变化时可以重新

g.Draw...或者贴早生成的信息框内存位图,②中被信息框覆盖的背景应该把本来的大背景截取此需要擦除区域的位置大小位图贴回来就是擦除背景了。由于每次大背景发生变化时,都应会重新生成大背景内存位图,所以可以是变化的背景。

这三种方式可以一起使用,应该可以解决中等的绘图项目的效率问题。中大型的绘图,必须记住两点1>只绘制电脑屏幕能

显示的部分;2>只绘制变化的部分。

C#GDI+双缓冲高效绘图

Rectangle rectangle = e.ClipRectangle;//取出次窗体或者画布的有效区的矩形区域

BufferedGraphicsContext GraphicsContext = BufferedGraphicsManager.Current;//获取程序住缓冲区域的BufferedGraphicsContext(双缓存类,此类用于提供双缓冲的功能)对象

BufferedGraphics myBuffer = GraphicsContext.Allocate(e.Graphics, e.ClipRectangle);//获取缓冲区

Graphics g = myBuffer.Graphics;

指定在呈现期间像素偏移的方式。

g.PixelOffsetMode = PixelOffsetMode.HighQuality;//高质量低速度呈现

指定是否将平滑处理(消除锯齿)应用于直线、曲线和已填充区域的边缘。

g.SmoothingMode = SmoothingMode.HighQuality;// 指定高质量、低速度呈现。

g.Clear(BackColor);//或者使用invalidate方法==有效区的擦除

Pen bluePen2 = new Pen(Color.Blue);

LineDrawRoutine(g, bluePen2);

myBuffer.Render(e.Graphics); //将图形缓冲区的内容写入指定的Graphics对象。

g.Dispose();

myBuffer.Dispose();

其实在C#里如果是在Form中绘图的话直接把Form的DoubleBuffered = true就可以了(利用winfrom窗体的默认双缓冲)

把所有的绘图放在一个picturebox里面绘制,

不要直接再在form里面绘

SetStyle(https://www.doczj.com/doc/a411216598.html,erPaint, true);

SetStyle(ControlStyles.ResizeRedraw, true);

SetStyle(ControlStyles.AllPaintingInWmPaint, true);

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

SetStyle(ControlStyles.Selectable, true);

如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码:

请在构造函数里面底下加上如下几行:

SetStyle(https://www.doczj.com/doc/a411216598.html,erPaint, true);

SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.

SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲

参数说明:

UserPaint

如果为true,控件将自行绘制,而不是通过操作系统来绘制。此样式仅适用于派生

自Control的类。

AllPaintingInWmPaint

如果为true,控件将忽略WM_ERASEBKGND窗口消息以减少闪烁。仅当UserPaint 位设置为true时,才应当应用该样式。

DoubleBuffer

如果为true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将UserPaint和AllPaintingInWmPaint样式位设置为true。

GDI+的双缓冲问题

我想有很多搞图形方面的朋友都会用到双缓冲技术的时候,而且有的时候她的确是个头疼的问题。最近我也要用双缓冲技术,程序怎么调试都不合适,当要对图形进行移动时,总是会出现闪烁抖动。在网上找了些资料,说得都不清不楚的,折腾了一晚上也没弄出来。第二天觉定自己研究一下。现在把自己的一些想法拿出来跟大家分享一下。

双缓冲的基本原理:

一直以来的误区:.net1.1 和 .net 2.0 在处理控件双缓冲上是有区别的。

.net 1.1中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true);

.net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

要知道,图元无闪烁的实现和图元的绘制方法没有多少关系,只是绘制方法可以控制图元的刷新区域,使双缓冲性能更优!

导致画面闪烁的关键原因分析:

一、绘制窗口由于大小位置状态改变进行重绘操作时

绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面重新刷新一次以维持窗口正常显示。刷新过程中会导致所有图元重新绘制,而各个图元的重绘操作并不会导致Paint事件发生,因此窗口的每一次刷新只会调用Paint事件一次。窗口刷新一次的过程中,每一个图元的重绘都会立即显示到窗口,因此整个窗口中,只要是图元所在的位置,都在刷新,而刷新的时间是有差别的,闪烁现象自然会出现。所以说,此时导致窗口闪烁现象的关键因素并不在于Paint事件调用的次数多少,而在于各个图元的重绘。

根据以上分析可知,当图元数目不多时,窗口刷新的位置也不多,窗口闪烁效果并不严重;当图元数目较多时,绘图窗口进行重绘的图元数量增加,绘图窗口每一次刷新都会导致较多的图元重新绘制,窗口的较多位置都在刷新,闪烁现象自然就会越来越严重。特别是图元比较大绘制时间比较长时,闪烁问题会更加严重,因为时间延迟会更长。

解决上述问题的关键在于:窗口刷新一次的过程中,让所有图元同时显示到窗口。

二、进行鼠标跟踪绘制操作或者对图元进行变形操作时

当进行鼠标跟踪绘制操作或者对图元进行变形操作时,Paint事件会频繁发生,这会使窗口的刷新次数大大增加。虽然窗口刷新一次的过程中所有图元同时显示到窗口,但也会有时间延迟,因为此时窗口刷新的时间间隔远小于图元每一次显示到窗口所用的时间。因此闪烁现象并不能完全消除!所以说,此时导致窗口闪烁现象的关键因素在于Paint事件发生的次数多少。

解决此问题的关键在于:设置窗体或控件的几个关键属性。

下面讲具体的实现方法:(转)

1、在内存中建立一块“虚拟画布”:Bitmap bmp = new Bitmap(600, 600);

2、获取这块内存画布的Graphics引用:Graphics g = Graphics.FromImage(bmp);

3、在这块内存画布上绘图:如画线g.DrawLine(添加参数);

4、将内存画布画到窗口中:this.CreateGraphics().DrawImage(bmp, 0, 0);

在构造函数中加如下代码

代码一:

SetStyle(https://www.doczj.com/doc/a411216598.html,erPaint, true);

SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.

SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲

或代码二:

this.SetStyle(ControlStyles.DoubleBuffer | https://www.doczj.com/doc/a411216598.html,erPaint |

ControlStyles.AllPaintingInWmPaint, true);

this.UpdateStyles();

上述方式适合直接在窗体上绘制图形,并且很容易做到。但有时我们需要在某个控件上绘制图形,那该怎么办呢?原理跟直接在窗体上绘制图形采用双缓冲是一样的,也要在控件的构造函数里设置上述代码一或代码二。那么又怎么设置呢?

在Microsoft Visual Studio 2005环境下的,用的C#语言,并采用GDI+。目标是实现简单的鼠标拖动画线,并且要把之前画过的线都重新画出来。

整个程序使用了三个控件:一个SplitContainer控件、一个自定义的Panel控件和一个VS 自带的Panel控件。SplitContainer控件的大小设置成窗体宽、半窗体高并定位在窗体的下半部分。自定义的Panel控件和VS自带的Panel控件都是通过设置它们的Dock属性使它们绑定到SplitContainer控件的Panel1和Panel2上。附录中会说到自定义的Panel控件是怎么定义的。

窗体的上半部分采用双缓冲。自定义的Panel控件采用了双缓冲,是通过在自定义Panel控件时设置样式来做到的(设置方法与窗体的双缓冲设置方法一样,如下面三条语句),这不能够在面板的Paint方法里直接设置,因为SetStyle()在Panel类中不是public方法。VS自带的Panel控件没有采用双缓冲。

SetStyle(ControlStyles.AllPaintingInWmPaint, true);

SetStyle(https://www.doczj.com/doc/a411216598.html,erPaint, true);

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

把三者结合

有两种方式来创建Graphics对象:第一是在内存上创建一块和显示区域或控件相同大小的画布,在这块画布上创建Graphics对象。接着所有的图元都在这块画布上绘制,绘制完成以后再使用该画布覆盖显示控件的背景,从而达到“显示一次仅刷新一次”的效果!第二是直接在内存上创建Graphics对象。

使用双缓冲的图形可以减少或消除重绘显示图面时产生的闪烁。使用双缓冲时,更新的图形首先被绘制到内存的缓冲区中,然后,此缓冲区的内容被迅速写入某些或所有显示的图面中。显示图形的重写相对简短,这通常可以减少或消除有时在更新图形时出现的闪烁。

双缓冲技术(C# GDI)

c#如何实现防窗体闪烁的功能。大家都会想到运用双缓冲技术,那么在c#中是如何做的?

1、利用默认双缓冲

(1)在应用程序中使用双缓冲的最简便的方法是使用 .NET Framework 为窗体和控件提供的默认双缓冲。通过将DoubleBuffered 属性设置为true。

this.DoubleBuffered=true;

(2)使用SetStyle 方法可以为Windows 窗体和所创作的Windows 控件启用默认双缓冲。

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

2、手工设置双缓冲

.netframework提供了一个类BufferedGraphicsContext负责单独分配和管理图形缓冲区。每个应用程序域都有自己的默认BufferedGraphicsContext 实例来管理此应用程序的所有默认双缓冲。大多数情况下,每个应用程序只有一个应用程序域,所以每个应用程序通常只有一个默认BufferedGraphicsContext。默认BufferedGraphicsContext 实例由BufferedGraphicsManager 类管理。通过管理BufferedGraphicsContext实现双缓冲的步骤如下:

(1)获得对BufferedGraphicsContext 类的实例的引用。

(2)通过调用BufferedGraphicsContext.Allocate 方法创建BufferedGraphics 类的实例。(3)通过设置BufferedGraphics.Graphics 属性将图形绘制到图形缓冲区。

(4)当完成所有图形缓冲区中的绘制操作时,可调用BufferedGraphics.Render 方法将缓冲区的内容呈现到与该缓冲区关联的绘图图面或者指定的绘图图面。

(5)完成呈现图形之后,对BufferedGraphics 实例调用释放系统资源的Dispose 方法。完整的例子,在一个400*400的矩形框内绘制10000个随机生成的小圆。

BufferedGraphicsContext current = BufferedGraphicsManager.Current; //(1) BufferedGraphics bg = current.Allocate(this.CreateGraphics(),this.DisplayRectangle); //(2) Graphics g = bg.Graphics;//(3)

//随机宽400 高400

System.Random rnd = new Random();

int x,y,w,h,r,i;

for (i = 0; i < 10000; i++)

{

x = rnd.Next(400);

y = rnd.Next(400);

r = rnd.Next(20);

w = rnd.Next(10);

h = rnd.Next(10);

g.DrawEllipse(Pens.Blue, x, y, w, h);

}

bg.Render();//(4)

//bg.Render(this.CreateGraphics());

bg.Dispose();//(5)

BufferedGraphicsContext current = BufferedGraphicsManager.Current; //(1) BufferedGraphics bg;

bg = current.Allocate(this.CreateGraphics(),this.DisplayRectangle); //(2)

Graphics g = bg.Graphics;//(3)

//随机宽400 高400

System.Random rnd = new Random();

int x,y,w,h,r,i;

for (i = 0; i < 10000; i++)

{

x = rnd.Next(400);

y = rnd.Next(400);

r = rnd.Next(20);

w = rnd.Next(10);

h = rnd.Next(10);

g.DrawEllipse(Pens.Blue, x, y, w, h);

}

bg.Render();//(4)

//bg.Render(this.CreateGraphics());

bg.Dispose();//(5)

3、自己开辟一个缓冲区(如一个不显示的Bitmap对象),在其中绘制完成后,再一次性

显示。

完整代码如下:

view plaincopy to clipboardprint?

Bitmap bt = new Bitmap(400, 400);

Graphics bg = Graphics.FromImage(bt);

System.Random rnd = new Random();

int x, y, w, h, r, i;

for (i = 0; i < 10000; i++)

{

x = rnd.Next(400);

y = rnd.Next(400);

r = rnd.Next(20);

w = rnd.Next(10);

h = rnd.Next(10);

bg.DrawEllipse(Pens.Blue, x, y, w, h);

}

this.CreateGraphics().DrawImage(bt, new Point(0, 0));

BufferedGraphicsContext的构造函数

BufferedGraphicsContext

初始化BufferedGraphicsContext 类的新实例。

BufferedGraphicsContext的方法

?Allocate(Graphics, Rectangle)

使用指定的Graphics 的像素格式,创建指定大小的图形缓冲区。

?Allocate(IntPtr, Rectangle)

使用指定的Graphics 的像素格式,创建指定大小的图形缓冲区。

?Dispose

Releases all resources used by theBufferedGraphicsContext.

?Equals(Object)

确定指定的Object 是否等于当前的Object。(继承自Object。)

?Finalize

允许Object 在“垃圾回收”回收Object 之前尝试释放资源并执行其他清理操作。(继承自Object。)

?GetHashCode

用作特定类型的哈希函数。(继承自Object。)

?GetType

获取当前实例的Type。(继承自Object。)

?Invalidate

如果某个缓冲区已被分配但尚未释放,则释放当前的图形缓冲区。

?MemberwiseClone

创建当前Object 的浅表副本。(继承自Object。)

?ToString

返回表示当前Object 的String。(继承自Object。)

BufferedGraphicsContext的属性

?MaximumBuffer

获取或设置要使用的缓冲区的最大大小。

双缓冲技术绘图

本文主要介绍 .Net 框架的基本绘图技术。通过简要的介绍和示例程序来探讨绘图技术的优势、劣势以及其它相关注意事项。

简介

幸运的是当编写一个典型的Windows 窗体程序时,窗体和控件的绘制、效果等操作是不需要特别加以考虑的。这是为什么呢?因为通过使用 .Net 框架,开发人员可以拖动一系列的控件到窗体上,并书写一些简单的与事件相关联的代码然后在IDE中按F5,一个完完

全全的窗体程序就诞生了!所有控件都将自己绘制自己,窗体或者控件的大小和缩放都调

整自如。在这里经常会用到的,且需要引起一点注意的就是控件效果。游戏,自定义图表控件以及屏幕保护程序的编写会需要程序员额外撰写用于响应Paint 事件的代码。

本文针对那些Windows 窗体开发人员并有助于他们在应用程序编制过程中使用简单的

绘图技术。首先,我们会讨论一些基本的绘图概念。到底谁在负责进行绘制操作?Window s 窗体程序是如何知道何时该进行绘制的?那些绘制代码究竟被放置在哪里?之后,还将介绍图像绘制的双重缓冲区技术,你将会看到它是怎样工作的,怎样通过一个方法来实现缓存和实际显示的图像间的交替。最后,我们将会探讨”智能无效区域”,实际就是仅仅

重绘或者清除应用程序窗体上的无效部分,加快程序的显示和响应速度。希望这些概念和技术能够引导读者阅读完本文,并且有助于更快和更有效的开发Windows 窗体程序。

Windows 窗体使用GDI+图像引擎,在本文中的所有绘图代码都会涉及使用托管的.Net 框架来操纵和使用Windows GDI+图像引擎。

尽管本文用于基本的窗体绘图操作,但是它同样提供了快速的、有效的且有助于提高程序性能的技术和方法。所以,在通读本文之前建议读者对.Net框架有个基本的了解,包括Windows 窗体事件处理、简单的GDI+对象譬如Line,Pen和Brush等。熟悉Visual Basic .Net或者C#编程语言。

概念

Windows 应用程序是自己负责绘制的,当一个窗体”不干净”了,也就是说窗体改变

了大小,或者部分被其它程序窗体遮盖,或者从最小化状态恢复时,程序都会收到需要绘制的信息。Windows把这种”不干净”状态称为”无效的(Invalidated)”状态,我们理解为:需要重绘,当Windows 窗体程序需要重绘窗体时它会从Windows消息队列中获取绘制的信息。这个信息经过.Net框架封装然后传递到窗体的PaintBackground 和Paint 事件中去,在上述事件中适当的书写专门用于绘制的代码即可。

简单的绘图示例如下:

using System;

using System.Drawing;

using System.Windows.Forms;

public class BasicX : Form {

public BasicX() {

InitializeComponent();

}

private void BasicX_Paint(object sender, PaintEventArgs e) {

Graphics g = e.Graphics;

Pen p = new Pen(Color.Red);

int width = ClientRectangle.Width;

int height= ClientRectangle.Height;

g.DrawLine(p, 0,0, width, height);

g.DrawLine(p, 0, height, width, 0);

p.Dispose();

}

private void InitializeComponent() {

this.SetStyle(ControlStyles.ResizeRedraw, true);

this.ClientSize = new System.Drawing.Size(300, 300);

this.Text = "BasicX";

this.Paint += new PaintEventHandler(this.BasicX_Paint);

}

[System.STAThreadAttribute()]

public static void Main() {

Application.Run(new BasicX());

}

}

上述代码分成两个基本的步骤来创建示例程序。首先InitializeComponent 方法包含

一些属性的设置和附加窗体Paint 事件的处理过程。注意,在方法中控件的样式也同时被设置,设置控件的样式也是自定义Windows 窗体及控件行为的一种有效途径,譬如:控件的"ResizeRedraw"属性指示当窗体的大小变化发生以后需要对其完全进行重绘,也就是说重绘时总是需要对整个窗体的客户区域进行重绘。窗体的“客户区域”是指除了标题栏和

边框的所有窗体区域。可以进行一个有趣的试验,取消该控件的属性然后再运行程序,我们可以很明显的看出为什么该属性会被经常的设置,因为窗体调整大小后的无效区域根本不会被重绘。

好了,我们需要注意一下BasicX_Paint方法,正如先前所提到的,Paint 事件在程序需要重绘时被激活,程序窗体利用Paint事件来负责回应需要重绘的系统消息,BasicX_Pa int方法的调用需要一个对象sender 和一个PaintEventArgs类型的变量,PaintEventArg s类的实例或称之为变量e 封装了两个重要的数据,第一个就是窗体的Graphics 对象,该对象表示窗体可绘制的表面也称之为画布用于绘制诸如线、文本以及图像等,第二个数据就是ClipRectangle,该Rectangle对象表示窗体上无效的的矩形范围,或者说就是窗体需要重绘的区域。记住,当窗体的ResizeRedDraw设置后,调整大小后该ClipRectangle的大小实际就等于窗体整个客户区域的大小,或者是被其它程序窗体遮盖的那部分剪切区域。关于部分剪切区域的用处我们会在智能重绘章节作更详细的阐述。

双重缓冲区绘图技术

双重缓冲区技术能够使程序的绘图更加快速和平滑,有效减少绘制时的图像闪烁。该技术的基本原理是先将图像绘制到内存中的一块画布上,一旦所有的绘制操作都完成了,再将内存中的画布推到窗体的或者控件的表面将其显示出来。通过这种操作后的程序能使用户感觉其更加快速和美观。

下面提供的示例程序能够阐明双重缓冲区的概念和实现方法,这个示例所包含的功能已相当完整,且完全可以在实际应用中使用。在该章节后面还会提及该技术应该配合控件的一些属性设置才能达到更好的效果。

要想领略双重缓冲区绘图技术所带来的好处就请运行SpiderWeb示例程序吧。程序启动

并运行后对窗口大小进行调整,你会发现使用这种绘图算法的效率不高,并且在调整大小的过程中有大量的闪烁出现。

纵观程序的源码你会发现在程序Paint事件激活后是通过调用LineDrawRoutine方法来实现线的绘制的。LineDrawRoutine方法有两个参数,第一个是Graphics对象是用于绘制线条的地方,第二个是绘图工具Pen对象用来画线条。代码相当简单,一个循环语句,LINEFREQ 常量等,程序从窗体表面的左下一直划线到其右上。请注意,程序使用浮点数来计算在窗体上的绘制位置,这样做的好处就是当窗体的大小发生变化时位置数据会更加精确。

private void LineDrawRoutine(Graphics g, Pen p) {

float width = ClientRectangle.Width;

float height = ClientRectangle.Height;

float xDelta = width / LINEFREQ;

float yDelta = height / LINEFREQ;

for (int i = 0; i < LINEFREQ; i++) {

g.DrawLine(p, 0, height - (yDelta * i), xDelta * i, 0);

}

}

撰写很简单的用于响应Paint事件SpiderWeb_Paint的代码,正如前面所提到的,Grap hics对象就是从Paint事件参数PaintEventArgs对象中提取出来的表示窗体的绘制表面。这个Graphics对象连同新创建Pen对象一起传递给LineDrawRoutine方法来画出蜘蛛网似的线

条,使用完Graphics对象和Pen对象后释放其占用的资源,那么整个绘制操作就完成了。

private void SpiderWeb_Paint(object sender, PaintEventArgs e) {

Graphics g = e.Graphics;

Pen redPen = new Pen(Color.Red);

//call our isolated drawing routing

LineDrawRoutine(g, redPen);

redPen.Dispose();

g.Dispose();

}

那么到底作怎么样的改动才能使上面的SpiderWeb程序实现简单的双重缓冲区技术呢?

原理其实相当简单,就是将应该画到窗体表面的绘制操作改成先画到内存中的位图上,Li neDrawRoutine向这个在内存中隐藏的画布执行同样的蜘蛛网绘制操作,等到绘制完毕再通过调用Graphics.DrawImage方法将隐藏的画布上内容推到窗体表面来显示出来,最后,再加上一些小的改动一个高性能的绘图窗体程序就完成了。

比较下面双重缓冲区绘图事件与前面介绍的简单绘图事件间的区别:

private void SpiderWeb_DblBuff_Paint(object sender, PaintEventArgs e) {

Graphics g = e.Graphics;

Pen bluePen = new Pen(Color.Blue);

//create our offscreen bitmap

Bitmap localBitmap = new Bitmap(ClientRectangle.Width,ClientRectangle.Height

);

Graphics bitmapGraphics = Graphics.FromImage(localBitmap);

//call our isolated drawing routing

LineDrawRoutine(bitmapGraphics, bluePen);

//push our bitmap forward to the screen

g.DrawImage(localBitmap, 0, 0);

bitmapGraphics.Dispose();

bluePen.Dispose();

localBitmap.Dispose();

g.Dispose();

}

上面的示例代码创建了内存位图对象,它的大小等于窗体的客户区域(就是绘图表面)

的大小,通过调用Graphics.FromImage将内存中位图的引用传递给Graphics对象,也就是说后面所有对该Graphics对象的操作实际上都是对内存中的位图进行操作的,该操作在C+ +中等同于将位图对象的指针复制给Graphics对象,两个对象使用的是同一块内存地址。现在Graphics对象表示的是屏幕后方的一块画布,而它在双重缓冲区技术中起到至关重要的作用。所有的线条绘制操作都已经针对于内存中的位图对象,下一步就通过调用DrawImag e方法将该位图复制到窗体,蜘蛛网的线条就会立刻显示在窗体的绘制表面而且丝毫没有闪烁出现。

这一系列的操作完成后还不是特别有效,因为我们先前提到了,控件的样式也是定义Wind ows 窗体程序行为的一条途径,为了更好的实现双重缓冲区必须设置控件的Opaque属性,这个属性指明窗体是不负责在后台绘制自己的,换句话说,如果这个属性设置了,那么必须为清除和重绘操作添加相关的代码。具备双重缓冲区版本的SpiderWeb程序通过以上的设

置在每一次需要重绘时都表现良好,窗体表面用其自己的背景色进行清除,这样就更加减少了闪烁的出现。

public SpiderWeb_DblBuff() {

SetStyle(ControlStyles.ResizeRedraw | ControlStyles.Opaque, true);

}

private void SpiderWeb_DblBuff_Paint(object sender, PaintEventArgs e) {

//create our offscreen bitmap

Bitmap localBitmap = new Bitmap(ClientRectangle.Width, ClientRectangle.Heigh

t);

Graphics bitmapGraphics = Graphics.FromImage(localBitmap);

bitmapGraphics.Clear(BackColor);

//call our isolated drawing routing

LineDrawRoutine(bitmapGraphics, bluePen);

}

结果怎么样?图像的绘制平滑多了。从内存中将蜘蛛网的线条推到前台以显示出来是完全没有闪烁的,但是我们还是稍微停顿一下,先将内存中的位图修整一下再显示出来,可以添加一行代码以便使线条看上去更加平坦。

bitmapGraphics.SmoothingMode = SmoothingMode.AntiAlias;

在将内存中的位图对象赋给Graphics后通过放置这行代码,我们在画布上所画的每一个线条都使用了反锯齿,使凹凸不平的线条显得更加平坦。

完成了简单的双重缓冲区应用后有两个问题需要向读者阐明,.Net中的某些控件例如

:Button、PictureBox、Label还有PropertyGrid都已经很好的利用了该技术!这些控件在默认状态下会自动启用双重缓冲区技术,用户可以通过对“DoubleBuffer”属性的设置来

就可以实现双重缓冲区技术。所以,用户若使用PictureBox来绘制蜘蛛网将会更有效率一些,而且也使程序变得更加简单了。

我们在这里讨论的双重缓冲区技术既不是完全被优化但也没有什么太大的负面影响。双重缓冲区技术是减少Windows 窗体绘制时闪烁的一条重要途径,但是它也确实消耗不少内存,因为它将会使用双倍的内存空间:应用程序所显示的图像和屏幕后方内存中的图像。每次Paint事件被激活时都会动态的创建位图对象,这种机制会相当耗费内存。而自带双重缓冲区技术的控件在使用DoubleBuffer属性后执行起来的优化程度则会更好一些。

使用GDI+的DIB(与设备无关的位图)对象来实现这种画面以外的内存缓冲,自带双重缓

冲区机制的控件则能好的利用该位图对象。DIB是底层Win32的对象用于高效的屏幕绘制。同样,值得注意的是GDI+的第一个版本GDI中仅与硬件加速有关以及一些简单功能可以直接

使用,由于这样的限制,像反锯齿和半透明等屏幕绘制方法执行起来的速度则相当慢。尽管双重缓冲区机制消耗了一些内存但是它的使用不容置疑的增强了程序的执行性能。

智能重绘,在绘制前需要斟酌一下

“智能无效”(智能重绘)就是在暗示程序员应该明白仅应对程序中无效的区域进行重

绘,对Regions对象所对应的无效区域进行重绘可以提高绘制性能,使用Regions对象你可以仅排除或绘制控件和窗体的部分区域已获得更好的性能。我们现在就开始来看一下Basi cClip示例程序,这个程序使用保存在PaintEventArgs对象的ClipRectangle对象,之前我们已经提及,无论何时当程序的大小发生变化时Paint事件都会被激活。BasicClip示例程

序用红和蓝两种颜色填充剪切的矩形区域,利用不同的速度调整窗体的大小几次以后,你会发现绘制的矩形区域其实就是窗体的无效区域(包括大于原始窗体大小的区域部分和缩少了的区域部分),示例程序的Paint事件代码如下:

private void BasicClip_Paint(object sender, PaintEventArgs e) {

Graphics g = e.Graphics;

//swap colors

if (currentBrush.Color == Color.Red)

currentBrush.Color = Color.Blue;

else

currentBrush.Color = Color.Red;

g.FillRectangle(currentBrush, e.ClipRectangle);

g.Dispose();

}

该示例程序的唯一目的就是演示怎样仅针对部分区域进行图形绘制。

Regions是一种被用来定义Windows 窗体或者控件区域的对象,调整窗体大小后所获得的Regions就是窗体重绘的最小区域。当程序需要进行绘制的时候仅绘制感兴趣的特殊区域,这样绘制更小的区域就会使程序的运行速度更快。

为了更好的演示Regions的用法,请查看TextCliping示例程序。该程序重载了OnPain tBackground和OnPaint方法,直接重载这些方法比侦听事件更能保证代码在其它的绘制操作之前被调用,而且对于自定义控件的绘制也更加有效。为了清楚起见,示例程序提供了一个Setup方法,该方法定义了全局的Graphics对象。

private void Setup() {

GraphicsPath textPath = new GraphicsPath();

textPath.AddString(displayString, FontFamily.GenericSerif,

0, 75, new Point(10, 50), new StringFormat());

textRegion = new Region(textPath);

backgroundBrush = new TextureBrush(new Bitmap("CoffeeBeanSmall.jpg"), WrapMode.Tile);

foregroundBrush = new SolidBrush(Color.Red);

}

上面的Setup方法首先定义一个空的GraphicsPath对象变量textPath,下一步字符串“Windows Forms”的边界被添加到该路径中,围绕这个轮廓创建Region。这样,一个被绘制在窗体表面的以字符串轮廓为区域的Region就被创建了。最后,Setup方法创建以材质刷子

为背景和以实色刷子为前景来绘制窗体。

protected override void OnPaintBackground(PaintEventArgs e) {

base.OnPaintBackground(e);

Graphics bgGraphics = e.Graphics;

bgGraphics.SetClip(textRegion, CombineMode.Exclude);

bgGraphics.FillRectangle(backgroundBrush, e.ClipRectangle);

bgGraphics.Dispose();

}

上面定义的OnPaintBackground方法先立刻调用基类方法,这能够保证所有底层绘制的

代码都能够被执行。下一步,从PaintEventArgs中获得Graphics对象,再将Graphics对象的剪切区域定义为textRegion对象。通过指定CombineMode.Exclude参数,明确无论在哪里

绘制或怎样绘制Graphics对象都不绘制textRegion区域内部。

protected override void OnPaint(PaintEventArgs e) {

base.OnPaint(e);

Graphics fgGraphics = e.Graphics;

fgGraphics.FillRegion(foregroundBrush, textRegion);

fgGraphics.Dispose();

}

最后,OnPaint事件负责精确的绘制出字符串。可以很容易的通过调用Graphics的Fil lRegion方法来实现。通过指定的前景刷子foregroundBrush和textRegion且仅是该区域被绘制。结果,Windows 窗体程序在运行之前确实“思考”该怎样进行绘制。

TextClipping示例程序,通过Region定义的Windows Forms字符串。能够使程序在绘制时避

开一个区域。

适当的组合使用区域和智能重绘你可以编写出运行速度快且不会引起闪烁的绘制代码,并且比单独使用双重缓冲区绘制还要节省内存的消耗。

结论

如果你的程序确定要进行绘制操作,使用几种技术可以增强绘制性能。确保争取设置控件属性以及适当的Paint事件处理是编写健壮程序的开始。在权衡好利弊后可以使用双重缓冲区技术产生非常“保护视力”的结果。最后,在实际绘制前进行思考到底哪些客户区

域或Region需要被绘制将非常有益。

mfc绘图程序上机步骤

首先生成MFC程序空框架 空框架中的每个类的职责是什么要自己理解清楚 第一次课: 1.定义自己的数据类CLine直线类,用于绘图 点击菜单:插入—类 选择Generic class,输入类名,每个类都是分成两个文件.h 中只有类体,包含类的数据成员定义和成员函数声明,.cpp中就是成员函数的类体外实现 classCLine { int x1,y1,x2,y2; public: CLine(int a=0,int b=0,int c=0,int d=0); virtual ~CLine(); int Getx1(); int Gety1(); int Getx2(); int Gety2(); void SetPoint1(intx,int y);很多函数是在后面使用中发现问题逐渐添加的 void SetPoint2(intx,int y); }; 2.自定义的类要作为数据成员出现在Doc类中 classCSmallCADDoc : public CDocument { protected: // create from serialization only CSmallCADDoc(); DECLARE_DYNCREATE(CSmallCADDoc) // Attributes public: CLine line1; //数据成员应该是私有,但是由于文档类与视图类交换频繁,为了访问方便,直接定义成公有了。你也可以定义成私有,再定义一个Get函数间接访问,取他的值3.注意:添加了这个数据成员后,需要增加几个#include “Line.h”语句 添加的原则是,每个cpp文件都单独编译,哪里用到新的类,相应的cpp前就要增加#include “。。。”语句 此处是在CSmallCADDoc类中添加了一个CLine line1;类对象,在SmallCADDoc.h文件中。所以,凡是包含了#include “SmallCADDoc.h”的地方都要在前面添加#include “Line.h” 语句。共3处:app doc view 这3个类的cpp文件前 4.注意:初始化 CLine line1; //数据成员是文档类的,它不像dos下程序,明确能看到定义,调用构造

mfc简单绘图程序

M F C 简 单 的 绘 图 程 序 ——王帅

目录 摘要 (2) 关键字 (2) 1 引言 (2) 设计目的 ............................................................................................................ 错误!未定义书签。 2 功能说明 (2) 2.1菜单栏....................................................................................................... 错误!未定义书签。 2.1.1图形 (3) 2.1.2画笔 (4) 2.1.3画硬币 (4) 2.2工具栏 (5) 2.3状态栏 (5) 3 功能的实现 (5) 3.1 视图设计 (5) 3.2 编辑资源 (6) 3.3 编程思路及各个函数的实现 (7) (1)思路 (7) (2)代码的实现 (7)

1.为基本形状创建一个基类 (8) 2.基本形状类的创建 (8) 2.1矩形类的创建及定义 (8) 2.2圆形类的创建及定义 (10) 2.3正五边形类的创建及定义 (11) 2.4正三角形类的创建及定义 (14) 2.5椭圆类的创建及定义 (16) 2.6正四边形类的创建及的定义 (17) 2.7正六边形类的创建及定义 (18) 2.8直线类的创建及定义 (19) 3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20) 3.1矩形类的调用与与绘图的实现 (20) 3.2圆形类的调用 (24) 3.3正三角形类的调用 (25) 3.4基本类型调用的剩余代码 (26) 4.画笔的使用、颜色及大小的调整 (29) 5.画硬币 (35) 6.工具栏中的自定义控件 (38) 7.状态栏中的显示 (39) 4程序功能的测试 (41) 5最后总结 (42)

visio画图技巧总结

对于工科学生来说,很多时候都要用到Visio画图软件,你用的熟练么?是否也曾因为某个细节问题烦恼不已,比如:在Visio里明明画的是虚线,怎么粘贴到Word里就变成实线了?还有怎么自己画的图形填充不了颜色啊?还有我想把某个图形旋转指定的角度耶,又该怎么办呢?。。。。。。呵呵,下面我就一一告诉你吧! (1) 如何解决Visio图形粘贴到word中虚线变实线的问题 症状:复制Visio中的图形,粘贴到Microsoft Office文档(如:doc、ppt)中,图形中的虚线显示成了实线。 原因:Visio呈现超长线条和非常细线为实线,以减小增强图元文件(EMF)的嵌入对象。这样做,Visio避免在其他程序文档中嵌入对象时文件大小有所增加,还有助于避免打印机缓冲区溢出。 解决方案:单击图形,进入编辑状态,选中需要修改的虚线线条,单击右键快捷菜单“格式-线条”,将粗细适当加粗,确定保存即可。如果还出现上述症状,说明线条还不够粗,还需要在适当加粗。 (2) 如何在Visio中给手画图形填充颜色 症状:在Visio中画好想要的图形后,结果发现无法填充指定的颜色。 原因:所画的图形为非封闭整体图形,Visio中默认封闭整体图形才能填充颜色。 解决方案:保证所画的图形为封闭整体图形。可以这样验证,点击图形中的每一个元素(如:边、角),如果点击后是整个图形进入编辑状态,说明是整体的,然后放大目测是否封闭,其实这样检查是在无法填充时才需要的。如何保证画的图形为封闭整体图形呢,可以选择绘图中的直线后,一笔画成所需图形,一笔是说,画完一条边后单击鼠标左键,且鼠标不离开转折点,继续画下一条边,直至与起始点重合。 (3) 如何将Visio模板中的图形旋转所需要的角度 症状: 用模板中给定的基本图形元素组合成所需图形时,无法按照所需角度组合 原因:Viso中默认的基本图形的旋转角度是向顺时针(或逆时针)方向90度。

C++实验报告(MFC简单画图程序)

VC++程序设计实验报告 一、实验目的 掌握MFC编程 二、实验内容 用MFC向导创建单文档应用程序,一个简单的画图程序。 ?使用C++语言实现 ?使用VC++6.0集成开发环境开发 ?使用MFC应用程序开发框架 三、实验步骤 ?基本功能描述 1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、 曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决 定图形的大小,当鼠标弹起,此图形则绘制完毕。 ?设计思路 1. 对需要用到的变量进行初始化。 2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4. 选择图形或其它属性,可进行下一次绘制。 ?软件设计 A 设计步骤 1.创建单文档 创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程 图2 创建单文档

CAD绘图技巧与建筑识图___入门级

CAD绘图技巧与建筑识图 入门级

一、CAD基础知识 二、宿舍楼平面图 三、宿舍楼立面图 四、宿舍楼剖面图 五、建筑行业就业形势论文 第一节AutoCAD的基础知识 CAD是Computer Adide Deignde简称(计算机辅助设计) CAD对我们建筑行业的人来说是非常重要的工具好比我们日常生活中吃饭用的筷子,不管以后是从事设计还是施工、监理等等都要用到CAD。事实论事我们以后进入社会的从事设计的人不会很多,大多数都要从施工做起,要想做好一个好的施工人员识图是必备的能力也是最基本的能力,对于我们刚刚接触建筑行业的人员,只有通过不短的画图联系才能掌握好识图的要领,可能一个施工员不是很会画图纸,但一个会画图纸的施工员必定是一个好的施工员,施工员在工地上是知道施工的人员,这就要求施工员掌握图纸上的每一个细节,建筑CAD就是绘制各种建筑图纸的(建筑施工图、结构施工图、水电施工图等等)所以CAD 应该是我们每一个专业人士应该掌握的技能。 一、安装要求: 为了给CAD一个优越的工作环境。用户的计算机,应采用高档的CPU(最低512的如pentiun133以上的处理器如果性能太低CAD将运行缓慢影响绘图速度,其优越性无法体现CAD安装的时候提供了一个很好的安装向导,可以按照安装向导的操作提示逐步进行安装。 提示:1安装完成后一定要重启计算机才能是配置生效 2拷贝资料是一定要安装程序快捷方式没用一默认般在C盘 3CAD2006的安装序列号:191-75444444(有注册机) CAD2007的安装序列号111-11111111

二CAD的界面组成 三、CAD的基本操作 1灵活的使用鼠标对提高绘图速度和绘图质量有着至关重要的作用,当鼠标在垫板上动时,鼠标的光标会在屏幕上不断的移动,光标所在屏幕上的位置不同,起形状也不同,所代表的含义也就不同,下面是各种光标形状所表示的含义: 光标形状含义光标形状含义 选择目标垂直移动 正常选择水平移动 正常绘图形状上右下移动 输入状态上左下移动 等待符号输入文本符号 应用程序启动任意平移

mfc简单绘图程序报告

简单绘图程序 1 需求说明 1.1 问题描述 设计一个简单的绘图应用程序,可以绘制图形或自由绘制线段,可以更改颜色、画笔粗细、保存文件。 1.2功能说明 1.图形绘制功能:直线、椭圆、矩形。 在菜单栏中选择需要的图形(也可以通过工具栏中选择)用鼠标便能在视图中绘出相应的图形。 2.可以绘制自由线段 3.对图形的操作:能通过菜单栏弹出对话框选择线宽、自定义颜色,也可以擦除绘制的线段。 4.可以保存绘图文件,保存后打开可以继续绘制。 2.1.3 数据说明 在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。在CDzyView类中添加一个私有变量xz;用来保存用户的选择(直线、矩形、椭圆、自由绘图)在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标停止移动时得到另外一个点。为视图类CDzyView分别捕获鼠标左键按下和弹起这两个消息。当鼠标左键按下时,需要将鼠标当前按下点保存至sx、sy,在鼠标移动停止后,将当前坐标保存至ex,ey.

其他主要数据说明: int fd 判断是否为自由绘图模式int w 线宽 int R RGB中的R int G RGB中的G int B RGB中的B CGraph类中 int m_nType:保存后重绘时用户的选择int qdx; 重绘起点x int qdy; 重绘起点y int zdx; 重绘终点x int zdy; 重绘终点y CLine类中 int cx; 重绘线宽 int sx; 重绘起点x int sy; 重绘起点y int zx; 重绘终点x int zy; 重绘终点y int w; 重绘线宽 自定义颜色对话框关联变量: IDC_EDIT_RED int m_Red IDC_EDIT_GREEN int m_Green IDC_EDIT_BLUE int m_Blue IDC_SCROLL_RED CScrollBar m_Sred IDC_SLIDER_GREEN CSliderCtrl m_Sgreen IDC_SPIN_BLUE CSpinButtonCtrl m_Sblue 2 分析、设计与实现 2.1 主要功能设计与实现

用Windows自带的“画图”软件绘图的方法及技巧

用Windows自带的“画图”软件绘图的方法及技巧 1引言 对于绝大多数微机用户来讲,用电脑画图始终是个令人感到头疼的问题。尽管许多常用的文字处理软件(如:Word)都带有绘图功能,但是使用这些软件画图却费时费力,效果不佳。一个图形往往会被操作者画得七零八落。有些用户虽然安装了如AutoCAD等专业绘图软件,但由于这些软件专业性太强,甚至对操作者的英文水平有相当的要求,因此能够熟练驾驭此类绘图软件的操作者很少。甚至多数普通操作者的微机中根本就未安装这些软件。 其实,要想快速画出漂亮、实用的图形并不难。通过摸索,发现并总结了一套使用电脑画图的方法,只要您的电脑中安装的是最常用的Windows操作系统,就可以利用其自带的“画图”功能软件,简洁快速地画出规整漂亮的图形来。 2在Windows操作系统中找到“画图”工具软件 用鼠标沿着电脑屏幕左下方开始的以下级联菜单一路单击,即可找到“画图”工具软件:开始→所有程序→附件→画图。打开画图程序界面后,操作者就可以施展本领,进行画图操作了。 3“画图”工具软件的基本功能介绍 在画图软件界面的左侧列有十六个功能按钮,将鼠标箭头指向任何一个功能按钮都会自动显示提示文字,告知每个按钮的基本功能。这些功能主要有“直线”、“矩形”、“椭圆”、“橡皮擦”、“文字”等。以画矩形为例来说明功能按钮的基本使用方法:用鼠标单击矩形功能按钮→将鼠标箭头移至右侧空白的画图区域→按下鼠标左键不要松开→斜向拖动鼠标→松开鼠标。这样,一个矩形的绘制就完成了。鼠标拖动的方向就是矩形对角线的方向。读者可以仿照此例,练习一下直线、椭圆等图形的画法。 若画图软件界面没有出现这十六个功能按钮,可以用鼠标单击“查看”下拉菜单,选中“工具栏”一项,则屏幕界面上就会显示这些功能按钮。 4功能性技巧介绍

一级注册建筑师-技术作图第四题学习笔记

详解 一、应急照明 (一)、疏散照明 1场所要求: 除建筑高度小于27米的住宅建筑外,民用建筑、厂房和丙类仓库的下列部位应设置疏散照明: a、封闭楼梯间、防烟楼梯间及其前室、消防电梯间的前室或合用前室、避难走道、避难层 (间)。 b、观众厅、展览厅、多功能厅和建筑面积大于200平米的营业厅、餐厅、演播室等人员密集的 场所。 c、建筑面积大于100平米的地下或半地下公共活动场所。 d、公共建筑内的生产场所及疏散走道。 e、人员密集的厂房内的生产场所及疏散走道。 2设置要求: 距高比4,设置间距为层高(默认为3米)乘以4等于12米。 (二八备用照明 1场所要求 消防控制室、消防水泵房、自备发电机房、配电室、防排烟机房以及发生火灾时仍需正常工 作的消防设备房应设置备用照明,其作业面的最低照度不应低于正常照明的照度。 2设置要求 距高比4,三米层高为12米间距布置。 二、灯光疏散指示标志 1场所要求 A、公共建筑、建筑高度大于54米的住宅建筑、高层厂房(库房)和甲、乙、丙类单、多层厂房,应设置灯光疏散指示标志。 2设置要求 A、应设置在安全出口和人员密集的场所的疏散门的正上方。 B、应设置在疏散走道及其转角处距地面高度1米以下的墙面或地面上。灯光疏散指示标志间距不应大于20米(人防工程不应大于10米);对袋形走道,不应大于10米;在走道转角区,不应大于1米。 C、下列建筑或场所应在疏散走道和主要疏散路径的地面上增设能保持视觉连续的灯光疏散指示标志或蓄光疏散指示标志: (a)总建筑面积大于8000平米的展览建筑。 (b )总建筑面积大于5000平米的地上商店。 (c)总建筑面积大于500平米的地下或半地下商店。 (d)歌舞娱乐放映游艺场所。 (e)座位数超过1500个的电影院、剧场,座位数超过3000个的体育馆、会堂或礼堂。 (f)车站、码头建筑和民用机场航站楼中建筑面积大于3000平米的候车、候船厅和航站楼的公共区域。

MFC实现简单画图形程序(学习相关)

《MFC编程及应用》课程设计报告题目:简单画图形程序 学号:姓名: 指导老师: 时间: 评语:

程序设计步骤: 一、建立基于对话框的应用程序框架; 二、CMy0910200155Dlg类中关键新增变量的作用: CPtrArray pta; //用于保存已绘图形的相关信息。 CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过 程中动态保存对象信息。 CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读 取信息时动态创建类的对象。 COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。 COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。 int num; //用于存放从"Index.txt"文件中读取的数字。 int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时, 表示按下了”撤消”按钮;当为3时,表示按下了”加载历史” 按钮,则从文件中读取信息。 int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示 刚画过圆角矩形;当为2时,表示刚画过椭圆。 int index; //用于存放pta数组的容量。 int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘 问题。 int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg 的一个接口,通过其值在1和0之间转换,来处理弹出式对 话框的初次绘制和移动时的重绘问题。

行程问题的画图方法与技巧

行程问题画图分析的方法与技巧 ————向量构图法 列方程解应用题可简单概括为“审、析、列、算、查”五个步骤。即“审题、分析、列式、计算、检查”。其中找等量关系式是解题的关键,然而较复杂的行程应用题的等量关系式是很难一下子找出来的,这就需要我们在“审题”的基础上认真分析,通过不断地把未知量用含未知数的代数式表示出来,即不断地扩大已知,使等量关系“水到渠成”。 在解行程应用题时,采取画图分析的方法不仅能有利的协调学生左、右脑(科学用脑),锻炼学生分析问题的能力,而且能激发学生的学习兴趣,培养学生的创新能力。 此外,通过对物体运动、联系、发展、变化的分析与再现,也为学生不断形成辩证唯物主义世界观打下良好的基础。 ⒈图的构成: 行程问题都与物体的位移有着直接的关系,而速度是既有大小,又有方向的量,所以图的主要构成是向量。此外,一幅完整的图还应包括图标、数据、文字、注解等,其中构成向量的有向线段有虚实、粗细及不同颜色的变化。 ⒉绘图原则: 在画图过程中应坚持的原则有: ⑴要坚持认真审题。 审题是解答应用题的第一步,能否顺利、准确的分析,审清题目的已知条件和问题是基础。 ⑵在认真审题基础上,“边读边画,兼顾协调”的原则。即:在审清题目的已知条件和问题后,边读边画,并兼顾题中数据的比例关系、前后联系及隐含条件等,展开联想,合理安排。 ⑶画图力求简洁和清晰明了,防止混淆不清。 在画图时要坚持画彩色图并利用有向线段的粗细和虚实等合理区分,防止混淆不清。 ⑷根据题目的特点,灵活创新。 ⒊绘图技巧 ⑴“速度、路程(数值型)”分别标在对应向量的“上、下”。一般情况下,含未知数的代数式所表示的路程标在它们中间。 ⑵用同种颜色表达同一事物及变化。 ⑶用“粗细”搭配来区分物体的“同时性”与否。同时运动的物体,用较粗的有向线段来表示。 ⑷用虚、实来区分物体的“假设运动”与“真实运动”等。 4.实例分析: ⑴巧用粗细及虚实的分析举例: 分析图: “?” 例1:有AB两城相距30千米,甲骑自行车从A往B,出发1小时30分钟后,乙骑摩托车也从A到B,已知乙的速度是甲的2.5倍,且乙比甲早到1小时,求甲的速度。

一级注册建筑师考试建筑技术设计(作图题)

《建筑技术设计》作图题及标准答案 第一题:建筑剖面 1. 结构类型:钢筋混凝土框架结构,现浇钢筋混凝土楼板、屋面板,钢筋混凝土挡土墙,折板式悬臂楼 梯 基础:钢筋混凝土交叉条形基础,基础底标高-4.450。基础梁为倒T型,基础梁高800,基础梁宽400,基础梁翼宽900,翼高200。 楼地面:观景平台:素土夯实,200厚素混凝土垫层,100厚钢筋混凝土楼板,30厚水泥砂浆找平,贴防滑地砖。 入口平台:素土夯实,150厚C25混凝土,30厚水泥砂找平,贴防滑地砖。 茶室楼面:100厚现浇钢筋混凝土楼板,30厚水泥砂浆找平,贴防滑地砖。 屋面:现浇钢筋混凝土斜屋面板,30厚水泥砂找平后贴瓦楞形屋面砖,坡度1/2,挑檐1200(无天沟)。屋面檐口结构顶标高为2.400,三角形高窗处屋面出檐600。 柱:300×300钢筋混凝土柱,25厚水泥砂浆抹平,外涂乳胶漆。 墙体:200厚轻质砖墙,25厚水泥砂浆抹平,涂乳胶漆。 挡土墙防水:防水涂料2.5厚(外贴20厚聚苯泡沫塑料板保护)。 栏杆:普通金属通透栏杆,离地高1100。 梁:所有梁宽为200,三角形高窗顶梁高300,其它梁高500。 门窗:门高2700,三角形高窗底标高4.200。 水池:素土夯实,150厚钢筋混凝土板,30厚防水砂浆找平,面贴瓷砖,高出水面100,水深600。 选择题: 1.该临水茶室屋脊(结构面)最高处标高为 A 6.000 B 4.200 C 5.500 D 5.000 2.楼梯上部的屋脊()结构面最高处标高为 A 4.125 B 4.200 C 4.225 D 4.500 3.剖面图中,可以看到的人字形屋面梁的数量是 A 2个 B 3个 C 4个 D 5个 4.基础梁顶标高应为 A -4.250 B -3.850 C -3.650 D -3.450 5.剖面图中,屋盖部分共剖到梁的根数是 A 6 B 7 C 8 D 9

MFC经典绘图方法总结

MFC经典绘图方法总结 Windows 绘图的实质就是利用windows提供的图形设备接口GDI(Graphics Device Interface)将图形会制在显示器上。 为了支持GDI绘图,MFC提供了两种重要的类: 设备上下文DC(Device Context)类,用于设置绘图属性和绘制图形; 绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。 CDC类介绍: 在MFC中,CDC是设备上下文类的基类,派生类包括:CClientDC, CPaintDC, CWindowDC, CMetaFileDC类 CClientDC 客户区设备上下文,绘制客户区时 CPaintDC 一般发生在窗口需要重绘时 CWindwDC 可以绘制整个窗口,通常在窗口WM_NCPAINT消息的响应函数CWnd::OnNCPaint()中使用 CMetaFileDC 专门用于图元文件的绘制,图元文件记录一组GDI命令,重建图形输出。 CDC包含m_hDC和m_hAttribDC二个设备上下文。CDC指导所有对m_hDC的输出GDI调用(SetTextColor)以及对m_hAttribDC的大部分属性GDI调用(GetTextColor)。 CDC对象的重要函数如下: 1、为指定设备创建上下文virtual BOOL CreateDC(...) 比如创建一个为屏幕的设备上下文 CDC dc; dc.CreateDC("DISPLAY", NULL, NULL,NULL); 2、创建内存设备上下文,与指定设备上下文兼容virtual BOOL CreateCompatibleDC( CDC * pDC) 3、删除CDC对象对应的Windows设备上下文, 通常不调用该函数而是使用析构程序virtual BOOL DeleteDC(); 4、将HDC句柄转化为设备上下文的句柄: CDC *pDC=CDC::FromHandle( hDC ) 5、选择GDI对象入选到设备上下文中,一共有五种形式: CPen * SelectObject( CPen * pPen) ; CBrush * SelectObject( CBrush * pBrush) ; virtual CFont * SelectObject( CFont * pFont) ; CBitmap * SelectObject( CBitmap * pBitmap) ; int SelectObject( CRgn * pRgn) ;

Word绘图使用技巧

Word绘图使用技巧 2011-02-24 12:08:48| 分类:电脑学习记录| 标签:|字号大中小订阅 今天在单位同事让我帮他在WORD里修改绘图,在移动文本框时,总是让人感到不能得心应手。想让它微移,不论是用鼠标拖动,还是按方向键移动,结果都一样——图像闪开了一大截,太多了!绘出的图形移动不到想要的位置,达不到理想的效果,在网上查了一下,以下可以解决问题: 一、Word中的像素级移动 在Word中移动或对齐图像和文本框时,总是让人感到不能得心应手。想让它微移,不论是用鼠标拖动,还是按方向键移动,结果都一样——图像闪开了一大截,太多了!绘出的图形移动不到想要的位置,达不到理想的效果,这还不说,短线段、小圆圈等小尺度的图形要素还画不出来。唉,如果Word也像 Photoshop、Flash等软件一样有像素级的移动功能就好了!别叹气, 答:Word真有这样的功能。在菜单“视图”的“工具栏”中打开“绘图”工具条,选择“绘图”中的“绘图网络”,在打开的绘图网络对话框中把“网络设置”项中的“水平间距”由默认的0.86字符改为0.01字符,“垂直间距”由默认的0.5行改为0.01行,单击“确定”。这时,画条短线段试一试,啊,长度竟然可以随心所欲!选中图像,用方向键移动一下。怎么样,像素级是不是来了? 二、文本框中文字随图片一起缩放 在Word中处理图像时,有时候要在图像中用文本框加入文字。输入文字后,再把图像和文本框组合在一起。但是,如果图像大小不符合要求,需要进行缩放,拖放图像时文本框中的文字并不会随图像一起变大变小。这时,很多人选择把图像取消组合后再编辑文本框的方法改变文字大小。 答:其实,只要把该图像剪切,再依次单击“编辑→选择性粘贴”,在打开的对话框中选择粘贴形式为“图片(增强型图元文件)”即可。这时,再拖放图像,就会发现“图像变,我也变”了。如果文字还需要修改变动,可以把图片格式由“嵌入式”变为“环绕式”,再取消组合,就可以对文本框进行编辑了。有意思的是,原 来的文本框可能会由一个分解为多个。 三、画出不打折的直线 在Word中如果想画水平、垂直或“15?、30?、45?、75?”角的直线,只须在固定一个端点后,按住Shift键,上下拖动鼠标,将会出现上述几种直线选择,位置调整合适后松开Shift键即可。 四、巧取Word文件中的图片 有时在他人的Word文件中发现有自己特别喜欢的图片,并想要把它保存下来,用什么办法得到该图片的单独文件呢?也许你会想到复制后粘贴,但那样做得到的图片效果会比原图可能要差,其实可以这样操作,得到该图的最佳效果及单独文件:首先打开那个Word文件,选择“文件→另存为”选项后会弹出一个对话框,选择好文件名和路径后,并从“保存类型”下拉菜单中选择“Web页”方式保存,完成后再去所选择的保存路径下看看,此时会发现一个与选择的文件名相同

基于MFC的OpenGL绘图

基于MFC的OpenGL绘图 本文更新版本请点击 [置顶]《基于MFC的OpenGL编程》系列文章 一、简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。每一个GDI命令需要传给它一个DC,但与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定了一个当前RC,在此线程中其后所有的OpenGL命令都使用相同的当前RC。虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。下面我将首先产生一个OpenGL RC并使之成为当前RC,这将分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。 二、MFC中的OpenGL基本框架 1、首先创建工程 用AppWizard产生一个MFC EXE项目,其他默认即可。 2、将此工程所需的OpenGL文件和库加入到工程中 在工程菜单中,选择"Build"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"opengl32.lib glu32.lib glut.lib glaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。然后打开文件"stdafx.h",加入下列头文件: #include #include 3、改写OnPreCreate函数并给视图类添加成员函数和成员变量

OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。把OnPreCreate改写成如下所示:BOOL COpenGLDemoView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); return CView::PreCreateWindow(cs); } 产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在COpenGLDemoView的类中添加一个保护型的成员函数BOOL SetWindowPixelFormat(HDC hDC)(用鼠标右键添加)和保护型的成员变量:int m_GLPixelIndex;并编辑其中的代码如下: BOOL COpenGLDemoView::SetWindowPixelFormat(HDC hDC) {//定义窗口的像素格式 PIXELFORMATDESCRIPTOR pixelDesc= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0, 0,

基于MFC的简单画图程序实验

简单画图程序 【实验目的】 本实验目的是通过构建基于MFC的windows画图程序,使学生: (1) 理解MFC应用程序的运行机制 (2) 掌握使用MFC构建Windows应用程序的基本结构及编程的基本方法 (3) 理解和掌握MFC应用程序消息处理机制及应用 (4) 掌握类向导(ClassWizard)的使用 【实验要求】 (1) 必须做好实验原理的预习。 (2) 需要对提供的程序代码进行分析,并明确实验时还应在何处添加哪些语句。 【实验环境】 Microsoft Windows XP Microsoft Visual C++ 6.0 1 基本功能描述 1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。 3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。 2 设计思路 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同

3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4) 选择图形或其它属性,可进行下一次绘制。

用Windows自带的“画图”软件绘图的方法及技巧

用Windows自带的“画图”软件绘图的方法及技巧1引言 对于绝大多数微机用户来讲,用电脑画图始终是个令人感到头疼的问题。尽管许多常用的文字处理软件(如:Word)都带有绘图功能,但是使用这些软件画图却费时费力,效果不佳。一个图形往往会被操作者画得七零八落。有些用户虽然安装了如AutoCAD等专业绘图软件,但由于这些软件专业性太强,甚至对操作者的英文水平有相当的要求,因此能够熟练驾驭此类绘图软件的操作者很少。甚至多数普通操作者的微机中根本就未安装这些软件。 其实,要想快速画出漂亮、实用的图形并不难。通过摸索,发现并总结了一套使用电脑画图的方法,只要您的电脑中安装的是最常用的Windows操作系统,就可以利用其自带的“画图”功能软件,简洁快速地画出规整漂亮的图形来。 2在Windows操作系统中找到“画图”工具软件 用鼠标沿着电脑屏幕左下方开始的以下级联菜单一路单击,即可找到“画图”工具软件:开始→所有程序→附件→画图。打开画图程序界面后,操作者就可以施展本领,进行画图操作了。 3 “画图”工具软件的基本功能介绍 在画图软件界面的左侧列有十六个功能按钮,将鼠标箭头指向任何一个功能按钮都会自动显示提示文字,告知每个按钮的基本功能。这些功能主要有“直线”、“矩形”、“椭圆”、“橡皮擦”、“文字”等。以画矩形为例来说明功能按钮的基本使用方法:用鼠标单击矩形功能按钮→将鼠标箭头移至右侧空白的画图区域→按下鼠标左键不要松开→斜向拖动鼠标→松开鼠标。这样,一个矩形的绘制就完成了。鼠标拖动的方向就是矩形对角线的方向。读者可以仿照此例,练习一下直线、椭圆等图形的画法。 若画图软件界面没有出现这十六个功能按钮,可以用鼠标单击“查看”下拉菜单,选中“工具栏”一项,则屏幕界面上就会显示这些功能按钮。 4功能性技巧介绍 若仅凭手眼协调操作,很难画出标准的正方形和圆形,甚至想画出标准的水平或垂直线也有一定的困难。在画矩形或椭圆形或直线的过程中,左手同时按住电脑键盘上的Shift键,则可以自动画出标准的正方形或圆形或水平(垂直)线。 5经验性技巧介绍 笔者在使用“画图”功能软件的过程中,摸索并总结了多条经验性的使用技巧。要想快速画出规整的图形来,并成为使用电脑画图的“高手”,读者就必须熟练掌握这些画图技巧。 5.1多个相同图形的绘制技巧 在作图过程中,经常会遇到这样的情况:在一个大图形中包含着几个完全相同的小图形。若将其中的每个小图形都绘制一遍的话,显然会费时费力,几个小图形也难以画得完全一致。其实,只要熟练掌握“复制”技巧,就会在短时间内“画出”许多相同的图形来。具体方法是:先画出其中一个图形→用鼠标单击界面左侧的“选定”功能按钮→将鼠标移回至绘图区→在刚画好的图形的左上角按下鼠标左键不要松开→向图形的右下方拖动鼠标→松开鼠标(此时图形已被选中)→将鼠标移至选中框内→单击鼠标右键→单击“复制”选项→将鼠标移至选中框外→单击鼠标右键→单击“粘贴”选项(复制的图形就会出现在绘图区的左上角)→选中复制出来的图形→将复制好的图形拖动至合适的位置。 以上列出了复制操作的详细步骤,读者稍做练习便可以轻松掌握。只要操作

c++实验报告mfc简单画图程序).doc

V C++程序设计实验报告 一、实验目的 掌握MFC编程 二、实验内容 用MFC向导创建单文档应用程序,一个简单的画图程序。 ?使用C++语言实现 ?使用VC++6.0集成开发环境开发 ?使用MFC应用程序开发框架 三、实验步骤 ?基本功能描述 1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形 则绘制完毕。 ?设计思路 1. 对需要用到的变量进行初始化。 2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4. 选择图形或其它属性,可进行下一次绘制。 ?软件设计 A 设计步骤 1.创建单文档 创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程 图2 创建单文档

等高线的绘制方法和修饰技巧

等高线的绘制方法和修饰技巧 平红星 (中国石油天然气管道局天津设计院) 摘要:数字地形图在我国石油工业及配套设施的建设中,起着非常重要的作用。而地形图中最重要的符号就是等高线,能否合理、正确的绘制等高线是决定地形图精度的重要因素。本文将结合我国在建的油气管道工程,详谈等高线的绘制方法和修饰技巧。 关键词:等高线,等高线的修饰、等高线的绘制,南方cass6.0 0引言 随着我国经济和社会的不断发展,石油工业在国家现代化的建设中起着举足轻重的作用。但经济发展的同时,城市用地和周边土地资源也日趋紧张,加之石油工业及配套设备自身存在的污染性和安全性问题,城市及城市周边已不再适合建设大型的石油工业及配套设备,而远离城市、人口稀疏的山地及丘陵地区却成为设备建设的理想之地。 因此,对于石油工程勘察部门来说,非平原地区的测量任务有所增加,如何简便、正确、合理的绘制测区内的等高线也成为绘图人员需要面对的问题。 1等高线的绘制 本文以南方cass6.0成图软件为绘图工具,以沈阳—大连输气管道工程为事例介绍等高线的绘制方法。 1.1等高线的绘制流程:

1.2等高线的绘制 本文以“沈阳—大连输气管道工程,抚顺支线,抚顺末站站址地形图(图1)为例进行说明。 从图1中不难看出,图中心处为东北方至西南方的一条山脊,由山脊向东南和西北方向延伸至两山谷,填充区域为村庄。在绘制该地区的等高线时,可采用分片绘制等高线的方法进行绘制。见(图2)红色区域为选定的准备分别独立建立DTM 绘制等高线的区域。 图1 图2 按照1.1小节中的等高线绘制流程逐步操作。一,展高程点。(绘地物符号前已操作);二,使用PL 命令,将准备绘制等高线区域内的高程点框入其中并

工程制图的绘图的方法与步骤

绘图的方法与步骤 第一节用绘图工具和仪器绘制图样 工程图样通常都是用绘图工具和仪器绘制的,绘图的步骤是:先画底稿;然后,进行校对,根据需要进行铅笔加深或上墨;最后,再经复核,由制图者签字。 一、用制图工具和仪器铅笔加深的图样 1、画底稿 绘图时,采光应来自左前方。通常用削尖的2H铅笔轻绘底稿,底稿一定要正确无误码,才能加深或上墨。画底稿的顺序是:先按图形的大小和复杂程度,确定绘图比例,选定图幅,画出图框和标题栏;根据选定的比例估计图形及注写尺寸所占面积,布置图面。然后,开始画图。画图时,先画图形的对称轴线,中心线或主要轮廓线,再逐步画出细部。图形完成后,画尺寸界线利尺寸线。最后,对所绘制的底稿进行仔细校对,改正错误和缺点,并擦去不需要的图线。 2、铅笔加深 铅笔加深时应做到线型粗细分明,符号国家标准的规定,宽度为O.5b的圈线(如粗实线、中虚线等)常用HB铅笔加深;宽度为0·35b的图线(如细实线、细点划线、折附线及波浪线等)常用削尖的H或2H铅笔适当用力加深;在加深圆弧时,圆规的铅芯应该比画直线时的铅笔芯软一号。用铅笔加深时,一般先加深细点划线(中心线、对称线)。为了使同类线型粗细一致,可以按线宽分批加深;先画粗实线,再画中虚线,然后画细实线,最后画双点划线、折断纠和波浪线。加深同类型圈线的顺序,一般是先画曲线,后画直线;画同类型的直线时,通常是先从上向下加深所有的水平线,再从左向右加深所有的竖直线,然后加深所有倾斜线。当图形加深完毕后,再加深尺寸线及尺寸界线等,然后,画尺寸起止符号 (45。的中实线斜短划或尺寸箭头),填写尺寸数字和书写图名、比例等说明文字和标题栏。在写字前,必须先按选定的字高用铅笔轻画格线(汉字画出长仿宋字的字格,数字与字母可只画出字存的两条边线)。 3、复核和签字 加深完成后,必须认真复核,如发现错误,则应立即改正;最后,由制图者签字。 二、用制图工具和仪器绘制上墨图样 用制图工具和仪器绘制上墨图样的程序,与绘制铅笔加深的图样相同。用描图纸上墨的图纸,可在描图纸下用已准备好的衬格书写各类文字;尤其应注意的是:同类线型一定要一次上墨完成,以免由于经常改变墨线笔的宽度而使同类图线的线宽不同。当描图中发现描错或产生墨污时,应进行修改。修图时,宜在图纸下垫一块三角板,然后用锋利的薄型刀片轻轻刮掉需要修改的图线墨污;如在括净处仍需描图画线或写字,则仍在下垫三角板的情况厂用硬橡皮再擦试一次,以便在压实修刮过的描图纸后,再重新上墨。 第二节制图的准备 一、明确目的突出重点 根据各施工工种的需要,安排每张图纸的具体内容。如在建筑平面图中应把砖墙的厚度门窗的位置、尺寸和编号,大样图的索引号等表达清楚。每张图突出

(完整版)Word绘图技巧比较全面

最全面的Word绘图技巧 编辑技巧相信大家对Word中的绘图功能都有一定的了解,可能以为Word中只能绘制一些[url=javascript:void(0)]简单 [/url]的图形。其实如果掌握好Word绘图技巧,相信足以应付办公中绝大多数的需求,下面将这些技巧全面介绍一下,希望大家能从中获益。 一、绘制图形的技巧 1.画直线 画直线的同时按着Shift键,将可以画出15°、30°、45°、60°、75°等具有特殊角度的直线。按住Ctrl键可画出自中间向两侧延伸的直线,同时按住这两个键则可画出自中间向两侧延伸的具有特殊角度的直线。 2.画弧 按住Shift键的同时可画出45度圆弧(画圆弧方法:打开绘图工具栏,单击“自选图形/基本形状/弧形”),按住Ctrl键可画出自中间向两侧延伸的圆弧,同时按住这两个键则可画出自中间向两侧延伸的45°圆弧,按住Alt键可画出一端固定的圆弧,同时按住Ctrl和Alt键则可画出一端固定的45°圆弧。 3.画矩形

按住Shift键可绘制出一个特殊的矩形——正方形,按住Ctrl键可绘出自中间向四周延伸的矩形,同时按住这两个键则可画出自中间向四周延伸的正方形。画圆时与此类似。 由此可见结合键盘画图的奇妙效果。 二、选择图形的技巧 如果需要选择部分图形,则可在按住Shift键的同时依次进行选择或单击绘图工具栏上的“选择对象”按钮,然后用鼠标画出一个框将所需要的图形罩住即可。 如果是各图形层叠在一起的情况,则可以首先选中最上面的图形,然后按Tab键或“Shift+Tab”组合键依次选择即可。 小提示:如果你发现某图形选择起来很困难(鼠标变不成十字形状),这种情况常发生在多个图形混杂在一起的情况,同样点击“选择对象”按钮后你会发现选择很容易。 三、改变图形大小的技巧 1.改变某条线段的长短 如果只是粗略改变,可在选中该线段后,将鼠标移至线段的一端待鼠标指针变成箭头状时拖动即可,如果要细微改变,则可在选中线段后,右键单击选择“编辑顶点”命令,鼠标指针变成一个中心实心的菱形形状,用鼠标拖拽相应的顶点达到调整的目的。

相关主题
文本预览
相关文档 最新文档