Esempio n. 1
0
        /// <summary>
        /// Creates an <paramref name="affine"/> transform for DXF to PDF coordinate transformation and
        /// a <paramref name="scale"/> transform for relative values like radii.
        /// </summary>
        /// <param name="viewPort">The DXF view port.</param>
        /// <param name="options">The converter options.</param>
        /// <param name="scale">[out] The (relative) scale transform.</param>
        /// <param name="affine">[out] The (absolute) affine transform including scale.</param>
        private static void CreateTransformations(DxfViewPort viewPort, DxfToPdfConverterOptions options,
                                                  out Matrix4 scale, out Matrix4 affine)
        {
            if (options.DxfSource != null && options.PdfDestination != null)
            {
                // user supplied source and destination rectangles, no trouble with units
                var    dxfSource  = options.DxfSource.GetValueOrDefault();
                double pdfOffsetX = options.PdfDestination.Left.AsPoints();
                double pdfOffsetY = options.PdfDestination.Bottom.AsPoints();
                double scaleX     = options.PdfDestination.Width.AsPoints() / dxfSource.Width;
                double scaleY     = options.PdfDestination.Height.AsPoints() / dxfSource.Height;
                double dxfOffsetX = dxfSource.Left;
                double dxfOffsetY = dxfSource.Bottom;
                scale  = Matrix4.CreateScale(scaleX, scaleY, 0.0);
                affine = Matrix4.CreateTranslate(+pdfOffsetX, +pdfOffsetY, 0.0)
                         * scale
                         * Matrix4.CreateTranslate(-dxfOffsetX, -dxfOffsetY, 0.0);
                return;
            }
            // TODO this code assumes DXF unit inch - use actual unit from header instead!
            // scale depends on the unit, output "pdf points" with 72 DPI
            const double dotsPerInch = 72;

            scale  = Matrix4.CreateScale(options.Scale * dotsPerInch, options.Scale * dotsPerInch, 0.0);
            affine = Matrix4.Identity
                     * scale
                     * Matrix4.CreateTranslate(-viewPort.LowerLeft.X, -viewPort.LowerLeft.Y, 0.0);
        }
        internal static DxfTable ReadFromBuffer(DxfCodePairBufferReader buffer)
        {
            var table = new DxfViewPortTable();

            table.Items.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                buffer.Advance();
                if (DxfTablesSection.IsTableEnd(pair))
                {
                    break;
                }

                if (pair.Code == 0 && pair.StringValue == DxfTable.ViewPortText)
                {
                    var item = DxfViewPort.FromBuffer(buffer);
                    table.Items.Add(item);
                }
            }

            return(table);
        }
