2019年5月23日QQ群友聊天,

谈到如何查询曲面某范围内的平均高程,

对于整个曲面的平均高程,

在曲面特性内可以直接查看,

对于给定范围内的平均高程怎没有现成的命令可以实现,

虽然可以创建剪裁曲面,

创建新曲面后进行查看,

但对于多个范围的话,

重复操作也就很烦人了。

所以就又一次体现出学习一点点二次开发知识的必要性了!

曲面有现成的API可以查询给定范围的界内体积,

体积除以底面积,

就应该是平均高程!

就这么简单,

大致估计一下代码的行数,

应该不超过100行。

刚好电脑在手边,

那就试着写一下吧,

说不准这个功能那天自己也能用上。

代码如下:

 1 using Autodesk.AutoCAD.DatabaseServices;
 2 using Autodesk.AutoCAD.EditorInput;
 3 using Autodesk.AutoCAD.ApplicationServices;
 4 using Autodesk.AutoCAD.Geometry;
 5 using Autodesk.Civil.DatabaseServices;
 6
 7 namespace 翻模工具
 8 {
 9     /// <summary>
10     /// 2019年5月23日
11     /// 计算选定范围内的平均曲面高程
12     /// </summary>
13     class MeanHeight
14     {
15         public void CalMeanHeigt()
16         {
17             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.CurrentDocument;
18             Database db = doc.Database;
19             TypedValue[] tv = new TypedValue[]
20                {
21                 new TypedValue((int)DxfCode.Start,"LWPOLYLINE")
22                };
23             SelectionFilter sf = new SelectionFilter(tv);
24             PromptSelectionResult psr = doc.Editor.GetSelection(sf);
25             if (psr.Status != PromptStatus.OK) return;
26             SelectionSet ss = psr.Value;
27             PromptEntityOptions peo = new PromptEntityOptions("拾取曲面");
28             peo.SetRejectMessage("\n请选择三角网曲面");
29             peo.AddAllowedClass(typeof(TinSurface), true);
30             PromptEntityResult per = doc.Editor.GetEntity(peo);
31             if (per.Status != PromptStatus.OK) return;
32             using (Transaction tr = doc.TransactionManager.StartTransaction())
33             {
34                 BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
35                 BlockTableRecord btr = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForWrite) as BlockTableRecord;
36                 TinSurface sur = per.ObjectId.GetObject(OpenMode.ForRead) as TinSurface;
37                 foreach (ObjectId id in ss.GetObjectIds())
38                 {
39                     Polyline pl = id.GetObject(OpenMode.ForRead) as Polyline;
40                     Point3dCollection pts = new Point3dCollection();
41                     for (int i = 0; i < pl.NumberOfVertices; i++)
42                     {
43                         pts.Add(pl.GetPoint3dAt(i));
44                     }
45                     if (pts[0].DistanceTo(pts[pts.Count - 1]) != 0)
46                     {
47                         pts.Add(pts[0]);
48                     }
49                     double h = sur.GetBoundedVolumes(pts).Net / pl.Area;
50                     Point3d pt1 = pl.GeometricExtents.MaxPoint;
51                     Point3d pt2 = pl.GeometricExtents.MinPoint;
52                     Point3d pt = pt2 + (pt1 - pt2)/2;
53                     DBText t = new DBText();
54                     t.TextString = h.ToString("0.000");
55                     t.Position = pt;
56                     t.HorizontalMode = TextHorizontalMode.TextCenter;
57                     t.VerticalMode = TextVerticalMode.TextVerticalMid;
58                     t.AlignmentPoint = pt;
59                     t.Height = 2.5;
60                     t.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByColor, 1);
61                     btr.AppendEntity(t);
62                     tr.AddNewlyCreatedDBObject(t, true);
63                 }
64                 tr.Commit();
65             }
66         }
67     }
68 }

当然代码还不完善,

如果要有通用性,

还要进一步完善。

测试结果如下:

转载于:https://www.cnblogs.com/myzw/p/10915870.html

