예제 #1
0
 public void uninit()
 {
     m_pDevice        = null;
     m_pGsModel       = null;
     m_hoverGripsColl = null;
     m_gripDataDict   = null;
     m_aDrags         = null;
 }
예제 #2
0
        void initializeGraphics()
        {
            try
            {
                graphics = Graphics.FromHwnd(panel1.Handle);
                // load some predefined rendering module (may be also "WinDirectX" or "WinOpenGL")
                using (GsModule gsModule = (GsModule)SystemObjects.DynamicLinker.LoadModule("WinGDI.txv", false, true))
                {
                    // create graphics device
                    using (Teigha.GraphicsSystem.Device graphichsDevice = gsModule.CreateDevice())
                    {
                        // setup device properties
                        using (Dictionary props = graphichsDevice.Properties)
                        {
                            if (props.Contains("WindowHWND"))                                   // Check if property is supported
                            {
                                props.AtPut("WindowHWND", new RxVariant((Int32)panel1.Handle)); // hWnd necessary for DirectX device
                            }
                            if (props.Contains("WindowHDC"))                                    // Check if property is supported
                            {
                                props.AtPut("WindowHDC", new RxVariant(graphics.GetHdc()));     // hWindowDC necessary for Bitmap device
                            }
                            if (props.Contains("DoubleBufferEnabled"))                          // Check if property is supported
                            {
                                props.AtPut("DoubleBufferEnabled", new RxVariant(true));
                            }
                            if (props.Contains("EnableSoftwareHLR")) // Check if property is supported
                            {
                                props.AtPut("EnableSoftwareHLR", new RxVariant(true));
                            }
                            if (props.Contains("DiscardBackFaces")) // Check if property is supported
                            {
                                props.AtPut("DiscardBackFaces", new RxVariant(true));
                            }
                        }
                        // setup paperspace viewports or tiles
                        ContextForDbDatabase ctx = new ContextForDbDatabase(database);
                        ctx.UseGsModel = true;

                        helperDevice = LayoutHelperDevice.SetupActiveLayoutViews(graphichsDevice, ctx);
                        Aux.preparePlotstyles(database, ctx);
                        gripManager.init(helperDevice, helperDevice.Model, database);
                        //helperDevice.ActiveView.Mode = Teigha.GraphicsSystem.RenderMode.HiddenLine;
                    }
                }
                // set palette
                helperDevice.SetLogicalPalette(Device.DarkPalette);
                // set output extents
                resize();


                helperDevice.Model.Invalidate(InvalidationHint.kInvalidateAll);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
예제 #3
0
        public static void SVG_export(Database database)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.AddExtension = true;
            sfd.DefaultExt   = "svg";
            sfd.Filter       = "SVG files (*.svg)|*.svg";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                // SVG export is a rendering device too
                using (GsModule gsModule = (GsModule)SystemObjects.DynamicLinker.LoadModule("TD_SvgExport.tx", false, true))
                {
                    if (gsModule == null) // if SVG export module is not found
                    {
                        return;
                    }
                    // create graphics device
                    using (Teigha.GraphicsSystem.Device dev = gsModule.CreateDevice())
                    {
                        using (FileStreamBuf outStr = new FileStreamBuf(sfd.FileName, false, FileShareMode.DenyWrite, FileCreationDisposition.CreateAlways))
                        {
                            // setup device properties
                            using (Dictionary props = dev.Properties)
                            {
                                // SVG export uses stream output
                                props.AtPut("Output", outStr);
                                // lines may look thin - may be scaled
                                props.AtPut("LineWeightScale", new RxVariant(1.0));
                                // number of digits after decimal point in the output file
                                props.AtPut("Precision", new RxVariant(6));
                                // place to put images (may be relative path)
                                props.AtPut("ImageBase", new RxVariant(System.IO.Path.GetDirectoryName(sfd.FileName)));
                                // missing font
                                props.AtPut("GenericFontFamily", new RxVariant("sans-serif"));
                                // software HLR engine enabled
                                props.AtPut("UseHLR", new RxVariant(true));
                                // whether to use blended gradients for complex gradient fill (may increase size)
                                props.AtPut("EnableGouraudShading", new RxVariant(true));
                            }
                            dev.SetLogicalPalette(Device.LightPalette); // light palette with white background
                            ContextForDbDatabase ctx = new ContextForDbDatabase(database);
                            ctx.SetPlotGeneration(true);
                            LayoutHelperDevice hd = LayoutHelperDevice.SetupActiveLayoutViews(dev, ctx);
                            // size is SVG viewbox
                            hd.OnSize(new System.Drawing.Rectangle(0, 0, 1024, 768));
                            hd.Update();
                        }
                    }
                }
            }
        }
