新手入门必看: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)最新版下载

一. 在包装器组件中使用新对象和功能

问:如何在包装器组件中使用新对象和功能/p>

答:包装器组件是一个COM ActiveX,可以在vd6和c ++ 6等环境中使用。我们已经实现了.tlb文件,这些文件可以添加到项目的引用中,并且可以为您的应用程序提供新组件的功能。

导出的tlb文件:VectorDraw.Serialize.tlbVectorDraw.Render.tlbVectorDraw.Professional.tlbVectorDraw.Geometry.tlbVectorDraw.Actions.tlbVdrawPro5.tlbvdrawi5.tlbvdPropertyGrid.tlbVdProControl.tlb

下面的代码示例实现了包装器组件,其中使用按钮我们添加了一个vdMtext对象,这是一个全新的对象,它在我们的新库中实现,并且在版本5中不存在。

对于这个实现,我们导入了VectorDraw.Geometry .tlb,VectorDraw.Professional.tlb以及vdrawi5.tlb

VB6代码示例:

Private Sub Command1_Click()'Get the document interface of VectorDraw FrameWork   Dim doc As VectorDraw_Professional.vdDocument   Set doc = VDraw1.ActiveDocument.WrapperObject'Create a new Mtext object with VDF Interfaces   Dim mtext As VectorDraw_Professional.vdMText   Set mtext = New VectorDraw_Professional.vdMText   'typecast the Mtext as vdbaseObject   Dim baseobj As VectorDraw_Professional.vdBaseObject   Set baseobj = mtext   baseobj.SetUnRegisterDocument doc   'typecast the Mtext as vdPrimary   Dim primary As VectorDraw_Professional.vdPrimary   Set primary = mtext   primary.setDocumentDefaults   'Create a gPoint object   Dim pt As VectorDraw_Geometry.gPoint   Set pt = New VectorDraw_Geometry.gPoint   pt.SetValue 2, 3, 0   'set values in some properties of mtext   mtext.TextString = "VectorDraw Mtext using VDF Interfaces"   Set mtext.InsertionPoint = pt   mtext.BoxWidth = 12   mtext.Height = 1#   'typecast the Mtext as vdFigure   Dim fig As VectorDraw_Professional.vdFigure   Set fig = mtext   'add mtext in the collection entities table   doc.ActiveLayOut.entities.AddItem fig   primary.Update   fig.Invalidate   VDraw1.CommandAction.Zoom "e", 0, 0End Sub

C ++代码示例:

