文档库 最新最全的文档下载
当前位置:文档库 › High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件

High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件

High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件

High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件

介绍

对于我之前的一个项目,我需要在图表控件上显示连续的数据流。我决定开发自己的控件,因为我找不到任何可以提供所需灵活性的自由软件控件。其中一个主要的限制是,控件必须绘制大量的数据,并能够迅速显示它(在Pocket PC上)。控件能够通过仅绘制新的数据点而不是完整的数据序列来做到这一点并且图表还能够显示静态数据。

这种控件是我长时间工作的结果,而且费尽周折地为了提供足够的灵活性来供需要它的人使用。对于使用者反馈我表示由衷的感谢:一个邮件,留言板中的一一句话或只是对本文评级。当我不知道是否还有人使用它时,我就没有必要维护这个控件了。

免责声明

这个控件是我花费很长时间的开发的结果,因此我对代码的使用放置一些小条件:

该代码可以以编译的形式用于任何非商业和商业目的。代码可以被重新开发,只要它提供作者名字和完整的免责声明。更改源代码需要得到作者的同意。

此代码不提供任何安全保证。我不会对使用此代码造成的损失负责。使用它需要自己承担风险。

This code may be used for any non-commercial

and commercial purposes in a compiled form.

The code may be redistributed as long as it remains

unmodified and providing that the author name

and the disclaimer remain intact. The sources

can be modified with the author consent only.

This code is provided without any guarantees.

I cannot be held responsible for the damage or

the loss of time it causes. Use it at your own risks.

鉴于开发这个控件所付出的努力,下面的要求并不过分:如果你在在商业应用程序中使用这个控件,那么请给我发邮件让我知道。

主要特点

控件的主要特点是:

高速绘图(轴固定时),允许快速绘制数据

无限数量的数据序列(内存是限制)

每个数据序列的数据量不受限制

支持线图,点图,平面图,柱状图,K线图和甘特图系列

最多四个轴(左,下,右和上轴)

标准轴,对数轴或日期/时间轴

自动伸缩的坐标轴, 翻转的坐标轴(相互独立)

轴标签

点标签

平滑的曲线

网格

图例和标题

交互性(在控件中发生特定事件时的通知)

支持手动缩放和鼠标平移

支持鼠标指针

支持轴上的滚动条

高度可定制(颜色,标题,标签,边缘,字体等)

支持UNICODE

支持打印和保存到图像文件

文档结构

本文通过一系列简短的教程来涵盖控件的大部分功能。阅读本文后,您将能够快速地在自己的应用程序中使用本控件。

我决定从文章中删除所有的类和函数的文档,因为它不是非常友好并且我很难维护。此外,随着代码的增长,要记录的类和函数的列表变得过于广泛以至于不能将所有内容放在文章中。作为替代,我提供了一个doxygen文档,您可以从本文中(文章的开头)下载:只需下载“Doxygen文档”zip文件,解压所有文件,双击“Index.html”文件,进行查看。

入门学习

此图表控件允许您在屏幕上绘制一系列数据。此控件可以添加几个不同类型数据序列并且最多可以使用四个轴。添加到图表的数据序列与一个水平轴(底部或顶部)和一个垂直轴(右侧或左侧)相关联。这两个轴控制数据序列在图表上的显示方式。

为了能够在应用程序中使用次图表控件,您首先需要在自己的工程里添加源代码zip中包含的文件。

注意:控件在内部使用动态转型,因此必须启用RTTI(RunTime Type Information 运行时自动类型识别的机制),否则可能会发生崩溃。默认情况下,VC6没有启用RTTI,因此要启用它打开项目设置- >“C / C ++”选项卡- >“C ++语言”类别,并确保“Enable Run-Time Type Information (RTTI) “选项已选中。

在应用程序中使用图表控件有两种方法:手动插入,或通过资源编辑器插入。

手动插入

1.#include "ChartCtrl"添加在对话框(Dialog)类的头文件中

2.在对话框类中添加变量CChartCtrl:

//{{AFX_DATA(CChartDemoDlg)

//}}AFX_DATA

CChartCtrl m_ChartCtrl;

3.在对话框类的OnInitDialog方法中添加这个控件的Create方法。

使用资源管理器

1.向对话框资源添加自定义控件,打开控件的属性,并为Class属性指定ChartCtrl。为了避免滚动条上的闪烁,必须设置WS_CLIPCHILDREN样式(0x02000000L),如图所示。

2.#include "ChartCtrl.h"添加在对话框(Dialog)类的头文件中

3.在对话框类中添加变量CChartCtrl:

//{{AFX_DATA(CChartDemoDlg)

//}}AFX_DATA

CChartCtrl m_ChartCtrl;

4.在DoDataExchange函数中添加DDX_Control(不要忘了更改ID号和控件名字):

Add a variable of type CChartCtrl in your dialog class:

Hide Copy Code

//{{AFX_DATA(CChartDemoDlg)

//}}AFX_DATA

操作数据序列

几种类型的数据序列可以添加到控制:点序列,线序列,曲面序列,柱状图序列,K 线图序列或甘特图序列。点的数据格式可能因序列而异(例如,K线图和甘特图系列使用不同的点格式)。

一旦你选择了一种系列,你可以通过调用上表中列出的CChartCtrl类的辅助函数之一将其添加到图表中。这些函数接受两个可选参数:两个布尔值来确定描述该系列是连接到副水平轴(顶轴)或者是连接大副垂直轴(右轴)。如果未指定参数,则数据系列将附加到主水平轴(底部轴)和主垂直轴(左轴)。

警告: 在将任何系列添加到图表之前,您需要创建该系列所连接的两个轴。如果不这样做,将导致控件失效(assert)。有关详细信息,请参见“操纵轴”一节。

一旦将系列添加到图表后,我们就可以使用数据填充该图表。有两种方法:将数据放到一个单元中一起添加,或者逐点添加。后者用于有动态数据时:每次调用函数时都会更新图表。虽然这个调用是快速的(在某些特定条件下),但是最好尽可能地将数据放到一个单元中。下面是一个简单代码示例,它在图表中创建两个系列,并用数据填充它们:一个系列在初始化时完全填充,另一个系列在调用OnDataReceived函数(仅存在于此示例的目

的)时填充。m_pLineSeries,m_pPointsSeries和m_ChartCtrl是CMyClass类的成员变量。

void CMyClass::Init()

{

.... // SNIP: Creation of the axes in the chart. This MUST be done before.

m_pLineSeries = m_ChartCtrl.CreateLineSerie();

m_pPointsSeries = m_ChartCtrl.CreatePointsSerie();

double YValues[10];

for (inti=0;i<10;i++)

XValues[i] = YValues[i] = i;

m_pLineSerie->SetPoints(XValues,YValues,10);

}

void CMyClass::OnDataReceived(double X, double Y)

{

m_pPointsSeries->AddPoint(X, Y);

}

所有系列类继承自同一抽象基类:CChartSerie。该类处理所有系列通用的功能,但对具体的数据点没有任何处理功能。点的概念在子类CChartSerieBase中引入,它是一个模板类,模板参数是要操作为点的数据类型。这很重要,因为序列可能必须处理不同的数据类型:例如点序列操作具有X和Y值的点,但是K线图系列操纵具有5个值(打开,关闭,高,低和时间值)的点。其他系列继承自CChartSerieBase并提供他们操作的数据类型。CChartSerieBase类已经处理了大多数数据管理,并通过纯虚函数将渲染委托给子类。每个系列在创建时也会分配一个Id。此标识可通过CChartSerie :: GetSerieId()检索,并可用于从图表中删除该系列。

该系列的一个重要特征是控制点的顺序:该系列中的所有点将根据它们的值重新排序。默认情况下,点是基于它们的X值排序的,但您可以通过对它们的Y值排序或不对它们进行排序来改变这种行为(在这种情况下,系列保持将点添加到系列中的顺序)。对点进行排序会对性能产生影响:如果点是有序的,则控件能够从完整系列中检索第一个和最后一个可见点,并且仅绘制两个点之间的点。另一方面,你将不能绘制像椭圆形的曲线。您可以通过调用CChartSerieBase :: SetSeriesOrdering来更改点的顺序。

控件中的不同系列的功能通常是不言自明的。然而,柱状图系列需要一些解释。

柱状图系列

这个系列有点特别,如果其中几个在同一个控件上绘制在一起,他们将互相影响。目的是能够绘制多个条形图系列,而不会重叠:它们是彼此相邻绘制的。为此,您需要指定每个所属的组(一个简单的整数标识符)。同一组的系列彼此相邻地绘制(或者对于水平条在彼此的顶部):参见两个图形的示例。设置组ID是通过SetGroupId函数完成的。

您还可以通过调用SetInterSpace静态函数来控制所有柱形图之间剩余的空间的宽度。这将为所有系列设置以像素为单位的空间(因此,如果显示多于两个系列,则在任何位置使用相同的空间)。注意,您可以通过调用SetBarWidth单独设置柱状图系列的宽度。

在点上添加标签

一旦使用数据填充您的系列,您还可以在系列的特定点上添加标签:这个标签始终附加到特定点。现在,只提供一种类型的标签,气泡标签:包含文本的圆角矩形并用线连接到特定点上。当然,如果需要,您也可以提供自己的自定义标签(参见“扩展功能”一节)。

有两种方式创建文本标签:静态创建标签时,或动态注册一个对象,当标签请求时,它将提供文本。第一种方法是最简单的,但也不太灵活。下面是一个代码片段,显示如何做(假设m_pSeries已经创建并填充足够的数据):

void CMyClass::Init()

{

// SNIP...

m_pSeries->CreateBalloonLabel(5,_T("This is a simple label"));

}

此调用将创建一个带有“This is a simple label”文本的标签,并将其附加到带索引为5的点。该函数返回一个指向新创建的标签的指针,以便您可以修改其某些属性或存储以供以后使用。

第二种方法有点复杂,但提供了更多的灵活性:例如,您可以以更方便的方式在标签中显示点属性(例如X值,Y值,…)。为此,您必须创建一个继承自CChartLabelProvider 的类,并在创建标签时提供此类的实例。此类是模板类,模板参数是标签附加到的系列的点类型。这个类是一个简单的接口,你必须覆盖TChartString GetText (CChartSerieBase * pSerie,unsigned uPtIndex)方法。此函数应返回必须在标签中显示的文本。它接收指向标签所附加的系列和点索引的指针。这里有一个这样的标签提供程序类的例子:

class CCustomLabelProvider : public CChartLabelProvider