예제 #4
0
        public void init(LayoutHelperDevice pDevice, Model gsModule, Database pDb /* OdDbCommandContext ctx*/)
        {
            m_pDevice  = pDevice;
            m_pGsModel = gsModule;

            //pDb->addReactor(&m_cDbReactor);

            HostApplicationServices pAppSvcs = HostApplicationServices.Current;

            m_GRIPSIZE     = pAppSvcs.GRIPSIZE;
            m_GRIPOBJLIMIT = pAppSvcs.GRIPOBJLIMIT;
            m_GRIPCOLOR    = new EntityColor(ColorMethod.ByAci, pAppSvcs.GRIPCOLOR);
            m_GRIPHOVER    = new EntityColor(ColorMethod.ByAci, pAppSvcs.GRIPHOVER);
            m_GRIPHOT      = new EntityColor(ColorMethod.ByAci, pAppSvcs.GRIPHOT);

            //m_pGetSelectionSetPtr = pGetSSet;
        }
예제 #5
0
        public static BoundBlock3d GetLayoutExtents(this LayoutHelperDevice helperDevice)
        {
            BoundBlock3d boundBlock3D = new BoundBlock3d();

            using (View pView = helperDevice.ActiveView)
            {
                // camera position in world coordinates
                Point3d pos        = pView.Position;
                double  halfWidth  = pView.FieldWidth / 2;
                double  halfHeight = pView.FieldHeight / 2;
                double  xMin       = pos.X - halfWidth;
                double  xMax       = pos.X + halfWidth;
                double  yMin       = pos.Y - halfHeight;
                double  yMax       = pos.Y + halfHeight;
                boundBlock3D.Set(new Point3d(xMin, yMin, 0), new Point3d(xMax, yMax, 0));
            }
            return(boundBlock3D);
        }
예제 #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == openFileDialog.ShowDialog())
            {
                using (GsModule gsModule = (GsModule)SystemObjects.DynamicLinker.LoadModule("WinDirectX.txv", false, true))
                {
                    // create graphics device
                    using (Teigha.GraphicsSystem.Device dev = gsModule.CreateBitmapDevice())
                    {
                        // setup device properties
                        using (Dictionary props = dev.Properties)
                        {
                            props.AtPut("BitPerPixel", new RxVariant(int.Parse(comboBox1.Text)));
                        }
                        ContextForDbDatabase ctx = new ContextForDbDatabase(database);
                        ctx.PaletteBackground = colorDialog.Color;
                        LayoutHelperDevice helperDevice = LayoutHelperDevice.SetupActiveLayoutViews(dev, ctx);

                        helperDevice.SetLogicalPalette(Device.LightPalette); // light palette
                        Rectangle rect = new Rectangle(0, 0, (int)numericUpDownWidth.Value, (int)numericUpDownHeight.Value);
                        helperDevice.OnSize(rect);
                        ctx.SetPlotGeneration(checkBoxPlotGeneration.Checked);
                        if (ctx.IsPlotGeneration)
                        {
                            helperDevice.BackgroundColor = colorDialog.Color;
                        }
                        else
                        {
                            helperDevice.BackgroundColor = Color.FromArgb(0, 173, 174, 173);
                        }

                        helperDevice.Update();

                        if (DialogResult.OK == saveFileDialog.ShowDialog())
                        {
                            Export_Import.ExportBitmap(helperDevice, saveFileDialog.FileName);
                            Close();
                        }
                    }
                }
            }
        }
