enscape5.0渲染教程(工业生产数据处理图表ProEssentials)
enscape5.0渲染教程(工业生产数据处理图表ProEssentials)新属性可帮助实现多个线程:v9.5改进列表: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条形图看起来太暗,您需要更改亮光位置。
ProEssentials作为一个分发免费的领先的图表制作工具,在工程、制造、金融和处理大数据集方面被广泛接受。这都要归于其出众的处理速度,完备的功能以及对渲染和终端用户细节的重视。
工业生产数据处理图表ProEssentials v9.5更新,3D渲染技术更出色
v9.5新版本.NET,ActiveX,MFC,VCL图表功能
一、改进概述:
9.5版继续添加到RenderEngine = Direct3D渲染技术中,以模仿Direct2D、GdiPlus、Gdi选项中的功能。在DirectX/Direct3D中编写代码的过程受到其简单三角形和线条的限制,这意味着GdiPlus的高级绘图逻辑,Direct2D并不等同于DirectX/Direct3D中的任何内容。功能需要100%重新编写。OpenGL、第三方库或开源不存在任何依赖关系:唯一的依赖关系是Windows。
- 通过Pe3do进行3D渲染需要在绘图方法领域中支持Direct3D(有关新的轮廓逻辑,请参见示例400 402 403,添加了顶底线轮廓等。有关新的瀑布轮廓,请参见示例407 411)、注释、热点, 以及通过DirectX域唯一提供的商品。9.5版包含Pe3do Direct3D图形注释以及用于注释和子集的粗线和管道。请参阅示例403,因为它结合了v9.5的许多功能。
- 版本9.0增加了对Pesgo控件的双精度数据和Direct3D双精度着色器(需要着色器模型5)的支持。这允许DateTimeMode在Direct3D中显示从几年到几秒的数据。在需要双精度的情况下,可能会有更多用途。
- 版本9.5添加了有助于多线程以及减少和共享数据的功能。
- 通过Pesgo和Pego进行2D渲染需要工作以支持Direct3D,以提供新的绘图方法、热点和注释。例如,演示示例115显示了Direct3D的2d线和2d散点图绘制方法。有关新的Contour plus Shadow绘制方法以及Direct3D与旧版Direct2D和Gdi的渲染轮廓的信息,请参见示例122 139。
- 版本9.5添加了改进的3D文本躲避功能以及显示/隐藏注释文本和调整大小注释文本的快速简便的方法。
- 版本9.5添加了新的3D查看模式,可以对其进行动画处理以向下浏览和浏览数据。或者,只需将焦点放在某个点或数据位置上,然后相对于此新焦点旋转和缩放即可。
注意:v9.5必须切换正常位置计算,以使Pe3do PolyMode = Bar,条形图如何点亮以更好地匹配Graph Annotations。通常,这会使当前的3D条形图看起来太暗,您需要更改亮光位置。
二、界面改进:
- WinForm、WPF、Asp.Net界面不断改进和发展。
- 添加了64位OCX/ActiveX控件,并且不断增强了32位和64位OCX,以支持诸如Access、Excel甚至仍在使用VB6的容器。
- Embarcadero的Delphi和Builder C VCL接口需要以XE风格重写,以最好地在Delphi和Builder中同时支持32位和64位平台。
三、功能改进:
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: DuplicateDataXDefault = 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是:
- ThinSolidLine,MediumSolidLine,ThickSolidLine,MediumThinSolid,MediumThickSolid,ExtraThickSolid的实线类型
- ThinSolidLine,MediumSolidLine,ThickSolidLine,MediumThinSolid,MediumThickSolid,ExtraThickSolid的实线类型
- 使用上述类型的LineContinue,并为端点提供可选的热点。
- StartPoly,AddPolyPoint
- EndPolygon:所有点应驻留在任何2D平面内,可选热点例如400 407将多边形用于实时工具
- EndPolyLineThin,EndPolylineMedium,EndPolyLineThick,顶点处的可选热点
- 新型MajorMinorRadii:GraphAnnotationX = Major Radius,GraphAnnotationY = MinorRadius(用于椭圆/矩形和填充注释)
- 新型MajorDirection:GraphAnnotationX,Y,Z表示主要方向的单位向量(用于椭圆/矩形和填充注释)
- 新型MinorDirection:GraphAnnotationX,Y,Z表示次要方向的单位矢量(用于椭圆/矩形和填充注释)
- 新型AxisDirection:GraphAnnotationX,Y,Z表示中心轴的单位矢量方向(用于圆形和正方形注释)
- 新型AxisAngles:GraphAnnotationX =与x轴的水平角度,GraphAnnotationY =与垂直轴的垂直角度
- 新型MajorMinorInsideRadii:GraphAnnotationX =主要内半径:GraphAnnotationY =较小内半径(椭圆填充外圈)
- 新型TextAtPixel:GraphAnnotationX和Y是放置文本的像素位置
- 新型的InsideRectThin,InsideRectMedium,InsideRectThick,InsideRectFill:在主要/次要半径内渲染的Rect,而由半径包围。
......
新的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
......
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_bSHOWANNOTATIONTEXTPe3do Pesgo Pego Pepso.NET: PeAnnotation.ShowAnnotationTextOCX / 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改进了Direct3D Pe3do ScatterMode、折线图和折线图注释,数据突出显示功能现在绘制一个球体来指定焦点而不是菱形。
- v9.5修复了未实现FontTypeGNGNCtrl和FontSizeALCntl的Direct3D Pe3do控件
- v9.5修复了CursorPromptTracking在所有潜在情况下均未处理CursorPromptStyle = 4、2D轮廓的问题
- v9.5修复了在RenderEngine = Direct3D并且控件被卸载和重新加载时的WPF接口(例如,通过Content容器),并且D3DImage interop类不稳定。
- v9.5修复了空数据处理和条形图的问题。
- v9.5修复了PEP_bSHOWWIREFRAME(PePlot.Option.ShowWireframe)的问题,该问题在某些子集和点的情况下会导致不稳定。
- v9.5,现在在碰巧文件名存在时在内置“导出”对话框中更改文件类型,将更改文件扩展名以反映新的文件类型。
- v9.5修复了“禁用堆叠百分比菜单”仅禁用自定义对话框中的项目,仍然错误地包含了弹出菜单项。
- v9.5修复了LineSymbolThickness,它对于RenderEngine = Direct2D不能正常运行
- v9.5修复了RenderEngine = Direct2D和图表恰好只有1个旋转文本的问题,未重置全局转换(.5,.5)导致外观模糊的图像(像素始终越过像素边界)。
- v9.5修复了2D轮廓问题,其中ContourColorProportions没有正确实现,导致轮廓线过多。
- v9.5修复了一个问题,如果将PEP_nSEQUENTIALDATAX从默认的auto 0设置为1,会导致不显示所有子集的问题。
- v9.5修复了使用功能PlottingMethods() (每个子集PlottingMethod设置)并且“Subsets > 12”和将“缩放窗口”设置为显示所有子集时颜色的问题。
- v9.5修复了SubsetToShow和PartialResetImage的问题。
- v9.5改进了Pego MouseWheel水平缩放,当绘制低PointsToGraph时,该缩放无法将焦点保持在鼠标附近。
- v9.5改进了使用滚动条的组合或在激活“自动旋转”时拖动Pe3do的功能。
- v9.5修复了ContourColorSet设置为1的问题。现在将其正确设置为1可以清除和重新定义将用于自定义颜色的ContourColors。
- v9.5改进了Pe3do散射模式,面积绘制方法(瀑布),该方法在切片之前绘制了边界线,从而导致了抗锯齿现象。并且还修复了Monochrome ViewingAs设置。
- v9.5修复了在“文本导出”对话框中未导出xyz数据的Pesgo 2D轮廓。
- v9.5修复了不支持ViewingAs Monochrome设置的Pesgo 2D轮廓RenderEngine = Direct3D。
注意:v9.5必须切换正常位置计算,以使Pe3do PolyMode = Bar,条形图如何点亮以更好地匹配Graph Annotations。通常,这会使当前的3D条形图看起来太暗,您需要更改亮光位置。
点击“了解更多”获取ProEssentials v9.5.0.40最新版