public static ICurve CreateTrimmedArc (this IModeler modeler, Vector3 center, Vector3 axis, Vector3 startPoint, Vector3 endPoint) { var radius = (startPoint - center).Length(); var arc = (Curve) modeler.CreateArc (center.ToDoubles(), axis.ToDoubles(), (double) radius, startPoint.ToDoubles(), endPoint.ToDoubles()); var pp0 = arc.GetClosestPointOn(startPoint.X, startPoint.Y, startPoint.Z).CastArray<double>(); var pp1 = arc.GetClosestPointOn(endPoint.X, endPoint.Y, endPoint.Z).CastArray<double>(); return arc.CreateTrimmedCurve(pp0[3], pp1[3]); }
public static IBody2 CreateCirclularSheet ( this IModeler modeler , Vector3 center , Vector3 vNormal , Vector3 vRef , 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 = centerSw.AddTs(vNormalOrthSw.ScaleTs(radius)); var startPointDbls = startPoint.ArrayData; var arco = modeler.CreateArc (centerDbls, vNormalDbls, radius, startPointDbls, startPointDbls); var arc = (Curve) arco; var arcStartPoint = arc.StartPoint(); var arcEndPoint = arc.EndPoint(); var trimmedArc = arc.CreateTrimmedCurve2(arcStartPoint.X,arcStartPoint.Y,arcStartPoint.Z,arcEndPoint.X,arcEndPoint.Y,arcEndPoint.Z); return (IBody2) surf.CreateTrimmedSheet(new[] {trimmedArc}); }
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}); }