{

public:

TChartString GetText(CChartSerieBase* pSeries, unsigned uPtIndex)

{

TChartStringStream ssText;

SChartXYPoint Point = pSeries->GetPoint(uPtIndex);

ssText << _T("X value=") << Point.X;

return ssText.str();

}

};

此代码段显示如何将其与标签一起使用。注意m_pSeries应该是一个操作SChartXYPoint点(点,线,面或者柱系列)的系列。如果不是这样,你的代码将给出一个编译错误。

void CMyClass::Init()

{

// SNIP...

m_pLabelProvider = new CCustomLabelProvider();

m_pSeries->CreateBalloonLabel(5, m_pLabelProvider);

}

控件不获取指针的所有权,因此,当你不再需要时,你有责任删除它。在上面的例子中,它通常会在CMyClass析构函数中被删除。在上面的示例中,您可以为所有要添加的标签地方重复使用相同的标签类,这也带来另一个优点:如果你想在运行时改变标签的格式,你只需要在CustomLabelProvider中添加代码。不需要遍历所有现有标签并更改其文本。当然,在这种情况下,需要刷新控件,因为必须重新绘制标签。还要注意TChartStringStream 类的用法,TChartStringStream类是由控件提供的别名(类似于TChartString)。当UNICODE 被定义时,它解析为std :: wstringstream,当未定义UNICODE时,解析为std :: stringstream。

对轴的操作

轴是图表的一个重要特征,因为它们控制不同系列在控制中的显示方式。控件中最多可使用四个轴:底部,顶部,左侧和右侧。控件的每个系列必须和一个水平轴和一个垂直轴相连接。在图表中添加系列时指定这些轴。底部和左侧轴是主轴,顶部和右侧轴是辅助轴(您将在控件的某些功能中遇到此问题)。现在有三种类型的轴供选择:标准轴,对数轴和日期/时间轴。您可以在不同位置选用不同类型的轴。

一旦您选择了在不同位置使用哪些轴,您需要先创建它们,然后才能向控件添加任何数据。为此,通过指定轴附加在哪个位置,简单地调用CreateStandardAxis,CreateLogarithmicAxis或CreateDateTimeAxis。如果已经在该位置创建了轴,则控件将销毁它并且用新的轴替换它。这里有一个简单的代码片段,显示如何在底部创建日期/时间,在左侧创建一个标准轴:

void CMyClass::Init()

CChartStandardAxis* pBottomAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis);

CChartLogarithmicAxis* pLeftAxis =

m_ChartCtrl.CreateLogarithmicAxis(CChartCtrl::LeftAxis);

}

一旦创建了这些轴,就可以对它们设置一些属性。大多数属性在所有轴类型之间共享(例如自动模式,最小值和最大值,轴标签,…)。轴可以设置为三种“自动”模式:全自动,屏幕自动和手动模式。

全自动模式基于附加到该轴的所有系列计算轴最小值和最大值(所有系列的所有点的最小值用作轴的最小值,并使用所有系列的所有点的最大值作为轴的最大值)。

屏幕自动模式基于与该轴相关的所有系列的所有可见点计算轴最小值和最大值。例如,如果图表仅显示连接到手动底部轴和屏幕自动左侧轴的一个系列,则左侧轴将自适应于当前可见的点,并且不考虑这些点有可能超过底轴的范围(在全自动模式下,底轴外部的点将被考虑)。警告:如果系列的两个轴都处于屏幕自动模式,则结果未定义。

在手动模式下,轴最小和最大值由用户设置,不由控件计算。

在使用自动轴模式下,如果将数据动态添加到控件,如果新的数据点位于轴的范围之外,那么控件将自动刷新。这里是一个代码片段(继续前一个代码段),显示一个全自动轴(底部轴)和一个手动轴(左轴,它是一个对数轴):

void CMyClass::Init()

{

// SNIP ...

pBottomAxis->SetAutomaticMode(CChartAxis::FullAutomatic);

// The call to SetAutomaticMode(CChartAxis::NotAutomatic) is not

// really needed because this is the default.

pLeftAxis->SetAutomaticMode(CChartAxis::NotAutomatic);

pLeftAxis->SetMinMax(0.01,1000);

}

处于离散模式下的轴

轴有一个模式是离散模式(默认禁用)。此模式指定轴不显示连续值,而只显示离散值,这些值是轴上刻度指定的值,而轴将不显示其他的值。尝试绘制不同于显示的节拍值的值是不可能的。让我们举一个例子:假设你有一个底部标准轴,间隔为1.0(所以,显示的蜱是1,2,3等等)。尝试绘制X值为0.5的点将在相同位置显示该点,就好像它的值为1.0。事实上,你可以认为两个刻度之间的区域是一个常量值。这就是为什么刻度标签显示在两个刻度的中间,而不是刻度本身。

这里有一个小代码片段,显示离散轴对系列显示方式的影响。代码片段下的两个图像显示启用离散模式(第一个图像)或禁用(第二个图像)的结果。

void CMyClass::Init()

CChartStandardAxis* pBottomAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis);

pBottomAxis->SetMinMax(0, 10);

CChartStandardAxis* pLeftAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis);

pLeftAxis->SetMinMax(0, 10);

pBottomAxis->SetTickIncrement(false, 1.0);

pBottomAxis->SetDiscrete(true);

CChartLineSerie* pSeries = m_ChartCtrl.CreateLineSerie();

double XVal[20];

double YVal[20];

for (int i=0; i<20; i++)

{

XVal[i] = YVal[i] = i/2.0;

}

pSeries->SetPoints(XVal,YVal,20);

}

使用日期/时间轴

使用日期/时间轴有点特别,下面是如何利用这个功能的解释。要了解日期/时间轴的重要一点是它们在COleDateTime对象内部工作。原因很简单:COleDateTime中有DATE类型的类,DATE类型是一个双精度型。由于图表中的点表示为双精度值,因此它非常适合:使用标准点(非日期/时间)和日期/时间点之间没有差异,这使得后者的使用不太复杂。所有点仍然存储为双精度型,无论是否是日期/时间。

创建日期/时间轴后,可以在控件中填充数据。为此目的,没有改变:你必须从CChartSerie 类调用void AddPoint(double X,double Y)或void SetPoints(double * X,double * Y,int Count)。CChartCtrl类提供了两个静态函数,让你从COleDateTime转换为双精度,反之亦然:

double DateToValue(const COleDateTime& Date)

COleDateTime ValueToDate(double Value)

如果您有另一种格式的日期(例如time_t或SYSTEMTIME),这不是一个问题,因为

COleDateTime对象可以从不同的时间格式构造(检查COleDateTime类的MSDN文档,以了解从哪种格式可以构造它)。

填充数据后,可以配置轴以显示所需的内容。与日期/时间轴相关的几个功能可用:

void SetDateTimeIncrement(TimeInterval Interval, int Multiplier)

void SetDateTimeFormat(bool bAutomatic, const TChartString& strFormat)

void SetReferenceTick(COleDateTime referenceTick)

第一个允许您指定轴上显示的两个节拍之间的间隔。两个节拍之间的间隔将遵守正确的时间,这意味着如果指定1个月的节拍增量

(Interval=CChartAxis::tiMonth and Multiplier=1),则两个节拍之间的间隔将是不规则的(28,30或31天)。第二个函数允许您指定刻度标

签的格式。控件根据刻度间隔自动格式化刻度标签,但您可以通过调用此函数覆盖它。检查MSDN上的COleDateTime :: Format函数的文档以获

取更多信息。最后,SetReferenceTick(COleDateTime referenceTick)函数允许您为轴指定一个参考标记。参考标记是用作绘制标记的参考

的日期:在该日期总是存在标记。当您在SetDateTimeIncrement函数中指定的multiplier 不是1时,这很有用。例如,假设您指定了3个月的单

位增量,并且您希望在2月(因此,5月,8月,…)有一个单位,那么您可以调用此函数将2月1日设置为参考单位。默认设置为2000年1月1日。

下面是一个简单的代码片段,它创建一个日期/时间轴,并显示不同函数的用法:

void CMyClass::Init()

{

// Sets the axis min value to January 1st 2006 and the axis

// max value to December 31st 2007.

COleDateTime minValue(2006,1,1,0,0,0);

COleDateTime maxValue(2007,12,31,0,0,0);

pBottomAxis->SetMinMax(CChartCtrl::DateToValue(minValue),

CChartCtrl::DateToValue(maxValue));

// Sets the tick increment to 4 months (disable automatic tick increment)

pBottomAxis->SetTickIncrement(false, CChartDateTimeAxis::tiMonth, 4);

// Sets the tick label format for instance "Jan 2006"

pBottomAxis->SetTickLabelFormat(false, _T("%b %Y"));

}

自定义外观

控件的外观方面可以根据不同的应用场景做出更改,比如控件的不同部分(图例,标

题,背景,…)都可以修改。所有与这些对象的交互是通过CChartCtrl类来实现:一些将根据需要创建(例如axes或series),一些在创建控件时创建(legend,titles,…)。一般来说,你永远不会自己创建这些对象,而是将该任务委派给CChartCtrl类。唯一的例外是当您要使用自定义轴或自定义系列(请参阅“扩展功能”部分)。例如,下面是一个代码段,设置渐变背景,并将图例放在控件的底部:

void CMyClass::Init()

{

// SNIP

// Disable the refresh of the control

m_ChartCtrl.EnableRefresh(false);

// Set the gradient for the background

m_ChartCtrl.SetBackGradient(RGB(255,255,255),RGB(125,125,255),gtV ertical);

// Dock the legend at the bottom

m_ChartCtrl.GetLegend()->DockLegend(CChartLegend::dsDockBottom);

// Specifies that the legend entries are horizontally stacked

m_ChartCtrl.GetLegend()->SetHorizontalMode(true);

// Re-enable the refresh of the control

m_ChartCtrl.EnableRefresh(true);

}

重要:从版本1.4的控件,每次调用控件上的一个属性将导致控件的完全刷新(即使像改变一些文本的字体或对象的颜色)。为了避免在没有必要时刷新控件(例如,当您同时更改多个属性时),应首先禁用刷新,更改属性,然后重新启用刷新,如上面的代码段所示。

自从1.5版的控件开始支持UNICODE。所有出现的std :: string对象已被TChartString 对象替换,这只是一个typedef,如果未启用UNICODE,则解析为std :: string,并在启用UNICODE时解析为std :: wstring。

响应鼠标事件

有时,应用程序需要响应用户鼠标操作。例如,如果用户点击点,则程序可以显示关于被点击的点的信息,这一节将解释如何做到。

