分解对象会将单个对象转换为其组成部分。您可以使用函数来分解对象,它需要一个用于返回结果对象的对象。例如,分解折线可能会导致创建包含多条线和弧的对象集合。ExplodeDBObjectCollection 如果块被分解,则返回的对象集合包含定义块的图形对象。分解对象后,原始对象保持不变。如果希望返回的对象替换原始对象,则必须擦除原始对象,然后将返回的对象添加到块表记录中。 分解折线本示例创建一个轻型折线对象,然后将该折线分解为最简单的对象。折线分解后,将释放折线,并将返回的对象添加到模型空间中。 VB.NETImports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry <CommandMethod("ExplodeObject")> _ Public Sub ExplodeObject() '' 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 a lightweight polyline Using acPoly As Polyline = New Polyline() acPoly.AddVertexAt(0, New Point2d(1, 1), 0, 0, 0) acPoly.AddVertexAt(1, New Point2d(1, 2), 0, 0, 0) acPoly.AddVertexAt(2, New Point2d(2, 2), 0, 0, 0) acPoly.AddVertexAt(3, New Point2d(3, 2), 0, 0, 0) acPoly.AddVertexAt(4, New Point2d(4, 4), 0, 0, 0) acPoly.AddVertexAt(5, New Point2d(4, 1), 0, 0, 0) '' Sets the bulge at index 3 acPoly.SetBulgeAt(3, -0.5) '' Explodes the polyline Dim acDBObjColl As DBObjectCollection = New DBObjectCollection() acPoly.Explode(acDBObjColl) For Each acEnt As Entity In acDBObjColl '' Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acEnt) acTrans.AddNewlyCreatedDBObject(acEnt, True) Next '' Dispose of the in memory polyline End Using '' 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("ExplodeObject")] public static void ExplodeObject() { // 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 a lightweight polyline using (Polyline acPoly = new Polyline()) { acPoly.AddVertexAt(0, new Point2d(1, 1), 0, 0, 0); acPoly.AddVertexAt(1, new Point2d(1, 2), 0, 0, 0); acPoly.AddVertexAt(2, new Point2d(2, 2), 0, 0, 0); acPoly.AddVertexAt(3, new Point2d(3, 2), 0, 0, 0); acPoly.AddVertexAt(4, new Point2d(4, 4), 0, 0, 0); acPoly.AddVertexAt(5, new Point2d(4, 1), 0, 0, 0); // Sets the bulge at index 3 acPoly.SetBulgeAt(3, -0.5); // Explodes the polyline DBObjectCollection acDBObjColl = new DBObjectCollection(); acPoly.Explode(acDBObjColl); foreach (Entity acEnt in acDBObjColl) { // Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acEnt); acTrans.AddNewlyCreatedDBObject(acEnt, true); } // Dispose of the in memory polyline } // Save the new objects to the database acTrans.Commit(); } } VBA/ActiveX 代码参考Sub ExplodeObject() Dim plineObj As AcadLWPolyline Dim points(0 To 11) As Double ' Define the 2D polyline points points(0) = 1: points(1) = 1 points(2) = 1: points(3) = 2 points(4) = 2: points(5) = 2 points(6) = 3: points(7) = 2 points(8) = 4: points(9) = 4 points(10) = 4: points(11) = 1 ' Create a light weight Polyline object Set plineObj = ThisDrawing.ModelSpace. _ AddLightWeightPolyline(points) ' Set the bulge on one segment to vary the ' type of objects in the polyline plineObj.SetBulge 3, -0.5 ' Explode the polyline Dim explodedObjects As Variant explodedObjects = plineObj.Explode ' Erase the polyline plineObj.Erase End Sub |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )
GMT+8, 2024-5-19 13:54
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.