查询给定区域内曲面平均高程相关推荐

  1. 计算机区域计算平均值的公式,利用AVERAGE函数,快速计算给定区域内数值的算术平均值...

    今日继续讲统计函数第四讲专题,从TRIMMEAN函数剔除异常数据后计算平均值开始,到这讲是统计函数的第四讲了,有一些是我们经常用到的函数,有些是我们虽然经常用到,但还没有深入理解,仍需要我们再认识并加 ...

  2. Java判断经纬度点是否在给定区域内

    1.经纬度类 package com.example.demo.util;import lombok.AllArgsConstructor; import lombok.Builder; import ...

  3. C语言search函数的作用,C语言lsearch()函数:用于在给定的区域内从头到尾进行线性搜索...

    函数名:lsearch 头文件: 函数原型: void* lsearch(void* key,void* district,size_t *n,size_t m, int (*func)(const ...

  4. 通过卫星图像预测区域内降雨范围和降雨量

    来源:DeepHub IMBA本文约3000字,建议阅读5分钟 本文介绍了如何通过模型预测区域内降雨范围和降雨量. 介绍 在农业.自动驾驶.航空或能源领域,预测和了解天气是十分重要的.例如,天气条件对 ...

  5. java 坐标系运算 判断一个地理坐标是否在电子围栏 圆、矩形、多边形区域内

    测试没问题,我用的是原始坐标:要注意的是坐标转换问题,要看当前是属于什么坐标系 经纬度与GCS(Geographic Coordinate System, 地理坐标系统) 平面坐标与PCS(Proje ...

  6. 过滤所有用户的行车轨迹查找在某一区域内的用户

    2019独角兽企业重金招聘Python工程师标准>>> // 判断经纬度是否在此区域内public void selectDevice2() throws IOException{S ...

  7. matlab 计算指北角,用MATLAB如何计算出矩形区域内的最大值?

    在MATLAB图像处理工具箱(Image Processing Toolbox)的GUI函数中,有一些用来在图像或坐标轴上选择矩形或椭圆区域的函数,使用示例如下: 第一行代码:显示matlab内置的一 ...

  8. 地图处理方法-判断一个点是否在某个区域内

    判断一个点是否在某个区域内(多边形) 背景: 比如滴滴会根据乘客所在的不同区域,给出不同的价格.市区堵一点,那么价格也高点.获取服务范围只规定在某个范围内 原理: 求解从该点向右发出的水平线射线与多边 ...

  9. java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理

    java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...

  10. 个人永久性免费-Excel催化剂功能第96波-地图数据挖宝之全国天气查询(区域最细可到区县,最长预报4天)...

    天气预报的信息,是很普通的大家习以为常的信息,但如果不进行采集,在日常数据分析过程中,就少了非常重要的一个分析维度,如果人手采集整理,工作量巨大.此篇给广大数据分析工作者再次减负,只需简单一键,即可批 ...

最新文章

  1. 析构函数和虚函数、纯虚函数
  2. python基础补充
  3. coreutils-5.0中几个命令的执行过程
  4. php怎么四舍五入,php 四舍五入的三种实现方法
  5. 利用SCVMM 2012 R2来管理Azure虚拟机
  6. Hello, World!的大小
  7. entity framework学习笔记
  8. 【IT笔试面试题整理】反转链表
  9. 如何让Element UI的Message消息提示每次只弹出一个
  10. html中article、section、aside的区别与联系
  11. flash 火狐总是崩溃_win10系统火狐flash插件总是崩溃的解决方法
  12. 应该怎样学习新知识?
  13. iOS中处理时间的类
  14. Unity UGUI优化:解决EventSystem耗时过长的问题 第一部分
  15. 分享几种设为首页的代码
  16. grep指令与ps指令的详细使用说明
  17. 河海大学计算机信息学院2013年考研录取名单,河海大学地学院2013年考研录取名单...
  18. python实现——处理Excel表格(超详细)
  19. opencv入门Vec3f
  20. keep 虚拟路线修改器_Keep 动感单车体验:每天半小时,离瘦更近一步

热门文章

  1. ForeSpider数据采集软件之链接抽取
  2. 中央处理器cpu中的什么是计算机的指挥中,计算机中央处理器CPU的组成有哪些
  3. 证明左右特征向量正交
  4. 计算机体系结构-第五章-指令级并行
  5. [精华] RDMA技术原理分析、主流实现对比和解析
  6. odoo14 Botton按钮标签属性详解及按钮图标使用
  7. mysql中ddl和ddm_DDL与DML问题
  8. 8.用C/C++实现一个科学计算器———(超级详细完整,包含C/C++版本和Qt版本)
  9. MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
  10. The server cannot or will not process the request due to something that is perceived to be a client