虽然原理是有点不同,但是无论你想听在图表上的一般鼠标事件本身(点击轴,图例,…)或你是否对特定系列的鼠标事件感兴趣。这两种情况都很容易实现。

响应图表上的鼠标事件

你必须实现CChartMouseListener接口,覆盖你感兴趣的方法,并通过调用CChartCtrl :: RegisterMouseListener(CChartMouseListener * pMouseListener)将该类的实例注册到图表控件。根据鼠标事件发生在控件的哪个部分:标题,图例,轴或绘图区,调用该接口上的不同函数。对于所有这些函数,总是传递两个参数:MouseEvent,它是列出鼠标事件类型(鼠标移动,左键单击,…)的枚举,以及一个CPoint对象,它包含的发生事件的点的屏幕坐

标。对于某些函数,需要时传递一些其他参数。例如,当单击一个轴时,指向该轴的指针被传递给该函数。

下面是CChartMouseListener的实现,它对轴的点击作出反应,并显示一个消息框:

class CCustomMouseListener : public CChartMouseListener

{

public:

void OnMouseEventAxis(MouseEvent mouseEvent, CPoint point,

CChartAxis* pAxisClicked)

{

if (mouseEvent == CChartMouseListener::LButtonDoubleClick)

{

MessageBox(_T("Axis clicked"), _T("Info"), MB_OK);

}

}

};

然后你必须创建一个这个类的实例并注册它:

m_pMouseListener = new CCustomMouseListener();

m_ChartCtrl.RegisterMouseListener(m_pMouseListener);

这里也需要自己删除指针。

响应系列上的鼠标事件

响应系列上的事件与响应一般事件非常相似,只是监听器是CChartSeriesMouseListener 的一个实例,它是一个模板类,模板参数是系列的点类型。这是需要的,以避免当您要检索点的特定值时不必要的转型。另一个区别是,您必须在系列本身上注册监听器,而不是在图表控件上注册。

下面是CChartSeriesMouseListener的实现,它对系列的点击做出反应,如果点击发生在点上,它将显示一个带有点的Y值的消息框:

class CCustomMouseListener : public CChartSeriesMouseListener

{

public:

void OnMouseEventSeries(MouseEvent mouseEvent, CPoint point,

CChartSerieBase* pSerie, unsigned uPointIndex) {

if (mouseEvent == CChartMouseListener::LButtonDoubleClick &&

uPointIndex != INV ALID_POINT)

{

TChartStringStream ssText;

SChartXYPoint Point = pSeries->GetPoint(uPointIndex);

ssText << _T("Y value=") << Point.Y;

TChartString strText = ssText.str();

MessageBox(NULL,strText.c_str(), _T("Info"), MB_OK);

}

}

};

注意:当用户不点击一个点时,OnMouseEventSeries函数也可以被调用。例如当用户在两个点之间但仍然在该系列上点击时情况。在这种情况下,为uPointIndex参数传递INV ALID_POINT。

然后,您必须创建此类的实例并将其注册到系列中:

m_pMouseListener = new CCustomMouseListener();

m_pSeries.RegisterMouseListener(m_pMouseListener);

注意:只有当系列操作SChartXYPoint类型的点(点,线,面或者柱状图系列)时,这才会起作用。如果不是这样,您的代码将生成编译错误。

出于性能原因,禁止检测系列上的鼠标移动事件。要启用它,请参阅doxygen文档中的CChartSerie :: EnableMouseNotifications函数。

使用光标

您还可以向控件添加光标。支持两种类型的光标:“十字线”光标和“拉线”光标。第一个是在鼠标移动的绘图区域上显示的简单十字,第二个是与特定轴关联的水平或垂直线,您可以通过单击它并使用鼠标移动来拖动。对于每个光标,您可以注册一个侦听器,以便在移动光标时通知它。这里是一段代码,用于创建与底部和左侧轴相关联的“十字准线”光标以及与底部轴相关联的“拉线”光标:

// Creates a cross-hair cursor associated with the two primary axes.

CChartCrossHairCursor* pCrossHair =

m_ChartCtrl.CreateCrossHairCursor();

// Creates a dragline cursor associated with the bottom axis.

CChartDragLineCursor* pDragLine =

m_ChartCtrl.CreateDragLineCursor(CChartCtrl::BottomAxis);

// Hides the mouse when it is over the plotting area.

m_ChartCtrl.ShowMouseCursor(false);

注意到对CChartCtrl :: ShowMouseCursor的调用结束。默认情况下,鼠标总是可见的,但是当您使用十字光标时,当它在绘图区域时隐藏有时是需要的。

如果希望在光标位置更改时收到通知,则必须实现CChartCursorListener接口,创建其实例并使用光标注册它:

class CCustomCursorListener : public CChartCursorListener

{

public:

void OnCursorMoved(CChartCursor *pCursor, double xValue, double yValue)

{

TChartStringStream ssText;

ssText << _T("Cursor moved: xPos=") << xValue << _T(", yPos=") << yValue;

// Do something with the string...

}

};

CCustomCursorListener* pCursorListener = new CCustomCursorListener;

pDragLine->RegisterListener(pCursorListener);

OnCursorMoved函数接收一个X和Y值,但对于拖动光标,只使用这些值中的一个:如果光标与水平轴相关联,则使用X值,否则使用Y值。

使用平移和缩放功能

在版本1.1的控件中,缩放和平移功能已被添加到控件。使用鼠标左键控制缩放,用鼠标右键控制平移。要缩放图表的特定部分,只需左键单击图表(这将是缩放矩形的左上角),然后拖动到右下角。将出现一个矩形。一旦松开鼠标按钮,四个轴将自动调整到您选择的区域。默认情况下启用缩放,但您可以通过调用CChartCtrl :: SetZoomEnabled(bool bEnabled)来禁用缩放。您还可以通过调用CChartAxis :: SetZoomLimit(double dLimit)为每个轴指定缩放限制。它指定缩放时轴的最小范围。默认值为0.001。

要平移控件,右键单击控件上的某处并移动鼠标。鼠标下的点将“跟随”鼠标的移动(实际上,轴的最小和最大值将改变)。默认情况下启用平移,但您可以通过调用CChartCtrl :: SetPanEnabled(bool bEnabled)来禁用它。

如果您左键单击图表(例如开始缩放),但如果您移动到左上角,所有使用缩放和平移功能所做的修改将被取消(控制将处于它的状态在使用平移和缩放操作之前)。最后,还有一种方法通过调用CChartAxis :: SetPanZoomEnabled(bool bEnabled)禁用特定轴的平移和缩放功能。

利用高速功能

线和点系列允许以高速率绘制数据。这通常在要绘制来自外部设备(例如,传感器)的数据时完成。这是可能的,因为当您向此类系列添加点时,控件不会完全刷新,只会绘制最后一个点(或最后一个线段),这是非常有效的。但是,如果希望控件能够足够快地绘制数据,则必须考虑几点。

一个重要的事情是,使用自动轴可能会降低很多性能。这是因为如果一个点绘制在轴

范围之外,则轴范围将被自动调整,这意味着控制将被完全刷新。因此,如果您使用自动底部轴线并具有“滚动”轨迹,则每个新点都将位于轴的当前范围之外,并且将对每个点执行控制刷新。处理的更好的方法是使用固定轴并且每秒手动地增加轴的范围(或以合理的速率)。

另一个重要的点是,你不应该在向一个系列添加一个新点之后调用RefreshCtrl。这当然会完全地刷新控件,但是应该避免这样做。最后,如果您需要同时应用几个修改或添加几个点到控件,您应该在EnableRefresh(false)和EnableRefresh(true)之间封装这些调用(请参阅“自定义外观”部分)。

扩展功能

在某些特定情况下,您需要使用新功能扩展控件,例如新的系列类型。目前,您可以自定义四个组件:序列,轴,点标签和光标。

要提供新轴,新标签或新光标,您只需继承基类(CChartAxis,CChartLabel或CChartCursor)并实现所需的虚拟函数。一旦完成,您可以通过调用不同函数的自定义版本(CChartCtrl :: AttachCustomAxis,CChartCtrl :: AttachCustomLabel或CChartCtrl :: AttachCustomCursor)附加您的新对象。CChartLabel类是一个模板类。这个主题有点广泛,进入了很多细节,但最简单的方法是看看不同的现有类。

如果你想提供新的系列,这有点不同:你首先要考虑你想要在你的系列中操纵的点的类型。如果你只需要使用X和Y值来操作点,那么你可以继承CChartXYSerie,它提供了很多功能来操作这些点。然后,您必须实现所需的虚拟函数。看看下面的系列:CChartLineSerie,CChartPointSerie,CChartSurfaceSerie和CChartBarSerie具体示例。

如果你的系列操纵其他类型的点,那么你首先必须为点包含以下方法创建一个结构:double GetX(),double GetXMin(),double GetXMax(),double GetY(),double GetYMin()和double GetYMax()。一旦完成,您必须继承CChartSerieBase并将此点作为模板参数。然后,您必须提供所需的虚拟功能。看看下面的系列具体例子:CChartCandlestickSerie和CChartGanttSerie。

Upgrading from Version 1.x to Version 2.0

在版本2.0中,对控件进行重构,导致API的更改。主要的可见变化是每个轴类型现在有其单独的类(CChartStandardAxis,CChartDateTimeAxis和CChartLogarithmicAxis)。这也意味着默认情况下没有创建轴,并且您必须在向图表添加系列之前自己创建轴(否则代码将断言)。这包括在“操纵轴”部分。

另一个变化是添加系列到图表的方式:AddSerie已经在CChartCtrl类中删除,并已被帮助函数替代,以创建特定的系列类型(CreateLineSerie,CreatePointsSerie,…)。这些函数返回确切的系列类型,因此不再需要铸造。这在“操纵系列”一节中有详细描述。

Upgrading from Version 2.x to Version 3.x

版本3.0.0的主要变化是,系列基类现在已经作为模板类,模板参数是系列操作的点类型。如果您没有通过提供新的系列类型扩展控件,这将不会在您的代码中有所不同。如果你提供了一个新的系列类型,你的类必须继承CCharSerieBase并提供它操作的点的类型。如果你的系列使用只有X和Y值的点,你可以简单地继承CChartXYSerie。看看现有的系列更多的例子。

另一个小的修改是标签提供程序现在也是模板类(出于同样的原因)。并且监听系列中的鼠标事件现在从图表上的鼠标事件中分离出来。这两点在“在点上添加标签”部分和“鼠标事件通知”部分中有很好的解释。

