API 脚本示例:几何空间点生成

在 Autodesk Dynamo for Civil 3D 中创建新节点以创建点,将点添加到点编组中,然后从点编组创建曲面。

样例 Dynamo 脚本:CoGoPoints.dyn

样例项目:CoGoPoints.dwg

  1. 使用 .NET Framework 4.7 创建称为 CoGoPoints Class Library(.Net Framework) 的新 C# 项目。
  2. 将文件 Point.cs、PointGroup.cs 和 Surface.cs 添加到项目中。
  3. 从 Civil 3D 安装程序路径添加 AeccDbMgd.dll 等这些文件的引用。
  4. 构建解决方案,然后生成 CoGoPoints.dll。
  5. 运行 Civil 3D 并打开 CoGoPoints.dwg。
  6. 单击“管理”选项卡 “可视化编程”面板 Dynamo 。
  7. 选择“文件”“导入库”并选择 CoGoPoints.dll。

    导入 CoGoPoints.dll 时创建的节点如下图所示。

  8. 打开并运行 CoGoPoints.dyn 脚本。

    几何空间点即在图形中创建并添加到点编组中,然后从点编组创建了曲面。

Dynamo 中提供了两个类来创建新节点并为新节点添加追踪机制。
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase:提供 Autodesk.AutoCAD.DatabaseServices.DBObject 的封装
  2. Autodesk.AutoCAD.DynamoNodes.Object:衍生自 Autodesk.AutoCAD.DynamoNodes.ObjectBase,根据 Autodesk.AutoCAD.DatabaseServices.Object 扩展属性或函数

Dynamo 提供了两种实现追踪机制的方法。一种方法是在创建新节点时使用现有的方法 (CommonConstruct)。另一种方法是用模板编写追踪代码。

若要实现新节点的追踪机制,必须从 Autodesk.AutoCAD.DynamoNodes.ObjectBase 或 Autodesk.AutoCAD.DynamoNodes.Object 派生类。追踪的节点必须具有所创建节点类的输出才能使追踪生效。

使用追踪方法 (CommonConstruct)

CommonConstruct 函数是在 Autodesk.AutoCAD.DynamoNodes.ObjectBase 和 Autodesk.AutoCAD.DynamoNodes.Object 中创建的。

Autodesk.AutoCAD.DynamoNodes.ObjectBase Autodesk.AutoCAD.DynamoNodes.Object

您可以创建类来继承 Autodesk.AutoCAD.DynamoNodes.ObjectBase 或 Autodesk.AutoCAD.DynamoNodes.Object。当您根据继承的关系创建新节点时,可以调用上述方法。例如,请注意以下节点 PointGroup.CreateFromPoints。

该节点可通过点列表创建 Civil 3D 中的点编组。

Autodesk.Civil.DatabaseServices.PointGroup 可定义衍生自 Autodesk.AutoCAD.DatabaseServices.Object 的 Civil 3D 中的点编组。若要封装 Civil 3D 点编组类型,必须创建衍生自 Autodesk.AutoCAD.DynamoNodes.Objectbase 的名为 PointGroup 的新类。可以将 DynamoServices.RegisterForTrace 属性添加到类 PointGroup 以实现追踪机制。这不是必需的,因为 Dynamo 默认支持此功能,但这是一种很好的编码约定。

现在可以在 PointGroup 中定义 CreateFromPoints 节点。由于固有的关系,可以调用 Autodesk.AutoCAD.DynamoNodes.ObjectBase 中的 CommonConstruct。

TNode 方法是节点类型,继承 Autodesk.AutoCAD.DynamoNodes.ObjectBase 时需要该方法。

在本例中:
TNode = CogoPoints.PointGroup
TObject 是继承 Autodesk.AutoCAD.DatabaseServices.DBObject 所需的 AutoCAD 对象类型。
在本例中:
TObject = Autodesk.Civil.DatabaseServices.PointGroup
objectCreator 函数可创建对象。在此示例中,它被定义为创建新的点编组。

objectUpdater 函数可更新对象。在此示例中,它被定义为更新现有的点编组。

CommonConstruct 函数会尝试从追踪句柄中查找现有对象。找到后,它会使用 isExisting==true,调用 objectUpdater 进行更新。如果更新失败,objectCreator 会调用以创建一个新对象,然后 objectUpdater 会调用 isExisting==false。

CommonConstruct 函数会尝试使用相同的追踪句柄值,更新数据库中的现有对象。如果失败,它将创建一个新对象。如果您的对象不支持更新,您可以返回 isExisting==false。这意味着您将创建一个新对象并删除旧对象。在这种情况下,CommonConstruct 仍会尝试保持相同的句柄值。

完整的样例代码显示在 PointGroup.cs 中,并且 Autodesk.AutoCAD.DynamoNodes.Object 中的 CommonConstruct 方法如上所述。

使用追踪代码模板

您可以使用以下模板编写追踪代码。但是,新节点的类仍需要继承 Autodesk.AutoCAD.DynamoNodes.Object 或 Autodesk.AutoCAD.DynamoNodes.Entity。

您可以填写创建和更新代码以在上述模板中实现追踪代码。

关于 DocumentContext

DocumentContext 可确保为读/写访问数据库获取文档锁定,以及在为打开数据库对象创建事务时获取文档锁定。任何想要读/写数据库对象的节点都需要使用上述方法。