c# cass10 获取宗地内所有算房产的房屋建筑面积

文章讲解了如何利用AutoCAD中的API获取宗地内房屋占地面积,涉及选择过滤、实体交互、面积计算和事务管理,以确保数据准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 获取宗地内所有房屋占地面积主要步骤:

  1. 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象,以便进行交互操作。

  2. 创建一个外部多段线的选择过滤器outerFilter,限制用户只能选择图层为"宗地"上的LWPOLYLINE对象作为外部边界。

  3. 提示用户根据设定的过滤器规则选择实体,并获取用户的选择结果。

  4. 如果用户成功选择了实体,则开启事务处理,确保数据一致性。

  5. 遍历所有被选中的外部多段线,对每个多段线执行以下操作: a. 确认多段线闭合且至少有一个顶点。 b. 将多段线的所有顶点坐标收集到outerPoints集合中。 c. 创建一个窗口选择过滤器innerFilter,用于让用户选择位于外部多段线内部的其他LWPOLYLINE实体。 d. 使用多边形窗口方式让用户进行内部实体的选择,并获取选择结果。

  6. 计算房屋面积(areaFW)、房屋附属面积(areaFWFS)及总面积(total_area),并初始化这三个变量为0。

  7. 针对用户在内部区域成功选择的每个闭合多段线,检查实体的XData信息以判断其类型,并据此计算相应的面积:

    • 若实体属于特定类型的建筑主体部分,则通过读取XData中的层数信息乘以多段线面积来计算面积,并累加至总房屋面积。
    • 若实体属于飘楼、阳台等附属设施类型,则进一步筛选出特定图层上的文本对象,依据文本内容计算面积,将面积累加至房屋附属面积。
  8. 最后,在循环结束后输出累计得到的总面积。

完整代码

        [CommandMethod("GetArea")]
        public void GetArea()
                {
            // 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            // 创建一个选择过滤器,限制用户只能选择"宗地"图层上的LWPOLYLINE对象作为外部边界
            SelectionFilter outerFilter = new SelectionFilter(new TypedValue[] {
    new TypedValue((int)DxfCode.Start, "LWPOLYLINE"),
    new TypedValue((int)DxfCode.LayerName, "宗地")
});
            // 提示用户根据上述规则进行实体选择,并获取选择结果
            PromptSelectionResult outerSelRes = ed.GetSelection(outerFilter);
            // 检查用户是否成功选择了实体
            if (outerSelRes.Status == PromptStatus.OK)
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())// 开始事务处理以确保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值