最后,CChartAxis :: SetAutomatic方法已被标记为已弃用,您应该使用CChartAxis :: SetAutomaticMode(已经引入了一个额外的自动模式)。

例子

本节只是两个代码片段,显示了如何使用控件。第一个片段再现了示波器示例的图像(参见本文顶部),第二个示例再现了“2008年收入”图像。代码是文档化的,所以它不应该太难理解。

Oscilloscope example:

// Disable the refresh of the control (avoid multiple refresh).

m_ChartCtrl.EnableRefresh(false);

// Create a bottom and left axes

CChartStandardAxis* pBottomAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis);

CChartStandardAxis* pLeftAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis);

// Sets the min and max values of the bottom and left axis to -15 -> 15

pBottomAxis->SetMinMax(-15,15);

pLeftAxis->SetMinMax(-15,15);

// Add a new series of type line to the control and add data to it

CChartLineSerie* pLineSeries = m_ChartCtrl.CreateLineSerie();

// Specifies that the points in the series are not ordered (needed to be able

// to draw an https://www.wendangku.net/doc/4613218571.html,lipse).

pLineSeries->SetSeriesOrdering(poNoOrdering);

for (int i=0;i<361;i++)

{

double X = 10 * sin(i/360.0 * 2 * 3.141592);

double Y = 10 * cos( (i-60)/360.0 * 2 * 3.141592);

pLineSeries->AddPoint(X,Y);

// Defines the different colors (back color, axes color, ...) COLORREF BackColor = RGB(0,50,0);

COLORREF GridColor = RGB(0,180,0);

COLORREF TextColor = RGB(0,180,0);

COLORREF SerieColor = RGB(0,255,0);

// Specifies a sunken border for the control

m_ChartCtrl.SetEdgeType(EDGE_SUNKEN);

// Sets the color of the border and the back color

m_ChartCtrl.SetBorderColor(TextColor);

m_ChartCtrl.SetBackColor(BackColor);

//Sets the color of the different elements of the bottom axis

m_ChartCtrl.GetBottomAxis()->SetAxisColor(TextColor);

m_ChartCtrl.GetBottomAxis()->SetTextColor(TextColor);

m_ChartCtrl.GetBottomAxis()->GetGrid()->SetColor(GridColor);

// Sets the color of the different elements of the left axis

m_ChartCtrl.GetLeftAxis()->SetAxisColor(TextColor);

m_ChartCtrl.GetLeftAxis()->SetTextColor(TextColor);

m_ChartCtrl.GetLeftAxis()->GetGrid()->SetColor(GridColor);

// Sets the color of the title, change the font to Times New Roman

// and add a string

m_ChartCtrl.GetTitle()->SetColor(TextColor);

m_ChartCtrl.GetTitle()->SetFont(140,_T("Times New Roman"));

m_ChartCtrl.GetTitle()->AddString(_T("An example of oscilloscope"));

// Change the color of the line series

pLineSeries->SetColor(SerieColor);

// Finally re-enable the refresh of the control. This will refresh the

// control if any refresh was still 'pending'.

m_ChartCtrl.EnableRefresh(true);

“Income over 2008” example:

srand((unsigned int)time(NULL));

// Disable the refresh

m_ChartCtrl.EnableRefresh(false);

COleDateTime Min(2008,1,1,0,0,0);

COleDateTime Max(2008,10,1,0,0,0);

// Create the bottom axis and configure it properly

CChartDateTimeAxis* pBottomAxis =

m_ChartCtrl.CreateDateTimeAxis(CChartCtrl::BottomAxis);

pBottomAxis->SetMinMax(Min,Max);

pBottomAxis->SetDiscrete(true);

pBottomAxis->SetTickIncrement(false,CChartDateTimeAxis::tiMonth,1); pBottomAxis->SetTickLabelFormat(false,_T("%b"));

// Create the left axis and configure it properly

CChartStandardAxis* pLeftAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis);

pLeftAxis->SetMinMax(0,100);

pLeftAxis->GetLabel()->SetText(_T("Units sold"));

// Create the right axis and configure it properly

CChartStandardAxis* pRightAxis =

m_ChartCtrl.CreateStandardAxis(CChartCtrl::RightAxis);

pRightAxis->SetVisible(true);

pRightAxis->GetLabel()->SetText(_T("Income (kEuros)"));

pRightAxis->SetMinMax(0,200);

// Configure the legend

m_ChartCtrl.GetLegend()->SetVisible(true);

m_ChartCtrl.GetLegend()->SetHorizontalMode(true);

m_ChartCtrl.GetLegend()->UndockLegend(80,50);

// Add text to the title and set the font & color

m_ChartCtrl.GetTitle()->AddString(_T("Income over 2008"));

CChartFont titleFont;

titleFont.SetFont(_T("Arial Black"),120,true,false,true);

m_ChartCtrl.GetTitle()->SetFont(titleFont);

m_ChartCtrl.GetTitle()->SetColor(RGB(0,0,128));

// Sets a gradient background

m_ChartCtrl.SetBackGradient(RGB(255,255,255),RGB(150,150,255),gtVertical);

// Create two bar series and a line series and populate them with data CChartBarSerie* pBarSeries1 = m_ChartCtrl.CreateBarSerie(); CChartBarSerie* pBarSeries2 = m_ChartCtrl.CreateBarSerie(); CChartLineSerie* pLineSeries = m_ChartCtrl.CreateLineSerie(false,true);

int lowIndex = -1;

int lowVal = 999;

for (int i=0;i<9;i++)

{

COleDateTime TimeVal(2008,i+1,1,0,0,0);

int DesktopVal = 20 + rand()%(100-30);

pBarSeries1->AddPoint(TimeVal,DesktopVal);

int LaptopVal = 10 + rand()%(80-20);

pBarSeries2->AddPoint(TimeVal,LaptopVal);

int Income = DesktopVal + LaptopVal*1.5;

if (Income < lowVal)

{

lowVal = Income;

lowIndex = i;

}

pLineSeries->AddPoint(TimeVal,Income);

}

// Configure the series properly

pBarSeries1->SetColor(RGB(255,0,0));

pBarSeries1->SetName(_T("Desktops"));

pBarSeries2->SetColor(RGB(68,68,255));

pBarSeries2->SetGradient(RGB(200,200,255),gtVerticalDouble);

pBarSeries2->SetName(_T("Laptops"));

pBarSeries2->SetBorderColor(RGB(0,0,255));

pBarSeries2->SetBorderWidth(3);

pLineSeries->SetColor(RGB(0,180,0));

pLineSeries->SetName(_T("Total income"));

pLineSeries->SetWidth(2);

pLineSeries->EnableShadow(true);

// Add a label on the line series.

TChartStringStream labelStream;

labelStream << _T("Min income: ") << lowVal;

CChartBalloonLabel* pLabel =

pLineSeries->CreateBalloonLabel(lowIndex, labelStream.str() + _T(" kEuros"));

CChartFont labelFont;

labelFont.SetFont(_T("Microsoft Sans Serif"),100,false,true,false);

pLabel->SetFont(labelFont);

// Re enable the refresh

m_ChartCtrl.EnableRefresh(true);

Feedback

Quite a lot of work is involved in the development of this control and, as any other software project, it might still contain bugs or errors in the documentation. If you encounter such a problem, please let me know (even if you fixed it yourself) so that I can fix the issue as soon as possible. Other users of the control will thank you for that. The same if you encounter errors in the documentation or typos in the article.

I’m also more or less constantly working on this control to add new features. If you have

流程图制图软件有哪些

流程图是一种比较常见的图表,无论是在日常工作中还是生活中都随处可见。如果你是初入职场的新人,可能需要接触到一些简单的工作流程、会议流程图;如果你是产品经理、项目管理者或是软件开发师,更是需要经常接触到这类图表。流程图作为一种使用率非常高的图表,在商业中被誉为项目的基石。 传统的流程图用连接线指出各项工作顺序,对于新手来说,并不能掌握其中的规律,画出来的流程图,让阅读者花费很大的精力去了解整个流程和算法。如果我们可以借助模板,这样就可以规律性的修改各节点的顺序组成,让阅读者更容易从头到尾的看下去。亿图图示正好满足以上优点,还有额外三大特点:操作简单、模板丰富并且兼容多种文件。 流程图模板 亿图图示可以创建多种类型的流程图:事件流成图、工作流程图和程序流程图等等。

流程图例子 丰富的例子可帮助我们快速绘制想要的流程图框架,方便二次编辑。 选择好专业的流程图工具,接下来我们详细的了解一下绘制步骤。 首先下载并安装亿图图示软件,选择新建流程图,创建空白文档进入画布,当然也可以选择自己喜欢的流程图模板点击进入。 其次,在左侧的符号栏里有各种符号,用来搭建整个框架,选择需要的符号,直接拖拽到画板位置,利用软件的网格和标尺定位好图形符号的位置 最后,记得双击图形,输入补充文本关键词。如果想要流程图显得不那么单调,可以通过上方的样式栏更换主题颜色,使得流程图更专业。

亿图图示(Edraw Max)是一款基于纯矢量的全类型图形图表设计软件,是国产软件中仅有的可以媲美Visio的软件。用亿图可以很方便的创建流程图、思维导图、信息图、网络拓扑图、组织结构图、电路图、商业图表、方向图、UML、软件设计图、线框图、建筑设计等等。它可以帮助你更方便、更快捷的阐述设计思想,创作灵感。在设计时亿图采用全拖曳式操作,结合20000多个常用图形模板库和纯矢量符号素材,最大程度简化用户的工作量;让你在设计时既可以充分利用固有的素材,又可以借鉴他人的作品!

用CAD和PS制作平面布置图

PS结合CAD做彩色平面图 室内篇 做好PS彩色平面图的第一步,是养成良好的CAD图的做图习惯。至于做图规范,这里就不多说了,我说的习惯,就是在CAD图做图过程中,要善于分好图层,不同性质的物体最好归好图层,这样CAD图就不会凌乱,也减少文件大小(接下来会看到图层归类后是如何方便了),同时尽可能将CAD的图面整理好,线和线的交接要闭合,不出现空隙,这样会影响你填充的面域。 请大家留意我的CAD图层设置与分布 这个是图层的分布,CAD图做到分层合理,就方便以后的操作 我们以一个会所的平面图为例子 眼前是一个会所的平面图,我们去掉了尺寸的显示以及其他彩色平面图不用标注的东西

把其他图层都给关了,这样,一个平面的轮廓就出来了

