示例#1
0
        private void GetPolylines4D(
            DrawContext context,
            int elementIndex,
            int minElementCount,
            DxfMLineStyle.Element styleElement,
            IClippingTransformer transformer,
            out IList <Polyline4D> polylines4D,
            out IList <IShape4D> shapes)
        {
            WW.Math.Point3D     point3D0       = this.point3D_0;
            bool                closed         = this.Closed;
            IList <Polyline3D>  polyline3DList = (IList <Polyline3D>) new List <Polyline3D>();
            IList <FlatShape4D> resultShapes   = (IList <FlatShape4D>) new List <FlatShape4D>();

            if (minElementCount == 0)
            {
                Polyline3D polyline3D = new Polyline3D(closed);
                foreach (DxfMLine.Segment segment in this.list_0)
                {
                    polyline3D.Add(segment.Position);
                }
                if (polyline3D.Count > 0)
                {
                    DxfUtil.smethod_2(context.Config, polyline3DList, resultShapes, (IList <Polyline3D>) new Polyline3D[1]
                    {
                        polyline3D
                    }, styleElement.LineType, this.vector3D_0, 1.0, transformer.LineTypeScaler);
                }
            }
            else
            {
                IList <Polyline3D> polylines  = (IList <Polyline3D>) new List <Polyline3D>();
                Polyline3D         polyline3D = new Polyline3D();
                bool flag = false;
                foreach (DxfMLine.Segment segment in this.list_0)
                {
                    WW.Math.Vector3D miterDirection = segment.MiterDirection;
                    WW.Math.Point3D  position       = segment.Position;
                    if (elementIndex < segment.Elements.Count)
                    {
                        DxfMLine.Segment.Element element  = segment.Elements[elementIndex];
                        WW.Math.Point3D          point3D1 = position;
                        if (element.Parameters.Count > 0)
                        {
                            WW.Math.Point3D point3D2 = point3D1 + miterDirection * element.Parameters[0];
                            if (element.Parameters.Count > 1)
                            {
                                for (int index = 1; index < element.Parameters.Count; index += 2)
                                {
                                    WW.Math.Point3D point3D3 = point3D2 + segment.Direction * element.Parameters[index];
                                    polyline3D.Add(point3D3);
                                    if (index + 1 < element.Parameters.Count)
                                    {
                                        WW.Math.Point3D point3D4 = point3D2 + segment.Direction * element.Parameters[index + 1];
                                        polyline3D.Add(point3D4);
                                        polylines.Add(polyline3D);
                                        polyline3D = new Polyline3D();
                                    }
                                }
                            }
                            else if (polyline3D.Count > 0)
                            {
                                polyline3D.Add(point3D2);
                                polylines.Add(polyline3D);
                                polyline3D = new Polyline3D();
                            }
                        }
                        else if (element.AreaFillParameters.Count > 0)
                        {
                            flag = true;
                        }
                    }
                }
                DxfMLine.Segment segment1 = this.list_0[this.list_0.Count - 1];
                if (closed && polyline3D.Count > 0)
                {
                    DxfMLine.Segment segment2 = this.list_0[0];
                    if (elementIndex < segment2.Elements.Count)
                    {
                        DxfMLine.Segment.Element element  = segment2.Elements[elementIndex];
                        WW.Math.Point3D          position = segment2.Position;
                        if (element.Parameters.Count > 0)
                        {
                            WW.Math.Vector3D miterDirection = segment2.MiterDirection;
                            WW.Math.Point3D  point3D        = position + miterDirection * element.Parameters[0];
                            polyline3D.Add(point3D);
                        }
                    }
                }
                if (polyline3D.Count > 0)
                {
                    polylines.Add(polyline3D);
                }
                if (flag)
                {
                    polyline3DList.Add(polyline3D);
                }
                else if (polylines.Count > 0)
                {
                    DxfUtil.smethod_2(context.Config, polyline3DList, resultShapes, polylines, styleElement.LineType, this.vector3D_0, 1.0, transformer.LineTypeScaler);
                }
            }
            polylines4D = DxfUtil.smethod_36(polyline3DList, false, transformer);
            shapes      = DxfUtil.smethod_37((ICollection <FlatShape4D>)resultShapes, transformer);
        }
