VectorDraw Developer Framework常見問題整理(五十五):如何在動(dòng)作處于活動(dòng)狀態(tài)時(shí)使用鼠標(biāo)中鍵進(jìn)行平移
VectorDraw Developer Framework(VDF)是一個(gè)用于應(yīng)用程序可視化的圖形引擎庫。有了VDF提供的功能,您可以輕松地創(chuàng)建、編輯、管理、輸出、輸入和打印2D和3D圖形文件。該庫還支持許多矢量和柵格輸入和輸出格式,包括本地PDF和SVG導(dǎo)出。
點(diǎn)擊下載VectorDraw Developer Framework
問:動(dòng)作處于活動(dòng)狀態(tài)時(shí)如何使用鼠標(biāo)中鍵進(jìn)行平移?
答:可以通過使用vdmoudown和vdmouseup事件來執(zhí)行此操作,因?yàn)闉榇?,您必須在要平移時(shí)暫?;顒?dòng)操作,然后將其恢復(fù)到當(dāng)前命令。一旦使用鼠標(biāo)中鍵進(jìn)行平移,而不是使用左鍵完成命令,就可能發(fā)生這種情況。在下面,可以看到一個(gè)示例。
var vdcanvas = vdmanager.AttachCanvas('canvas'); vdcanvas.vdmousedown = _vdmousedown; //set to the initialize page load vdcanvas.vdmouseup = _vdmouseup; vdcanvas.ActiveAction().PanMouseButton = vdConst.MouseMiddleButton; // set the middle mouse button for panning procedure function _vdmousedown(e) { var code = e.mousebutton; //get the mouse button code if (code === 2)vdcanvas.ActiveAction().Pause(); // middle mouse code is 2 } function _vdmouseup(e) { //resume the action when finishing the panning var code = e.mousebutton; if (code === 2)vdcanvas.ActiveAction().Resume(); }
問:3D中的XYZ坐標(biāo)軸始終以3D模式顯示在屏幕上。在2D模式下,根據(jù)平移動(dòng)作,平移動(dòng)作結(jié)束后XYZ坐標(biāo)軸可能會(huì)隱藏并重繪。這些軸是否可以像3D一樣在2D模式下工作?
答:在平移過程中,我們有意讓W(xué)ire2D模式這樣工作,以提高繪制速度。在這種情況下(2D模式),VDF不重繪整個(gè)屏幕,而只是重繪一小部分,以便在2D模式下更快地繪制。你可以通過使用onScroll事件來繞過這一點(diǎn),比如。
private void Form1_Load(object sender, EventArgs e) { ........ vdFramedControl.BaseControl.ActiveDocument.OnScroll += ActiveDocument_OnScroll; ........ } private void ActiveDocument_OnScroll(object sender, ref double cx, ref double cy, ref bool cancel) { cancel = true; VectorDraw.Render.vdRender render = sender as VectorDraw.Render.vdRender; if (render.PerspectiveMod == VectorDraw.Render.vdRender.VdConstPerspectiveMod.PerspectON) { VectorDraw.Geometry.Matrix m = new VectorDraw.Geometry.Matrix(); m.TranslateMatrix(-cx, -cy, 0.0d); vdFramedControl.BaseControl.ActiveDocument.World2ViewMatrix *= m; } else { vdFramedControl.BaseControl.ActiveDocument.ViewCenter += new gPoint(cx, cy); } bool doRedrawNow = render.BreakOnMessage != VectorDraw.WinMessages.MessageManager.BreakMessageMethod.None; render.Invalidate(doRedrawNow); }
使用這個(gè)事件和上面的代碼,XYZ坐標(biāo)軸將像3D一樣呈現(xiàn)在2D中。
以上問答,如果您有任何的疑惑都可以在評(píng)論區(qū)留言,我們會(huì)及時(shí)回復(fù)。此系列的問答教程我們會(huì)持續(xù)更新,如果您感興趣,可以多多關(guān)注本教程。熱門文章推薦:
=======================================================
如果您對(duì)想要購(gòu)買正版授權(quán)VectorDraw Developer Framework(VDF),可以聯(lián)系在線客服>>咨詢相關(guān)問題。