新手入门必看:VectorDraw 常见问题整理大全(九)

本教程整理了VectorDraw 最常见问题,教程整理的很齐全,非常适合新手学习,希望对大家有一定的帮助!

VectorDraw Developer Framework(VDF)是一个用于应用程序可视化的图形引擎库。有了VDF提供的功能,您可以轻松地创建、编辑、管理、输出、输入和打印2D和3D图形文件。该库还支持许多矢量和栅格输入和输出格式,包括本地PDF和SVG导出。

VectorDraw Developer Framework最新版下载

VectorDraw web library (javascript)是一个矢量图形库。VectorDraw web library (javascript)不仅能打开CAD图纸,而且能显示任何支持HTML5标准平台上的通用矢量对象,如Windows,安卓,iOS和Linux。无需任何安装,VectorDraw web library (javascript)就可以运行在任何支持canvas标签和Javascript的主流浏览器(Chrome, Firefox, Safari, Opera, Dolphin, Boat等等)中。

VectorDraw web library (javascript)最新版下载

一. 窗口选择地面对象的三角形

问:如何通过窗口选择vdGroundSurface对象来选择/获取某些三角形/p>

答:在新的C#项目中添加一个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                }            }            }

您可以加载具有复杂Groundsurface对象的图形,然后在命令提示符中写入“test”以运行代码。

二. 检查点是否在折线内

问:如何检查点是否在折线内/p>

答:可以创建具有这些功能的Region(对象)。请检查以下示例代码。

//Create A PolylinevdPolyline 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 pointsVectorDraw.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));

三. 将实体从一个文档复制到另一个文档

问:如何将一些实体从一个控件复制到另一个控件/p>

答:使用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

两个VD控件是名称vdfrom和vdto。

四. 使用ToStream方法将图形作为存储在数据库中的块插入

问:如何使用ToStream方法将图形作为存储在数据库中的块插入/p>

答:您可以使用vdDocument的ToStream方法在数据库中保存/读取图形(文档),以将绘图保存在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.ActiveDocumentif (memorystream == null) return 0;ByteArray = memorystream.ToArray();int size = (int)memorystream.Length;memorystream.Close();// then SAVE the ByteArray to your databaseand// 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();

您可以在新项目中尝试上述代码,看看它是否正常工作。您也可以使用压缩,请参阅文章: http://www.vdraw.com/Export6/60000177.htm使用ToStream(true)和LoadFromMemory(stream,true)。

如果您希望以块的形式插入已存储在数据库中的文档,请尝试以下操作:

创建一个新的C#2005项目,并在新表单中添加一个vdScrollable控件(名为vdSC_From),一个名为vdDocComp_Temp的vdDocument控件,一个名为vdFramedControl的控件vdFC_To和2个按钮(button1和button2)。

该示例内部没有DATABASE代码,为此,vdScrollable控件(vdSC_from控件)用于在ByteArray中创建和保存文档,因此它将用于模拟数据库记录/字段中ByteArray的填充。然后使用临时vdDocument控件(vdDocComp_Temp)将此ByteArray“转换”回Document,然后使用vdBlocks对象的AddFromDocument方法生成插入vdFramed控件的图形(作为vdInsert)的vdBlock对象。另见下文,代码应该是:

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);    }}

未完待续……

标签:CAD工业4.0

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年9月26日
下一篇 2018年9月26日

相关推荐

发表回复

登录后才能评论