Example #1
0
        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 });
            }
        }
Example #2
0
        /// <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 }));
        }