使用 .NET API 以正确的方式将元素添加到模型空间

安德鲁·特拉克尔

方法一

_AcDb.Line oLine = new _AcDb.Line(ptStart, ptEnd);
AddToModelSpace("PLOT", oLine);

在哪里AddToModelSpace

public static void AddToModelSpace(string strLayer, _AcDb.Entity oEntity)
{
    _AcAp.Document acDoc = _AcAp.Application.DocumentManager.MdiActiveDocument;
    _AcDb.Database acCurDb = acDoc.Database;
    _AcEd.Editor ed = acDoc.Editor;

    using (_AcDb.BlockTable bt = acCurDb.BlockTableId.GetObject(_AcDb.OpenMode.ForRead) as _AcDb.BlockTable)
    using (_AcDb.BlockTableRecord ms = bt[_AcDb.BlockTableRecord.ModelSpace].GetObject(_AcDb.OpenMode.ForWrite) as _AcDb.BlockTableRecord)
        ms.AppendEntity(oEntity);
    oEntity.Layer = strLayer;
    oEntity.Dispose();
}

方法二

// Get the current document and database
_AcAp.Document docActive = _AcAp.Application.DocumentManager.MdiActiveDocument;
_AcDb.Database docDB = docActive.Database;

// Start a transaction
using (_AcDb.Transaction acTrans = docDB.TransactionManager.StartTransaction())
{
    // Open the Block table for read
    _AcDb.BlockTable acBlkTbl;
    acBlkTbl = acTrans.GetObject(docDB.BlockTableId,
                                    _AcDb.OpenMode.ForRead) as _AcDb.BlockTable;

    // Open the Block table record Model space for write
    _AcDb.BlockTableRecord acBlkTblRec;
    acBlkTblRec = acTrans.GetObject(acBlkTbl[_AcDb.BlockTableRecord.ModelSpace],
                                    _AcDb.OpenMode.ForWrite) as _AcDb.BlockTableRecord;

    // Create line
    using (_AcDb.Line acLine = new _AcDb.Line(ptStart, ptEnd))
    {

        // Add the new object to the block table record and the transaction
        acBlkTblRec.AppendEntity(acLine);
        acTrans.AddNewlyCreatedDBObject(acLine, true);
    }

    // Save the new object to the database
    acTrans.Commit();
}

AddToModelSpace在我的项目中使用过,所以我希望它很好!

计算机辅助设计

方法二是Autodesk在开发者文档中推荐的方式(您可以阅读本节)。

在方法一中,您使用该ObjectId.GetObject()方法打开BlockTable模型空间“BlockTableRecord”。此方法使用顶部事务来打开对象,这意味着您应该使用一个活动事务来添加新创建的实体。你可以用Database.TransactionManager.TopTransaction. 如果您根本不想使用事务,则必须使用“仅供高级使用”ObjectId.Open()方法。

方法三应该使用一些从事务中调用的扩展方法。这是我使用的那些的简化(非错误检查)摘录。

static class ExtensionMethods
{
    public static T GetObject<T>(
        this ObjectId id, 
        OpenMode mode = OpenMode.ForRead,
        bool openErased = false, 
        bool forceOpenOnLockedLayer = false)
        where T : DBObject
    {
        return (T)id.GetObject(mode, openErased, forceOpenOnLockedLayer);
    }

    public static BlockTableRecord GetModelSpace(this Database db, OpenMode mode = OpenMode.ForRead)
    {
        return SymbolUtilityServices.GetBlockModelSpaceId(db).GetObject<BlockTableRecord>(mode);
    }

    public static ObjectId Add (this BlockTableRecord owner, Entity entity)
    {
        var tr = owner.Database.TransactionManager.TopTransaction;
        var id = owner.AppendEntity(entity);
        tr.AddNewlyCreatedDBObject(entity, true);
        return id;
    }
}

使用示例:

using (var tr = db.TransactionManager.StartTransaction())
{
    var line = new Line(startPt, endPt) { Layer = layerName };
    db.GetModelSpace(OpenMode.ForWrite).Add(line);
    tr.Commit();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Jenkins将.net核心添加到Docker容器

在ASP.net API Core 2.1中将部分添加到JSON输出

使用哪个API将OTH段添加到PNR

使用IPP SDK API通过.NET将销售收据添加到Quickbooks Online

使用流API将arraylist添加到arraylist

使用cloudformation将参数添加到api

将Google API脱机访问添加到.NET Core应用

将Swagger添加到ASP.Net Core Web API

使用PaymentIntents API将产品添加到付款中

使用YouTube Player API将视频添加到页面

如何使用.NET通用主机将REST API添加到用.NET Framework 4.8编写的控制台应用程序中?

如何在Visual Studio 2019中使用Entity Framework Core将实体模型添加到.Net Core ClassLibrary?

将事件侦听器添加到使用Javascript从API捕获的动态生成的元素中

如何在asp.net mvc 5中使用jQuery ajax将模型添加到剃须刀页面?

无法将IdentityServer4添加到ASP.NET Framework 4.7.2 API OWIN

将实体数据模型(edmx文件)添加到.net Core API

使用api将关注者添加到asana任务

我如何使用xslt将变量名称空间添加到元素

在ASP.NET MVC中使用模型进行API集成

如何使用Saxon .NET API为Xsi命名空间添加definiton

使用SQL查询和.NET将元素添加到列表中

使用for循环以编程方式将元素添加到FrameLayout

使用Json.net将项目添加到JSON

添加到 .NET API 的 IsoDateTimeConverter 打破了默认模型绑定

在 ASP.NET 中使用正确的 ID 将 ListItem 动态添加到 RadiobuttonList

使用 Form API 将标签元素添加到 managed_file 字段

如何使用功能 api 将另一个输入层添加到多输入模型?

使用 React 将数据从 API 动态添加到表

使用 .Net Core web api 将控制台应用程序项目添加到解决方案