/// <summary> /// 获取包含点的最小级别的轮廓 /// </summary> /// <param name="pointZ0"></param> /// <returns></returns> public OutLine GetContainedOutLine(XYZ pointZ0) { if (this.GetContainer(pointZ0) == null) { return(null); } foreach (var SubOutLine in SubOutLines) { var directOutLine = SubOutLine.GetContainedOutLine(pointZ0); if (directOutLine != null) { return(directOutLine); } } return(this); }
///// <summary> ///// 检测轮廓是否相交或包含 有限线段 ///// </summary> ///// <param name="outLine"></param> ///// <returns></returns> //public bool IsCover(XYZ pointZ0) //{ // foreach (var subOutLine in OutLines) // { // if (subOutLine.GetContainer(pointZ0) != null) // { // return true; // } // } // return false; //} /// <summary> /// 获得拆分点 /// </summary> /// <returns></returns> public SeperatePoints GetFitLines(Line beamLineZ0) { SeperatePoints fitLines = new SeperatePoints(); var p0 = beamLineZ0.GetEndPoint(0); var p1 = beamLineZ0.GetEndPoint(1); foreach (var SubOutLine in OutLines) { var coverType = SubOutLine.IsCover(beamLineZ0); if (coverType != CoverType.Disjoint) { fitLines.AdvancedPoints.AddRange(SubOutLine.GetFitLines(beamLineZ0).AdvancedPoints); } //线的端点增加 注意检测是否已存在 var point = p0; if (fitLines.AdvancedPoints.FirstOrDefault(c => c.Point.VL_XYEqualTo(point)) == null) { var triangle = SubOutLine.GetContainer(point); if (triangle != null) { var directOutLine = SubOutLine.GetContainedOutLine(point); fitLines.AdvancedPoints.Add(new AdvancedPoint(VLGeometryHelper.GetIntersection(triangle, point, new XYZ(0, 0, 1)), beamLineZ0.Direction, directOutLine.IsSolid)); } } point = p1; if (fitLines.AdvancedPoints.FirstOrDefault(c => c.Point.VL_XYEqualTo(point)) == null) { var triangle = SubOutLine.GetContainer(point); if (triangle != null) { var directOutLine = SubOutLine.GetContainedOutLine(point); fitLines.AdvancedPoints.Add(new AdvancedPoint(VLGeometryHelper.GetIntersection(triangle, point, new XYZ(0, 0, 1)), beamLineZ0.Direction, directOutLine.IsSolid)); } } } return(fitLines); }