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

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

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)最新版下载

一. 将数据对象从表示绘图的列表框拖放到VectorDraw Control作为插入对象

问:如何将数据对象从表示绘图的列表框拖放到VectorDraw Control作为插入对象/p>

答:参见以下代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using VectorDraw.Actions;using VectorDraw.Geometry;using VectorDraw.Professional.vdPrimaries;using VectorDraw.Professional.vdCollections;using VectorDraw.Professional.vdObjects;using VectorDraw.Professional.ActionUtility;using VectorDraw.Professional.vdFigures;namespace WindowsApplication1{    //Example of Drag & Drop a data object from a List box that represents a Drawing, in to VectorDraw Control as Insert object.    public partial class Form1 : Form    {        public vdInsert Winsert = null;        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            vdDest.vdDragEnter += new VectorDraw.Professional.Control.DragEnterEventHandler(vdDest_vdDragEnter);            vdDest.vdDragDrop += new VectorDraw.Professional.Control.DragDropEventHandler(vdDest_vdDragDrop);            vdDest.vdDragOver +=new VectorDraw.Professional.Control.DragOverEventHandler(vdDest_vdDragOver);            vdDest.vdDragLeave += new VectorDraw.Professional.Control.DragLeaveEventHandler(vdDest_vdDragLeave);            vdDest.DrawOverAll += new VectorDraw.Professional.Control.DrawOverAllEventHandler(vdDest_DrawOverAll);        }        void vdDest_DrawOverAll(object sender, VectorDraw.Render.vdRender render, ref bool cancel)        {            if (Winsert == null) return;            //If this event is called when a DragDrop action is active (from  vdDest_vdDragOver) then we repaint the screen with the Insret object in the curent Cursor position.            gPoint curpt = vdDest.ActiveDocument.CCS_CursorPos();            Winsert.InsertionPoint = curpt;            Winsert.Update();            render.UnLock();//use Unlock / Lock in order the rendering be smoother as GDIPlusRender            Winsert.Draw(render);            render.Lock();        }        void vdDest_vdDragLeave(EventArgs e, ref bool cancel)        {            //Leaving the VectorDraw control            cancel = true;            Winsert = null;        }        void vdDest_vdDragEnter(DragEventArgs drgevent, ref bool cancel)        {            //A drag drop action is active and the cursor is just activate in the VectorDraw screen            cancel = true;            //get the data object and check if is represents a drawing file.            DataObject dataobject = drgevent.Data as DataObject;            if (dataobject == null) return;            System.Collections.Specialized.StringCollection strings = dataobject.GetFileDropList();            if (strings == null || strings.Count != 1) return;            string filename = strings[0];            string blockname = System.IO.Path.GetFileNameWithoutExtension(filename);//get th block name of the file            vdBlock block = vdDest.ActiveDocument.Blocks.FindName(blockname);//if the block already exist in the drawing then we do not redifine it.            if (block == null)            {                Cursor curCursor = Cursor;                Cursor = Cursors.WaitCursor;                block = vdDest.ActiveDocument.Blocks.AddFromFile(filename, false);//add the block in the drawing                Cursor = curCursor;            }            if (block == null) return;            drgevent.Effect = DragDropEffects.Copy;            //create an insert object but we do not add it in the Document ActiveLayout entities.            Winsert = new vdInsert();            Winsert.SetUnRegisterDocument(vdDest.ActiveDocument);            Winsert.setDocumentDefaults();            Winsert.Block = block;            Winsert.CreateDefaultAttributes();            Winsert.InsertionPoint = vdDest.ActiveDocument.CCS_CursorPos();            Winsert.Update();            }        void vdDest_vdDragDrop(DragEventArgs drgevent, ref bool cancel)        {            cancel = true;            if (Winsert == null) return;            //Add the insert object in to Document ActiveLayout entities.            Winsert.Invalidate();            Winsert.InsertionPoint = vdDest.ActiveDocument.CCS_CursorPos();            Winsert.Update();            vdDest.ActiveDocument.ActiveLayOut.Entities.AddItem(Winsert);            Winsert.Invalidate();            Winsert = null;        }        private void vdDest_vdDragOver(DragEventArgs drgevent, ref bool cancel)        {            cancel = true;            if (Winsert == null) return;            gPoint curpt = vdDest.ActiveDocument.CCS_CursorPos();            //If the mouse is not moved then we do not refresh the graphics screen to avoid flicking            if (Winsert.InsertionPoint.AreEqual(curpt, vdDest.ActiveDocument.ActiveActionRender.PixelSize / 2.0d)) return;            //This command will refresh the graphics screen and call the vdDest_DrawOverAll event            vdDest.ActiveDocument.ActiveLayOut.RefreshGraphicsControl(null);        }        private void listBox1_MouseDown(object sender, MouseEventArgs e)        {            //Create a new data object that contains an existing file and begin a Drag drop operation.            DataObject data = new DataObject();            System.Collections.Specialized.StringCollection filepaths = new System.Collections.Specialized.StringCollection();            filepaths.Add(Application.StartupPath + "\exemplo.dwg");            data.SetFileDropList(filepaths);            listBox1.DoDragDrop(data, DragDropEffects.Copy);        }    }}

在版本7中,由于Render的更改,DrawOverAll不会像版本6那样不断触发。在这种情况下,代码应更改为:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using VectorDraw.Actions;using VectorDraw.Generics;using VectorDraw.Geometry;using VectorDraw.Professional;using VectorDraw.Professional.vdPrimaries;using VectorDraw.Professional.vdCollections;using VectorDraw.Professional.vdObjects;using VectorDraw.Professional.ActionUtility;using VectorDraw.Professional.vdFigures;using VectorDraw.Render;using VectorDraw.Serialize;namespace Example_Drag_7{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        vdInsert Winsert = null;        private void Form1_Load(object sender, EventArgs e)        {            vdDest.vdDragDrop += new VectorDraw.Professional.Control.DragDropEventHandler(vectorDrawBaseControl1_vdDragDrop);            vdDest.vdDragEnter += new VectorDraw.Professional.Control.DragEnterEventHandler(vectorDrawBaseControl1_vdDragEnter);            vdDest.vdDragLeave += new VectorDraw.Professional.Control.DragLeaveEventHandler(vectorDrawBaseControl1_vdDragLeave);            vdDest.vdDragOver += new VectorDraw.Professional.Control.DragOverEventHandler(vectorDrawBaseControl1_vdDragOver);        }        private void listBox1_MouseDown(object sender, MouseEventArgs e)        {            //Create a new data object that contains an existing file and begin a Drag drop operation.            DataObject data = new DataObject();            System.Collections.Specialized.StringCollection filepaths = new System.Collections.Specialized.StringCollection();            filepaths.Add(Application.StartupPath + "\exemplo.dwg");            data.SetFileDropList(filepaths);            listBox1.DoDragDrop(data, DragDropEffects.Copy);        }        private void vectorDrawBaseControl1_vdDragDrop(DragEventArgs drgevent, ref bool cancel)        {            cancel = true;            if (Winsert == null) return;            //Add the insert object in to Document ActiveLayout entities.            vdDocument docAcess = vdDest.ActiveDocument;            Winsert.Invalidate();            Winsert.InsertionPoint = docAcess.CCS_CursorPos();            Winsert.Update();            docAcess.ActiveLayOut.Entities.AddItem(Winsert);            Winsert.Invalidate();            Winsert = null;        }        private void vectorDrawBaseControl1_vdDragEnter(DragEventArgs drgevent, ref bool cancel)        {            //A drag drop action is active and the cursor is just activate in the VectorDraw screen            cancel = true;            vdDocument docAccess = vdDest.ActiveDocument;            //get the data object and check if is represents a drawing file.            DataObject dataobject = drgevent.Data as DataObject;            if (dataobject == null) return;            System.Collections.Specialized.StringCollection strings = dataobject.GetFileDropList();            if (strings == null || strings.Count != 1) return;            string filename = strings[0];            string blockname = System.IO.Path.GetFileNameWithoutExtension(filename);//get th block name of the file            vdBlock block = docAccess.Blocks.FindName(blockname);//if the block already exist in the drawing then we do not redifine it.            if (block == null)            {                Cursor curCursor = Cursor;                Cursor = Cursors.WaitCursor;                block = docAccess.Blocks.AddFromFile(filename, false);//add the block in the drawing                Cursor = curCursor;            }            if (block == null) return;            drgevent.Effect = DragDropEffects.Copy;            //create an insert object but we do not add it in the Document ActiveLayout entities.            Winsert = new vdInsert();            Winsert.SetUnRegisterDocument(docAccess);            Winsert.setDocumentDefaults();            Winsert.Block = block;            Winsert.CreateDefaultAttributes();            Winsert.InsertionPoint = docAccess.CCS_CursorPos();            Winsert.Update();        }        private void vectorDrawBaseControl1_vdDragLeave(EventArgs e, ref bool cancel)        {  //Leaving the VectorDraw control            cancel = true;            Winsert = null;            vdDest.ActiveDocument.ActiveLayOut.Refresh();        }        private void vectorDrawBaseControl1_vdDragOver(DragEventArgs drgevent, ref bool cancel)        {            cancel = true;            if (Winsert == null) return;            vdDocument docAccess = vdDest.ActiveDocument;            gPoint curpt = docAccess.CCS_CursorPos();            curpt = docAccess.ActiveLayOut.User2WorldMatrix.Transform(curpt);            Winsert.InsertionPoint = curpt;            Winsert.Update();            vdRender render = docAccess.ActiveActionRender;            // Draw the insert in the mouse position            bool isstarted = render.Started;            if (!isstarted) render.StartDraw(true);            if (render.Started)            {                Winsert.Draw(render);                if (!isstarted) render.EndDraw();            }        }    }}

二. 搜索Document以查找具有某个Block的插入

问:如何用一种方法来搜索整个Document以获得具有特定Block的插入/p>

答:可以尝试以下代码:

vdFramedControl.BaseControl.ActiveDocument.Prompt("Block name to search:");string blockname = vdFramedControl.BaseControl.ActiveDocument.ActionUtility.getUserString();vdFramedControl.BaseControl.ActiveDocument.Prompt(null);if (blockname == null) return;vdBlock blk = vdFramedControl.BaseControl.ActiveDocument.Blocks.FindName(blockname);if (blk == null) return;//search all vdPrimaries that are document register with handle != 0vdSelection set = new vdSelection();//create a selection to hold the itemsvdPrimariesList list = vdFramedControl.BaseControl.ActiveDocument.GetPrimaries(true);foreach (vdPrimary var in list){vdInsert test = var as vdInsert;if (test == null) continue;if (!object.ReferenceEquals(test.Block, blk)) continue;set.AddItem(test, false, vdSelection.AddItemCheck.Nochecking);}

三. 在打印机上打印多个页面

问:想在一个打印作业中打印图形的布局(每页一个布局)。该怎么做/p>

答:这适用于版本6011及之后。可以尝试以下代码:

        public void Print_Clicked()        {            //because UpdatePropertiesFromPrinter was changed and you can not change the System.Drawing.Printing.PrintDocument object of a vdPrinter            //the following logic must be used.            //Create a New printer object and set it as DocumentUnregister            vdPrint printer = new vdPrint();//new change            printer.SetUnRegisterDocument(vdPro.ActiveDocument);//new change            //Get the System.Drawing.Printing.PrintDocument from previous created vdPrinter object.            //System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();//new change            System.Drawing.Printing.PrintDocument printDoc = printer.UpdatePrinterFromProperties();//new change            System.Drawing.Printing.PrintEventArgs printArgs = new System.Drawing.Printing.PrintEventArgs();            printDoc.DocumentName = "TestPrint.pdf";            printDoc.PrinterSettings.PrinterName = "CutePDF Writer";//@\myServerHP Deskjet 9800 Series; //  "Adobe PDF"; // Enter Custom PrinterName here..            //Update the printer properties            printer.UpdatePropertiesFromPrinter(printDoc);//new change            //Start multipage printing            printDoc.PrintController.OnStartPrint(printDoc, printArgs);             // Actually print each page to the printer            foreach (vdLayout layout in vdPro.ActiveDocument.LayOuts)            {                printer.SetLayout(layout);//new change                printer.CenterDrawingToPaper();//new change                printer.PrintOutPage();//new change                //layout.Printer.UpdatePropertiesFromPrinter(printDoc);                //layout.Printer.CenterDrawingToPaper();                //layout.Printer.PrintOutPage();            }            // now print them Phsyically                                        printDoc.PrintController.OnEndPrint(printDoc, printArgs);        }

请尝试上面的代码,并检查此代码中的备注。

四. 在将vdtext的高度和宽度添加到文档之前获取它的高度和宽度

问:如何在将vdtext的高度和宽度添加到文档之前获取它,就像版本的5 GetTextSize函数一样/p>

答:可以试试以下代码:

Private Function GetTextSize(ByVal TextString As String, ByVal tstyle As VectorDraw.Professional.vdPrimaries.vdTextstyle, ByVal Height As Double, ByRef duHeight As Double, ByRef duWidth As Double) As BooleanduWidth = 0 : duHeight = 0'Add a check like : If tstyle is nothing/null or textstring is empty exit subIf tstyle Is Nothing Then Return FalseIf TextString Is Nothing Or TextString = "" Then Return FalseDim text As VectorDraw.Professional.vdFigures.vdText = New VectorDraw.Professional.vdFigures.vdText()text.SetUnRegisterDocument(VectorDrawBaseControl1.ActiveDocument)text.setDocumentDefaults()text.Style = tstyletext.TextString = TextStringtext.Height = Heighttext.Update()duWidth = text.BoundingBox.WidthduHeight = text.BoundingBox.HeightReturn TrueEnd Function

未完待续……

标签:CAD工业4.0

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年10月6日
下一篇 2018年10月6日

相关推荐

发表回复

登录后才能评论