protected override object Regenerate(IModeler modeler) { SwFeatureData.EnableMultiBodyConsume = true; if (Database.Style == MulitWireBodiesData.StyleEnum.Wire) { var w = _R.NextDouble(); var line0 = modeler.CreateTrimmedLine(new Vector3(0, -w, 0), new Vector3(1, -w, 0)); var line1 = modeler.CreateTrimmedLine(new Vector3(0, w, 0), new Vector3(1, w, 0)); var wire0 = line0.CreateWireBody(); var wire1 = line1.CreateWireBody(); SwFeatureData.AddIdsToBody(wire0); SwFeatureData.AddIdsToBody(wire1); return(new[] { wire0, wire1 }); } else { var solid0 = modeler.CreateBox(new Vector3(0, 0, 0), Vector3.UnitX, 1, 1, 1); var solid1 = modeler.CreateBox(new Vector3(2, 0, 0), Vector3.UnitX, 1, 1, 1); SwFeatureData.AddIdsToBody(solid0); SwFeatureData.AddIdsToBody(solid0); return(new[] { solid0, solid1 }); } }
/// <summary> /// 将点合成线 /// </summary> /// <param name="modeler"></param> /// <param name="points"></param> /// <param name="chordTolerance"></param> /// <param name="simplify"></param> /// <param name="closedCurve"></param> /// <returns></returns> public static Curve InterpolatePointsToCurve (this IModeler modeler , List <Vector3> points , double chordTolerance , bool simplify = true , bool closedCurve = false) { //points = CurveExtensions.FilterOutShortLines(points, 1e-5).ToList(); if (closedCurve) { points.Add(points.First()); } List <ICurve> lines = new List <ICurve>(); for (int i = 0; i < points.Count - 1; i++) { modeler.CreateTrimmedLine(points[i].ToSwMathPoint(), points[i + 1].ToSwMathPoint()); } var curve = modeler.MergeCurves(lines); if (simplify) { curve = curve.SimplifyBCurve(chordTolerance); } return(curve); }
public static Curve InterpolatePointsToCurve (this IModeler modeler , List <Vector3> points , double chordTolerance , bool simplify = true , bool closedCurve = false) { points = CurveExtensions.FilterOutShortLines(points, 1e-5).ToList(); if (closedCurve) { points.Add(points.First()); } var lines = points .Buffer(2, 1) .Where(b => b.Count == 2) .Select(ps => modeler.CreateTrimmedLine(ps[0], ps[1])) .Cast <ICurve>() .ToArray(); var curve = modeler.MergeCurves(lines); if (simplify) { curve = curve.SimplifyBCurve(chordTolerance); } return(curve); }
public static IBody2 CreateSemiCirclularSheet (this IModeler modeler , Vector3 center , Vector3 vNormal , Vector3 vRef // Horizontal , double radius) { // Should be orthogonal Debug.Assert(vRef.Dot(vNormal) < 1e-9); var math = SwAddinBase.Active.Math; var centerSw = center.ToSwMathPoint(); var vNormalSw = vNormal.ToSwMathPoint(); var vNormalOrthSw = vRef.ToSWVector(math).Normalise(); var centerDbls = centerSw.ArrayData; var vNormalDbls = vNormalSw.ArrayData; var vNormalOrthDbls = vNormalOrthSw.ArrayData; var surf = (Surface)modeler.CreatePlanarSurface2(centerDbls, vNormalDbls, vNormalOrthDbls); var startPoint = center + radius * vRef.Unit(); var endPoint = center - radius * vRef.Unit(); var startPointDbls = startPoint.ToDoubles(); var endPointDbls = endPoint.ToDoubles(); var arco = modeler.CreateArc (centerDbls, vNormalDbls, radius, startPointDbls, endPointDbls); var arc = (Curve)arco; var arcStartPoint = startPoint; var arcEndPoint = endPoint; var trimmedArc = arc.CreateTrimmedCurve2(arcStartPoint.X, arcStartPoint.Y, arcStartPoint.Z, arcEndPoint.X, arcEndPoint.Y, arcEndPoint.Z); var line = modeler.CreateTrimmedLine(arcEndPoint, arcStartPoint); return((IBody2)surf.CreateTrimmedSheet(new[] { trimmedArc, line })); }