翻譯|使用教程|編輯:黃竹雯|2018-10-29 11:22:45.000|閱讀 405 次
概述:本教程整理了VectorDraw 最常見問題,教程整理的很齊全,非常適合新手學(xué)習(xí),希望對(duì)大家有一定的幫助!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
VectorDraw Developer Framework(VDF)是一個(gè)用于應(yīng)用程序可視化的圖形引擎庫(kù)。有了VDF提供的功能,您可以輕松地創(chuàng)建、編輯、管理、輸出、輸入和打印2D和3D圖形文件。該庫(kù)還支持許多矢量和柵格輸入和輸出格式,包括本地PDF和SVG導(dǎo)出。
【VectorDraw Developer Framework最新版下載】
VectorDraw web library (javascript)是一個(gè)矢量圖形庫(kù)。VectorDraw web library (javascript)不僅能打開CAD圖紙,而且能顯示任何支持HTML5標(biāo)準(zhǔn)平臺(tái)上的通用矢量對(duì)象,如Windows,安卓,iOS和Linux。無需任何安裝,VectorDraw web library (javascript)就可以運(yùn)行在任何支持canvas標(biāo)簽和Javascript的主流瀏覽器(Chrome, Firefox, Safari, Opera, Dolphin, Boat等等)中。
【VectorDraw web library (javascript)最新版下載】
一. 窗口選擇地面對(duì)象的三角形
問:如何通過窗口選擇vdGroundSurface對(duì)象來選擇/獲取某些三角形?
答:在新的C#項(xiàng)目中添加一個(gè)vdFramedControl并添加如下代碼:
private void Form1_Load(object sender, EventArgs e) { vdFramedControl.CommandLine.CommandExecute += new VectorDraw.Professional.vdCommandLine.CommandExecuteEventHandler(CommandLine_CommandExecute); } void CommandLine_CommandExecute(string commandname, bool isDefaultImplemented, ref bool success) { if (isDefaultImplemented) return; if (string.Compare(commandname, "test", true) == 0) { success = true; vdDocument document = vdFramedControl.BaseControl.ActiveDocument; Box rectInViewCS = null; document.Prompt("Pick a window select"); StatusCode sc = document.ActionUtility.getUserRectViewCS(null, out rectInViewCS); document.Prompt(null); if (sc != StatusCode.Success) return; gPoints pts = new gPoints(); pts.Add(rectInViewCS.Min); pts.Add(rectInViewCS.Max); vdSelection set = new vdSelection(); set.SetUnRegisterDocument(document); vdFilterObject filterselect = new vdFilterObject(); filterselect.Types.AddItem("vdGroundSurface"); set.Select(RenderSelect.SelectingMode.CrossingWindowRectangle,pts); set.ApplyFilter(filterselect); if (set.Count == 0) return; vdGroundSurface gsf = set[0] as vdGroundSurface; gTriangles triangles = gsf.Triangles; VectorDraw.Render.Region rgn = new VectorDraw.Render.Region(rectInViewCS); int trigid = 0; VectorDraw.Generics.vdArray trgiIds = new vdArray(); gPoint p1, p2, p3; foreach (gTriangle trig in triangles) { p1 = document.World2ViewMatrix.Transform(trig.P1); p2 = document.World2ViewMatrix.Transform(trig.P2); p3 = document.World2ViewMatrix.Transform(trig.P3); if (rgn.IsLineInside(p1, p2) || rgn.IsLineIntersect(p1, p2)) trgiIds.AddItem(trigid); trigid++; if (rgn.IsLineInside(p2, p3) || rgn.IsLineIntersect(p2, p3)) trgiIds.AddItem(trigid); trigid++; if (rgn.IsLineInside(p3, p1) || rgn.IsLineIntersect(p3, p1)) trgiIds.AddItem(trigid); trigid++; } //test geting triangles from trgiIds foreach (int var in trgiIds) { gTriangle trig = triangles[(var + 1) / 3]; int trigline = var % 3;//0 is p1,p2 - 1 is p1,p2 - 2 = p3,p1 } } }
您可以加載具有復(fù)雜Groundsurface對(duì)象的圖形,然后在命令提示符中寫入“test”以運(yùn)行代碼。
二. 檢查點(diǎn)是否在折線內(nèi)
問:如何檢查點(diǎn)是否在折線內(nèi)?
答:可以創(chuàng)建具有這些功能的Region(對(duì)象)。請(qǐng)檢查以下示例代碼。
//Create A Polyline vdPolyline poly = new vdPolyline(); poly.SetUnRegisterDocument(vdFramedControl1.BaseControl.ActiveDocument); poly.setDocumentDefaults(); poly.VertexList.Add(new gPoint()); poly.VertexList.Add(new gPoint(1,1)); poly.VertexList.Add(new gPoint(2,2)); poly.VertexList.Add(new gPoint(3,2)); poly.VertexList.Add(new gPoint(5,2)); poly.VertexList.Add(new gPoint(6,1)); poly.VertexList.Add(new gPoint(3,0)); poly.VertexList.Add(new gPoint(0,0)); vdFramedControl1.BaseControl.ActiveDocument.Model.Entities.AddItem(poly); //Create A Region From the Polyline's points VectorDraw.Render.Region reg = new VectorDraw.Render.Region(poly.GetSamplePoints(0, 0)); //Check if a point is inside the polyline or not. bool a = reg.IsPointInside (new gPoint (0,1)); bool b = reg.IsPointInside (new gPoint (2,1));
三. 將實(shí)體從一個(gè)文檔復(fù)制到另一個(gè)文檔
問:如何將一些實(shí)體從一個(gè)控件復(fù)制到另一個(gè)控件?
答:使用VDF Prof. 6.x Wrapper或VDProControl(vdraw.ocx / vdprocontrol.dll),您可以嘗試以下代碼:
Private Sub copy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles copy.Click Dim coloritem As VectorDraw.Professional.vdObjects.vdColor Dim cadfig As vdFigure Dim selset As vdSelection Dim docfrom As VectorDraw.Professional.vdObjects.vdDocument Dim docto As VectorDraw.Professional.vdObjects.vdDocument vdto.ActiveDocument.New() vdfrom.ActiveDocument.Open(Application.StartupPath() + "\PD-23-from.vdi", 0, 0) vdfrom.CommandAction.Zoom("e", 0, 0) ''create a temporary selection to add the entities you want to copy in destination document selset = vdfrom.ActiveDocument.Selections.Add("tmpCopy") selset.RemoveAll() For Each cadfig In vdfrom.ActiveDocument.Entities If cadfig.Visible = False Then Continue For selset.AddItem(cadfig) Next ''get the the VectorDraw FrameWork document objects. docfrom = vdfrom.ActiveDocument.WrapperObject docto = vdto.ActiveDocument.WrapperObject ''disable the undo write in destination document docto.UndoHistory.PushEnable(False) ''Use the MergeSelection to copy the entites and table dependecies from source to destination document docto.MergeSelection(selset.WrapperObject) ''Set the pallete and backround colors of destination same as the source document docto.Palette.Background = docfrom.Palette.Background docto.Palette.Forground = docfrom.Palette.Forground docto.Palette.RemoveAll() For Each coloritem In docfrom.Palette docto.Palette.AddItem(coloritem.Clone()) Next docto.Model.BkColorEx = docfrom.ActiveLayOut.BkColorEx ''pop back the undo mode of the destination to its original value. docto.UndoHistory.PopEnable() vdto.CommandAction.Zoom("e", 0, 0) vdto.ActiveDocument.SaveAs(Application.StartupPath() + "\PD-23-to.vdi", VdConstFileVer.DefaultVersion) End Sub
兩個(gè)VD控件是名稱vdfrom和vdto。
四. 使用ToStream方法將圖形作為存儲(chǔ)在數(shù)據(jù)庫(kù)中的塊插入
問:如何使用ToStream方法將圖形作為存儲(chǔ)在數(shù)據(jù)庫(kù)中的塊插入?
答:您可以使用vdDocument的ToStream方法在數(shù)據(jù)庫(kù)中保存/讀取圖形(文檔),以將繪圖保存在System.IO.MemoryStream和LoadFromMemory中以讀取它,如:
object ByteArray = null; System.IO.MemoryStream memorystream = Doc.ToStream(); //doc can be the BaseControl.ActiveDocument or vdDoc1.Document or vdFrame.BaseControl.ActiveDocument if (memorystream == null) return 0; ByteArray = memorystream.ToArray(); int size = (int)memorystream.Length; memorystream.Close(); // then SAVE the ByteArray to your database and // Read the Bytes from database and store it in the ByteArray and then : System.IO.MemoryStream memorystream = new System.IO.MemoryStream((byte[])ByteArray); memorystream.Position = 0; Doc.LoadFromMemory(memorystream); memorystream.Close();
您可以在新項(xiàng)目中嘗試上述代碼,看看它是否正常工作。您也可以使用壓縮,請(qǐng)參閱文章: http://www.vdraw.com/Export6/60000177.htm使用ToStream(true)和LoadFromMemory(stream,true)。
如果您希望以塊的形式插入已存儲(chǔ)在數(shù)據(jù)庫(kù)中的文檔,請(qǐng)嘗試以下操作:
創(chuàng)建一個(gè)新的C#2005項(xiàng)目,并在新表單中添加一個(gè)vdScrollable控件(名為vdSC_From),一個(gè)名為vdDocComp_Temp的vdDocument控件,一個(gè)名為vdFramedControl的控件vdFC_To和2個(gè)按鈕(button1和button2)。
該示例內(nèi)部沒有DATABASE代碼,為此,vdScrollable控件(vdSC_from控件)用于在ByteArray中創(chuàng)建和保存文檔,因此它將用于模擬數(shù)據(jù)庫(kù)記錄/字段中ByteArray的填充。然后使用臨時(shí)vdDocument控件(vdDocComp_Temp)將此ByteArray“轉(zhuǎn)換”回Document,然后使用vdBlocks對(duì)象的AddFromDocument方法生成插入vdFramed控件的圖形(作為vdInsert)的vdBlock對(duì)象。另見下文,代碼應(yīng)該是:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } //Instead of a database, a VectorDraw Scrollable control (named vdSC_From) is used to create a drawing to a bytearray //Also a vdDocument component (named vdDocComp_Temp) is used so it can be filled with the drawing that is stored in the database (named DocumentToBlock) //after that in the Target's Document (the vdFC_To control) a block is created with AddFromDocument and inserted private void button1_Click(object sender, EventArgs e) { //instead of a database, a VectorDraw Scrollable control (vdSC_From) is used to create a drawing to a bytearray vdSC_From.BaseControl.ActiveDocument.New(); vdSC_From.BaseControl.ActiveDocument.CommandAction.CmdCircle(new VectorDraw.Geometry.gPoint(0, 0, 0), (double)2.0); vdSC_From.BaseControl.ActiveDocument.ActivePenColor.ColorIndex = 1; vdSC_From.BaseControl.ActiveDocument.CommandAction.CmdEllipse(new VectorDraw.Geometry.gPoint(0, 0, 0), new VectorDraw.Geometry.gPoint(1, 1, 0), (double)3.0); object ByteArray = null; System.IO.MemoryStream memorystream = vdSC_From.BaseControl.ActiveDocument.ToStream(true); //save to memory compressed if (memorystream == null) return ; ByteArray = memorystream.ToArray(); int size = (int)memorystream.Length; memorystream.Close(); // the drawing/document is created and saved to a public ByteArray // now we will read this to the temporary document VectorDraw.Professional.vdObjects.vdDocument DocumentToBlock = vdDocComp_Temp.Document; DocumentToBlock.New(); memorystream = new System.IO.MemoryStream((byte[])ByteArray); memorystream.Position = 0; DocumentToBlock.LoadFromMemory(memorystream, true);//Read from memory compressed memorystream.Close(); //and add the entities of this document to a block //We create a block object and initialize it's default properties. VectorDraw.Professional.vdCollections.vdBlocks blks = vdFC_To.BaseControl.ActiveDocument.Blocks; VectorDraw.Professional.vdPrimaries.vdBlock blk = blks.AddFromDocument("CustomBlock1",DocumentToBlock,true); blk.Update(); //add the block to the blocks collection vdFC_To.BaseControl.ActiveDocument.Blocks.AddItem(blk); //and now insert it; vdFC_To.BaseControl.ActiveDocument.CommandAction.CmdInsert("CustomBlock1", new VectorDraw.Geometry.gPoint(0.0d, 3.0d, 0.0d), 1d, 2d, 2d); } private void button2_Click(object sender, EventArgs e) { //instead of a database, a VectorDraw Scrollable control (vdSC_From) is used to create a drawing to a bytearray vdSC_From.BaseControl.ActiveDocument.New(); vdSC_From.BaseControl.ActiveDocument.CommandAction.CmdRect(new VectorDraw.Geometry.gPoint(2.0d, 1d, 0d), new VectorDraw.Geometry.gPoint(3.0d, 4d, 0d)); vdSC_From.BaseControl.ActiveDocument.ActivePenColor.ColorIndex = 3; vdSC_From.BaseControl.ActiveDocument.CommandAction.CmdArc(new VectorDraw.Geometry.gPoint(4.0d, 0d, 0d),2d, 1.0d,2.0d); object ByteArray = null; System.IO.MemoryStream memorystream = vdSC_From.BaseControl.ActiveDocument.ToStream(true); if (memorystream == null) return; ByteArray = memorystream.ToArray(); int size = (int)memorystream.Length; memorystream.Close(); // the drawing/document is created and saved to a public ByteArray // now we will read this to the temporary document VectorDraw.Professional.vdObjects.vdDocument DocumentToBlock = vdDocComp_Temp.Document; DocumentToBlock.New(); memorystream = new System.IO.MemoryStream((byte[])ByteArray); memorystream.Position = 0; DocumentToBlock.LoadFromMemory(memorystream,true); memorystream.Close(); //and add the entities of this document to a block //We create a block object and initialize it's default properties. VectorDraw.Professional.vdCollections.vdBlocks blks = vdFC_To.BaseControl.ActiveDocument.Blocks; VectorDraw.Professional.vdPrimaries.vdBlock blk = blks.AddFromDocument("CustomBlock2", DocumentToBlock, true); blk.Update(); //add the block to the blocks collection vdFC_To.BaseControl.ActiveDocument.Blocks.AddItem(blk); //and now insert it; vdFC_To.BaseControl.ActiveDocument.CommandAction.CmdInsert("CustomBlock2", new VectorDraw.Geometry.gPoint(0.0d, 3.0d, 0.0d), 1d, 2d, 2d); } }
未完待續(xù)......
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn