通过创建对象的实例,然后将其追加到 .在将其添加到对象之前,需要根据形成闭环的对象计算区域。该函数在对象的输入数组形成的每个闭环中创建一个区域。该方法返回并需要一个对象。BlockTableRecordRegionBlockTableRecordBlockTableRecordCreateFromCurvesCreateFromCurvesDBObjectCollection AutoCAD 将闭合的 2D 和平面 3D 多段线转换为单独的区域,然后转换形成闭合平面环的多段线、直线和曲线。如果两条以上的曲线共享一个端点,则生成的区域可能是任意的。因此,实际上可以使用该方法创建多个区域。您需要将创建的每个区域附加到对象中。CreateFromCurvesBlockTableRecord 创建简单区域以下示例从单个圆圈创建区域。 VB.NETImports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry <CommandMethod("AddRegion")> _ Public Sub AddRegion() '' Get the current document and database Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database '' Start a transaction 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 an in memory circle Using acCirc As Circle = New Circle() acCirc.Center = New Point3d(2, 2, 0) acCirc.Radius = 5 '' Adds the circle to an object array Dim acDBObjColl As DBObjectCollection = New DBObjectCollection() acDBObjColl.Add(acCirc) '' Calculate the regions based on each closed loop Dim myRegionColl As DBObjectCollection = New DBObjectCollection() myRegionColl = Region.CreateFromCurves(acDBObjColl) Dim acRegion As Region = myRegionColl(0) '' Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acRegion) acTrans.AddNewlyCreatedDBObject(acRegion, True) '' Dispose of the in memory object not appended to the database End Using '' Save the new object 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("AddRegion")] public static void AddRegion() { // Get the current document and database Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // Start a transaction using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Block table 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 an in memory circle using (Circle acCirc = new Circle()) { acCirc.Center = new Point3d(2, 2, 0); acCirc.Radius = 5; // Adds the circle to an object array DBObjectCollection acDBObjColl = new DBObjectCollection(); acDBObjColl.Add(acCirc); // Calculate the regions based on each closed loop DBObjectCollection myRegionColl = new DBObjectCollection(); myRegionColl = Region.CreateFromCurves(acDBObjColl); Region acRegion = myRegionColl[0] as Region; // Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acRegion); acTrans.AddNewlyCreatedDBObject(acRegion, true); // Dispose of the in memory circle not appended to the database } // Save the new object to the database acTrans.Commit(); } } VBA/ActiveX 代码参考Sub AddRegion() ' Define an array to hold the ' boundaries of the region. Dim curves(0 To 0) As AcadCircle ' Create a circle to become a ' boundary for the region. Dim center(0 To 2) As Double Dim radius As Double center(0) = 2 center(1) = 2 center(2) = 0 radius = 5# Set curves(0) = ThisDrawing.ModelSpace.AddCircle _ (center, radius) ' Create the region Dim regionObj As Variant regionObj = ThisDrawing.ModelSpace.AddRegion(curves) ZoomAll End Sub 相关概念父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:40
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.