查询给定区域内曲面平均高程
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
查询给定区域内曲面平均高程相关推荐
- 计算机区域计算平均值的公式,利用AVERAGE函数,快速计算给定区域内数值的算术平均值...
今日继续讲统计函数第四讲专题,从TRIMMEAN函数剔除异常数据后计算平均值开始,到这讲是统计函数的第四讲了,有一些是我们经常用到的函数,有些是我们虽然经常用到,但还没有深入理解,仍需要我们再认识并加 ...
- Java判断经纬度点是否在给定区域内
1.经纬度类 package com.example.demo.util;import lombok.AllArgsConstructor; import lombok.Builder; import ...
- C语言search函数的作用,C语言lsearch()函数:用于在给定的区域内从头到尾进行线性搜索...
函数名:lsearch 头文件: 函数原型: void* lsearch(void* key,void* district,size_t *n,size_t m, int (*func)(const ...
- 通过卫星图像预测区域内降雨范围和降雨量
来源:DeepHub IMBA本文约3000字,建议阅读5分钟 本文介绍了如何通过模型预测区域内降雨范围和降雨量. 介绍 在农业.自动驾驶.航空或能源领域,预测和了解天气是十分重要的.例如,天气条件对 ...
- java 坐标系运算 判断一个地理坐标是否在电子围栏 圆、矩形、多边形区域内
测试没问题,我用的是原始坐标:要注意的是坐标转换问题,要看当前是属于什么坐标系 经纬度与GCS(Geographic Coordinate System, 地理坐标系统) 平面坐标与PCS(Proje ...
- 过滤所有用户的行车轨迹查找在某一区域内的用户
2019独角兽企业重金招聘Python工程师标准>>> // 判断经纬度是否在此区域内public void selectDevice2() throws IOException{S ...
- matlab 计算指北角,用MATLAB如何计算出矩形区域内的最大值?
在MATLAB图像处理工具箱(Image Processing Toolbox)的GUI函数中,有一些用来在图像或坐标轴上选择矩形或椭圆区域的函数,使用示例如下: 第一行代码:显示matlab内置的一 ...
- 地图处理方法-判断一个点是否在某个区域内
判断一个点是否在某个区域内(多边形) 背景: 比如滴滴会根据乘客所在的不同区域,给出不同的价格.市区堵一点,那么价格也高点.获取服务范围只规定在某个范围内 原理: 求解从该点向右发出的水平线射线与多边 ...
- java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理
java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...
- 个人永久性免费-Excel催化剂功能第96波-地图数据挖宝之全国天气查询(区域最细可到区县,最长预报4天)...
天气预报的信息,是很普通的大家习以为常的信息,但如果不进行采集,在日常数据分析过程中,就少了非常重要的一个分析维度,如果人手采集整理,工作量巨大.此篇给广大数据分析工作者再次减负,只需简单一键,即可批 ...
最新文章
- 析构函数和虚函数、纯虚函数
- python基础补充
- coreutils-5.0中几个命令的执行过程
- php怎么四舍五入,php 四舍五入的三种实现方法
- 利用SCVMM 2012 R2来管理Azure虚拟机
- Hello, World!的大小
- entity framework学习笔记
- 【IT笔试面试题整理】反转链表
- 如何让Element UI的Message消息提示每次只弹出一个
- html中article、section、aside的区别与联系
- flash 火狐总是崩溃_win10系统火狐flash插件总是崩溃的解决方法
- 应该怎样学习新知识?
- iOS中处理时间的类
- Unity UGUI优化:解决EventSystem耗时过长的问题 第一部分
- 分享几种设为首页的代码
- grep指令与ps指令的详细使用说明
- 河海大学计算机信息学院2013年考研录取名单,河海大学地学院2013年考研录取名单...
- python实现——处理Excel表格(超详细)
- opencv入门Vec3f
- keep 虚拟路线修改器_Keep 动感单车体验:每天半小时,离瘦更近一步
热门文章
- ForeSpider数据采集软件之链接抽取
- 中央处理器cpu中的什么是计算机的指挥中,计算机中央处理器CPU的组成有哪些
- 证明左右特征向量正交
- 计算机体系结构-第五章-指令级并行
- [精华] RDMA技术原理分析、主流实现对比和解析
- odoo14 Botton按钮标签属性详解及按钮图标使用
- mysql中ddl和ddm_DDL与DML问题
- 8.用C/C++实现一个科学计算器———(超级详细完整,包含C/C++版本和Qt版本)
- MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
- The server cannot or will not process the request due to something that is perceived to be a client