矩形网格(对象)使用平面刻面表示对象的表面。网格的密度或分面数根据M和N顶点的矩阵定义,类似于由列和行组成的网格。M和N分别指定任何给定顶点的列和行位置。您可以在 2D 和 3D 中创建网格,但它们主要用于 3D。PolygonMesh 创建对象的实例,然后为新网格指定顶点的密度和位置。此方法可选择采用六个值:要创建的多边形网格的类型、定义 M 和 N 方向顶点数的两个整数、包含网格中所有顶点坐标的点集合,以及定义网格是在M个还是N个方向上闭合的两个布尔值。PolygonMesh 创建多边形网格后,使用 and 属性关闭网格。IsMClosedNClosed 创建多边形网格此示例创建一个 4×4 多边形网格。然后调整活动视口的方向,以便更轻松地查看网格的三维性质。 VB.NETImports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry <CommandMethod("Create3DMesh")> _ Public Sub Create3DMesh() '' Get the current document and database, and start a transaction Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() '' Open the Block table for read Dim acBlkTbl As BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _ OpenMode.ForRead) '' Open the Block table record Model space for write Dim acBlkTblRec As BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _ OpenMode.ForWrite) '' Create a polygon mesh Using acPolyMesh As PolygonMesh = New PolygonMesh() acPolyMesh.MSize = 4 acPolyMesh.NSize = 4 '' Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acPolyMesh) acTrans.AddNewlyCreatedDBObject(acPolyMesh, True) '' Before adding vertexes, the polyline must be in the drawing Dim acPts3dPMesh As Point3dCollection = New Point3dCollection() acPts3dPMesh.Add(New Point3d(0, 0, 0)) acPts3dPMesh.Add(New Point3d(2, 0, 1)) acPts3dPMesh.Add(New Point3d(4, 0, 0)) acPts3dPMesh.Add(New Point3d(6, 0, 1)) acPts3dPMesh.Add(New Point3d(0, 2, 0)) acPts3dPMesh.Add(New Point3d(2, 2, 1)) acPts3dPMesh.Add(New Point3d(4, 2, 0)) acPts3dPMesh.Add(New Point3d(6, 2, 1)) acPts3dPMesh.Add(New Point3d(0, 4, 0)) acPts3dPMesh.Add(New Point3d(2, 4, 1)) acPts3dPMesh.Add(New Point3d(4, 4, 0)) acPts3dPMesh.Add(New Point3d(6, 4, 0)) acPts3dPMesh.Add(New Point3d(0, 6, 0)) acPts3dPMesh.Add(New Point3d(2, 6, 1)) acPts3dPMesh.Add(New Point3d(4, 6, 0)) acPts3dPMesh.Add(New Point3d(6, 6, 0)) For Each acPt3d As Point3d In acPts3dPMesh Dim acPMeshVer As PolygonMeshVertex = New PolygonMeshVertex(acPt3d) acPolyMesh.AppendVertex(acPMeshVer) acTrans.AddNewlyCreatedDBObject(acPMeshVer, True) Next End Using '' Open the active viewport Dim acVportTblRec As ViewportTableRecord acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId, _ OpenMode.ForWrite) '' Rotate the view direction of the current viewport acVportTblRec.ViewDirection = New Vector3d(-1, -1, 1) acDoc.Editor.UpdateTiledViewportsFromDatabase() '' Save the new objects to the database acTrans.Commit() End Using End Sub C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; [CommandMethod("Create3DMesh")] public static void Create3DMesh() { // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Block table record for read BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; // Open the Block table record Model space for write BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // Create a polygon mesh using (PolygonMesh acPolyMesh = new PolygonMesh()) { acPolyMesh.MSize = 4; acPolyMesh.NSize = 4; // Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acPolyMesh); acTrans.AddNewlyCreatedDBObject(acPolyMesh, true); // Before adding vertexes, the polyline must be in the drawing Point3dCollection acPts3dPMesh = new Point3dCollection(); acPts3dPMesh.Add(new Point3d(0, 0, 0)); acPts3dPMesh.Add(new Point3d(2, 0, 1)); acPts3dPMesh.Add(new Point3d(4, 0, 0)); acPts3dPMesh.Add(new Point3d(6, 0, 1)); acPts3dPMesh.Add(new Point3d(0, 2, 0)); acPts3dPMesh.Add(new Point3d(2, 2, 1)); acPts3dPMesh.Add(new Point3d(4, 2, 0)); acPts3dPMesh.Add(new Point3d(6, 2, 1)); acPts3dPMesh.Add(new Point3d(0, 4, 0)); acPts3dPMesh.Add(new Point3d(2, 4, 1)); acPts3dPMesh.Add(new Point3d(4, 4, 0)); acPts3dPMesh.Add(new Point3d(6, 4, 0)); acPts3dPMesh.Add(new Point3d(0, 6, 0)); acPts3dPMesh.Add(new Point3d(2, 6, 1)); acPts3dPMesh.Add(new Point3d(4, 6, 0)); acPts3dPMesh.Add(new Point3d(6, 6, 0)); foreach (Point3d acPt3d in acPts3dPMesh) { PolygonMeshVertex acPMeshVer = new PolygonMeshVertex(acPt3d); acPolyMesh.AppendVertex(acPMeshVer); acTrans.AddNewlyCreatedDBObject(acPMeshVer, true); } } // Open the active viewport ViewportTableRecord acVportTblRec; acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId, OpenMode.ForWrite) as ViewportTableRecord; // Rotate the view direction of the current viewport acVportTblRec.ViewDirection = new Vector3d(-1, -1, 1); acDoc.Editor.UpdateTiledViewportsFromDatabase(); // Save the new objects to the database acTrans.Commit(); } } VBA/ActiveX Code ReferenceSub Create3DMesh() Dim meshObj As AcadPolygonMesh Dim mSize, nSize, Count As Integer ' create the matrix of points Dim points(0 To 47) As Double points(0) = 0: points(1) = 0: points(2) = 0 points(3) = 2: points(4) = 0: points(5) = 1 points(6) = 4: points(7) = 0: points(8) = 0 points(9) = 6: points(10) = 0: points(11) = 1 points(12) = 0: points(13) = 2: points(14) = 0 points(15) = 2: points(16) = 2: points(17) = 1 points(18) = 4: points(19) = 2: points(20) = 0 points(21) = 6: points(22) = 2: points(23) = 1 points(24) = 0: points(25) = 4: points(26) = 0 points(27) = 2: points(28) = 4: points(29) = 1 points(30) = 4: points(31) = 4: points(32) = 0 points(33) = 6: points(34) = 4: points(35) = 0 points(36) = 0: points(37) = 6: points(38) = 0 points(39) = 2: points(40) = 6: points(41) = 1 points(42) = 4: points(43) = 6: points(44) = 0 points(45) = 6: points(46) = 6: points(47) = 0 mSize = 4: nSize = 4 ' creates a 3Dmesh in model space Set meshObj = ThisDrawing.ModelSpace. _ Add3DMesh(mSize, nSize, points) ' Change the viewing direction of the viewport ' to better see the cylinder Dim NewDirection(0 To 2) As Double NewDirection(0) = -1 NewDirection(1) = -1 NewDirection(2) = 1 ThisDrawing.ActiveViewport.direction = NewDirection ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport ZoomAll End Sub |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )
GMT+8, 2024-6-10 19:22
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.