在 Autodesk Dynamo for Civil 3D 中创建新节点以创建点,将点添加到点编组中,然后从点编组创建曲面。
样例 Dynamo 脚本:CoGoPoints.dyn
样例项目:CoGoPoints.dwg
导入 CoGoPoints.dll 时创建的节点如下图所示。
几何空间点即在图形中创建并添加到点编组中,然后从点编组创建了曲面。
![]() |
![]() |
Dynamo 提供了两种实现追踪机制的方法。一种方法是在创建新节点时使用现有的方法 (CommonConstruct)。另一种方法是用模板编写追踪代码。
若要实现新节点的追踪机制,必须从 Autodesk.AutoCAD.DynamoNodes.ObjectBase 或 Autodesk.AutoCAD.DynamoNodes.Object 派生类。追踪的节点必须具有所创建节点类的输出才能使追踪生效。
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.PointGroupTObject 是继承 Autodesk.AutoCAD.DatabaseServices.DBObject 所需的 AutoCAD 对象类型。
TObject = Autodesk.Civil.DatabaseServices.PointGroupobjectCreator 函数可创建对象。在此示例中,它被定义为创建新的点编组。
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 可确保为读/写访问数据库获取文档锁定,以及在为打开数据库对象创建事务时获取文档锁定。任何想要读/写数据库对象的节点都需要使用上述方法。