原创|产品更新|编辑:郑恭琳|2020-01-21 17:31:40.697|阅读 247 次
概述:工业生产数据处理图表制作工具ProEssentials v9.5更新发布,继续添加到RenderEngine = Direct3D渲染技术中,以模仿Direct2D、GdiPlus、Gdi选项中的功能,3D渲染技术更出色。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
ProEssentials作为一个分发免费的领先的图表制作工具,在工程、制造、金融和处理大数据集方面被广泛接受。这都要归于其出众的处理速度,完备的功能以及对渲染和终端用户细节的重视。
点击下载ProEssentials v9.5.0.40最新版
v9.5新版本.NET,ActiveX,MFC,VCL图表功能
9.5版继续添加到RenderEngine = Direct3D渲染技术中,以模仿Direct2D、GdiPlus、Gdi选项中的功能。在DirectX/Direct3D中编写代码的过程受到其简单三角形和线条的限制,这意味着GdiPlus的高级绘图逻辑,Direct2D并不等同于DirectX/Direct3D中的任何内容。功能需要100%重新编写。OpenGL、第三方库或开源不存在任何依赖关系:唯一的依赖关系是Windows。
注意:v9.5必须切换正常位置计算,以使Pe3do PolyMode = Bar,条形图如何点亮以更好地匹配Graph Annotations。通常,这会使当前的3D条形图看起来太暗,您需要更改亮光位置。
v9.5改进列表:
新属性可帮助实现多个线程:
#define PEP_bFREEZE
Scope: all control types, Pego, Pesgo, Pe3do, Pepso, Pepco.
.Net, OCX, VCL: use control.Freeze = true / false
DLL: set with PEnset
在辅助工作线程中实现数据更新功能时,此功能与绘画一起可以解决稳定性问题。可以设置Freeze = true,处理更新逻辑,调用PEreinitializeresetimage(),然后设置Freeze = false。然后可以选择调用Invalidate来使控件无效。这不是处理线程问题的最佳方法,而是在总数据点少于大约100,000的许多情况下最简单和可用的方法。我们的WPF界面一直具有此功能,并且非常有用,v9.5在Winform、DLL、OCX和VCL界面中实现了类似的概念。该功能禁用了消息泵,但WM_DESTROY、WM_NCDESTROY和WM_PAINT除外。WM_PAINT处理程序仅将窗口标记为已验证并返回。当控件处于冻结状态时,它避免进行任何实际工作,因此避免了任何潜在的线程问题。
工作线程更新图表的过程应与此类似。
while (Pesgo1.PeSpecial.Painting) { // loop till false, doing nothing but waiting, it generally won't take long} // once Painting goes false, do something right away while (!Pesgo1.Special.Painting) { Pesgo1.Freeze = true; // do your update logic Pesgo1.Freeze = false; }
没有以上技术,将需要两个计时器机制。开发人员应该有一个仅收集数据的计时器(没有ProEssentials调用或任何会触发WM_PAINT、OnRender等的调用),以及与图表在同一线程中的第二个计时器,以使用收集的数据更新图表。
2个计时器的过程,图表线程中的计时器应...
a)告诉工作线程当前数据正在消耗中,工作线程应开始在新的辅助块/对象中收集数据,但不要告诉我们(重置新数据标志,也不要设置新数据数据标志。)
b)使用工作线程中准备好的块处理图表的数据更新逻辑
c)调用ReinitializeResetImage、UpdateLayout等
d)告诉工作线程,如果有数据存在,现在可以设置新的数据标志,并且可以选择释放第一个块的内存,或者简单地重用固定大小的块。
e)然后该过程重复在收集数据的2个存储块之间切换。
这两种计时器方法的优点是:1)永远不会强迫cpu循环并等待,并且2)开发人员可以通过调整图表更新频率来更轻松地控制图表更新逻辑的整体数据带宽能力,而不会影响数据收集频率。
点击下载ProEssentials v9.5.0.40最新版
新的数据缩减和共享数据功能:
新属性可帮助减少对存储数据的需求:
枚举:
#define PEDD_NONE 0
#define PEDD_POINTINCREMENT 1
#define PEDD_SUBSETINCREMENT 2
#define PEP_nDUPLICATEDATAX
Pesgo, Pe3do, Pepso
.NET: PeData.DuplicateDataX
OCX/VCL: DuplicateDataX
Default = 0 None
#define PEP_nDUPLICATEDATAY
Pesgo, Pe3do, Pepso
.NET: PeData.DuplicateDataY
OCX/VCL: DuplicateDataY
#define PEP_nDUPLICATEDATAZ
Pesgo, Pe3do
.NET: PeData.DuplicateDataZ
OCX/VCL: DuplicateDataZ
这些功能使图表可以复制每个子集的数据,因此仅需要一个子集或一个点的数据。最常见的情况可能与Pesgo科学图控件有关,在该控件中,每个数据点都传递XData和YData。设置DuplicateDataX = PointIncrement将意味着XData中包含的每个数据元素都将为后续子集的每个点使用/复制。另一种常见情况是3D表面或2D轮廓,其中每个数据点都传递XData、YData和ZData。同样,可以设置DuplicateDataX = PointIncrement并仅传递一个子集的XData或PEP_nPOINTS数据量。您可以设置DuplicateDataZ = SubsetIncrement,并且只传递一个点的ZData或PEP_nSUBSETS数据量。ZData中包含的每个数据元素将用于每个子集,并且此子集的所有点均设置为该相同值。这样可以减少为绘制图表而存储的数据量。请参见示例和示例项目中的示例122 123(也使用新的XDataPtr)139(新的WaveData示例)401 408。请注意,SubsetByPoints必须为true才能使用这些重复数据功能。
改进的属性可帮助共享数据:
#define PEP_faXDATAPTR
#define PEP_faXDATAIIPTR
#define PEP_faYDATAPTR
#define PEP_faYDATAIIPTR
#define PEP_faZDATAPTR
#define PEP_faZDATAIIPTR
#define PEP_dwaPOINTCOLORSPTR
.NET、OCX、VCL:类似于MFC/DLL项目,调用PEvsetW传递本地分配的内存块的地址。
这些功能与内部数据缩减过滤逻辑的改进一起添加,以增加可以在应用程序内渲染的最大数据量,并提高渲染此图像的性能。使用这些功能和上面的DuplicateData功能,一个32位项目应该能够生成具有更大的最大数据大小的图表,接近1亿点。64位项目还将使用更少的内存并更快地渲染,并具有更大的实际最大可图表数据点数量,可能是十亿个数据点(尽管请注意,我们的过滤逻辑仍然会发现并绘制所有异常值,因此在十亿之内找到这些异常值 点确实需要时间。)我们将来可能会添加基本的skip-n数据点类型过滤,但是如果存在异常值,这种过滤会产生误导性的图像。
例如,将这些功能用于Pesgo折线图。请参阅我们的演示和示例项目中的示例123。一个人会分配自己的内存。SubsetByPoint定义了我们如何使用和期望如何安排数据。因此,对于XData,可以为每个数据点分配一个单精度浮点值数组,以容纳x个数据,如果只有一个子集(PEP_nSUBSETS),则大小应与PEP_nPOINTS匹配,或者使用DuplicateDataX。如果将有多个子集并且未使用DuplicateDataX,则数组的大小应为“子集X点”。一个人通过PEP_faXDATAPTR属性调用PEvsetW告诉ProEssentials您的内存缓冲区的地址。可以使用类似的过程来共享YData。请注意,对于Pesgo折线图,通常所有y数据值都是唯一的,因此几乎不需要DuplicateDataY,除非构建一个垂直而非水平运行的图表。可以使用您自己的逻辑/函数初始化分配的数组/缓冲区,以根据需要预填充它们。或者仍然可以调用我们的函数PEvset,或使用我们的可视界面包装器(如Pesgo1.PeData.X[s,p])获取/设置数据。由于数据访问可以保持不变,因此开发人员可以通过简单地分配内存并设置上述属性来将此功能添加到现有项目中。您还可以使用自己的逻辑更改实时方案的数据缓冲区内容。请注意,在生成图像时不应更新缓冲区,因此更改数据仅应使用与构建图表相同的线程来完成,或者可能使用上述功能冻结图表。完成缓冲区后,将使用PEP_faXDATAPTR再次调用PEvsetW,并将地址设置为零,最后一个参数设置为零。在构造自己的内存时,您可能负责释放此内存。
C++ / MFC:例如:
float* myXData; int myXDataSize; // determine myXDataSize, either equal to (PEP_nPOINTS) property, or (PEP_nSUBSETS X PEP_nPOINTS) // allocate your local memory myXData = new float[myXDataSize]; // tell ProEssentials about your memory, setting last argument to the size of your memory buffer PEvsetW(m_hPE, PEP_faXDATAPTR, myXData, myXDataSize); // when done using your local memory, tell ProEssentials to use it's own copy of memory PEvsetW(m_hPE, PEP_faXDATAPTR, 0, 0); // last 2 arguments must be zero .NET, using Gigasoft.ProEssentials: for example: declaring MainWindow variables to be used throughout project on any form within project. public static float[] myXData; public static int myXDataSize; // determine myXDataSize, either equal to (PeData.Points) property, or (PeData.Subsets X PeData.Points) // allocate your local memory MainWindow.myXData = new float[MainWindow.myXDataSize]; // tell ProEssentials about your memory, setting last argument to the size of your memory buffer Api.PEvsetW(Pesgo1.PeSpecial.HObject, DllProperties.XDataPtr, MainWindow.myXData, MainWindow.myXDataSize); // when done using your local memory, tell ProEssentials to use it's own copy of memory Api.PEvsetW(Pesgo1.PeSpecial.HObject, DllProperties.XDataPtr,0, 0); // last 2 arguments must be zero
当绘制大量数据时,这些功能以及上述功能将大大减少整个项目的内存开销。数据的一份副本将是必要的。避免将数据发送到要复制和存储的图表。
我们的目标是通过支持每个子集的锯齿状数组和使用缓存的已过滤块改进过滤来继续改善数据处理,以便仅需一个慢速创建即可找到所有异常值,并可以快速,完美地呈现随机范围和级别的进一步缩放和平移 。
3D Scientific Graph和2D Graph支持粗线/管子集线型和图形注释线型,Direct3D:
当移植到9.0的v9.5版本时,将所有Direct3D线型都视为细线时,这是一个潜在的问题。因此,如果您的代码(可能)设置线型,则可能不记得您的代码是设置粗线类型,而该粗线类型只是呈现为细线。因此,请仔细检查使用RenderEngine = Direct3D的Pe3do和Pesgo图表的属性SubsetLineTypes。例如,对于实时的Pesgo图表或包含大量数据的图表(RenderEngine = Direct3D),粗线可能会通过几何着色器进行渲染,并且外观可能会有所不同,并且速度会稍慢一些。
#define PEP_nLINESORTUBES
Pe3do
.NET: Pe3do.PePlot.LinesOrTubes
可能设置为...
#define PELOT_ALL_LINES 0
#define PELOT_MEDIUM_THICK_TUBES 1
#define PELOT_MEDIUM_TUBES 2
#define PELOT_MEDIUM_THIN_TUBES 3
#define PELOT_ALL_TUBES 4
此属性将允许SubsetLineTypes设置控制2种类型的几何着色器和一个涉及绘图线的简单线拓扑着色器。默认情况下,细,中细,中线将绘制为面向屏幕的潜在2d粗线。阴影不会影响其颜色强度。这些行将更加可见。 MediumThin设置很好,因为它将通过三角形拓扑与线拓扑绘制线时利用抗锯齿并产生更平滑的线。默认情况下,MediumThick、Thick和ExtraThick线将绘制为3D管,并作为场景中的其他3D对象着色。可以调整此属性,以便所有线型都使用线几何着色器(0)或设置为(4)将使所有线成为管状。如果您希望细线实际淡入背景,则AllTubes设置非常好。当阈值从线到管几何着色器发生时,设置2和3会更改。通过设置此属性和/或SubsetLineTypes或各种GraphAnnotationTypes来构造线或各种线宽的2d椭圆/矩形,此功能使在场景中强制或混合两种线技术变得容易。
与上述属性相关的是TubeThicknessMin和TubeThicknessInc。
#define PEP_fTUBETHICKNESSMIN
Pe3do
.NET: Pe3do.PePlot.Option.TubeThicknessMin
#define PEP_fTUBETHICKNESSINC
Pe3do
.NET: Pe3do.PePlot.Option.TubeThicknessInc
默认值为1.0。例如,设置TubeThicknessMin = 0.5将导致SubsetLineType = ThinLine设置导致管的默认大小减半。这代表了最薄的管。设置TubeThicknessInc = 1.5将导致增量尺寸增加(MediumThin到Medium到MediumThick)增加50%,并允许控制将要生产的管尺寸范围。如果要在“中”和“厚”管半径之间进行更大的更改,请设置为1.5或根据需要设置。
3D Scientific Graph Direct3D支持GraphAnnotations,以及与Direct3D相关的新属性:
当前支持的GraphAnnotationTypes是:
......
新的3D ViewingMode功能可提供随机3D焦点查看:
#define PEP_nVIEWINGMODE
Pe3do
PePlot.Option.ViewingMode
Pe3do添加了一个新属性ViewingMode。默认的PEVM_CENTER是旧版视图,用户可以在其中进行与场景中心相关的旋转(DegreeOfRotation、ViewingHeight)和缩放(DxZoom)。翻译会翻译场景的中心。新功能添加了PEVM_DATA_LOCATION的ViewingMode设置。在这种新模式下,开发人员可以选择一个子集(ViewingSubset),Point(ViewingPoint)作为与旋转和缩放有关的焦点。如果焦点位置是图形注释位置的随机数据坐标,则还可以选择关注特定的X,Y,Z坐标(PEP_structVIEWINGAT)。当ViewingMode设置为DataLocation时,不允许转换,焦点为固定焦点。只需增加ViewingPoint即可产生向下滚动数据系列的外观,此功能可用于带有计时器或按键的动画。或者可以生成一系列ViewingAt位置以生成特定的数据视图动画。
在撰写本文时,DxFitControlShape必须为False。请参阅400 401 402 403 404 408,当图表有演示重点时按0-9
......
点击下载ProEssentials v9.5.0.40最新版
9.5中的其他各种改进和修复:
#define PEP_naSUBSETAXES
Pego, Pesgo
PeGrid.SubsetAxes
Default = Empty, when empty this feature is avoided
此功能允许分别和随机地为每个子集设置轴位置(0-15)。
例如,用以下修改演示示例012。
Pego1.PeGrid.SubsetAxes(0) = 3
Pego1.PeGrid.SubsetAxes(1) = 2
Pego1.PeGrid.SubsetAxes(2) = 1
Pego1.PeGrid.SubsetAxes(3) = 0
这告诉图表子集0在轴3上,子集1在轴2上,依此类推。颠倒顺序,因此第一个子集在底部,通常第一个子集在顶部。从历史上看,必须更改子集的顺序才能实现第一个子集位于底部。
仍然必须设置MultiAxesSubsets,尽管从技术上讲,仅需要确保MultiAxesSubsets项内分配的总子集等于或匹配Subsets的值。图表构造中有一个测试,可以验证MultiAxesSubsets的分配是否使用了所有子集。只要设置SubsetAxes时,所有轴都将使用,图表将更改MultiAxesSubset项,以供您反映SubsetAxes的状态。这样一来,无需更改MultiAxesSubsets,即可更改每个轴的子集数,并且总轴数保持不变并且每个轴至少具有1个子集。将来,我们可能会扩展此逻辑以使SubsetAxes成为总体控制因素,并且它可能会自动调整MultiAxesSubsets的大小并自动建立RandomSubsetsToGraph / SubsetsToShow,因此可以隐藏具有特殊轴名称的子集。该功能是一个非常新的功能,因此我们需要对其进行进一步修改,以使其发展成为处理多轴的非常简单的方法。
#define PEP_bSHOWANNOTATIONTEXT
Pe3do Pesgo Pego Pepso
.NET: PeAnnotation.ShowAnnotationText
OCX / VCL: ShowAnnotationText
一项新功能,可以轻松隐藏所有注释文本。设置为false将快速从场景中隐藏注释文本。注释图形将仍然可见。
#define PEP_nSHOWANNOTATIONTEXTMENU
Pe3do Pesgo Pego Pepso
.NET: PeUserInterface.Menu.ShowAnnotationText
OCX / VCL: ShowAnnotationTextMenu
与上面的ShowAnnotationText相关。设置为PEMC_SHOW会将菜单添加到内置弹出菜单中,以允许用户切换ShowAnnotationText的状态。快速隐藏或显示注释文本。
#define PEP_fMAXZOOM
Pe3do
.NET PePlot.Option.MaxZoom
OCX / VCL MaxZoom
设置最大缩放比例,从而防止用户将缩放比例缩放到超出焦点的范围(相机超过查看位置)。将greetPrompting设置为true可以帮助确定场景的最佳值,因为GridAspectX GridAspectZ DxFOV会影响 DxZoom。
#define PEP_bSEARCHNONSEQUENTIALDATA
Pesgo
PeData.SearchNonSequentialData
OCX / VCL SearchNonSequentialData
此功能使开发人员能够在未按顺序对x数据进行排序时,使PEsearchsubsetandpointindex和PEsearchpointindex(在下面讨论)能够找到最接近的子集和/或点索引。对于少于10,000点的图表,或根据需要,搜索每个数据点的蛮力搜索可能有用且方便。对于具有许多数据点的图表,最好将此功能的默认值保留为False,如果不是固有排序,则对x数据进行排序。
#define PEP_fLIGHTSTRENGTH
Pe3do
.NET Pe3do1.PePlot.Option.LightStrength
OCX / VCL LightStrength
默认值= .3这是环境照明的级别或强度。设置为.4至.8,以全局增亮3D场景。
#define PEP_bDXGEOMETRYSHADER
Pe3do, Pesgo
PeSpecial.DxGeometryShader
此属性使开发人员可以禁用与粗线和管有关的“几何着色器”。默认值为True,但是如果移植到9.5并且您想保证与v9.0或v8.0的向后兼容性,则将此属性设置为False将确保新的v9.5粗线支持不会改变您当前的项目外观或性能。
注意:v9.5必须切换正常位置计算,以使Pe3do PolyMode = Bar,条形图如何点亮以更好地匹配Graph Annotations。通常,这会使当前的3D条形图看起来太暗,您需要更改亮光位置。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn