diff --git a/src/IFoxCAD.Cad/ExtensionMethod/IsOnLine b/src/IFoxCAD.Cad/ExtensionMethod/IsOnLine
new file mode 100644
index 0000000000000000000000000000000000000000..61bb01ec53336036238d8b463f4aeaaaf8be5e59
--- /dev/null
+++ b/src/IFoxCAD.Cad/ExtensionMethod/IsOnLine
@@ -0,0 +1,96 @@
+ ///
+ /// 判断点与另外两点的位置关系
+ ///
+ /// 基点
+ /// 起点
+ /// 终点
+ /// 容差
+ /// 枚举类型
+ public static PointOnlineType IsOnLine(this Point3d Point, Point3d StartPoint, Point3d EndPoint, double dTol)
+ {
+ //以点Point为坐标系Y轴与直线的交点距离,正值则点在直线之上,负值则点在直线之下,零则在直线上
+ var dd = (Point.X - StartPoint.X) * (StartPoint.Y - EndPoint.Y) - (Point.Y - StartPoint.Y) * (EndPoint.X - StartPoint.X);
+ //点StartPoint与点EndPoint的直线距离
+ var d12 = Math.Abs(StartPoint.DistanceTo(EndPoint));
+ //点Point与点StartPoint的直线距离
+ var d01 = Math.Abs(Point.DistanceTo(StartPoint));
+ //点Point与点EndPoint的直线距离
+ var d02 = Math.Abs(Point.DistanceTo(EndPoint));
+ if (dd >0)
+ {
+ return PointOnlineType.OnLineUp;
+ }
+ else if (dd < 0)
+ {
+ return PointOnlineType.OnLineDown;
+ }
+ else
+ {
+ //点Point在直线起点段的延长线上
+ if (d02.Equals(d01 + d12))
+ {
+ //点Point在直线起点段的延长线上且小于等于误差长度
+ if (d01 <= dTol)
+ {
+ return PointOnlineType.ExtendLineStartPointIn;
+ }
+ else
+ {
+ return PointOnlineType.ExtendLineStartPointOut;
+ }
+ }
+ //点Point在直线终点段的延长线上
+ else if (d01.Equals(d02 + d12))
+ {
+ //点Point在直线终点段的延长线上且小于等于误差长度
+ if (d02 <= dTol)
+ {
+ return PointOnlineType.ExtendLineEndPointIn;
+ }
+ else
+ {
+ return PointOnlineType.ExtendLineEndPointOut;
+ }
+ }
+ //点Point在直线两点之间
+ else
+ {
+ return PointOnlineType.OnLine;
+ }
+ }
+ }
+
+ ///
+/// 点与直线关系类型枚举
+///
+public enum PointOnlineType
+{
+ ///
+ /// 直线上两点之间
+ ///
+ OnLine,
+ ///
+ /// 直线延长线起点误差距离之内
+ ///
+ ExtendLineStartPointIn,
+ ///
+ /// 直线延长线起点误差距离之外
+ ///
+ ExtendLineStartPointOut,
+ ///
+ /// 直线延长线终点误差距离之内
+ ///
+ ExtendLineEndPointIn,
+ ///
+ /// 直线延长线终点误差距离之外
+ ///
+ ExtendLineEndPointOut,
+ ///
+ /// 直线之上
+ ///
+ OnLineUp,
+ ///
+ /// 直线之下
+ ///
+ OnLineDown,
+}
\ No newline at end of file