马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
两个判断函数

- /// <summary>
- /// 判断Polyline是否自相交
- /// </summary>
- /// <param name="cv">Curve (Polyline)</param>
- /// <returns>true of false</returns>
- private bool SelfInters(Curve cv)
- {
- Curve3d c3d = cv.GetGeCurve();
- Plane plan = cv.GetPlane();
- Vector3d vec = plan.Normal;
- CurveCurveIntersector3d cci3d = new CurveCurveIntersector3d(c3d, c3d, vec);
- if (cci3d.NumberOfIntersectionPoints > 0)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
获取自交点参数

- /// <summary>
- /// 返回自相交Polyline自相交点Params
- /// </summary>
- /// <param name="cv">Curve(Polyline)</param>
- /// <returns>DoubleCollection or null</returns>
- private static object PolylineSelfIntersPams(Curve cv)
- {
- Curve3d c3d = cv.GetGeCurve();
- Plane plan = cv.GetPlane();
- Vector3d vec = plan.Normal;
- CurveCurveIntersector3d cci3d = new CurveCurveIntersector3d(c3d, c3d, vec);
- int n = cci3d.NumberOfIntersectionPoints;
- if (n > 0)
- {
- List<double> lpams = new List<double>();
- for (int i = 0; i < n; i++)
- {
- double[] pams = cci3d.GetIntersectionParameters(i);
- for (int j = 0; j < pams.Length; j++)
- {
- lpams.Add(pams[j]);
- }
- }
- lpams.Sort();
- DoubleCollection iCol = new DoubleCollection();
- iCol.Add(cv.GetParameterAtDistance(lpams[0]));
- for (int i = 1; i < lpams.Count; i++)
- {
- if (lpams[i] - iCol[i - 1] > 1e-6)
- {
- iCol.Add(cv.GetParameterAtDistance( lpams[i]));
- }
- }
- return iCol;
- }
- else
- {
- return null;
- }
- }
|