许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  AutoCAD .NET开发辅助方法汇总与实战示例

AutoCAD .NET开发辅助方法汇总与实战示例

阅读数 4
点赞 0
article_banner


转载自:http://www.cnblogs.com/milian/p/3315000.html

求中点坐标:

/// <summary>

/// 中点

/// </summary>

/// <param name=&#34;StartPoint&#​34;>起点</param>

/// <param name=&#34;EndPoint&#​34;>终点</param>

/// <returns></returns>

public Point3d Midpoint(Point3d StartPoint, Point3d EndPoint)

{

   Double x = (StartPoint.X + EndPoint.X)/2;

   Double y = (StartPoint.Y + EndPoint.Y) / 2;

   Double z = (StartPoint.Z + EndPoint.Z) / 2;

   return new Point3d(x, y, z);

}

求点到直线的距离:

/// <summary>

/// 获得空间点到空间线段的垂直距离

/// </summary>

/// <param name=&#34;line&#​34;>直线</param>

/// <param name=&#34;pt&#​34;>空间的点</param>

/// <param name=&#34;Decimal&#​34;>小数位数</param>

/// <returns>点到直线垂直距离</returns>

public Double Distance(Line line, Point3d pt, Int16 Decimal)

{

   Double t;

   if (line != null)

   {

       Point3d StartPoint = line.StartPoint;

       Point3d EndPoint = line.EndPoint;

       //直线方向向量

       Point3d dir = new Point3d(StartPoint.X - EndPoint.X, StartPoint.Y - EndPoint.Y, StartPoint.Z - EndPoint.Z);

       //过点且与直线垂直的平面

       t = -(Double)(dir.X * (StartPoint.X - pt.X) + dir.Y * (StartPoint.Y - pt.Y) + dir.Z * (StartPoint.Z - pt.Z)) / (dir.X * dir.X + dir.Y * dir.Y + dir.Z * dir.Z);

       //过点的垂直于直线的平面与该直线的交点

       Point3d fp = new Point3d(StartPoint.X + dir.X * t, StartPoint.Y + dir.Y * t, StartPoint.Z + dir.Z * t);

       return Distance(pt, fp, Decimal);

   }

   else

   {

       return 0;

   }

}

求空间两点之间距离:

/// <summary>

/// 空间两点之间距离

/// </summary>

/// <param name=&#34;point1&#​34;>点1</param>

/// <param name=&#34;point2&#​34;>点2</param>

/// <param name=&#34;Decimal&#​34;>小数位数</param>

/// <returns></returns>

public Double Distance(Point3d point1, Point3d point2, Int16 Decimal)

{

   Double a = point1.X - point2.X;

   Double b = point1.Y - point2.Y;

   Double c = point1.Z - point2.Z;

   Double r = a * a + b * b + c * c;

   return Math.Round(Math.Abs(Math.Sqrt(r)), Decimal);

}

判断两条直线是否重合:

/// <summary>

/// 判断两条直线是否重合

/// </summary>

/// <param name=&#34;line1&#​34;>线1</param>

/// <param name=&#34;line2&#​34;>线2</param>

/// <param name=&#34;allowance&#​34;>容差</param>

/// <returns></returns>

public Boolean Coincide(Line line1, Line line2, Double allowance)

{

   LineSegment3d l1 = new LineSegment3d(line1.StartPoint, line1.EndPoint);

   LineSegment3d l2 = new LineSegment3d(line2.StartPoint, line2.EndPoint);

   Tolerance tol = new Tolerance(allowance, allowance);  

   return l1.IsColinearTo(l2, tol);

}

判断点是否在直线上:

/// <summary>

/// 判断点是否在直线上

/// </summary>

/// <param name=&#34;line&#​34;>直线</param>

/// <param name=&#34;point1&#​34;>点</param>

/// <param name=&#34;allowance&#​34;>容差</param>

/// <returns></returns>

public Boolean Coincide(Line line, Point3d point1, Double allowance)

{

   Point3d p1 = line.StartPoint;

   Point3d p2 = line.EndPoint;

   //叉积是否为allowance,判断是否在同一直线上

   if (Math.Abs((p1.X - point1.X) * (p2.Y - point1.Y) - (p2.X - point1.X) * (p1.Y - point1.Y)) < allowance)

   {

       return true;

   }

   else

   {

       return false;

   }

}

判断点是否重合:

/// <summary>

/// 判断点是否重合

/// </summary>

/// <param name=&#34;p1&#​34;>点1</param>

/// <param name=&#34;p2&#​34;>点2</param>

/// <param name=&#34;allowance&#​34;>容差</param>

/// <returns></returns>

public Boolean Coincide(Point3d p1, Point3d p2, Double allowance)

{

   if (p1.DistanceTo(p2) < allowance)

       return true;

   else

       return false;

}


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空