设定打印窗口的标记(如下图,红色虚线框是到时框选窗口的大小),利用图层开关功能将需要的分开几层进行虚拟打印,输出图象到PS中进行编辑。具体的打印项目由实际情况决定。在这个例子中,我们要输出的内容如下: 1)墙体以及剪力墙、柱子、门窗 2)家具和洁具 3)地面铺装 4)室内绿化层以及其他 5)文字标注层 切记,要在同一大小的窗口标记下虚拟打印 输出一张家具的CAD图和一张没有家具的CAD图,在PS中打开。利用拖拽功能将几个图层重叠在一个图里,产生了若干个图层,并将图层进行命名,方便以后的编辑。 在这里向大家介绍一个比较快捷的图象批处理方法。 打开了PS后,按 ALT+F9 调出“动作”面板,以一张JPG的彩色线框图为例子,在动作面板里

然后可以录制你的每一步操作。 对于彩色平面图来说,我们处理由CAD输出的图纸的流程比较简单, 1)假如图象是TIFF索引颜色模式的图象,就在图象菜单里将图象模式转换成RGB颜色模式, 2)去色处理 3)自动对比度 4)菜单——选择——颜色范围——点选白色部分删除 5)保存图象为PSD格式文件 然后按兰色方块,结束录制。

施工现场平面布置图如何绘制

施工现场平面布置图如何绘制 施工总平面布置图是拟建项目施工场地的总布置图。它按照施工方案和施工进度的要求,对施工现场的道路交通、材料仓库、加工场地、主要机械设备、临时房屋、临时水电管线等做出合理的规划布置,从而正确处理全工地施工期间所需各项设施和永久建筑、拟建工程之间的空间关系。 施工总平面布置图是工程施工组织设计(及部分专项施工方案)的重要组成部分,在工程投标中,也是技术标的重要组成部分。现在CAD应用普及,施工总平面布置图基本上采用CAD进行绘制,下面以应用CAD软件为例,说明如何才能绘制好施工总平面布置图。 一 施工总平面布置图绘制依据标题 1、各种设计资料,包括建筑总平面图、地形地貌图、区域规划图、建筑项目范围内有关的一切已有和拟建的各种设施位置。 2、建设项目的现场考察情况(周边道路及交通情况、原有建筑物情况、用水用电接驳口、现场排水口、施工区域及围墙出入口设置情况等)。 3、建设项目的建筑概况、施工方案、施工进度计划,以便了解各施工阶段情况,合理规划施工场地。 4、各种建筑材料构件、加工品、施工机械和运输工具一览表(含需要数量及外廓尺寸等信息),以便规划工地内部的储放场地和运输线路。 5、各构件加工厂规模、仓库及其他临时设施的需求数量及规格。 6、《建设工程施工现场消防安全技术规范》GB 50720-2011、《施工现场临时建筑物技术规范》JGJ/T 188-2009。 7、当地主管部门和建设单位关于施工现场安全文明施工的相关规定,施工单位安全文明施工标准。 二 施工总平面布置图绘制原则 1、在满足施工要求的前提下,少占地,不挤占交通道路。 2、主要施工机械设备的布置满足施工需求。 3、最大限度的压缩场内运输距离,尽可能避免二次搬运。 4、在满足施工需要的前提下,临时工程越小越好,以降低临时工程费。 5、充分考虑劳动保护,环境保护,技术安全,消防要求等。 6、遵守当地主管部门和建设单位关于施工现场安全文明施工的相关规定。 三 施工总平面布置图的主要内容及绘制步骤 1、绘制拟建建筑物(构筑物)、确定施工现场区域。(现在基本上可从设计院拷贝建筑总平面电子图,但先要进行图形处理,详细见第六部分第2条。) 2、设置围墙、出入口,引入场外交通道路;对施工现场区域按现场办公区、临时生活区、现场生产区进行划分。 3、现场生产区布置(施工阶段不同布置要求会有所不同,以下以上部结构施工为例):

适合新手用的建筑平面图设计软件

适合新手用的建筑平面图设计软件 导语: 建筑平面图在我们的印象中是十分复杂的设计,似乎需要专业的人士才能胜任这项技能。但是实际上,新手也可以通过专业的软件来绘制这个图。我们一起来了解一下! 免费获取建筑平面布置图软件:https://www.wendangku.net/doc/4613218571.html,/floorplan/ 适合新手的建筑平面图软件有哪些? 新手想要绘制建筑平面图,可以不从操作性难的软件开始。亿图图示,简单易上手的建筑绘图软件。没有任何的操作门槛,图库丰富,全程拖拽使用。软件支持Windows、Mac、Linux跨平台操作系统,支持云存储、云协作,极大方便使用者的绘制与修改。

亿图图示软件特色: 1、来自全球超过600万的用户选择下载安装。 2、支持多系统操作:亿图图示可以在Windows,Mac 和 Linux上进行制作。 3、产品升级:亿图软件不断更新升级,重视用户体验度。 4、简单操作:一键式绘制工具帮助用户绘制快捷,方便使用者管理工作项目。 新手如何使用亿图图示绘制建筑平面图? 亿图图示是一款出色的国产全类型图形图表设计软件,能够轻松出绘制您想要的效果。对比手工绘图,和用复杂软件绘图,亿图图示的优势如下: ①精准的尺寸标注:轻松设置建筑的长宽,能够等比例标注出现实里的建筑大小。

②超丰富的建筑符号:汇聚专业的建筑符号,无需重新绘制,直接拖拽至画布即可使用。

③自动对齐功能:拖动建筑符号,靠近同类符号时,能自动对齐吸附,大大提升绘图效率。 没有设计绘图基础,该怎样绘制房屋设计图? 下面将继续讲解,如何使用亿图图示绘制专业的房屋设计图。 一、创建新的画布 下载安装亿图图示最新版本的软件,在“文件”页,选择“新建”-“平面布置图”-“家具规划”-“创建”。 二、绘制墙体结构 从符号库选择建筑符号“墙”,并拖动至画布,根据实际的构造,进行拼接绘图。绘制过程中,需标注墙体尺寸。

楼层结构平面布置图二

14.2.3楼层结构布置平面图 楼层(屋面)结构布置图是假想沿楼面(或屋面)将建筑物水平剖切后所得的楼面(或屋面)的水平投影。它反映出每层楼面(或屋面)上板、梁及楼面(或屋面)下层的门窗过梁布置以及现浇楼面(或屋面)板的构造及配筋情况。 为二层梁的布置及配筋图,为板的结构布置平面图。图中中粗线为未被楼面构件挡住的墙(柱),中粗虚线为被楼面构件挡住的墙,粗实线为梁,细实线为下层的门窗洞及雨篷。 一般情况下,梁和板的布置可画在同一张图纸上,但在实际施工中,是将梁全部搁置和浇铸完后,再搁板。因此,实际工程中,可将梁和板的结构布置平面图分开绘制,以免标注太 多太乱而不清晰。如为二层梁的布置及配筋图,为板的结构布置平面图。 从中可看出:沿外墙上布置有窗过梁G L 4152、G L 4101、 G L 4122、G L 4151、G L 4184、G L 4181等,另外②轴线以左, ⑧轴线以右,在轴线到轴线范围内的阳台位置,布置有现浇 梁X L1和X L2;沿内墙上布置有G L4082、G L4081等过梁,另外还布置有L27、L L1、L L2、L L4、T L24等梁。梁的断面尺寸也可从图中看出。如图中符号的具体含义为: 一一梁编号为L L1。 一一梁的断面尺寸,梁宽200,梁高350。 一一梁内箍筋直径为,间距为100。

一一梁内上部两根直径为m m的架立筋,下部三根直径为18m m主筋。 从可看出:预制板平面布置的图示方法是在预制板布置的某一范围内用细实线由左下至右上画一对角线(该对角线是结构单元铺板的外轮廓线的对角线),在对角线的一侧(或两侧)注写铺板的数量、代号和编号;也可用细实线分块画出全部或部分预制板的轮廓线,以示铺板方向。本图是以后一种方式表达的。铺板完全相同的结构单元可用一代号标明,如、 …,不必一一标注,以减少绘图工作量。 钢筋混凝土梁、板、过梁等多采用标准图,构件编号各地 有所不同。和中各构件编号的含义如下: 矩形截面过梁的编号(选自D B J T-13一一地区标准建筑图 第十三分册,即《钢筋混凝土过梁图集》)。 如G L4181表示该过梁宽度(墙厚)为240,过梁净跨度为1800,1级荷载。 预应力空心板的编号(选自西南G222《预应力钢筋混凝土 空心板图集》)。 如2YK B4590-5表示两块预应空心板,此板的板跨4500(实际板长4480),板宽900(实际板宽890),5级荷载。 在“川92G402”中2Y-K B276-5表示两块板跨为2700,板 宽为600,荷载级别为5级的预应力空心板。符号的含义为。

手把手教你快速绘制程序流程图

手把手教你快速绘制程序流程图 导语: 程序流程图也叫做程序框图,绘制程序流程图的方法其实很简单,不过我们需要借助专业的工具来绘制才行。本文就是为大家详细的介绍了用软件工具绘制程序流程图的过程。 免费获取亿图图示软件:https://www.wendangku.net/doc/4613218571.html,/edrawmax/ 简单漂亮的程序流程图用什么软件画? 想要快速制作简单漂亮的程序流程图,首选一定不是Word或者PPT的。这里推荐一款好评度非常高的流程图软件亿图图示!亿图图示(EdrawMax)是一款跨平台、多功能、同时支持云储存、分享功能的国产专业流程图绘制软件。软件内置了12000多种精美素材和实例模板,以及实时在线免费模板供用户选择。当用户完成绘制之后,可将作品导出文件为Visio、SVG、HTML、PS、JPG、PNG、PDF等多种格式。

亿图图示软件特色: 1、丰富的模板例子:亿图图示支持超过200种图表绘制,轻松绘完流程图。 2、专业的图表软件:不仅可以绘制流程图,还可以绘制组织结构图、思维导图、网络图等。 3、值得信赖的产品:超过六百万次的下载,用户遍布全世界。 4、支持流程图在线分享,生成的网页链接可以在不同的用户终端进行查看。 5、可以使用软件轻松绘制箭头、图框,让办公效率无限提升。 画程序流程图的一般规则 1、用标准,使用标准的框图符号 2、按顺序,框图一般按从上到下、从左到右的方向画 3、看出入,大多数图形符号只有一个进入点和一个退出点,判断框是具有超过一个退出点的唯一符号,终端框用在开始时只有退出点,结束时只有进入点。 4、简说明,图形符号内描述的语言要简练清楚。 5、辨流向,流程线的箭头表明执行的方向,不可缺少。

建筑结构平面图

