前言
上期我们介绍了CAD中插入文字和插入图块两个功能,这期我们继续介绍一个比较常用的功能——标注尺寸,标注尺寸是我们在绘图的时候经常用到这个功能。

插入标注

CAD中的标注形式有很多种,例如水平标注,垂直标注,半径标注,角度标注等等,我们可以通过建立一个DimensionTools类在专门建立这些标注,代码贴上:

    public static class DimensionTools{private static Database db = HostApplicationServices.WorkingDatabase;//水平標注,主要用於標注頸徑(不用將主尺寸下拉)//當標注需要放在標注線外面時,(A1,A2)是將標注放在A1的左边,而(A2,A1)可以將標注放在A2的右边public static void addHorizonRotatedDimension(Point3d pt1, Point3d pt2, string text, double length){using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction()){RotatedDimension dimRotated = new RotatedDimension();dimRotated.XLine1Point = pt1;dimRotated.XLine2Point = pt2;dimRotated.DimLinePoint = GeTools.MidPoint(pt1, pt2).PolarPoint(-Math.PI / 2, length);dimRotated.DimensionText = text;//<>代表標注的主尺寸,此處在標注線上插入文字dimRotated.DimensionStyle = db.Dimstyle;db.AddToModelSpace(dimRotated, "Dim");}}}

首先先介绍一个简单的,水平标注功能,参数主要有以下几个,所需要标注的直线的两个端点的坐标,text表示主尺寸的值,一般我们标注的只是一个示意图,然后值是自己输入的。通过调用db.AddToModelSpace(dimRotated, “Dim”)可将我们创建的标注添加的CAD的模型空间中,并设置图层为‘Dim’。

下面在介绍其他几种类型的标注:
1.垂直标注:

 public static void addVerticalRotatedDimension(Point3d pt1, Point3d pt2, string text, double distance){using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction()){RotatedDimension dimRotated = new RotatedDimension();dimRotated.Rotation = Math.PI / 2;dimRotated.XLine1Point = pt1;dimRotated.XLine2Point = pt2;dimRotated.DimLinePoint = GeTools.MidPoint(pt1, pt2).PolarPoint(0, distance);dimRotated.DimensionText = text;//<>代表標注的主尺寸,此處在標注線上插入文字dimRotated.DimensionStyle = db.Dimstyle;db.AddToModelSpace(dimRotated, "Dim");}}

2.对齐标注

 public static void addAlignedDimension(Point3d pt1, Point3d pt2, string text){using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction()){AlignedDimension dimAligned = new AlignedDimension();dimAligned.XLine1Point = pt1;dimAligned.XLine2Point = pt2;dimAligned.DimLinePoint = GeTools.MidPoint(pt1, pt2).PolarPoint(Math.PI / 2, 10);dimAligned.DimensionText = text;//<>代表標注的主尺寸,此處在標注線上插入文字dimAligned.DimensionStyle = db.Dimstyle;db.AddToModelSpace(dimAligned, "Dim");}}

3.半径标注

 public static void addRadialDimension(Point3d center, string text, double R){using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction()){RadialDimension dimRadial = new RadialDimension();dimRadial.Center = center;//圓心//用於附著引線的圓或圓弧上的點 //30是角度,15是圓弧的半徑dimRadial.ChordPoint = center.PolarPoint(GeTools.DegreeToRadian(-145), R);dimRadial.DimensionText = text;//<>代表標注的主尺寸,此處在標注線上插入文字dimRadial.LeaderLength = 5;//引線長度dimRadial.DimensionStyle = db.Dimstyle;db.AddToModelSpace(dimRadial, "Dim");}}

4.角度标注

 public static void addDiametricDimension(Point3d start1, Point3d start2, Point3d end1, Point3d end2, string text, double distance){using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction()){LineAngularDimension2 dimLineAngular = new LineAngularDimension2();//圓或圓弧的圓心、或兩個尺寸界線間的共有頂點的座標dimLineAngular.XLine1Start = start1;dimLineAngular.XLine2Start = start2;dimLineAngular.XLine1End = end1;dimLineAngular.XLine2End = end2;dimLineAngular.ArcPoint = GeTools.MidPoint(start1, start2).PolarPoint(GeTools.DegreeToRadian(90), distance);dimLineAngular.DimensionText = text;//<>代表標注的主尺寸,此處在標注線上插入文字dimLineAngular.DimensionStyle = db.Dimstyle;db.AddToModelSpace(dimLineAngular, "Dim");}}

5.形位公差:

 public static void CreateTolerance(this FeatureControlFrame frame, string geometricSym, string torlerance, string firstDatum){if (frame == null) return;//特徵框對象必須已定義,否則返回//設置形位公差值,各組成部份用豎線(%%v)分隔frame.Text = geometricSym + "%%v" + torlerance + "%%v" + firstDatum;}public struct DimFormatCode{public static readonly string Bounce = @"{\Fgdt;" + "h}";//跳動度}public static void AddTolerance(Point3d pt1, string gc, double size, string layer){Database db = HostApplicationServices.WorkingDatabase;using (Transaction trans = db.TransactionManager.StartTransaction()){//創建一個形位公差特徵控制框FeatureControlFrame frame = new FeatureControlFrame();//形位公差的幾何特徵為跳動度string geometricSym = DimFormatCode.Bounce;//形位公差值string torlerance = gc;//形位公差的第一級基準符號string firstDatum = "A";//設置形位公差特徵控制框的內容為形位公差frame.CreateTolerance(geometricSym, torlerance, firstDatum);frame.Location = pt1;//控制框的位置frame.Dimscale = size;//控制框的大小frame.Layer = layer;BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//以读方式打开块表BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);frame.Layer = layer;btr.AppendEntity(frame);//以图形对象的信息添加到块表记录中trans.AddNewlyCreatedDBObject(frame, true);//把对象添加到事务处理中trans.Commit();//提交事务处理      }}

测试的话可以通过在之前创建的Command方法中调用这些标注的方法即可,例如:

public class Command
{//名字可以自定义,最好不要和CAD快捷键冲突[CommandMethod("cad")]public static void cad(){DimensionTool.addHorizonRotatedDimension(new Point3d(0, 0, 0), new Point3d(100, 0, 0), 'cad', 10);}
}

F6生成成功后,加上之前介绍了自动打开cad方法,自动调用生成的dll,打开CAD后直接执行‘cad’命令即可。下期我会介绍如何实现CAD中打印pdf功能。

C#实战之CAD二次开发004:插入尺寸标注相关推荐

  1. C#实战之CAD二次开发006:与python进行Socket传输文件

    前言 前面介绍了与CAD相关的一些功能,本期介绍一下C#和python如何通过socket通信来进行文件的传输,建议不了解Socket的同学先去了解一下socket的通讯原理,这样看起来不会云里雾里的 ...

  2. C#实战之CAD二次开发001:CAD和C#的环境配置

    前言 本博文主要介绍利用C#对CAD进行二次开发,结合了ObjectARX功能强大的特点和VBA易用的特点,通过实战项目对C#开发CAD进行一个简要的介绍. 1.CAD的安裝 首先我们需要安装CAD, ...

  3. C#实战之CAD二次开发003:插入文字和插入图块

    前言 上期我们介绍了如何利用C#在CAD中绘制直线和圆,这期我们介绍一下CAD中两个比较重要的功能,插入文字和插入图块,在CAD中插入文字主要是单行文字和多行文字,插入块主要有内部图块和外部图块.本文 ...

  4. CAD二次开发资料汇总

    欢迎加入建筑信息化开发交流群,获取开发资料 群号:711844216 一.背景 对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找 ...

  5. C# Cad二次开发新手入门系列教程(一)开发环境搭建

    目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...

  6. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

  7. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题

    CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...

  8. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

  9. CAD 二次开发 图层操作(3)取得指定图层下的所有对象id

    对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作.下面的方法,即可实现获取指定图层名称下的所有实体ID. 输入参数为图层名称: 返回值为:对象主键集合 ...

最新文章

  1. 如何解决Keil5打红叉的问题
  2. python翻译程序-python实现翻译word表格小程序
  3. Ticker 未释放导致的 CPU 占用过高
  4. 如何测量接收机到卫星的距离
  5. 前端学习(1764):前端调试值之性能分析的方法二
  6. js 设置password placeholder样式_150+ 个优质的 Node.js 包和资源
  7. https://en.wikipedia.org/wiki/Linux Foundation
  8. 【白皮书分享】2020中国房地产白皮书.pdf(附下载链接)
  9. 软件测试完后,还有bug,责任全在于测试吗?
  10. 工厂供电MATLAB仿真,工厂供电课程设计---基于MATLAB的电力电子系统仿真
  11. php编辑工具绿色,php编写软件下载|
  12. HDU2537 8球胜负【水题】
  13. MemSQL分布式架构介绍(二)
  14. linux系统自行清理归档日志_Linux下自动删除归档日志文件的方法
  15. swagger 接口参数顺序_Swagger常用参数用法
  16. 计算机网络telnet命令作用,全面解析telnet命令
  17. 内存带宽stream测试
  18. linux解压下载的文件,Linux下各种压缩文件的解压方法
  19. html版权字符大全,HTML特殊字符大全
  20. 图解!24张图彻底弄懂九大常见数据结构!

热门文章

  1. 【计算机毕设】毕设题分析及设计
  2. 微信小程序实现点击生成随机验证码功能
  3. 用计算机画图截图图片,如何使用系统自带画图工具截图?电脑画图工具截图操作详解...
  4. SCOM2019导入管理包
  5. 固定资产报废的损失鉴定怎么做?
  6. 外盘国际期货招商:从股票书挑出来的精华
  7. 【LIO-SAM论文全文翻译】:LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
  8. ARM | STM32F10xxx课堂学习笔记(时钟 高级控制定时器)
  9. uni-app 使用uCharts图表插件
  10. 取消Rainbow Brackets彩色框