原創|產品更新|編輯:鄭恭琳|2020-01-21 17:31:40.697|閱讀 293 次
概述:工業生產數據處理圖表制作工具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@fc6vip.cn