1. 建筑平面图 1.1 定义 建筑平面图,又可简称平面图,是将新建建筑物或构筑物的墙、门窗、楼梯、地面及内部功能布局等建筑情况,以水平投影方法和相应的图例所组成的图纸。 1.2 绘制 用一个假象的水平剖切平面沿略高于窗台的位置剖切房屋后,移去上面的部分,对剩下部分向H面做正投影,所得的水平剖面图,称为建筑平面图,简称平面图。 1.3 作用 建筑平面图是建筑施工图的基本样图,它是假想用一水平的剖切面沿门窗洞位置将房屋剖切后,对剖切面以下部分所作的水平投影图。它反映出房屋的平面形状、大小和布置;墙、柱的位置、尺寸和材料;门窗的类型和位置等。 1.4 意义 建筑平面图作为建筑设计、施工图纸中的重要组成部分,它反映建筑物的功能需要、平面布局及其平面的构成关系,是决定建筑立面及内部结构的关键环节。其主要反映建筑的平面形状、大小、内部布局、地面、门窗的具体位置和占地面积等情况。所以说,建筑平面图是新建建筑物的施工及施工现场布置的重要依据,也是设计及规划给排水、强弱电、暖通设备等专业工程平面图和绘制管线综合图的依据。 1.5 类别 建筑平面图按照其反映的内容可分为: 1.5.1 底层平面图 又称一层平面图或首层平面图。它是所有建筑平面图中首先绘制的一张图。绘制此图时,应将剖切平面选放在房屋的一层地面与从一楼通向二楼的休息平台之间,且要尽量通过该层上所有的门窗洞。 1.5.2 中间标准层平面图 由于房屋内部平面布置的差异,对于多层建筑而言,应该有一层就画一个平面图。其名称就用本身的层数来命名,例如“二层平面图”或“四层平面图”等。但在实际的建筑设计过程中,多层建筑往往存在许多相同或相近平面布置形式的楼层,因此在实际绘图时,可将这些相同或相近的楼层合用一张平面图来表示。这张合用的图,就叫做“标准层平面图”,有时也可以用其对应的楼层命名,例如“二至六层平面图”等。 1.5.3 顶层平面图 房屋最高层的平面布置图,也可用相应的楼层数命名。 1.5.4其他平面图 除了上面所讲的平面图外,建筑平面图还应包括屋顶平面图和局部平面图。 1.6 内容 (1)建筑物及其组成房间的名称、尺寸、定位轴线和墙壁厚等。 (2)走廊、楼梯位置及尺寸。 (3)门窗位置、尺寸及编号。门的代号是M,窗的代号是C。在代号后面写上编号,同一编号表示同一类型的门窗。如M-1;C-1。 (4)台阶、阳台、雨篷、散水的位置及细部尺寸。 (5)室内地面的高度。 (6)首层地面上应画出剖面图的剖切位置线,以便与剖面图对照查阅。 1.7 读图 (1)了解图名,比例和朝向; (2)了解定位轴线,轴线编号及尺寸;

流程图的画法,各图形详解

流程图的画法 2009年10月26日星期一 13:33 1、各司其职的形状 在我的流程图中,适用于不同目的和功能的形状都有各自确定的规范。到目前为止,我一共定义了以下一些形状: (1)开始和结束 作为整张流程图的头和尾,必须标清楚到底具体指哪个页面,以免日后出现歧义。 (2)网页 如你所见,网页的形状是一个带有漂亮的淡蓝色过渡效果的长方形,它的边框为深蓝色,中间写明了这个网页的用途,括号中的数字代表这个形状所对应的demo 文件的名称(比如这里是2.html),我有时会把流程图输出为网页的形式,并把每个网页形状和它所对应的demo文件链接起来,这样查看起来非常方便。对OmniGraffle来说这是小菜一碟,如果你被迫用Visio,嗯…… 另外,所有从形状出来的线条,都具有和此形状边框一样的颜色。这样的做法不仅看起来漂亮,在复杂的流程图中还能轻易地标明各形状的关系。我没有见过类

似的做法,所以这是由我首创也说不定,呵。 (3)后台判断 很常见的一个形状。我在用法上有一点和其他人的不同在于,我几乎总是让 ‘是’的分支往下流动,让‘否’的分支向右流动。因为流程图一般都是从上向下、从左到右绘制的,遵循上述规则一方面可以让绘制者不用为选择方向操心,另一方面也方便了读者阅读。 (4)表单错误页 既然有表单,当然会有错误信息。其实这个信息很重要,用户出错时惶恐不安,就靠着错误提示来解决问题了。你不在流程图里说什么时候显示错误页、不在demo里提供错误页,有些程序员会直接在网页上写个“错误,请检查”,所以UI设计师一定要对这个东西重视起来。 但一般来说也没必要把每种错误都在流程图中表示出来,因为含有两个文本框的表单就有三种出错情况了,多了就更不用说了。所以我都是把错误页变为表单的附属页,比如表单页的编号为2,那么此表单错误页的编号就从2.1开始排下去,每种错误放到一个附属页中,这样程序员在拿到demo时也能搞清楚什么意思。 结合网页和表单的形状,一个表单验证的流程图就是这样的:

流程图的画法及要求

流程图的绘制方法及要求 为了使程序文件(管理制度)中的工作流程绘制美观且格式统一,特编写此文件,希望能够对您的流程图绘制给予一定的指导与帮助。 一、流程图绘制软件 建议流程图绘制使用微软Office 办公软件中的Visio软件进行。 二、打开VISIO软件开始您的绘制工作 1点选流程图中的跨职能流程图 2弹出绘图窗口及“流程图”工作框,见下图,点选“垂直”并根据流程涉及部门数量填写“带区的数目”,点击“确认”。 然后出现下图:

3在<职能>填写流程中的涉及部门或岗位。开始流程图的绘制。 4流程绘制应使用“基本流程图形状”进行绘制,包括“准备(开始)”、“流程(具体事项)”、“判定”等等。 其中常用图形有: 在流程绘制过程中,如需强调的流程步骤,可以增加底色强调。 5流程图绘制示例 在流程图绘制软件中根据实际情况进行绘制,其中流程图形状应选择正确。

6流程图编写(word中) 制作完毕后。进入标准编辑的word中,绘制流程。 首先插入表格 列包括:“大阶段”、“各涉及流程部门”、“岗位”、“记录”,如果流程对时间节点要求很高,则需增加一列“时间节点”。故,插入列的数量为“涉及部门数+3or4,行数设置3行即可。 行的数量根据流程图中纵向的步骤来设,譬如上图中涉及了12步,则设12+2(表头)行即可。 然后按照下图表格,将表格合并。

将流程图“Ctrl+C”,放置在“流程图”位置。然后适当的调整图片大小以及行高、列宽。最终即可形成流程图。 接下来在表格顶部右上方增加“本流程责任单位:XXXXX”。流程图的绘制完成。 注:如果流程涉及步骤较多,一页无法显示完成,则在流程图黏贴时,分成相应页面即可。(表头每页必须相同)。

建筑施工现场平面布置图绘制软件

建筑施工现场平面布置图绘制软件 导语: 建筑施工布置图是工人进行施工作业的参考图纸,有十分重要的意义。但是布置图并非只有专业人士才能设计,每一位绘图新手都可以通过专业软件来绘制,一起来了解一下。 免费获取建筑平面布置图软件:建筑施工绘图软件有哪些? 建筑绘图软件,或许你听说的最多的是CAD啦、sketch up啦,听起来都很专业,一个外行人想要尝试房屋的平面设计,要用什么软件呢?亿图图示或许可以了解一下!软件操作简单易上手,内置丰富的专业建筑符号及平面布置贴图。设计房屋,从这里开始。

亿图图示软件特色: 1、丰富的模板例子:亿图图示支持超过200种图表绘制,轻松绘完各类图形。 2、专业的图表软件:不仅可以绘制普通平面图,还可以绘制组织结构图、思维导图、网络图等。 3、值得信赖的产品:超过六百万次的下载,用户遍布全世界。 4、支持在线分享,生成的网页链接可以在不同的用户终端进行查看。 5、可以使用软件轻松绘制箭头、图框,让效率无限提升。 亿图图示建筑平面图绘制符号大全 一. 基本绘图形状

用途:无特别限定意义,可以根据自己的实际用途结合图形形状来选取。 二. 尺寸标注形状 用途:?用于标注建筑物的长宽高尺寸。图样除了画出建筑物及其各部分的形状外,还必须准确地、详尽地和清晰地标注尺寸,以确定其大小,作为施工时的依据。图样上的尺寸由尺寸界线、尺寸线、尺寸起止符号和尺寸数字组成。 三. 建筑物核心符号 用途:

指南针:?北方是罗盘针通常指向的方向。在平面图中,北方箭头显示了平面图的哪一边是北边。 空调几位:是放置空调的地方。 实心墙?:描绘了墙壁的相对厚度 剪式楼梯?:通常由楼梯相连的两个主要航程构成,从上方观察时形成“U”形。 扶手:是设计用于抓住手的轨道,以提供稳定性或支撑。 抽水马桶:?是厕所的象征。 电梯:是一个移动的楼梯,由一个由马达驱动的无休止的循环带组成,它传达公共建筑物的地板之间的人。 四:电气和电信符号 用途:不同的电气符号用来标明开关,电话线,热水器,水龙头等安装的位置,以及不同地方插座的安装类型(是安装三孔插座,双控插座甚至是四孔插座),以便安装电气时更能方便快捷操作。 五:墙,门,窗户和结构图形

流程图的的绘制工具及及选择

流程图的绘制工具及其选择* 为了让流程能够得以规范和落地,我们一般都会绘制具有合适颗粒度的管理或业务流程图,并编写流程说明,制作流程文档,用来描述企业的各类业务如何运作以及业务运作模式如何解决用户的需求,以期为流程责任人或执行人提供清晰明确的视图和指引。业务流程图是一种直观的工具,因此几乎所有的办公领域都会运用到它:人事部门有人事结构图,软件开发有开发流程图,各种工艺制造业的管理需要有工艺工程图……总之,由于图形表达方式便捷与明了,流程图的绘制就成了企业办公过程中最常见的工作之一,准确、简洁而精美是这项工作的主要目标。 要实现这一目标并不容易,但在拥有了计算机后,情况就大为改观,人们可以通过利用各种优秀的流程图绘制软件来更好地完成这项工作。要绘制流程图,就必须有自带相关绘图功能的软件的支持。在众多的应用中,有人使用比较经典的流程图绘制工具Visio——功能强大但操作较为复杂;也有人采用Word自带的流程图绘图工具,但Word绘图工具功能简陋;此外还有SmartDraw,它容易上手,功能也比较强。 然而,有些客户此前也许并没有绘制过专业的流程图,更何况是流程图软件的使用;有些客户有了一定的基础,但是使用的软件不尽相同。那么,对于一般的企业或其他组织机构而言,应该选择什么软件绘制流程图会更好呢? 一、都有哪些流程图绘制工具? 首先我们来认识一下都有哪些电子化的流程图绘制工具。就我看来,可以将现有的流程图绘制软件分为如下四类: ?专业的绘图软件; ?在线的绘图软件/网站; ?流程管理软件/系统; ?附带绘图功能的一般软件。 下表对这四类软件进行了不完全的分类举例和介绍:

