1、CAD获取一个图形上所有直线的交点纯数学运算的方法做的通过构建二元一次方程然后判断相交点是否在线上...代码完全可行哈using (var tr = doc.TransactionManager.StartTransaction()) { var lines = new List(); foreach(ObjectId id in res.Value.GetObjectIds()) { lines.Add((Line)tr.GetObject(id, OpenMode.ForRead)); } List pts = new Lis
2、t(); for (int m = 0; m < lines.Count; m++){ LineSegment3d ls1 = new LineSegment3d(lines[m].StartPoint, lines[m].EndPoint); for (int n = m + 1; n < lines.Count; n++) { LineSegment3d ls2 = new LineSegment3d(lines[n].StartPoint, lines[n].EndPoint); CurveCur
4、nMode.ForRead) as BlockTable; BlockTableRecord btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; foreach (var pt in pts) { Circle c = new Circle(pt, Vector3d.ZAxis, 1); btr.AppendEntity(c); tr.AddNewlyCreatedDBObject(c, true); } tr.Com
5、mit();} }另一个可行切简洁的代码 [CommandMethod("tx1")]public static void CrossCAD(){var doc = Application.DocumentManager.MdiActiveDocument;var db = doc.Database;var ed = doc.Editor;var sf = new SelectionFilter(new TypedValue[]{ new TypedValue(0, "line")});var res = ed.SelectAll(sf);if (res.Status !=
6、PromptStatus.OK) return;using (var tr = doc.TransactionManager.StartTransaction()){ var lines = new List(); foreach(ObjectId id in res.Value.GetObjectIds()) { lines.Add((Line)tr.GetObject(id, OpenMode.ForRead)); }List pts = new List();for (int m = 0; m < lines.
7、Count; m++){LineSegment3d ls1 = new LineSegment3d(lines[m].StartPoint, lines[m].EndPoint);for (int n = m + 1; n < lines.Count; n++){LineSegment3d ls2 = new LineSegment3d(lines[n].StartPoint, lines[n].EndPoint);CurveCurveIntersector3d cc3d = new CurveCurv