分解对象 (.NET)
分解对象会将单个对象转换为其组成部分。您可以使用该函数分解对象,并且它需要一个对象,其中用于返回生成的对象。例如,分解折线可能会导致创建包含多条直线和圆弧的对象集合。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 苏公网安备32011402011833)
GMT+8, 2024-12-15 11:33
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.