专业绘图 软件 Visio Microsoft Office Visio是当今最优秀的绘图软件之一,它将强大的功能和易用性完美结合。它有助于IT和商务专业人员轻松地可视化、分析和交流复杂信息。它能够将难以理解的复杂文本和表格转换为一目了然的Visio图表。该软件通过创建与数据相关的Visio图表(而不使用静态图片)来显示数据,这些图表易于刷新,并能够显著提高生产率。有丰富的模板,功能强大。而且它与Word、PPT等Office文档的兼容性很好,插入到这些文档中后能够直接点击打开编辑、保存。 SmartDraw SmatDraw是世界上最流行的商业绘图软件。2006年获美国政府司法部(U.S.Department of Justice)专用软件,2007获美国政府商务部(US Department of Commence)选用。SmartDraw是专业的图表制作软件。可以用它轻松制作组织机构图、流程图、地图、房间布局图、数学公式、统计表、化学分析图表、解剖图表等等。随带的图库里包含数百个示例、数千个符号和外形供你直接套用,你还可以去该公司的网站下载更多的符号和外形。总量达数百兆之巨,充分满足你制作各类图表的需要。 Edraw 一款类似Visio的流程图、网络图绘制软件,新颖小巧,功能强大,可以很方便的绘制各种专业的业务流程图,程序流程图,数据流程图,网络拓扑图等。它在设计时采用全拖曳式操作,最大限度的简化用户的工作量,方便易用;提供各种图形模板库,方便专业人士的使用;提供强大的图文混排和所见即所得的图形打印;另外为软件企业提供可以二次开发的图形控件,提高企业开发效率,节约开发成本,是一款实用的流程图软件和绘制流程图工具。 Diagram Designer 一个小巧免费的流程图绘制工具,速度飞快。对大多数人来说,无论是画流程图,还是设计界面,还是做一些简单的演示,都够用了。功能丰富、小巧易用、速度快、有中文语言、有模板库。还是一个开源软件。 ConceptDra w PRO ConceptDraw是一个强大的跨平台应用程序,能够快速简单的在你的文档中创建看起来非常专业的图表和插图。内含超过80个库,包含1700个以上的各类图表和图象,只需要简单拖放操作就可以拼凑出令人满意的效果。软件提供了强大的矢量绘图工具、库以及许多的预置的图例形状,内置描述语言、支持多种格式文档的输入输出、支持连接ODBC数据库和其它许多的功能,也包括拓扑图。ConceptDraw Office 软件包内包含了流程图绘制软件ConceptDraw PRO。 Embedded Vector Editor EVE是世界上最小的矢量绘图软件。

施工现场总平面布置图绘制方法

简单四步,教你如何绘制好施工现场总平面布置图 施工总平面布置图是拟建项目施工场地的总布置图。它按照施工方案和施工进度的要求,对施工现场的道路交通、材料仓库、加工场地、主要机械设备、临时房屋、临时水电管线等做出合理的规划布置,从而正确处理全工地施工期间所需各项设施和永久建筑、拟建工程之间的空间关系。 施工总平面布置图是工程施工组织设计(及部分专项施工方案)的重要组成部分,在工程投标中,也是技术标的重要组成部分。现在CAD应用普及,施工总平面布置图基本上采用CAD进行绘制,下面以应用CAD软件为例,说明如何才能绘制好施工总平面布置图。

1施工总平面布置图绘制依据 1、各种设计资料,包括建筑总平面图、地形地貌图、区域规划图、建筑项目范围内有关的一切已有和拟建的各种设施位置。 2、建设项目的现场考察情况(周边道路及交通情况、原有建筑物情况、用水用电接驳口、现场排水口、施工区域及围墙出入口设置情况等)。 3、建设项目的建筑概况、施工方案、施工进度计划,以便了解各施工阶段情况,合理规划施工场地。 4、各种建筑材料构件、加工品、施工机械和运输工具一览表(含需要数量及外廓尺寸等信息),以便规划工地内部的储放场地和运输线路。 5、各构件加工厂规模、仓库及其他临时设施的需求数量及规格。 6、《建设工程施工现场消防安全技术规范》GB 50720-2011、《施工现场临时建筑物技术规范》JGJ/T 188-2009。 7、当地主管部门和建设单位关于施工现场安全文明施工的相关规定,施工单位安全文明施工标准。 2施工总平面布置图绘制原则 1、在满足施工要求的前提下,少占地,不挤占交通道路。 2、主要施工机械设备的布置满足施工需求。 3、最大限度的压缩场内运输距离,尽可能避免二次搬运。 4、在满足施工需要的前提下,临时工程越小越好,以降低临时工程费。

过程能力分析

二)过程能力分析 1?过程能力 过程能力指产品生产的每个过程对产品质量的保证程度, 反映的是处于稳定生产状态下的过 程的实际加工能力,记为B 。获取产品生产的过程能力, 是质量管理中收集样本的目的之一, 以便了解过程的生产能力如何, 即生产合格品的能力究竟如何。 如果生产能力过低, 必需采 取措施加以改进。过程能力越高,稳定性越高,生产能力也强。过程能力的高低可以用标准 差b 的大 小来衡量。b 越小则过程越稳定,过程能力越强; b 越大过程越不稳定,过程能力 越弱。当生产过程稳定,且产品的技术标准为双侧时, B=6b 见图11— 10)。 过程能力包括长期过程能力和短期过程能力。 短期过程能力是指仅由偶然因素所引起的部分 变异,它实际上反映了短期变异情况。长期过程能力是指由偶然因素和异常因素所引起的总 变异,它实际反映了长期变异情况。 过程能力只与标准差有关,而与产品的技术要求无关,只表示一个过程固有的最佳性能。 标 准差决定于质量因素,即人、机、料、法、环,与规范无关。为了反映和衡量过程能力满足 技术要求得程度,引进一个新指标,即过程能力指数。 [例题6]过程能力的高低可以用标准差 b 的大小来衡量。b 越小则()。 A. 过程标准越高 B. 过程越稳定 C. 过程越不稳定 D. 过程能力越强 E. 过程能力越弱 答案:BD 2?过程能力指数 过程能力指数反映过程加工中质量满足产品技术要求的程度, 也即产品的控制范围满足顾客 要求的程度。 过程能力指数=技术要求/过程能力(11 —14) 过程能力指数越大,说明过程能力越满足技术要求,产品质量越有保证。 对于产品特性值分布的平均值 卩与规范中心M 重合即无偏移时用 Cp 衡量,对于产品特性 值分布的平均值 卩与规范中心M 不重合即有偏差时用 Cpk 衡量。 ① 无偏移双侧规范情况的短期过程能力 对于双侧规范情况,无偏移短期过程能力指数 Cp 的计算公式如下: 大的情况,即0W K<1。 3?过程能力指数与产品不合格率的关系 当生产过程处于稳定状态时,过程能力指数 的大小可以用来反映产品质量水平的高低。 中心重合,分布中心和标准中心不重合。 R 者关糸, 4?过程能力评价 根据过程能力指数的大小可以对质量水平进行评价和判定,可将过程能力分为五级。 表11--6过程能力分级表 等级过程指数Cp 或CPk 过程能力分析 Cp 和不合格品率P 相对应。所以过程能力指数 P 与Cp 的关系有两种情况,即分布中心与标准 分布中心与标准中心重合时, 可用如下公式表示两

画软件流程图

流程图是一种常见的图表,日常工作中也常常需求用到,比方写案牍策划、会议流程图等等。在亿图软件中只需求简略几步,就能够快速画出美丽、实用的流程图。 无需绘图技巧 使用这个功能丰富的流程图软件,您就不必在如何才能创建视觉上很有吸引力的流程图问题很专业了。您只需输入您的数据,剩下就交给亿图就行了,亿图会自动为您排列所有形状,为获得专业设计应用专业设计主题等。这个软件让任何层次的用户都能用更短的时间创建更好的流程图。此外,亿图为您节省更多资金,免费为您进行科技支持和升级。 智能地创建视觉流程图

亿图也可以帮助您将文本和图表中的复杂信息翻译成为视觉图表。用这种方式用户就能够识别 瓶颈和低效现象,这些也是过程需要精简的地方。亿图提供智能连接线和高级的文本设计和矢量符号,通过显示浮动对话框告诉你该怎么做。 几分钟获得一个专业的流程图 亿图赋予您能力,简简单单,有效地使用特殊工具,免费的模板和精简的工作流示例就能够创 建出有专业水准的流程图,帮助您快速建立新的流程图、工作流程图、NS图、BPMN图、跨职能 流程图、数据流图和高光流程图等。所有这些图形的绘制仅需短短几分钟即可。 轻松创建交互流程图 插入超链接和插画功能同样包括在内。您可以将图表和基础数据连接起来展示更多地细节信息,这样能够增强效率、影响和交流。为了更加具体一些,你可以通过增加链接到网站、插入附件、添 加注释或者链接到亿图其他视图工具等方式把任何图表转换成信息关口。它们是交互图形,任何人 都可以轻松使用亿图轻松创建。 无缝地分享与合作

亿图流程图软件能够与其他程序无缝地合作。亿图与微软 Office 兼容,并且亿图的文件可以一键导出成 Word、Excel、PDF 和其他多种图形格式。您可以几秒钟将亿图文件导入到其他文件中。所以您的作品就可以和更多的人分享,获得更合作。 亿图图示,即亿图图示专家(EDraw Max),是一款基于矢量的绘图工具,包含大量的事例库和模板库。可以很方便的绘制各种专业的业务流程图、组织结构图、商业图表、程序流程图、数据流程图、工程管理图、软件设计图、网络拓扑图等等。它帮助您更方便,更快捷的阐述设计思想,创作灵感。

平面布置图绘制(精)

