From bfe4a91eb3eb4dbe3018514551411e3a972c7164 Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Tue, 8 Jun 2021 20:17:24 +0800
Subject: [PATCH 1/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=8C=E3=80=81?=
=?UTF-8?q?=E4=B8=89=E7=BB=B4=E7=82=B9=E8=BD=AC=E6=8D=A2=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
index 93742f0..af9ea7f 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
@@ -670,6 +670,16 @@ public static Point2d Point2d(this Point3d pt)
return new Point2d(pt.X, pt.Y);
}
+ ///
+ /// 将二维点转换为三维点
+ ///
+ /// 二维点
+ /// 三维点
+ public static Point3d Point3d(this Point2d pt)
+ {
+ return new Point3d(pt.X, pt.Y, 0);
+ }
+
public static IEnumerable Point2d(this IEnumerable pts)
{
return pts.Select(pt => pt.Point2d());
--
Gitee
From dc761f9cec01009d9070a2470c8d5bdf67b17816 Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Tue, 8 Jun 2021 20:18:04 +0800
Subject: [PATCH 2/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=89=E7=A7=8D?=
=?UTF-8?q?=E7=94=BB=E5=BC=A7=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs | 56 ++++++++++++++++++++++
tests/DBTrans.test/Test.cs | 8 ++++
2 files changed, 64 insertions(+)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
index ba8f5d1..b8831bc 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
@@ -646,6 +646,62 @@ public static NurbCurve3d ToNurbCurve3d(this Arc arc)
return new NurbCurve3d(ToEllipticalArc3d(arc));
}
+ ///
+ /// 根据圆心、起点和终点来创建圆弧(二维)
+ ///
+ /// 圆弧对象
+ /// 起点
+ /// 圆心
+ /// 终点
+ public static Arc CreateArcSCE(Point3d startPoint, Point3d centerPoint, Point3d endPoint)
+ {
+ Arc arc = new();
+ arc.Center = centerPoint;
+ arc.Radius = centerPoint.DistanceTo(startPoint);
+ Vector2d startVector = new(startPoint.X - centerPoint.X, startPoint.Y - centerPoint.Y);
+ Vector2d endVector = new(endPoint.X - centerPoint.X, endPoint.Y - centerPoint.Y);
+ //计算起始和终止角度
+ arc.StartAngle = startVector.Angle;
+ arc.EndAngle = endVector.Angle;
+ return arc;
+ }
+ ///
+ /// 三点法创建圆弧(二维)(有问题)
+ ///
+ /// 圆弧对象
+ /// 起点
+ /// 圆弧上的点
+ /// 终点
+ public static Arc CreateArc(Point3d startPoint, Point3d pointOnArc, Point3d endPoint)
+ {
+ //创建一个几何类的圆弧对象
+ CircularArc3d geArc = new(startPoint, pointOnArc, endPoint);
+ //将几何类圆弧对象的圆心和半径赋值给圆弧
+#if ac2009
+ return geArc.ToArc();
+#elif ac2013
+ return (Arc)Curve.CreateFromGeCurve(geArc);
+#endif
+ }
+
+ ///
+ /// 根据起点、圆心和圆弧角度创建圆弧(二维)
+ ///
+ /// 圆弧对象
+ /// 起点
+ /// 圆心
+ /// 圆弧角度
+ public static Arc CreateArc(Point3d startPoint, Point3d centerPoint, double angle)
+ {
+ Arc arc = new();
+ arc.Center = centerPoint;
+ arc.Radius = centerPoint.DistanceTo(startPoint);
+ Vector2d startVector = new(startPoint.X - centerPoint.X, startPoint.Y - centerPoint.Y);
+ arc.StartAngle = startVector.Angle;
+ arc.EndAngle = startVector.Angle + angle;
+ return arc;
+ }
+
#endregion Arc
#region Ellipse
diff --git a/tests/DBTrans.test/Test.cs b/tests/DBTrans.test/Test.cs
index ae6e9b8..dcad7aa 100644
--- a/tests/DBTrans.test/Test.cs
+++ b/tests/DBTrans.test/Test.cs
@@ -70,6 +70,14 @@ public void drawarc()
{
using var tr = new DBTrans();
tr.CurrentSpace.AddArc(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 0, 0));
+ Arc arc1 = CurveEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));
+ Arc arc2 = CurveEx.CreateArcSCE(new Point3d(0, 3, 0), new Point3d(0, 0, 0), new Point3d(3, 0, 0));
+ tr.CurrentSpace.AddEntity(arc1, arc2);
+ Arc arc3 = CurveEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2);
+ tr.CurrentSpace.AddEntity(arc3);
+ Arc arc4 =CurveEx.CreateArcSCE(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0));
+ tr.CurrentSpace.AddEntity(arc4);
+
}
[CommandMethod("layertest")]
--
Gitee
From 924633108fcc16c0c17957cd1c3ac85fa40afcd9 Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Tue, 8 Jun 2021 20:41:15 +0800
Subject: [PATCH 3/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=9C=86=E5=BC=A7=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs | 2 +-
.../ExtensionMethod/SymbolTableRecordEx.cs | 9 ++-------
tests/DBTrans.test/Test.cs | 14 +++++---------
3 files changed, 8 insertions(+), 17 deletions(-)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
index b8831bc..8a2c900 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
@@ -666,7 +666,7 @@ public static Arc CreateArcSCE(Point3d startPoint, Point3d centerPoint, Point3d
return arc;
}
///
- /// 三点法创建圆弧(二维)(有问题)
+ /// 三点法创建圆弧(二维)
///
/// 圆弧对象
/// 起点
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
index b3b9890..1bb6492 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
@@ -181,13 +181,8 @@ public static ObjectId AddPline(this BlockTableRecord btr, List pts, Li
/// 圆弧id
public static ObjectId AddArc(this BlockTableRecord btr, Point3d startPoint, Point3d pointOnArc, Point3d endPoint, Action action = default, Transaction trans = default)
{
-
- var arc = new CircularArc3d(startPoint, pointOnArc, endPoint);
-#if ac2009
- return btr.AddEnt(arc.ToArc(), action, trans);
-#elif ac2013
- return btr.AddEnt(Curve.CreateFromGeCurve(arc) as Arc, action, trans);
-#endif
+ var arc = CurveEx.CreateArc(startPoint, pointOnArc, endPoint);
+ return btr.AddEnt(arc, action, trans);
}
#endregion
diff --git a/tests/DBTrans.test/Test.cs b/tests/DBTrans.test/Test.cs
index dcad7aa..0acd175 100644
--- a/tests/DBTrans.test/Test.cs
+++ b/tests/DBTrans.test/Test.cs
@@ -69,15 +69,11 @@ public void Addent()
public void drawarc()
{
using var tr = new DBTrans();
- tr.CurrentSpace.AddArc(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 0, 0));
- Arc arc1 = CurveEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));
- Arc arc2 = CurveEx.CreateArcSCE(new Point3d(0, 3, 0), new Point3d(0, 0, 0), new Point3d(3, 0, 0));
- tr.CurrentSpace.AddEntity(arc1, arc2);
- Arc arc3 = CurveEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2);
- tr.CurrentSpace.AddEntity(arc3);
- Arc arc4 =CurveEx.CreateArcSCE(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0));
- tr.CurrentSpace.AddEntity(arc4);
-
+ Arc arc1 = CurveEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));//起点,圆心,终点
+ Arc arc2 = CurveEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2);//起点,圆心,弧度
+ Arc arc3 = CurveEx.CreateArc(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0));//起点,圆上一点,终点
+ tr.CurrentSpace.AddEntity(arc1, arc2, arc3);
+ tr.CurrentSpace.AddArc(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 0, 0));//起点,圆上一点,终点
}
[CommandMethod("layertest")]
--
Gitee
From f54fe35393927b95e79c75f7a3963732fe83e00f Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Tue, 8 Jun 2021 22:59:14 +0800
Subject: [PATCH 4/7] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=9B=E5=BB=BA?=
=?UTF-8?q?=E5=9C=86=E5=BC=A7=E6=96=B9=E6=B3=95=E4=BD=8D=E7=BD=AE=20?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=9B=E5=BB=BA=E5=9C=86=E6=96=B9=E6=B3=95?=
=?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=E4=B8=AD=E7=82=B9?=
=?UTF-8?q?=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs | 58 +--------
src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs | 110 ++++++++++++++++++
src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs | 13 ++-
.../ExtensionMethod/SymbolTableRecordEx.cs | 25 ++--
tests/DBTrans.test/Test.cs | 19 ++-
5 files changed, 148 insertions(+), 77 deletions(-)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
index 8a2c900..fd3bf83 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
@@ -644,63 +644,7 @@ public static EllipticalArc3d ToEllipticalArc3d(this Arc arc)
public static NurbCurve3d ToNurbCurve3d(this Arc arc)
{
return new NurbCurve3d(ToEllipticalArc3d(arc));
- }
-
- ///
- /// 根据圆心、起点和终点来创建圆弧(二维)
- ///
- /// 圆弧对象
- /// 起点
- /// 圆心
- /// 终点
- public static Arc CreateArcSCE(Point3d startPoint, Point3d centerPoint, Point3d endPoint)
- {
- Arc arc = new();
- arc.Center = centerPoint;
- arc.Radius = centerPoint.DistanceTo(startPoint);
- Vector2d startVector = new(startPoint.X - centerPoint.X, startPoint.Y - centerPoint.Y);
- Vector2d endVector = new(endPoint.X - centerPoint.X, endPoint.Y - centerPoint.Y);
- //计算起始和终止角度
- arc.StartAngle = startVector.Angle;
- arc.EndAngle = endVector.Angle;
- return arc;
- }
- ///
- /// 三点法创建圆弧(二维)
- ///
- /// 圆弧对象
- /// 起点
- /// 圆弧上的点
- /// 终点
- public static Arc CreateArc(Point3d startPoint, Point3d pointOnArc, Point3d endPoint)
- {
- //创建一个几何类的圆弧对象
- CircularArc3d geArc = new(startPoint, pointOnArc, endPoint);
- //将几何类圆弧对象的圆心和半径赋值给圆弧
-#if ac2009
- return geArc.ToArc();
-#elif ac2013
- return (Arc)Curve.CreateFromGeCurve(geArc);
-#endif
- }
-
- ///
- /// 根据起点、圆心和圆弧角度创建圆弧(二维)
- ///
- /// 圆弧对象
- /// 起点
- /// 圆心
- /// 圆弧角度
- public static Arc CreateArc(Point3d startPoint, Point3d centerPoint, double angle)
- {
- Arc arc = new();
- arc.Center = centerPoint;
- arc.Radius = centerPoint.DistanceTo(startPoint);
- Vector2d startVector = new(startPoint.X - centerPoint.X, startPoint.Y - centerPoint.Y);
- arc.StartAngle = startVector.Angle;
- arc.EndAngle = startVector.Angle + angle;
- return arc;
- }
+ }
#endregion Arc
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
index 38efca4..20fa082 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
@@ -232,5 +232,115 @@ public static string GetUnFormatString(this MText mt)
return string.Join("", strs.ToArray());
}
#endregion
+
+ #region 圆弧
+
+ ///
+ /// 根据圆心、起点和终点来创建圆弧(二维)
+ ///
+ /// 圆弧对象
+ /// 起点
+ /// 圆心
+ /// 终点
+ /// 圆弧
+ public static Arc CreateArcSCE(Point3d startPoint, Point3d centerPoint, Point3d endPoint)
+ {
+ Arc arc = new();
+ arc.Center = centerPoint;
+ arc.Radius = centerPoint.DistanceTo(startPoint);
+ Vector2d startVector = new(startPoint.X - centerPoint.X, startPoint.Y - centerPoint.Y);
+ Vector2d endVector = new(endPoint.X - centerPoint.X, endPoint.Y - centerPoint.Y);
+ //计算起始和终止角度
+ arc.StartAngle = startVector.Angle;
+ arc.EndAngle = endVector.Angle;
+ return arc;
+ }
+ ///
+ /// 三点法创建圆弧(二维)
+ ///
+ /// 圆弧对象
+ /// 起点
+ /// 圆弧上的点
+ /// 终点
+ /// 圆弧
+ public static Arc CreateArc(Point3d startPoint, Point3d pointOnArc, Point3d endPoint)
+ {
+ //创建一个几何类的圆弧对象
+ CircularArc3d geArc = new(startPoint, pointOnArc, endPoint);
+ //将几何类圆弧对象的圆心和半径赋值给圆弧
+#if ac2009
+ return geArc.ToArc();
+#elif ac2013
+ return (Arc)Curve.CreateFromGeCurve(geArc);
+#endif
+ }
+
+ ///
+ /// 根据起点、圆心和圆弧角度创建圆弧(二维)
+ ///
+ /// 圆弧对象
+ /// 起点
+ /// 圆心
+ /// 圆弧角度
+ /// 圆弧
+ public static Arc CreateArc(Point3d startPoint, Point3d centerPoint, double angle)
+ {
+ Arc arc = new();
+ arc.Center = centerPoint;
+ arc.Radius = centerPoint.DistanceTo(startPoint);
+ Vector2d startVector = new(startPoint.X - centerPoint.X, startPoint.Y - centerPoint.Y);
+ arc.StartAngle = startVector.Angle;
+ arc.EndAngle = startVector.Angle + angle;
+ return arc;
+ }
+
+ #endregion
+
+ #region 圆
+
+ ///
+ /// 两点创建圆(两点中点为圆心)
+ ///
+ /// 起点
+ /// 终点
+ /// 圆
+ public static Circle CreateCircle(Point3d startPoint, Point3d endPoint)
+ {
+ Circle circle = new();
+ circle.Center = GeometryEx.MidPoint(startPoint, endPoint);
+ circle.Radius = startPoint.DistanceTo(endPoint) * 0.5;
+ return circle;
+ }
+
+ ///
+ /// 三点法创建圆
+ ///
+ /// 第一点
+ /// 第二点
+ /// 第三点
+ /// 若成功创建圆,则输出true,否则输出false
+ /// 圆
+ public static Circle CreateCircle(Point3d pt1, Point3d pt2, Point3d pt3, out bool bl)
+ {
+ //先判断三点是否共线,得到pt1点指向pt2、pt2点的矢量
+ Vector3d va = pt1.GetVectorTo(pt2);
+ Vector3d vb = pt1.GetVectorTo(pt3);
+ //如两矢量夹角为0或180度(π弧度),则三点共线.
+ if (va.GetAngleTo(vb) == 0 | va.GetAngleTo(vb) == Math.PI)
+ {
+ bl = false;
+ return new Circle();
+ }
+ else
+ {
+ //创建一个几何类的圆弧对象
+ CircularArc3d geArc = new(pt1, pt2, pt3);
+ geArc.ToCircle();
+ bl = true;
+ return geArc.ToCircle();
+ }
+ }
+
+ #endregion
}
}
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
index 8d76ce1..deb4655 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
@@ -58,7 +58,7 @@ public enum PointOnRegionType
///
public static class GeometryEx
{
-
+
#region Point&Circle
///
@@ -729,6 +729,17 @@ public static Point3d Point3d(this Point2d pt)
return new Point3d(pt.X, pt.Y, 0);
}
+ ///
+ /// 获取两个点之间的中点
+ ///
+ /// 第一点
+ /// 第二点
+ /// 返回两个点之间的中点
+ public static Point3d MidPoint(Point3d pt1, Point3d pt2)
+ {
+ return new Point3d((pt1.X + pt2.X) * 0.5, (pt1.Y + pt2.Y) * 0.5, (pt1.Z + pt2.Z) * 0.5);
+ }
+
public static IEnumerable Point2d(this IEnumerable pts)
{
return pts.Select(pt => pt.Point2d());
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
index 1bb6492..7ccaff8 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
@@ -125,25 +125,18 @@ public static ObjectId AddCircle(this BlockTableRecord btr, Point3d center, doub
/// 圆属性设置委托
/// 事务管理器
/// 三点有外接圆则返回圆的id,否则返回ObjectId.Null
- public static ObjectId AddCircle(this BlockTableRecord btr, Point3d p0, Point3d p1, Point3d p2, Action action = default, Transaction trans = default)
+ public static ObjectId AddCircle(this BlockTableRecord btr, Point3d p0, Point3d p1, Point3d p2,
+ Action action = default, Transaction trans = default)
{
- var dx1 = p1.X - p0.X;
- var dy1 = p1.Y - p0.Y;
- var dx2 = p2.X - p0.X;
- var dy2 = p2.Y - p0.Y;
-
- var d = dx1 * dy2 - dx2 * dy1;
-
- if (d != 0.0)
+ Circle circle = EntityEx.CreateCircle(p0, p1, p2, out bool pl);
+ if (pl)
{
- var d2 = d * 2;
- var c1 = (p0.X + p1.X) * dx1 + (p0.Y + p1.Y) * dy1;
- var c2 = (p0.X + p2.X) * dx2 + (p0.Y + p2.Y) * dy2;
- var ce = new Point3d((c1 * dy2 - c2 * dy1) / d2, (c2 * dx1 - c1 * dx2) / d2, 0);
- var circle = new Circle(ce, Vector3d.ZAxis, p0.DistanceTo(ce));
return btr.AddEnt(circle, action, trans);
}
- return ObjectId.Null;
+ else
+ {
+ return ObjectId.Null;
+ }
}
///
/// 在指定的绘图空间添加轻多段线
@@ -181,7 +174,7 @@ public static ObjectId AddPline(this BlockTableRecord btr, List pts, Li
/// 圆弧id
public static ObjectId AddArc(this BlockTableRecord btr, Point3d startPoint, Point3d pointOnArc, Point3d endPoint, Action action = default, Transaction trans = default)
{
- var arc = CurveEx.CreateArc(startPoint, pointOnArc, endPoint);
+ var arc = EntityEx.CreateArc(startPoint, pointOnArc, endPoint);
return btr.AddEnt(arc, action, trans);
}
#endregion
diff --git a/tests/DBTrans.test/Test.cs b/tests/DBTrans.test/Test.cs
index 0acd175..8f48561 100644
--- a/tests/DBTrans.test/Test.cs
+++ b/tests/DBTrans.test/Test.cs
@@ -69,13 +69,26 @@ public void Addent()
public void drawarc()
{
using var tr = new DBTrans();
- Arc arc1 = CurveEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));//起点,圆心,终点
- Arc arc2 = CurveEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2);//起点,圆心,弧度
- Arc arc3 = CurveEx.CreateArc(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0));//起点,圆上一点,终点
+ Arc arc1 = EntityEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));//起点,圆心,终点
+ Arc arc2 = EntityEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2);//起点,圆心,弧度
+ Arc arc3 = EntityEx.CreateArc(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0));//起点,圆上一点,终点
tr.CurrentSpace.AddEntity(arc1, arc2, arc3);
tr.CurrentSpace.AddArc(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 0, 0));//起点,圆上一点,终点
}
+ [CommandMethod("drawcircle")]
+ public void draCircle()
+ {
+ using var tr = new DBTrans();
+ Circle circle1 = EntityEx.CreateCircle(new Point3d(0, 0, 0), new Point3d(1, 0, 0));//起点,终点
+ Circle circle2 = EntityEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(2, 0, 0), new Point3d(0, 2, 0), out bool bl1);//三点画圆,成功
+ Circle circle3 = EntityEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(0, 0, 0), new Point3d(2, 0, 0), out bool bl2);//起点,圆心,终点,失败
+ tr.CurrentSpace.AddEntity(circle1, circle2, circle3);
+ tr.Editor.WriteMessage(bl1.ToString() + "\n" + bl2.ToString());
+ tr.CurrentSpace.AddCircle(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 0, 0));//三点画圆,成功
+ tr.CurrentSpace.AddCircle(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 2, 0));//起点,圆上一点,终点(共线)
+ }
+
[CommandMethod("layertest")]
public void Layertest()
{
--
Gitee
From d07a148000870445c1ad17884ed742c540dd9e23 Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Tue, 8 Jun 2021 23:29:58 +0800
Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9MidPoint=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=E4=B8=BAGetMidPointTo?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs | 2 +-
src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
index 20fa082..dcdaf67 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
@@ -307,7 +307,7 @@ public static Arc CreateArc(Point3d startPoint, Point3d centerPoint, double angl
public static Circle CreateCircle(Point3d startPoint, Point3d endPoint)
{
Circle circle = new();
- circle.Center = GeometryEx.MidPoint(startPoint, endPoint);
+ circle.Center = startPoint.GetMidPointTo(endPoint);
circle.Radius = startPoint.DistanceTo(endPoint) * 0.5;
return circle;
}
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
index deb4655..1f15466 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs
@@ -735,7 +735,7 @@ public static Point3d Point3d(this Point2d pt)
/// 第一点
/// 第二点
/// 返回两个点之间的中点
- public static Point3d MidPoint(Point3d pt1, Point3d pt2)
+ public static Point3d GetMidPointTo(this Point3d pt1, Point3d pt2)
{
return new Point3d((pt1.X + pt2.X) * 0.5, (pt1.Y + pt2.Y) * 0.5, (pt1.Z + pt2.Z) * 0.5);
}
--
Gitee
From 15c30220c33f624ee96dc0a1c767a511b3144898 Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Wed, 9 Jun 2021 00:23:45 +0800
Subject: [PATCH 6/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9CreateCircle?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs | 9 +++------
.../ExtensionMethod/SymbolTableRecordEx.cs | 11 ++---------
tests/DBTrans.test/Test.cs | 16 ++++++++++++----
3 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
index dcdaf67..90e0dbb 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/EntityEx.cs
@@ -313,14 +313,13 @@ public static Circle CreateCircle(Point3d startPoint, Point3d endPoint)
}
///
- /// 三点法创建圆
+ /// 三点法创建圆(失败则返回Null)
///
/// 第一点
/// 第二点
/// 第三点
- /// 若成功创建圆,则输出true,否则输出false
/// 圆
- public static Circle CreateCircle(Point3d pt1, Point3d pt2, Point3d pt3, out bool bl)
+ public static Circle CreateCircle(Point3d pt1, Point3d pt2, Point3d pt3)
{
//先判断三点是否共线,得到pt1点指向pt2、pt2点的矢量
Vector3d va = pt1.GetVectorTo(pt2);
@@ -328,15 +327,13 @@ public static Circle CreateCircle(Point3d pt1, Point3d pt2, Point3d pt3, out boo
//如两矢量夹角为0或180度(π弧度),则三点共线.
if (va.GetAngleTo(vb) == 0 | va.GetAngleTo(vb) == Math.PI)
{
- bl = false;
- return new Circle();
+ return null;
}
else
{
//创建一个几何类的圆弧对象
CircularArc3d geArc = new(pt1, pt2, pt3);
geArc.ToCircle();
- bl = true;
return geArc.ToCircle();
}
}
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
index 7ccaff8..d6b5233 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
@@ -128,15 +128,8 @@ public static ObjectId AddCircle(this BlockTableRecord btr, Point3d center, doub
public static ObjectId AddCircle(this BlockTableRecord btr, Point3d p0, Point3d p1, Point3d p2,
Action action = default, Transaction trans = default)
{
- Circle circle = EntityEx.CreateCircle(p0, p1, p2, out bool pl);
- if (pl)
- {
- return btr.AddEnt(circle, action, trans);
- }
- else
- {
- return ObjectId.Null;
- }
+ Circle circle = EntityEx.CreateCircle(p0, p1, p2);
+ return circle is not null ? btr.AddEnt(circle, action, trans) : throw new System.Exception("实体为Null");
}
///
/// 在指定的绘图空间添加轻多段线
diff --git a/tests/DBTrans.test/Test.cs b/tests/DBTrans.test/Test.cs
index 8f48561..14e956b 100644
--- a/tests/DBTrans.test/Test.cs
+++ b/tests/DBTrans.test/Test.cs
@@ -81,10 +81,18 @@ public void draCircle()
{
using var tr = new DBTrans();
Circle circle1 = EntityEx.CreateCircle(new Point3d(0, 0, 0), new Point3d(1, 0, 0));//起点,终点
- Circle circle2 = EntityEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(2, 0, 0), new Point3d(0, 2, 0), out bool bl1);//三点画圆,成功
- Circle circle3 = EntityEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(0, 0, 0), new Point3d(2, 0, 0), out bool bl2);//起点,圆心,终点,失败
- tr.CurrentSpace.AddEntity(circle1, circle2, circle3);
- tr.Editor.WriteMessage(bl1.ToString() + "\n" + bl2.ToString());
+ Circle circle2 = EntityEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(2, 0, 0), new Point3d(0, 2, 0));//三点画圆,成功
+ Circle circle3 = EntityEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(0, 0, 0), new Point3d(2, 0, 0));//起点,圆心,终点,失败
+ tr.CurrentSpace.AddEntity(circle1, circle2);
+ if (circle3 is not null)
+ {
+ tr.CurrentSpace.AddEntity(circle3);
+ }
+ else
+ {
+ tr.Editor.WriteMessage("三点画圆失败");
+ }
+ tr.CurrentSpace.AddEntity(circle3);
tr.CurrentSpace.AddCircle(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 0, 0));//三点画圆,成功
tr.CurrentSpace.AddCircle(new Point3d(0, 0, 0), new Point3d(1, 1, 0), new Point3d(2, 2, 0));//起点,圆上一点,终点(共线)
}
--
Gitee
From 6241ce78016e484bb3be16b89492fffd400f6b33 Mon Sep 17 00:00:00 2001
From: giteezxk <9063830+giteezxk@user.noreply.gitee.com>
Date: Wed, 9 Jun 2021 00:28:56 +0800
Subject: [PATCH 7/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
index d6b5233..2c87411 100644
--- a/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
+++ b/src/IFoxCAD.Cad/ExtensionMethod/SymbolTableRecordEx.cs
@@ -129,7 +129,7 @@ public static ObjectId AddCircle(this BlockTableRecord btr, Point3d p0, Point3d
Action action = default, Transaction trans = default)
{
Circle circle = EntityEx.CreateCircle(p0, p1, p2);
- return circle is not null ? btr.AddEnt(circle, action, trans) : throw new System.Exception("实体为Null");
+ return circle is not null ? btr.AddEnt(circle, action, trans) : throw new ArgumentNullException(nameof(circle), "对象为 null");
}
///
/// 在指定的绘图空间添加轻多段线
--
Gitee