示例#2
0
        private void GetPolylines4D(
            DrawContext context,
            IClippingTransformer transformer,
            out IList <Polyline4D> polylines4D,
            out IList <IShape4D> shapes)
        {
            IList <WW.Math.Geometry.Polyline3D> polyline3DList = (IList <WW.Math.Geometry.Polyline3D>) new List <WW.Math.Geometry.Polyline3D>(4);
            IList <FlatShape4D> resultShapes = (IList <FlatShape4D>)null;
            int count = this.list_0.Count;

            if (count > 1)
            {
                bool flag = true;
                if (this.FirstEdgeInvisible)
                {
                    flag = false;
                }
                if (this.SecondEdgeInvisible)
                {
                    flag = false;
                }
                if (count > 2)
                {
                    if (this.ThirdEdgeInvisible)
                    {
                        flag = false;
                    }
                    if (count > 3 && this.FourthEdgeInvisible)
                    {
                        flag = false;
                    }
                }
                if (flag)
                {
                    WW.Math.Geometry.Polyline3D polyline3D = new WW.Math.Geometry.Polyline3D(count, count > 2);
                    for (int index = 0; index < count; ++index)
                    {
                        polyline3D.Add(this.list_0[index]);
                    }
                    polyline3DList.Add(polyline3D);
                }
                else
                {
                    if (!this.FirstEdgeInvisible)
                    {
                        polyline3DList.Add(new WW.Math.Geometry.Polyline3D(new WW.Math.Point3D[2]
                        {
                            this.list_0[0],
                            this.list_0[1]
                        }));
                    }
                    if (count > 2)
                    {
                        if (!this.SecondEdgeInvisible)
                        {
                            polyline3DList.Add(new WW.Math.Geometry.Polyline3D(new WW.Math.Point3D[2]
                            {
                                this.list_0[1],
                                this.list_0[2]
                            }));
                        }
                        if (this.Points.Count == 3)
                        {
                            if (!this.ThirdEdgeInvisible)
                            {
                                polyline3DList.Add(new WW.Math.Geometry.Polyline3D(new WW.Math.Point3D[2]
                                {
                                    this.list_0[2],
                                    this.list_0[0]
                                }));
                            }
                        }
                        else if (this.Points.Count == 4)
                        {
                            if (!this.ThirdEdgeInvisible)
                            {
                                polyline3DList.Add(new WW.Math.Geometry.Polyline3D(new WW.Math.Point3D[2]
                                {
                                    this.list_0[2],
                                    this.list_0[3]
                                }));
                            }
                            if (!this.FourthEdgeInvisible)
                            {
                                polyline3DList.Add(new WW.Math.Geometry.Polyline3D(new WW.Math.Point3D[2]
                                {
                                    this.list_0[3],
                                    this.list_0[0]
                                }));
                            }
                        }
                    }
                }
                IList <WW.Math.Geometry.Polyline3D> polylines = (IList <WW.Math.Geometry.Polyline3D>) new List <WW.Math.Geometry.Polyline3D>(4);
                resultShapes = (IList <FlatShape4D>) new List <FlatShape4D>();
                DxfUtil.smethod_2(context.Config, polyline3DList, resultShapes, polylines, this.GetLineType(context), Vector3D.ZAxis, context.TotalLineTypeScale * this.LineTypeScale, transformer.LineTypeScaler);
            }
            polylines4D = DxfUtil.smethod_36(polyline3DList, false, transformer);
            shapes      = DxfUtil.smethod_37((ICollection <FlatShape4D>)resultShapes, transformer);
        }