平面布置图绘制 一、设置初始环境 1、设置单位: UN 2、设置十字光标及拾取框:工具——选项 3、设置对象捕捉:点对象捕捉、点鼠标右键、全选、确定 二、设置图层 1、打开图层管理器:LA 2、新建图层、命名、修改颜色 3、将轴线图层置为当前 三、绘制轴线 1、执行直线命令L 、绘制一条长为5000的水平线(打开正交模式F8) 2、绘制一条长为6000的垂直线 3、执行偏移命令O ,偏移距离分别为3840,4740 4、修改轴线的线型:打开图层管理器、点轴线的线型CONTINUOUS 、点加载、选CENTER 、将CENTER 线型选成蓝色、确定、确定 5、修改轴线的显示比例:在特性工具栏的线型中选其他、选CENTER 、显示细节、更改全局比例因子、确定 四、绘制墙体 1、将墙体图层置为当前

2、偏移轴线距离为120 3、选中一条墙体直线、将其改为墙体图层并置为当前 4、执行格式刷命令MA 、点黄色的墙体线、点其他红色的墙体线 5、倒圆角:F 6、将轴线图层关闭 五、开门洞 1、绘制直线 2、偏移距离分别为120、800,将原直线删除 3、修剪门洞:TR 、两次空格、选要删的墙体 六、绘制门 1、将门窗图层置为当前 2、绘制矩形:REC 、@45,1000 3、绘制长为1000的直线 4、绘制圆 5、修剪圆 6、定义为块:B 、选择对象、选择拾取点、命名 7、插入块:I 、修改比例 七、绘制窗 1、绘制矩形:REC 、大小为1000 ,240

2、分解矩形:X 3、偏移直线:O ,距离为90 4、定义为块:B 、选择对象、选择拾取点、命名 5、插入块:I 、修改比例 八、绘制家具 1、将家具图层置为当前 2、绘制衣柜:用偏移或矩形命令、大小为1800,600 3、绘制床头柜:500,450 4、绘制床:2100,1800 5、倒圆角:F 6、镜像另一个床头柜:MI 、选择对象、找镜像的两个点、选择是否删除源对象 7、绘制电视柜:REC 1500,450 九、绘制文字 1、将文字图层置为当前; 2、设置文字样式:菜单格式——文字样式 修改字体及高度 3、执行多行文字命令:MTEXT (T ) 4、编辑文字:双击已绘制的文字

CPK(过程能力分析方法)

过程能力分析 过程能力也称工序能力,是指过程加工方面满足加工质量的能力,它是衡量过程加工内在一致性的,最稳态下的最小波动。当过程处于稳态时,产品的质量特性值有99.73%散布在区间[μ-3σ,μ+3σ],(其中μ为产品特性值的总体均值,σ为产品特性值总体标准差)也即几乎全部产品特性值都落在6σ的范围内﹔因此,通常用6σ表示过程能力,它的值越小越好。 为什么要进行过程能力分析 进行过程能力分析,实质上就是通过系统地分析和研究来评定过程能力与指定需求的一致性。之所以要进行过程能力分析,有两个主要原因。首先,我们需要知道过程度量所能够提供的基线在数量上的受控性;其次,由于我们的度量计划还相当"不成熟",因此需要对过程度量基线进行评估,来决定是否对其进行改动以反映过程能力的改进情况。根据过程能力的数量指标,我们可以相应地放宽或缩小基线的控制条件。 工序过程能力分析 工序过程能力指该工序过程在5M1E正常的状态下,能稳定地生产合格品的实际加工能力。过程能力取决于机器设备、材料、工艺、工艺装备的精度、工人的工作质量以及其他技术条件。过程能力指数用Cp 、Cpk表示。 非正态数据的过程能力分析方法 当需要进行过程能力分析的计量数据呈非正态分布时,直接按普通的计数数据过程能力分析的方法处理会有很大的风险。一般解决方案的原则有两大类:一类是设法将非正态数据转换成正态数据,然后就可按正态数据的计算方法进行分析;另一类是根据以非参数统计方法为基础,推导出一套新的计算方法进行分析。遵循这两大类原则,在实际工作中成熟的实现方法主要有三种,现在简要介绍每种方法的操作步骤。 非正态数据的过程能力分析方法1:Box-Cox变换法 非正态数据的过程能力分析方法2:Johnson变换法 非正态数据的过程能力分析方法3:非参数计算法

画c语言程序流程图用什么软件

流程图制作软件在我们生活中使用较为广泛,无论是策划、活动以及生产,都无法离开相关流程图软件,用户通过流程图软件能够将相应活动开始与结束之间的所有流程勾画出来,从而让活动参与者一目了然的了解到整过活动内容,这里小编为大家带来了款较为好用的流程图软件,需要的用户赶快试试吧! 传统的流程图用连接线指出各项工作顺序,对于新手来说,并不能掌握其中的规律,画出来的流程图,让阅读者花费很大的精力去了解整个流程和算法。如果我们可以借助模板,这样就可以规律性的修改各节点的顺序组成,让阅读者更容易从头到尾的看下去。亿图图示正好满足以上优点,还有额外三大特点:操作简单、模板丰富并且兼容多种文件。 流程图模板 亿图图示可以创建多种类型的流程图:事件流成图、工作流程图和程序流程图等等。

流程图例子 丰富的例子可帮助我们快速绘制想要的流程图框架,方便二次编辑。 选择好专业的流程图工具,接下来我们详细的了解一下绘制步骤。 首先下载并安装亿图图示软件,选择新建流程图,创建空白文档进入画布,当然也可以选择自己喜欢的流程图模板点击进入。 其次,在左侧的符号栏里有各种符号,用来搭建整个框架,选择需要的符号,直接拖拽到画板位置,利用软件的网格和标尺定位好图形符号的位置 最后,记得双击图形,输入补充文本关键词。如果想要流程图显得不那么单调,可以通过上方的样式栏更换主题颜色,使得流程图更专业。

亿图图示EDraw Max是一款由深圳市亿图软件有限公司开发的全类型,综合图形图表设计软件,解决跨平台,多领域,全终端的图形设计,图文混排和工程制图等需求。亿图图示是一款简单易用的快速制图软件,适合任何人绘制任何类型的图表。使用这款智能的软件释放您的创造力,使用免费的模版轻松设计和创建惊艳的图表。作为一款新颖小巧,功能强大的矢量绘制软件,让你轻松且高效地绘制各种流程图,网络图和商业图表。

流程图绘制步骤

什么是流程图 以特定的图形符号加上说明,表示算法的图,称为流程图或框图。 流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。这些过程的各个阶段均用图形块表示,不同图形块之间以箭头相连,代表它们在系统内的流动方向。下一步何去何从,要取决于上一步的结果,典型做法是用“是”或“否”的逻辑分支加以判断。 流程图有时也称作输入-输出图。该图直观地描述一个工作过程的具体步骤。流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助。这一方法可以用于整个企业,以便直观地跟踪和图解企业的运作方式。 流程图使用一些标准符号代表某些类型的动作,如决策用菱形框表示,具体活动用方框表示。但比这些符号规定更重要的,是必须清楚地描述工作过程的顺序。流程图也可用于设计改进工作过程,具体做法是先画出事情应该怎么做,再将其与实际情况进行比较。 绘制流程图的步骤 为便于识别,绘制流程图的习惯做法是: 圆角矩形表示“开始”与“结束”。 矩形表示行动方案、普通工作环节用 菱形表示问题判断或判定(审核/审批/评审)环节 用平行四边形表示输入输出 箭头代表工作流方向 使用流程图需要考虑的问题 使用流程图需要考虑很多问题,如: 过程中是否存在某些环节,删掉它们后能够降低成本或减少时间? 还有其他更有效的方式构造流程吗? 整个过程是否因为过时而需要重新设计? 应当将其完全废弃吗? 基本结构 顺序结构,分支结构(又称选择结构),循环结构。 数据流程图 数据流程图表示求解某一问题的数据通路.同时规定了处理的主要阶段和所用的各种数据媒体. 数据流程图包括: a. 指明数据存在的数据符号,这些数据符号也可指明该数据所使用的媒体; b. 指明对数据执行的处理的处理符号,这些符号也可指明该处理所用到的机器功能; c. 指明几个处理和(或)数据媒体之间的数据流的流线符号; d. 便于读.写数据流程图的特殊符号. 在处理符号的前后都应是数据符号.数据流程图以数据符号开始和结束(除9.4规定的特殊符号外) 程序流程图

程序流程图绘制

试用VISIO软件画出下列实用算法及程序的程序流程图 例1:用弦截法求方程 f(x)=x3-5x2+16x-80=0 的根 #include #include float f(float x) /* 定义f函数,以实现f(x) =x3-5x2+16x-80 */{ float y; y=((x-5.0)*x+16.0)*x-80.0; return(y); } float xpoint (float x1,float x2) /*定义xpoint函数,求出弦与x轴交点*/ { float y; y=(x1*f(x2)-x2*f(x1)) /(f(x2)-f(x1)); return (y); } float root(float x1,float x2)/* 定义root函数,求近似根*/ {float x,y,y1; y1=f(x1); do {x=xpoint(x1,x2); y=f(x); if(y*y1>0)/*f(x)与f(x1)同符号*/ {y1=y; x1=x;} else x2=x; } while(fabs(y)>=0.0001); return (x) } void main()/* 主函数*/ {float x1,x2,f1,f2,x; do {printf("inputx1,x2:\n"); scanf("%f,%f",&x1,&x2); f1=f(x1); f2=f(x2);

}while(f1*f2>=0); x=root(x1,x2); printf("Aroot of equation is %8.4f\n",x); } 例2:Cohen_SutherLand裁剪算法如下: #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 void encode (int x,int y,int * code,int XL,int XR,int YB,int YT) { int c=0; if(xXR) c=c|RIGHT; if (yYT) c=c|TOP; *code=c; } Void C_S_Line( p1,p2,XL,XR,YB,YT) /*p1(x1,y1)、p2(x2,y2)是线段端点,其余为窗口边界*/ { int code1,code2,code; encode(x1,y1,&code1); encode(x2,y2,&code2); while (code1<> 0 || code2<> 0) { if (code1& code2) return;//全不见,退出 code = code1;//半可见,求交 if (code1 == 0) code = code2; if (LEFT &code<>0) /*线段与左边界相交*/ { x = XL; y = y1 + (y2-y1) * (xL–x1)/(x2-x1); } else if (RIGHT &code<>0) /*线段与右边界相交*/ { x = XR; y = y1 + (y2-y1) * (xR –x1) /(x2-x1); } else if (BOTTOM &code<>0)

相关文档