Пример #1
0
        //--------------------------------------------------------------------------------------------------

        bool _FindBendAxis(MakeContext context)
        {
            // Find the longest edge to revolve around
            var foundEdges = EdgeAlgo.FindLongestEdge(context.TargetFace);

            if (!foundEdges.axis.HasValue || !foundEdges.opAxis.HasValue)
            {
                Messages.Error("No linear edge found to bend around.");
                return(false);
            }

            context.BendEdge     = _Reverse ? foundEdges.opEdge : foundEdges.edge;
            context.OppositeEdge = _Reverse ? foundEdges.edge : foundEdges.opEdge;
            context.BendAxis     = _Reverse ? foundEdges.opAxis.Value : foundEdges.axis.Value;

            // Direction of the inner: Get face plane, get cross vector of edge axis and plane normal
            if (!FaceAlgo.GetCenteredPlaneFromFace(context.TargetFace, out var facePlane))
            {
                Messages.Error("Face must be of planar type.");
                return(false);
            }

            context.TopDirection = context.BendAxis.Direction.Crossed(facePlane.Axis.Direction);

            // Move axis by radius to the center of the revolve
            var radius = Math.Max(0.001, _Radius);

            context.BendAxis.Translate(context.TopDirection.ToVec().Multiplied(radius));
            return(true);
        }
        public void FindLongestEdge()
        {
            var box    = Box.Create(10.0, 10.0, 1.0);
            var face   = box.GetBRep().Faces()[1];
            var edges  = face.Edges();
            var result = EdgeAlgo.FindLongestEdge(face);

            Assert.NotNull(result.edge);
            Assert.NotNull(result.axis);
            Assert.NotNull(result.opEdge);
            Assert.NotNull(result.opAxis);

            Assert.AreEqual(edges[1], result.edge);
            Assert.AreEqual(edges[3], result.opEdge);

            Assert.IsTrue(result.axis.Value.IsParallel(result.opAxis.Value, Double.Epsilon));
        }