Bentley二次开发教程21-文件及模型管理-分组(NamedGroup)介绍

当我们需要对模型中的元素分组时,就需要使用NamedGroup功能,不同于单元,他们的元素并没有那么强的组合关系,同时,组与组之间可以实现嵌套,体现元素间的层级关系。
在这里插入图片描述

创建NamedGroup

NamedGroup的创建流程为声明NamedGroup后添加成员,然后将NamedGroup写入模型。

public static void CreateNamedGroup(string unparsed)
{
    DgnModelRef dgnmodelRef = Session.Instance.GetActiveDgnModelRef();//获得当前激活的dgn模型
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获得当前激活的dgn模型
    double uorMeter = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;//获得当前模型中的单位
    #region 
    DPoint3d[] ptArr = new DPoint3d[5];//声明面片元素端点集
    ptArr[0] = new DPoint3d(-15 * uorMeter, -5 * uorMeter, 0 * uorMeter);//声明端点坐标
    ptArr[1] = new DPoint3d(-15 * uorMeter, 5 * uorMeter, 0 * uorMeter);
    ptArr[2] = new DPoint3d(-5 * uorMeter, 5 * uorMeter, 0 * uorMeter);
    ptArr[3] = new DPoint3d(-5 * uorMeter, -5 * uorMeter, 0 * uorMeter);
    ptArr[4] = new DPoint3d(-15 * uorMeter, -5 * uorMeter, 0 * uorMeter);
    ShapeElement shapeEle = new ShapeElement(dgnModel, null, ptArr);//声明形元素
    shapeEle.AddToModel();//将形元素写入模型

    DPlacementZX dPlaceZX = DPlacementZX.Identity;//声明椭圆放置平面
    dPlaceZX.Origin = new DPoint3d(-10 * 10000, 0, 0);//设置平面原点
    DEllipse3d ellipse = new DEllipse3d(dPlaceZX, 5 * uorMeter, 5 * uorMeter, Angle.Zero, Angle.TWOPI);//声明几何椭圆
    EllipseElement elliElem = new EllipseElement(dgnModel, null, ellipse);//声明椭圆元素
    elliElem.AddToModel();//将椭圆元素写入模型
    #endregion

    string groupName = "TestGroupName";//设置NamedGroup名称
    string groupDescription = "TestGroupDescription";//设置NamedGroup描述
    NamedGroupFlags flags = new NamedGroupFlags();//声明NamedGroup设置
    NamedGroup group = new NamedGroup(groupName,groupDescription, flags, dgnmodelRef);//声明NamedGroup
    NamedGroupMemberFlags memberFlags1 = new NamedGroupMemberFlags();//声明NamedGroup成员设置
    memberFlags1.GroupPropagate = NamedGroupPropagationFlags.Always;//当此元素属于其他组时,是否遍历这些组
    group.AddMember(shapeEle.ElementId,dgnmodelRef, memberFlags1);//将NamedGroup成员添加到NamedGroup中
    NamedGroupMemberFlags memberFlags2 = new NamedGroupMemberFlags();//声明NamedGroup成员设置
    memberFlags2.GroupPropagate = NamedGroupPropagationFlags.Always;//当此元素属于其他组时,是否遍历这些组
    group.AddMember(elliElem.ElementId, dgnmodelRef, memberFlags2);//将NamedGroup成员添加到NamedGroup中
    NamedGroupStatus status= group.WriteToFile(true);//将NamedGroup写入文件

    MessageBox.Show("Name Group Create Status:\n"+status);//输出写入结果
}

本案例中,首先在文件中创建了一个形元素和一个椭圆元素,然后创建了一个NamedGroup,并将刚才创建的两个元素加入到NamedGroup中。当我们删除NamedGroup中的元素时NamedGroup中的信息也会同步更新。

在这里插入图片描述

图28 命令执行结果

在这里插入图片描述

图29 NamedGroups界面

创建带有层级关系的NamedGroup

当我们需要对模型中的元素进行从属关系分类管理时,可能会使用到具有层级关系表达功能的NamedGroup。在NamedGroup中进行添加时,我们不仅可以添加元素,同时也可以添加NamedGroup,以便对元素或元素集进行管理。