void Cvd6WrapperDlg::OnBnClickedMtext(){//Get the document interface of VectorDraw FrameWork   VectorDraw_Professional::IvdDocumentPtr doc =       m_vdraw.GetActiveDocument().GetWrapperObject();//Create a new Mtext object with VectorDraw FrameWork Interfaces   VectorDraw_Professional::IvdMTextPtr    mtext(__uuidof(VectorDraw_Professional::vdMText));//typecast the Mtext as vdbaseObject   VectorDraw_Professional::IvdBaseObjectPtr baseobj =    (VectorDraw_Professional::IvdBaseObjectPtr)mtext;   baseobj->SetUnRegisterDocument(doc);//typecast the Mtext as vdPrimary   VectorDraw_Professional::IvdPrimaryPtr primary = (VectorDraw_Professional::IvdPrimaryPtr)mtext;   primary->setDocumentDefaults();//Create a gPoint object;   VectorDraw_Geometry::IgPointPtr pt(__uuidof(VectorDraw_Geometry::gPoint));pt->SetValue(2,3,0);//set values in some properties of mtext   mtext->PutRefInsertionPoint(pt);   mtext->PutTextString("Vectordraw Mtext using VectorDrawFramework Interfaces");   mtext->PutBoxWidth(12);   mtext->PutHeight(1.0);//typecast the Mtext as vdFigure   VectorDraw_Professional::IvdFigurePtr figure = (VectorDraw_Professional::IvdFigurePtr)mtext;//add mtext in the collection entities table   doc->ActiveLayOut->Entities->AddItem(figure);   primary->Update();   figure->Invalidate();  m_vdraw.GetCommandAction().Zoom(COleVariant(_T("e")),COleVariant(),COleVariant());}

Delphi 7代码示例:

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, SHDocVw, AxCtrls, OleCtrls,VDrawLib5_TLB, VDrawI5_TLB, VectorDraw_Professional_TLB, VectorDraw_Geometry_TLB;procedure TForm1.Button1Click(Sender: TObject);var   mtext : VectorDraw_Professional_TLB.IvdMText;   pt : VectorDraw_Geometry_TLB.Igpoint;   doc : VectorDraw_Professional_TLB.IvdDocument;   primary : VectorDraw_Professional_TLB.IvdPrimary;   baseobject : VectorDraw_Professional_TLB.IvdBaseObject;begin   doc := vdrawpro.ActiveDocument.WrapperObject as VectorDraw_Professional_TLB.IvdDocument;   pt := VectorDraw_Geometry_TLB.CogPoint.Create();   pt.SetValue(2,3,0);   mtext := VectorDraw_Professional_TLB.CovdMText.Create();   baseobject := mtext as VectorDraw_Professional_TLB.IvdBaseObject;   baseobject.SetUnRegisterDocument(doc);   primary:=mtext as VectorDraw_Professional_TLB.IvdPrimary;   primary.setDocumentDefaults();   mtext.TextString := 'VectorDraw Mtext using VDF Interfaces';   mtext.InsertionPoint := pt;   mtext.BoxWidth := 12;   mtext.Height := 1;   doc.ActiveLayOut.entities.AddItem(mtext as VectorDraw_Professional_TLB.IvdFigure);   vdrawpro.CommandAction.Zoom('E',0,0);end;procedure TForm1.Button2Click(Sender: TObject);var vdGPts : VectorDraw_Geometry_TLB.Igpoints;  doc : VectorDraw_Professional_TLB.IvdDocument;  primary : VectorDraw_Professional_TLB.IvdPrimary;  baseobject : VectorDraw_Professional_TLB.IvdBaseObject;  vdGPt : VectorDraw_Geometry_TLB.Igpoint;  GS : VectorDraw_Professional_TLB.IvdGroundSurface;  I : integer;begin  vdraw1.DisplayFrames:=63;  vdraw1.StatusBar:=true;  vdraw1.StatusBarMenu:=true;  vdraw1.EnableAutoGripOn:=true;  doc := vdraw1.ActiveDocument.WrapperObject as VectorDraw_Professional_TLB.IvdDocument;  vdGPts := VectorDraw_Geometry_TLB.CogPoints.Create();  for I:=1 to 8 do // create a ground sourface from 8 points  begin    vdGPt := VectorDraw_Geometry_TLB.CogPoint.Create();    vdGPts.Add(vdGpt);  end;  vdGPTs.Item[0].SetValue(2,3,0);  vdGPTs.Item[1].SetValue(2,5,1);  vdGPTs.Item[2].SetValue(4,5,1.5);  vdGPTs.Item[3].SetValue(4,3,1);  vdGPTs.Item[4].SetValue(7,3,2);  vdGPTs.Item[5].SetValue(7,5,0.5);  vdGPTs.Item[6].SetValue(9,3,0.3);  vdGPTs.Item[7].SetValue(9,5,0.5);  GS := VectorDraw_Professional_TLB.CovdGroundSurface.Create();  baseobject := GS as VectorDraw_Professional_TLB.IvdBaseObject;  baseobject.SetUnRegisterDocument(doc);  primary:=GS as VectorDraw_Professional_TLB.IvdPrimary;  primary.setDocumentDefaults();  GS.Points := vdGPts;  GS.MeshSize := 0.1;  GS.DispMode := DisplayMode_Mesh;//DisplayMode_Triangle;  doc.ActiveLayOut.entities.AddItem(GS as VectorDraw_Professional_TLB.IvdFigure);  vdraw1.CommandAction.View3D('VISE');  vdraw1.CommandAction.Zoom('E',0,0);end;

二. 计算用户在3D中单击多边形的点

问:如何计算用户在3D中单击多边形的点/p>

答:在下面的代码示例中,我们要求用户单击一个点。我们检查用户是否单击了一个多边形。从这一点开始,我们计算出一条从用户的”eye”和内部开始的线。我们计算此线与找到的多面的所有面的交点。然后我们排除所有不属于脸部的点,我们选择更接近用户“eye”的点。

Important Functions Used : Intersection3DSegmentPlane,PointInTriangle, CalculateExtrution  can be found in VectorDraw.Geometry.Globals.private void button4_Click(object sender, EventArgs e){vdDocument doc = vdFramedControl1.BaseControl.ActiveDocument;gPoint userpt = null;//Get a point from the userVectorDraw.Actions.StatusCode s= doc.ActionUtility.getUserPointDCS(out userpt);if (s == VectorDraw.Actions.StatusCode.Success){//Find the polyface the user clicked.gPoint tmppt = doc.View2PixelMatrix.Transform(userpt);Point screenpt = new Point((int)tmppt.x, (int)tmppt.y);//This function it is recommended not to go to the Mouse Down event(it might slow down your application)//It is recommended to create a button function to do this like this one.vdEntities ents = doc.Select3d(screenpt, doc.GlobalRenderProperties.PickSize);if (ents.Count != 0){vdPolyface polyface = ents[0] as vdPolyface;if (polyface != null){//Calculate the biggest z value of the polyface.double val = 0.0;foreach (gPoint var in polyface.VertexList){if (val < var.z) val = var.z;}//Calculate the line that starts from the point that the user clicked and goes "inside the screen" to intersect the face.gPoint world = doc.View2WorldMatrix.Transform(userpt);gPoint linept1 = world - (val * 10.0) * doc.ActiveLayOut.ViewDir;gPoint linept2 = world + (val*10.0)*doc.ActiveLayOut.ViewDir;gPoints FoundPoints = new gPoints();int count = 1;foreach (int var in polyface.FaceList){count++;if (count % 5 == 0){//4 points of the face.gPoint pt1 = polyface.VertexList[polyface.FaceList[count - 5] - 1];gPoint pt2 = polyface.VertexList[polyface.FaceList[count - 4] - 1];gPoint pt3 = polyface.VertexList[polyface.FaceList[count - 3] - 1];gPoint pt4 = polyface.VertexList[polyface.FaceList[count - 2] - 1];//Calculate the perpedicular vector of the plane of the face.Vector v = new Vector();v.CalculateExtrution(pt1, pt2,pt3);//Calculate the intersection point of the plane with the above calculated linegPoint ret1 = new gPoint();int j = VectorDraw.Geometry.Globals.Intersection3DSegmentPlane(linept1, linept2, v, pt1, out ret1);if (j != 0){bool triangle1 = VectorDraw.Geometry.Globals.PointInTriangle(doc.World2ViewMatrix.Transform (ret1),doc.World2ViewMatrix.Transform ( pt1), doc.World2ViewMatrix.Transform (pt2), doc.World2ViewMatrix.Transform (pt3));bool triangle2 = VectorDraw.Geometry.Globals.PointInTriangle(doc.World2ViewMatrix.Transform (ret1),doc.World2ViewMatrix.Transform ( pt1),doc.World2ViewMatrix.Transform ( pt3), doc.World2ViewMatrix.Transform (pt4));if (triangle1 || triangle2) //If the point belongs to any of the triangles then belongs to the face.{//Add the found point to this list.FoundPoints.Add(ret1);}}}}//Debug Add a vdPoint for each point found.foreach (gPoint var in FoundPoints){vdPoint vdpt = new vdPoint();vdpt.SetUnRegisterDocument(doc);vdpt.setDocumentDefaults();vdpt.PenColor.ColorIndex = 2;vdpt.InsertionPoint = var;doc.ActiveLayOut.Entities.AddItem(vdpt);vdpt.Invalidate();}//This is for debug purposes we will add the calculated line and the Found Point.vdLine line = new vdLine(linept1, linept2);line.SetUnRegisterDocument(doc);line.setDocumentDefaults();line.PenColor.ColorIndex = 0;doc.ActiveLayOut.Entities.AddItem(line);line.Invalidate();//Now we will choose the point that has the less distance from linept2int index = 0;int indexFound = 0;double dist = linept1.Distance3D(linept2); //We start from the biggest distanceforeach (gPoint var in FoundPoints){double dist1 = var.Distance3D(linept2);if (dist1 < dist){indexFound = index;dist = dist1;}index++;}//Add the Found point with different color.vdPoint vdpt1 = new vdPoint();vdpt1.SetUnRegisterDocument(doc);vdpt1.setDocumentDefaults();vdpt1.PenColor.ColorIndex = 3;vdpt1.InsertionPoint = FoundPoints[indexFound];doc.ActiveLayOut.Entities.AddItem(vdpt1);vdpt1.Invalidate();}}}}

未完待续……

标签:CAD工业4.0

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

上一篇 2018年9月15日
下一篇 2018年9月16日

相关推荐

发表回复

登录后才能评论