Example #1
0
        // Token: 0x06000010 RID: 16 RVA: 0x0000287C File Offset: 0x00000A7C
        private static void CreateTesselatedEdge(List <Vector3> vertices, List <int[]> wires, IList <Vector3> sweepContour, Angle curveTesselation, ref AffineTransform3 transform, IEdge3 edge)
        {
            EdgeLineSegment3 edgeLineSegment = edge as EdgeLineSegment3;

            if (edgeLineSegment != null)
            {
                SweptDiskSolidExtensions.CreateTesselatedEdgeLine(vertices, wires, sweepContour, ref transform, edgeLineSegment);
                return;
            }
            EdgeArc3 edgeArc = edge as EdgeArc3;

            if (edgeArc != null)
            {
                SweptDiskSolidExtensions.CreateTesselatedEdgeArc(vertices, wires, sweepContour, curveTesselation, ref transform, edgeArc);
                return;
            }
            EdgePolyLineSegment3 edgePolyLineSegment = edge as EdgePolyLineSegment3;

            if (edgePolyLineSegment != null)
            {
                SweptDiskSolidExtensions.CreateTesselatedEdgePolyLine(vertices, wires, sweepContour, ref transform, edgePolyLineSegment);
                return;
            }
        }
Example #2
0
        // Token: 0x06000014 RID: 20 RVA: 0x00002B48 File Offset: 0x00000D48
        private static AffineTransform3 CreateSegmentTransform(AffineTransform3 transform, EdgeArc3 edgeArc, int segmentIndex, int segmentCount)
        {
            if (segmentIndex + 1 == segmentCount)
            {
                AffineTransform3 affineTransform = Transform3Factory.CreateFromAxisAngle(edgeArc.Arc.Circle.Normal, edgeArc.Arc.DeltaAngle, edgeArc.Arc.Circle.Center).Transform(transform);
                UnitVector3      normalized      = (edgeArc.Arc.Circle.UnitV * edgeArc.Arc.DeltaAngle.Cos - edgeArc.Arc.Circle.UnitU * edgeArc.Arc.DeltaAngle.Sin).GetNormalized();
                UnitVector3      axisY           = normalized.UnitCross(affineTransform.AxisX);
                return(new AffineTransform3(axisY.UnitCross(normalized), axisY, normalized, edgeArc.Arc.EndPoint));
            }
            Angle angle = edgeArc.Arc.DeltaAngle * (((double)segmentIndex + 1.0) / (double)segmentCount);

            return(Transform3Factory.CreateFromAxisAngle(edgeArc.Arc.Circle.Normal, angle, edgeArc.Arc.Circle.Center).Transform(transform));
        }
Example #3
0
        // Token: 0x06000012 RID: 18 RVA: 0x000029D0 File Offset: 0x00000BD0
        private static void CreateTesselatedEdgeArc(List <Vector3> vertices, List <int[]> wires, IList <Vector3> sweepContour, Angle curveTesselation, ref AffineTransform3 transform, EdgeArc3 edgeArc)
        {
            if (edgeArc.Arc.DeltaAngle.Radians < 0.001)
            {
                return;
            }
            if (edgeArc.Arc.StartAngle.Radians != 0.0)
            {
                throw new NotSupportedException("The start angle of the arc should be zero.");
            }
            int num = Math.Max(1, (int)(Math.Abs(edgeArc.Arc.DeltaAngle.Radians) / curveTesselation.Radians + 0.9));

            for (int i = 0; i < num; i++)
            {
                AffineTransform3 transform2 = SweptDiskSolidExtensions.CreateSegmentTransform(transform, edgeArc, i, num);
                SweptDiskSolidExtensions.CreateTransformedSweep(vertices, sweepContour, transform2);
                SweptDiskSolidExtensions.BuildWires(vertices, wires, sweepContour.Count);
            }
            AffineTransform3 transformer = Transform3Factory.CreateFromAxisAngle(edgeArc.Arc.Circle.Normal, edgeArc.Arc.DeltaAngle, edgeArc.Arc.Circle.Center);

            transform = transformer.Transform(transform);
        }