예제 #7
0
        public static ObjectIdCollection GetSelection(Database database, LayoutHelperDevice layoutHelperDevice, Point location, SelectionMode selectionMode)
        {
            ObjectIdCollection objectIdCollection = new ObjectIdCollection();

            if (database != null && layoutHelperDevice != null)
            {
                int buffer = 5;
                using (Selector selector = new Selector(objectIdCollection, database.CurrentSpaceId))
                {
                    using (Point2dCollection point2DCollection = new Point2dCollection(new Point2d[] { new Point2d(location.X - buffer, location.Y - buffer), new Point2d(location.X + buffer, location.Y + buffer) }))
                    {
                        using (View pView = layoutHelperDevice.ActiveView)
                        {
                            pView.Select(point2DCollection, selector, selectionMode);
                        }
                    }
                }
            }
            return(objectIdCollection);
        }
예제 #8
0
        public void Print(Database db, Teigha.GraphicsSystem.View pView, bool bPreview)
        {
            database = db;
            pViewDr  = pView;
            ObjectId idLayout = database.CurrentSpaceId;

            using (BlockTableRecord btr = (BlockTableRecord)database.CurrentSpaceId.GetObject(OpenMode.ForRead))
            {
                using (Layout pLayout = (Layout)btr.LayoutId.GetObject(OpenMode.ForRead))
                {
                    PrintDocument prDoc = new PrintDocument();
                    prDoc.PrintPage += new PrintPageEventHandler(this.PrintPage);
                    prDoc.PrinterSettings.PrinterName = pLayout.PlotConfigurationName;

                    PageSettings pageSetting = prDoc.DefaultPageSettings;
                    PlotRotation rotation    = pLayout.PlotRotation;
                    if (rotation == PlotRotation.Degrees090 || rotation == PlotRotation.Degrees270)
                    {
                        pageSetting.Landscape = true;
                    }
                    else
                    {
                        pageSetting.Landscape = false;
                    }

                    Double    kMmPerInch  = 10 / 2.54;
                    Point2d   ptPaperSize = pLayout.PlotPaperSize;
                    PaperSize ps          = new PaperSize(pLayout.CanonicalMediaName, (int)(ptPaperSize.X * kMmPerInch), (int)(ptPaperSize.Y * kMmPerInch));
                    pageSetting.PaperSize = ps;

                    //default as OdaMfc
                    pageSetting.Margins.Left   = 0;
                    pageSetting.Margins.Right  = 0;
                    pageSetting.Margins.Top    = 0;
                    pageSetting.Margins.Bottom = 0;

                    prDoc.DefaultPageSettings = pageSetting;
                    if (prDoc.PrinterSettings.IsValid)
                    {
                        try
                        {                                                                 //WinGDI, WinOpenGL
                            using (GsModule gsModule = (GsModule)SystemObjects.DynamicLinker.LoadModule("WinGDI.txv", false, true))
                            {
                                using (Teigha.GraphicsSystem.Device graphichsDevice = gsModule.CreateDevice())
                                {
                                    using (ContextForDbDatabase ctx = new ContextForDbDatabase(database))
                                    {
                                        ctx.SetPlotGeneration(true);
                                        ctx.UseGsModel   = true;
                                        m_pPrinterDevice = LayoutHelperDevice.SetupActiveLayoutViews(graphichsDevice, ctx);
                                        m_pPrinterDevice.BackgroundColor = Color.FromArgb(0, 255, 255, 255);
                                        m_pPrinterDevice.SetLogicalPalette(Device.LightPalette);

                                        Aux.preparePlotstyles(database, ctx);
                                    }
                                }
                            }
                        }
                        catch (System.Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }

                        if (bPreview)
                        {
                            PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
                            printPreviewDialog.Document = prDoc;
                            printPreviewDialog.ShowDialog();
                        }
                        else
                        {
                            prDoc.Print();
                        }

                        m_pPrinterDevice = null;
                        database         = null;
                        pViewDr          = null;
                    }
                }
            }
        }