Esempio n. 3
0
        internal static DxfViewPort FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfViewPort();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 10:
                        item.LowerLeft.X = (pair.DoubleValue);
                        break;
                    case 20:
                        item.LowerLeft.Y = (pair.DoubleValue);
                        break;
                    case 11:
                        item.UpperRight.X = (pair.DoubleValue);
                        break;
                    case 21:
                        item.UpperRight.Y = (pair.DoubleValue);
                        break;
                    case 12:
                        item.ViewCenter.X = (pair.DoubleValue);
                        break;
                    case 22:
                        item.ViewCenter.Y = (pair.DoubleValue);
                        break;
                    case 13:
                        item.SnapBasePoint.X = (pair.DoubleValue);
                        break;
                    case 23:
                        item.SnapBasePoint.Y = (pair.DoubleValue);
                        break;
                    case 14:
                        item.SnapSpacing.X = (pair.DoubleValue);
                        break;
                    case 24:
                        item.SnapSpacing.Y = (pair.DoubleValue);
                        break;
                    case 15:
                        item.GridSpacing.X = (pair.DoubleValue);
                        break;
                    case 25:
                        item.GridSpacing.Y = (pair.DoubleValue);
                        break;
                    case 16:
                        item.ViewDirection.X = (pair.DoubleValue);
                        break;
                    case 26:
                        item.ViewDirection.Y = (pair.DoubleValue);
                        break;
                    case 36:
                        item.ViewDirection.Z = (pair.DoubleValue);
                        break;
                    case 17:
                        item.TargetViewPoint.X = (pair.DoubleValue);
                        break;
                    case 27:
                        item.TargetViewPoint.Y = (pair.DoubleValue);
                        break;
                    case 37:
                        item.TargetViewPoint.Z = (pair.DoubleValue);
                        break;
                    case 40:
                        item.ViewHeight = (pair.DoubleValue);
                        break;
                    case 41:
                        item.ViewPortAspectRatio = (pair.DoubleValue);
                        break;
                    case 42:
                        item.LensLength = (pair.DoubleValue);
                        break;
                    case 43:
                        item.FrontClippingPlane = (pair.DoubleValue);
                        break;
                    case 44:
                        item.BackClippingPlane = (pair.DoubleValue);
                        break;
                    case 45:
                        item.ViewHeight = (pair.DoubleValue);
                        break;
                    case 50:
                        item.SnapRotationAngle = (pair.DoubleValue);
                        break;
                    case 51:
                        item.ViewTwistAngle = (pair.DoubleValue);
                        break;
                    case 68:
                        item.Status = (pair.ShortValue);
                        break;
                    case 69:
                        item.ID = (pair.ShortValue);
                        break;
                    case 71:
                        item.ViewMode = (DxfViewMode)(pair.ShortValue);
                        break;
                    case 72:
                        item.CircleZoomPercent = (int)(pair.ShortValue);
                        break;
                    case 73:
                        item.FastZoom = BoolShort(pair.ShortValue);
                        break;
                    case 74:
                        item.UCSIcon = BoolShort(pair.ShortValue);
                        break;
                    case 75:
                        item.SnapOn = BoolShort(pair.ShortValue);
                        break;
                    case 76:
                        item.GridOn = BoolShort(pair.ShortValue);
                        break;
                    case 77:
                        item.SnapStyle = (pair.ShortValue);
                        break;
                    case 78:
                        item.SnapIsoPair = (pair.ShortValue);
                        break;
                    case 1:
                        item.PlotStyleSheet = (pair.StringValue);
                        break;
                    case 281:
                        item.RenderMode = (DxfViewRenderMode)(pair.ShortValue);
                        break;
                    case 65:
                        item.HasOwnUCS = BoolShort(pair.ShortValue);
                        break;
                    case 110:
                        item.UCSOrigin.X = (pair.DoubleValue);
                        break;
                    case 120:
                        item.UCSOrigin.Y = (pair.DoubleValue);
                        break;
                    case 130:
                        item.UCSOrigin.Z = (pair.DoubleValue);
                        break;
                    case 111:
                        item.UCSXAxis.X = (pair.DoubleValue);
                        break;
                    case 121:
                        item.UCSXAxis.Y = (pair.DoubleValue);
                        break;
                    case 131:
                        item.UCSXAxis.Z = (pair.DoubleValue);
                        break;
                    case 112:
                        item.UCSYAxis.X = (pair.DoubleValue);
                        break;
                    case 122:
                        item.UCSYAxis.Y = (pair.DoubleValue);
                        break;
                    case 132:
                        item.UCSYAxis.Z = (pair.DoubleValue);
                        break;
                    case 79:
                        item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                        break;
                    case 146:
                        item.UCSElevation = (pair.DoubleValue);
                        break;
                    case 345:
                        item.UCSHandle = UIntHandle(pair.StringValue);
                        break;
                    case 346:
                        item.BaseUCSHandle = UIntHandle(pair.StringValue);
                        break;
                    case 170:
                        item.ShadePlotSetting = (DxfShadeEdgeMode)(pair.ShortValue);
                        break;
                    case 61:
                        item.MajorGridLines = BoolShort(pair.ShortValue);
                        break;
                    case 332:
                        item.BackgroundObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 333:
                        item.ShadePlotObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 348:
                        item.VisualStyleObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 292:
                        item.IsDefaultLightingOn = (pair.BoolValue);
                        break;
                    case 282:
                        item.DefaultLightingType = (DxfDefaultLightingType)(pair.ShortValue);
                        break;
                    case 141:
                        item.Brightness = (pair.DoubleValue);
                        break;
                    case 142:
                        item.Contrast = (pair.DoubleValue);
                        break;
                    case 62:
                        item.AmbientColor = DxfColor.FromRawValue(pair.ShortValue);
                        break;
                    case 421:
                        item.AmbientColorInt = (pair.IntegerValue);
                        break;
                    case 431:
                        item.AmbientColorName = (pair.StringValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }