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