public static void CreateNamedGroupWithHierarchy(string unparsed)
 {
     DgnModelRef dgnmodelRef = Session.Instance.GetActiveDgnModelRef();//获得当前激活的dgn模型
     DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获得当前激活的dgn模型
     double uorMeter = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;//获得当前模型中的单位
     #region 
     DPoint3d[] ptArr = new DPoint3d[5];//声明面片元素端点集
     ptArr[0] = new DPoint3d(-15 * uorMeter, -5 * uorMeter, 0 * uorMeter);//声明端点坐标
     ptArr[1] = new DPoint3d(-15 * uorMeter, 5 * uorMeter, 0 * uorMeter);
     ptArr[2] = new DPoint3d(-5 * uorMeter, 5 * uorMeter, 0 * uorMeter);
     ptArr[3] = new DPoint3d(-5 * uorMeter, -5 * uorMeter, 0 * uorMeter);
     ptArr[4] = new DPoint3d(-15 * uorMeter, -5 * uorMeter, 0 * uorMeter);
     ShapeElement shapeEle = new ShapeElement(dgnModel, null, ptArr);//声明形元素
     shapeEle.AddToModel();//将面片元素写入模型

     DPlacementZX dPlaceZX = DPlacementZX.Identity;//声明椭圆放置平面
     dPlaceZX.Origin = new DPoint3d(-10 * 10000, 0, 0);//设置平面原点
     DEllipse3d ellipse = new DEllipse3d(dPlaceZX, 5 * uorMeter, 5 * uorMeter, Angle.Zero, Angle.TWOPI);//声明几何椭圆
     EllipseElement elliElem = new EllipseElement(dgnModel, null, ellipse);//声明椭圆元素
     elliElem.AddToModel();//将椭圆元素写入模型
     #endregion

     string groupName1 = "TestGroupName1";//设置NamedGroup名称
     string groupDescription1 = "TestGroupDescription1";//设置NamedGroup描述
     NamedGroupFlags flags1 = new NamedGroupFlags();//声明NamedGroup设置
     NamedGroup group1 = new NamedGroup(groupName1, groupDescription1, flags1, dgnmodelRef);//声明NamedGroup
     NamedGroupMemberFlags memberFlags1 = new NamedGroupMemberFlags();//当此元素属于其他组时,是否遍历这些组
     memberFlags1.GroupPropagate = NamedGroupPropagationFlags.Always;//当此元素属于其他组时,是否遍历这些组
     group1.AddMember(shapeEle.ElementId, dgnmodelRef, memberFlags1);//将NamedGroup成员添加到NamedGroup中
     group1.WriteToFile(true);//将NamedGroup写入文件

     string groupName2 = "TestGroupName2";//设置NamedGroup名称
     string groupDescription2 = "TestGroupDescription2";//设置NamedGroup描述
     NamedGroupFlags flags2 = new NamedGroupFlags();//声明NamedGroup设置
     NamedGroup group2 = new NamedGroup(groupName2, groupDescription2, flags2, dgnmodelRef);//声明NamedGroup
     NamedGroupMemberFlags memberFlags2 = new NamedGroupMemberFlags();//当此元素属于其他组时,是否遍历这些组
     memberFlags2.GroupPropagate = NamedGroupPropagationFlags.Always;//当此元素属于其他组时,是否遍历这些组
     group2.AddMember(elliElem.ElementId, dgnmodelRef, memberFlags2);//将NamedGroup成员添加到NamedGroup中(元素)
     group2.AddMember(group1.GetElement().ElementId, dgnmodelRef, memberFlags2);//将NamedGroup成员添加到NamedGroup中(NamedGroup)
     group2.WriteToFile(true);//将NamedGroup写入文件
 }

在本案例中,首先在模型空间中创建了一个形元素与一个椭圆元素,将形元素添加到名为"TestGroupName1"的NamedGroup中,与上面的方法不同,本案例中将椭圆元素和名为"TestGroupName1"的NamedGroup添加到名为"TestGroupName2"的NamedGroup中,从而实现了对具有层级关系的元素进行管理。
在这里插入图片描述

图30 命令执行结果

在这里插入图片描述

图31 NamedGroups界面

删除NamedGroup

当我们需要删除NamedGroup,需要使用DeleteFromFile( )。大致的流程为遍历模型中的NamedGroup集合,找到指定名称的NamedGroup,然后调用方法删除NamedGroup。

  public static void DeleteNamedGroup(string unparsed)
  {
      DgnModelRef dgnModelRef= Session.Instance.GetActiveDgnModelRef();//获得当前激活的dgn模型
      NamedGroupCollection groups = new NamedGroupCollection(dgnModelRef);//获得模型中的NamedGroup集
      NamedGroup group= groups.FindByName("TestGroupName");//根据名称获取对应的NamedGroup
      if (group!=null)//判断是否成功获得指定NamedGroup
      {
          NamedGroupStatus status= group.DeleteFromFile();//将指定NamedGroup删除
          MessageBox.Show("Name Group Delete Status:\n" + status);//输出结果
      }
  }

本案例中采用上方创建NamedGroup命令,生成了带有NamedGroup属性的元素,使用删除NamedGroup命令后,名为"TestGroupName"的NamedGroup被删除,元素上的NamedGroup属性被移除。
在这里插入图片描述

图32 命令执行前

在这里插入图片描述

图33 命令执行结果

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值