예제 #1
0
        public TextShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, DWriteFactory dwriteFactory)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            this.dwriteFactory = dwriteFactory;
            layoutRect         = RandomRect(CanvasWidth, CanvasHeight);
            NiceGabriola       = Random.NextDouble() < 0.25 && dwriteFactory.SystemFontFamilyCollection.Contains("Gabriola");
            TextFormat         = dwriteFactory.CreateTextFormat(
                RandomFontFamily(),
                RandomFontSize(),
                RandomFontWeight(),
                RandomFontStyle(),
                RandomFontStretch(),
                System.Globalization.CultureInfo.CurrentUICulture);
            if (CoinFlip)
            {
                TextFormat.LineSpacing = RandomLineSpacing(TextFormat.FontSize);
            }
            Text = RandomString(Random.Next(1000, 1000));

            FillBrush       = RandomBrush();
            RenderingParams = RandomRenderingParams();

            if (CoinFlip)
            {
                Options = DrawTextOptions.None;
                if (CoinFlip)
                {
                    Options |= DrawTextOptions.Clip;
                }
                if (CoinFlip)
                {
                    Options |= DrawTextOptions.NoSnap;
                }
            }
        }
예제 #2
0
 protected virtual void DisposeDirectXResources()
 {
     DwFactory?.Dispose();
     RenderTarget?.Dispose();
     D2DFactory?.Dispose();
     D3DDevice?.Dispose();
 }
예제 #3
0
        public MeshShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            FillBrush = RandomBrush();

            mesh = CoinFlip ? MeshFromRandomGeometry() : MeshFromRandomTriangles();
        }
예제 #4
0
        public GeometryShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            coolStrokes = CoinFlip;
            double which = Random.NextDouble();

            if (which < 0.67 || coolStrokes)
            {
                PenBrush = RandomBrush();
            }
            if (!coolStrokes && which > 0.33)
            {
                FillBrush = RandomBrush();
            }
            if (coolStrokes || CoinFlip)
            {
                StrokeStyle = RandomStrokeStyle();
            }
            if (CoinFlip)
            {
                worldTransform = RandomMatrix3x2();
            }
            StrokeWidth = RandomStrokeWidth();
            geometry    = RandomGeometry();
            if (coolStrokes || Random.NextDouble() < 0.3)
            {
                ModifyGeometry();
            }
            if (coolStrokes && CoinFlip)
            {
                ModifyGeometry();
            }
        }
예제 #5
0
        /// <summary>
        /// アンマネージ リソースの解放およびリセットに関連付けられているアプリケーション定義のタスクを実行します。
        /// </summary>
        public void Dispose()
        {
            foreach (var screenContext in screenContexts)
            {
                screenContext.Value.Dispose();
            }
            if (CullingRasterizerState != null && !CullingRasterizerState.Disposed)
            {
                CullingRasterizerState.Dispose();
            }
            if (NonCullingRasterizerState != null && !NonCullingRasterizerState.Disposed)
            {
                NonCullingRasterizerState.Dispose();
            }
            foreach (var disposable in Disposables)
            {
                disposable.Dispose();
            }
            if (D2DFactory != null && !D2DFactory.Disposed)
            {
                D2DFactory.Dispose();
            }
            if (DWFactory != null && !DWFactory.Disposed)
            {
                DWFactory.Dispose();
            }

            if (disposeDeviceManager)
            {
                DeviceManager.Dispose();
            }
        }
예제 #6
0
        public MeshShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            FillBrush = RandomBrush();

            mesh = CoinFlip ? MeshFromRandomGeometry() : MeshFromRandomTriangles();
        }
        protected CoordinateTargetView(Target target, RenderTarget canvas, D2DFactory factory, CoordinateSystem coordinateSystem)
            : base(target)
        {
            if (target == null)
            {
                return;
            }

            this.canvas      = canvas;
            this.factory     = factory;
            CoordinateSystem = coordinateSystem;

            position = coordinateSystem.CoordinateToPoint(target.CurrentCoordinate);     //计算显示坐标

            activeRect = new Rect
            {
                Left   = (int)position.X - activeRectRadius,
                Top    = (int)position.Y - activeRectRadius,
                Right  = (int)position.X + activeRectRadius,
                Bottom = (int)position.Y + activeRectRadius
            };

            targetController = TargetManagerFactory.CreateTargetManagerController();
            targetViewBrush  = canvas.CreateSolidColorBrush(Tools.GetColorFFromRgb(255, 128, 0)); //橘黄
        }
예제 #8
0
        public TextShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, DWriteFactory dwriteFactory)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            this.dwriteFactory = dwriteFactory;
            layoutRect = RandomRect(CanvasWidth, CanvasHeight);
            NiceGabriola = Random.NextDouble() < 0.25 && dwriteFactory.SystemFontFamilyCollection.Contains("Gabriola");
            TextFormat = dwriteFactory.CreateTextFormat(
                RandomFontFamily(),
                RandomFontSize(),
                RandomFontWeight(),
                RandomFontStyle(),
                RandomFontStretch(),
                System.Globalization.CultureInfo.CurrentUICulture);
            if (CoinFlip)
                TextFormat.LineSpacing = RandomLineSpacing(TextFormat.FontSize);
            Text = RandomString(Random.Next(1000, 1000));

            FillBrush = RandomBrush();
            RenderingParams = RandomRenderingParams();

            if (CoinFlip)
            {
                Options = DrawTextOptions.None;
                if (CoinFlip)
                    Options |= DrawTextOptions.Clip;
                if (CoinFlip)
                    Options |= DrawTextOptions.NoSnap;
            }
        }
 protected DrawingShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
 {
     renderTarget = initialRenderTarget;
     Random = random;
     this.d2DFactory = d2DFactory;
     this.bitmap = bitmap;
     shapeID = ++shapesCreated;
 } 
        protected void InitializeDirect2D(Panel holder)                       //用控件初始化Direct2D变量
        {
            Factory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded); //创建工厂
            var rtps = new RenderTargetProperties();
            var hrtp = new HwndRenderTargetProperties(holder.Handle, new SizeU((uint)holder.Width, (uint)holder.Height), PresentOptions.None);

            Canvas = Factory.CreateHwndRenderTarget(rtps, hrtp);
        }
예제 #11
0
 protected DrawingShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
 {
     renderTarget    = initialRenderTarget;
     Random          = random;
     this.d2DFactory = d2DFactory;
     this.bitmap     = bitmap;
     shapeID         = ++shapesCreated;
 }
 public LineShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
     : base(initialRenderTarget, random, d2DFactory, bitmap)
 {
     point0 = RandomPoint();
     point1 = RandomPoint();
     PenBrush = RandomBrush();
     StrokeWidth = RandomStrokeWidth();
     if (CoinFlip)
         StrokeStyle = RandomStrokeStyle();
 }
예제 #13
0
 protected virtual void DisposeDirectXResources()
 {
     DwFactory.Dispose();
     RenderTarget.Dispose();
     RenderTargetView.Dispose();
     D2DFactory.Dispose();
     SwapChain.Dispose();
     D3DDeviceContext.Dispose();
     D3DDevice.Dispose();
 }
예제 #14
0
 public BitmapShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
     : base(initialRenderTarget, random, d2DFactory, bitmap)
 {
     DestRect = RandomRect(CanvasWidth, CanvasHeight);
     opacity = RandomOpacity();
     DrawSection = Random.NextDouble() < 0.25;
     if (drawSection)
         SourceRect = RandomRect(
             Bitmap.PixelSize.Width,
             Bitmap.PixelSize.Height);
 }
예제 #15
0
 public void Initialize()
 {
     d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.MultiThreaded);
     dwriteFactory = DWriteFactory.CreateFactory();
     InitializeRenderTarget();
     FillFontFamilies();
     if (FixedItemHeight)
         DropDownHeight = (int)maxHeight * 10;
     DrawMode = DrawMode.OwnerDrawVariable;
     MeasureItem += FontEnumComboBox_MeasureItem;
     DrawItem += FontEnumComboBox_DrawItem;
 } 
예제 #16
0
        private void InitializeDisplayerState()
        {
            var rtps = new RenderTargetProperties();
            var hrtp = new HwndRenderTargetProperties(Panel.Handle, new SizeU((uint)Panel.Width, (uint)Panel.Height), PresentOptions.None);

            Factory              = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded); //创建工厂
            rt                   = Factory.CreateHwndRenderTarget(rtps, hrtp);
            rt.AntiAliasMode     = AntiAliasMode.Aliased;
            rt.TextAntiAliasMode = TextAntiAliasMode.Aliased;
            (rt as HwndRenderTarget).Resize(new SizeU((uint)Panel.Width, (uint)Panel.Height));
            rt.Transform = Matrix3x2F.Scale(rt.Size.Width / Panel.Width, rt.Size.Height / Panel.Height);
        }
예제 #17
0
 public LineShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
     : base(initialRenderTarget, random, d2DFactory, bitmap)
 {
     point0      = RandomPoint();
     point1      = RandomPoint();
     PenBrush    = RandomBrush();
     StrokeWidth = RandomStrokeWidth();
     if (CoinFlip)
     {
         StrokeStyle = RandomStrokeStyle();
     }
 }
예제 #18
0
        void host_Loaded(object sender, RoutedEventArgs e)
        {
            // Create the D2D Factory
            d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create the DWrite Factory
            dwriteFactory = DWriteFactory.CreateFactory();

            // Start rendering now!
            host.Render = Render;
            host.InvalidateVisual();
        }
예제 #19
0
        protected D2DFactory Factory;       //用于计算pathGeometry


        protected CoordinateSystem(Rect drawArea, double range, D2DFactory factory)     //drawArea为的目标区域和坐标刻度区域的和
        {
            // ReSharper disable once VirtualMemberCallInConstructor
            _coordinateArea = FindCoordinateArea(drawArea);         //绘制坐标系的范围
            OriginalRect    = _coordinateArea;
            VisibleArea     = drawArea;
            VisibleCenter   = Tools.FindCenterPosition(VisibleArea);
            // ReSharper disable once VirtualMemberCallInConstructor
            OriginalPoint = FindOriginalPoint(_coordinateArea);     //原点位置
            Range         = range;
            Factory       = factory;
        }
예제 #20
0
        void host_Loaded(object sender, RoutedEventArgs e)
        {
            // Create the D2D Factory
            d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create the DWrite Factory
            dwriteFactory = DWriteFactory.CreateFactory();

            // Start rendering now!
            host.Render = Render;
            host.InvalidateVisual();
        }
예제 #21
0
 protected override void Dispose(bool disposing)
 {
     if (Disposing)
     {
         DisposeRenderObjects();
         if (D2DFactory != null)
         {
             D2DFactory.Dispose();
             D2DFactory = null;
         }
     }
     base.Dispose(disposing);
 }
예제 #22
0
        public GDIEllipsesShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, int count)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            for(int i = 0; i < count; i++)
            {
                ellipses.Add(RandomGdiEllipse());
            }

            if (RenderTargetSupportsGDI(RenderTarget))
            {
                gdiRenderTarget = RenderTarget.GetGdiInteropRenderTarget();
            }
        }
예제 #23
0
 public RoundRectangleShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
     : base(initialRenderTarget, random, d2DFactory, bitmap)
 {
     rect = RandomRoundedRect();
     double which = Random.NextDouble();
     if (which < 0.67)
         PenBrush = RandomBrush();
     if (which > 0.33)
         FillBrush = RandomBrush();
     if (CoinFlip)
         StrokeStyle = RandomStrokeStyle();
     StrokeWidth = RandomStrokeWidth();
 }
예제 #24
0
        public GDIEllipsesShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, int count)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            for (int i = 0; i < count; i++)
            {
                ellipses.Add(RandomGdiEllipse());
            }

            if (RenderTargetSupportsGDI(RenderTarget))
            {
                gdiRenderTarget = RenderTarget.GdiInteropRenderTarget;
            }
        }
예제 #25
0
 public BitmapShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
     : base(initialRenderTarget, random, d2DFactory, bitmap)
 {
     DestRect    = RandomRect(CanvasWidth, CanvasHeight);
     opacity     = RandomOpacity();
     DrawSection = Random.NextDouble() < 0.25;
     if (drawSection)
     {
         SourceRect = RandomRect(
             Bitmap.PixelSize.Width,
             Bitmap.PixelSize.Height);
     }
 }
예제 #26
0
 public void Initialize()
 {
     d2DFactory    = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded);
     dwriteFactory = DWriteFactory.CreateFactory();
     InitializeRenderTarget();
     FillFontFamilies();
     if (FixedItemHeight)
     {
         DropDownHeight = (int)maxHeight * 10;
     }
     DrawMode     = DrawMode.OwnerDrawVariable;
     MeasureItem += FontEnumComboBox_MeasureItem;
     DrawItem    += FontEnumComboBox_DrawItem;
 }
예제 #27
0
        void CreateDeviceIndependentResources()
        {
            // Create a Direct2D factory.
            d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create a DirectWrite factory.
            dWriteFactory = DWriteFactory.CreateFactory();

            // Create a DirectWrite text format object.
            textFormat = dWriteFactory.CreateTextFormat("Calibri", 50, DWrite.FontWeight.Bold, DWrite.FontStyle.Normal, DWrite.FontStretch.Normal);

            // Center the text both horizontally and vertically.
            textFormat.TextAlignment      = DWrite.TextAlignment.Leading;
            textFormat.ParagraphAlignment = ParagraphAlignment.Near;
        }
 public CoordinateTargetDotView(Target target, RenderTarget rt, D2DFactory factory, CoordinateSystem cs)
     : base(target, rt, factory, cs)
 {
     if (!((TargetDot)target).IsClotDot)
     {
         targetViewRadius = 2;
         float redColorValue  = CalRedColorValue(target.AmValue);
         float blueColorValue = CalBlueColorValue(target.AmValue);
         targetViewBrush = canvas.CreateSolidColorBrush(new ColorF(redColorValue, 0.184f, blueColorValue));
     }
     else
     {
         targetViewBrush  = canvas.CreateSolidColorBrush(Tools.GetColorFFromRgb((int)(((TargetDot)target).DotWidth * 3.5f), 150, 150)); //绿色
         targetViewRadius = 6;
     }
 }
예제 #29
0
        public CoordinateTargetTrackView(Target target, RenderTarget rt, D2DFactory factory, CoordinateSystem cs)
            : base(target, rt, factory, cs)
        {
            drawer       = CreateDrawer();
            PreLocations = new List <Ellipse>();
            TargetTrack t = (TargetTrack)target;

            foreach (PolarCoordinate c in t.Locations)
            {
                Point2F p;
                p = CoordinateSystem.CoordinateToPoint(c);
                Ellipse e = new Ellipse(p, preLocationRadius, preLocationRadius);
                PreLocations.Add(e);
            }
            targetViewRadius = 4;
        }
예제 #30
0
        private void CreateFactories()
        {
            //reuse factories except for random cases
            if (random.NextDouble() < 0.5)
            {
                lock (sharedSyncObject)
                {
                    if (sharedD2DFactory == null)
                    {
                        // Create the D2D Factory
                        sharedD2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

                        // Create the DWrite Factory
                        sharedDwriteFactory = DWriteFactory.CreateFactory();

                        // Create the WIC Factory
                        sharedWicFactory = ImagingFactory.Create();

                        Debug.Assert(sharedD2DFactory.NativeInterface != IntPtr.Zero);
                        Debug.Assert(sharedDwriteFactory.NativeInterface != IntPtr.Zero);
                        Debug.Assert(sharedWicFactory.NativeInterface != IntPtr.Zero);
                    }
                    sharedRefCount++;
                }
                d2DFactory    = sharedD2DFactory;
                dwriteFactory = sharedDwriteFactory;
                wicFactory    = sharedWicFactory;
                Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero);
            }
            else
            {
                // Create the D2D Factory
                d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded);

                // Create the DWrite Factory
                dwriteFactory = DWriteFactory.CreateFactory();

                // Create the WIC Factory
                wicFactory = ImagingFactory.Create();
                Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero);
            }
        }
        public SideViewDisplayerBackground(RenderTarget canvas, D2DFactory factory, CoordinateSystem csp) : base(canvas, factory, csp)
        {
            axisBrush     = canvas.CreateSolidColorBrush(new ColorF(0, 255, 0));     //绿色
            dashLineBrush = canvas.CreateSolidColorBrush(new ColorF(128, 138, 135)); //冷灰

            DWriteFactory dw = DWriteFactory.CreateFactory();

            xTextFromation = dw.CreateTextFormat("Berlin Sans FB Demi", 15);
            yTextFromation = dw.CreateTextFormat("Berlin Sans FB Demi", 15);
            yTextFromation.TextAlignment = TextAlignment.Trailing;
            textBrush = canvas.CreateSolidColorBrush(new ColorF(new ColorI(128, 138, 135)));

            angleLines   = new float[] { 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330 };
            angleNumbers = new float[] { 0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360 };

            distanceNumbers = new[] { 0, Distance / 6, Distance / 3, Distance / 2, Distance * 2 / 3, Distance * 5 / 6, Distance };

            dw.Dispose();
        }
예제 #32
0
        public EllipseShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            ellipse = RandomEllipse();
            double which = Random.NextDouble();

            if (which < 0.67)
            {
                PenBrush = RandomBrush();
            }
            if (which > 0.33)
            {
                FillBrush = RandomBrush();
            }
            if (CoinFlip)
            {
                StrokeStyle = RandomStrokeStyle();
            }
            StrokeWidth = RandomStrokeWidth();
        }
예제 #33
0
        public Direct2DRenderer(IntPtr pWindowHandle)
        {
            Control control = Control.FromHandle(pWindowHandle);

            var renderProps = new RenderTargetProperties
            {
                PixelFormat = new PixelFormat(
                    Microsoft.WindowsAPICodePack.DirectX.DXGI.Format.B8G8R8A8_UNORM,
                    AlphaMode.Ignore),
                Usage = RenderTargetUsage.None,
                Type  = RenderTargetType.Default // Software type is required to allow resource
                                                 // sharing between hardware (HwndRenderTarget)
                                                 // and software (WIC Bitmap render Target).
            };

            _renderer = D2DFactory.CreateHwndRenderTarget(
                renderProps,
                new HwndRenderTargetProperties(pWindowHandle, new SizeU(Convert.ToUInt32(control.ClientSize.Width), Convert.ToUInt32(control.ClientSize.Height)),
                                               PresentOptions.Immediately));
        }
예제 #34
0
        public RectangleShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            rect = RandomRect(CanvasWidth, CanvasHeight);
            double which = Random.NextDouble();

            if (which < 0.67)
            {
                PenBrush = RandomBrush();
            }
            if (which > 0.33)
            {
                FillBrush = RandomBrush();
            }
            if (CoinFlip)
            {
                StrokeStyle = RandomStrokeStyle();
            }
            StrokeWidth = RandomStrokeWidth();
        }
예제 #35
0
 public GeometryShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap)
     : base(initialRenderTarget, random, d2DFactory, bitmap)
 {
     coolStrokes = CoinFlip;
     double which = Random.NextDouble();
     if (which < 0.67 || coolStrokes)
         PenBrush = RandomBrush();
     if (!coolStrokes && which > 0.33)
         FillBrush = RandomBrush();
     if (coolStrokes || CoinFlip)
         StrokeStyle = RandomStrokeStyle();
     if (CoinFlip)
         worldTransform = RandomMatrix3x2();
     StrokeWidth = RandomStrokeWidth();
     geometry = RandomGeometry();
     if (coolStrokes || Random.NextDouble() < 0.3)
         ModifyGeometry();
     if (coolStrokes && CoinFlip)
     {
         ModifyGeometry();
     }
 }
예제 #36
0
        public LayerShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, int count)
            : base(initialRenderTarget, random, d2DFactory, bitmap)
        {
            Parameters = new LayerParameters();
            parameters.ContentBounds = CoinFlip ? RandomRect(CanvasWidth, CanvasHeight) : new RectF(0, 0, CanvasWidth, CanvasHeight);
            if (CoinFlip)
            {
                GeometricMaskShape = new GeometryShape(initialRenderTarget, random, d2DFactory, Bitmap);
                parameters.GeometricMask = GeometricMaskShape.Geometry;
            }
            parameters.MaskAntialiasMode = CoinFlip ? AntialiasMode.Aliased : AntialiasMode.PerPrimitive;
            parameters.MaskTransform = RandomMatrix3x2();
            parameters.Opacity = RandomOpacity();
            if (CoinFlip)
                parameters.OpacityBrush = RandomOpacityBrush();
            parameters.Options = CoinFlip ? LayerOptions.InitializeForClearType : LayerOptions.None;

            for(int i = 0; i < count; i++)
            {
                shapes.Add(RandomShape());
            }
        }
예제 #37
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                //dispose of all layouts
                while (layouts.Keys.Count > 0)
                {
                    foreach (string key in layouts.Keys)
                    {
                        layouts[key].Dispose();
                        layouts.Remove(key);
                        break;
                    }
                }

                if (brush != null)
                {
                    brush.Dispose();
                }
                brush = null;
                if (dcRenderTarget != null)
                {
                    dcRenderTarget.Dispose();
                }
                dcRenderTarget = null;
                if (dwriteFactory != null)
                {
                    dwriteFactory.Dispose();
                }
                dwriteFactory = null;
                if (d2DFactory != null)
                {
                    d2DFactory.Dispose();
                }
                d2DFactory = null;
            }
            base.Dispose(disposing);
        }
예제 #38
0
        private void LoadDeviceIndependentResource()
        {
            // Create the D2D Factory
            // This really needs to be set to type MultiThreaded if rendering is to be performed by multiple threads,
            // such as if used in a control similar to DirectControl sample control where rendering is done by a dedicated render thread,
            // especially if multiple such controls are used in one application, but also when multiple applications use D2D Factories.
            //
            // In this sample - SingleThreaded type is used because rendering is only done by the main/UI thread and only when required
            // (when the surface gets invalidated) making the risk of synchronization problems - quite low.
            d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded);

            // Create the DWrite Factory
            dwriteFactory = DWriteFactory.CreateFactory();

            // Create the WIC Factory
            wicFactory = ImagingFactory.Create();

            TextBoxStroke = d2dFactory.CreateStrokeStyle(
                new StrokeStyleProperties(
                    CapStyle.Flat, CapStyle.Flat, CapStyle.Round,
                    LineJoin.Miter, 5.0f, DashStyle.Dash, 3f),
                null);
        }
예제 #39
0
        private void CreateDeviceIndependentResources()
        {
            // Create the D2D Factory
            d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create the DWrite Factory
            dwriteFactory = DWriteFactory.CreateFactory();

            wicFactory = ImagingFactory.Create();

            string text = "Inline Object * Sample";

            textFormat = dwriteFactory.CreateTextFormat("Gabriola", 72);

            textFormat.TextAlignment      = DWrite.TextAlignment.Center;
            textFormat.ParagraphAlignment = DWrite.ParagraphAlignment.Center;

            textLayout = dwriteFactory.CreateTextLayout(
                text,
                textFormat,
                (float)host.ActualWidth,
                (float)host.ActualHeight);
        }
예제 #40
0
        private void CreateDeviceIndependentResources()
        {
            // Create the D2D Factory
            d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create the DWrite Factory
            dwriteFactory = DWriteFactory.CreateFactory();

            wicFactory = new ImagingFactory();

            string text = "Inline Object * Sample";

            textFormat = dwriteFactory.CreateTextFormat("Gabriola", 72);

            textFormat.TextAlignment = DWrite.TextAlignment.Center;
            textFormat.ParagraphAlignment = DWrite.ParagraphAlignment.Center;
    
            textLayout = dwriteFactory.CreateTextLayout(
                text,
                textFormat,
                (float) host.ActualWidth,
                (float) host.ActualHeight);
        }
예제 #41
0
        public void Dispose()
        {
            foreach (KeyValuePair <string, D2D1.Brush> p in Brushes)
            {
                p.Value.Dispose();
            }
            DashStyle.Dispose();

            D2DTarget.Dispose();
            D2DDevice.Dispose();
            D2DContext.Dispose();
            D2DFactory.Dispose();

            BlackTextureView.Dispose();
            WhiteTextureView.Dispose();
            AnisotropicSampler.Dispose();

            blendStateOpaque.Dispose();
            blendStateTransparent.Dispose();

            rasterizerStateSolidCullBack.Dispose();
            rasterizerStateWireframeCullBack.Dispose();
            rasterizerStateSolidNoCull.Dispose();
            rasterizerStateWireframeNoCull.Dispose();
            depthStencilStateDefault.Dispose();
            depthStencilStateNoDepth.Dispose();

            foreach (Camera c in Cameras)
            {
                c.Dispose();
            }
            constantBuffer.Dispose();

            swapChain.Dispose();
            Device.Dispose();
            Context.Dispose();
        }
예제 #42
0
        private void Situation_Load(object sender, EventArgs e)
        {
            Console.WriteLine("load!!");
            // create factory (un-managed resource)
            d2DFactory    = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);
            dwriteFactory = DWriteFactory.CreateFactory();

            // target
            RenderTargetProperties renderTargetProperties = new RenderTargetProperties
            {
                PixelFormat      = new PixelFormat(),
                Usage            = RenderTargetUsages.None,
                RenderTargetType = RenderTargetType.Default
            };

            // handle
            HwndRenderTargetProperties hwndRenderTargetProperties1 = new HwndRenderTargetProperties
            {
                WindowHandle   = this.pictureBox1.Handle,
                PixelSize      = new SizeU((uint)this.pictureBox1.Width, (uint)this.pictureBox1.Height),
                PresentOptions = PresentOptions.Immediately
            };

            renderTarget = d2DFactory.CreateHwndRenderTarget(renderTargetProperties, hwndRenderTargetProperties1);

            // create blushes
            blackBlush = renderTarget.CreateSolidColorBrush(new ColorF(0.0f, 0.0f, 0.0f));
            redBlush   = renderTarget.CreateSolidColorBrush(new ColorF(1.0f, 0.0f, 0.0f));
            greenBlush = renderTarget.CreateSolidColorBrush(new ColorF(0.0f, 1.0f, 0.0f));
            blueBlush  = renderTarget.CreateSolidColorBrush(new ColorF(0.0f, 0.0f, 1.0f));

            // define and start onPaintTimer
            onPaintTimer          = new Timer();
            onPaintTimer.Interval = 500;
            onPaintTimer.Tick    += Render;
            onPaintTimer.Start();
        }
        private void LoadDeviceIndependentResource()
        {
            // Create the D2D Factory
            // This really needs to be set to type MultiThreaded if rendering is to be performed by multiple threads,
            // such as if used in a control similar to DirectControl sample control where rendering is done by a dedicated render thread,
            // especially if multiple such controls are used in one application, but also when multiple applications use D2D Factories.
            //
            // In this sample - SingleThreaded type is used because rendering is only done by the main/UI thread and only when required
            // (when the surface gets invalidated) making the risk of synchronization problems - quite low.
            d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded);

            // Create the DWrite Factory
            dwriteFactory = DWriteFactory.CreateFactory();

            // Create the WIC Factory
            wicFactory = ImagingFactory.Create();

            TextBoxStroke = d2dFactory.CreateStrokeStyle(
                new StrokeStyleProperties(
                    CapStyle.Flat, CapStyle.Flat, CapStyle.Round,
                    LineJoin.Miter, 5.0f, DashStyle.Dash, 3f),
                    null);

        }
예제 #44
0
        private void CreateFactories()
        {
                // Create the D2D Factory
                d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.MultiThreaded);

                // Create the DWrite Factory
                dwriteFactory = DWriteFactory.CreateFactory();

                // Create the WIC Factory
                wicFactory = new ImagingFactory();
                Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero);
        }
예제 #45
0
        /// <summary>
        /// Dispose of resources (IDisposable implementation)
        /// </summary>
        /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && !disposed)
            {
                lock (renderSyncObject)
                {
                    render = null;

                    lock (sharedSyncObject)
                    {
                        if (sharedD2DFactory != null && d2DFactory == sharedD2DFactory)
                            sharedRefCount--;

                        if (d2DFactory != null && d2DFactory != sharedD2DFactory)
                            d2DFactory.Dispose();
                        d2DFactory = null;

                        if (dwriteFactory != null && dwriteFactory != sharedDwriteFactory)
                            dwriteFactory.Dispose();
                        dwriteFactory = null;

                        if (wicFactory != null && wicFactory != sharedWicFactory)
                            wicFactory.Dispose();
                        wicFactory = null;

                        if (sharedRefCount == 0)
                        {
                            if (sharedD2DFactory != null)
                                sharedD2DFactory.Dispose();
                            sharedD2DFactory = null;

                            if (sharedDwriteFactory != null)
                                sharedDwriteFactory.Dispose();
                            sharedDwriteFactory = null;

                            if (sharedWicFactory != null)
                                sharedWicFactory.Dispose();
                            sharedWicFactory = null;
                        }
                    }

                    foreach (DrawingShape shape in drawingShapes)
                    {
                        shape.Dispose();
                    }

                    if (bitmap != null)
                        bitmap.Dispose();
                    bitmap = null;

                    if (dcRenderTarget != null)
                        dcRenderTarget.Dispose();
                    dcRenderTarget = null;
                    if (bitmapRenderTarget != null)
                        bitmapRenderTarget.Dispose();
                    bitmapRenderTarget = null;
                    if (hwndRenderTarget != null)
                        hwndRenderTarget.Dispose();
                    hwndRenderTarget = null;


                    disposed = true;
                }
            }
            base.Dispose(disposing);
        }
예제 #46
0
        private void CreateFactories()
        {
            //reuse factories except for random cases
            if (random.NextDouble() < 0.5)
            {
                lock (sharedSyncObject)
                {
                    if (sharedD2DFactory == null)
                    {
                        // Create the D2D Factory
                        sharedD2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

                        // Create the DWrite Factory
                        sharedDwriteFactory = DWriteFactory.CreateFactory();

                        // Create the WIC Factory
                        sharedWicFactory = ImagingFactory.Create();

                        Debug.Assert(sharedD2DFactory.NativeInterface != IntPtr.Zero);
                        Debug.Assert(sharedDwriteFactory.NativeInterface != IntPtr.Zero);
                        Debug.Assert(sharedWicFactory.NativeInterface != IntPtr.Zero);
                    }
                    sharedRefCount++;
                }
                d2DFactory = sharedD2DFactory;
                dwriteFactory = sharedDwriteFactory;
                wicFactory = sharedWicFactory;
                Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero);
            }
            else
            {
                // Create the D2D Factory
                d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded);

                // Create the DWrite Factory
                dwriteFactory = DWriteFactory.CreateFactory();

                // Create the WIC Factory
                wicFactory = ImagingFactory.Create();
                Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero);
                Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero);
            }
        }
예제 #47
0
 public TextLayoutShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, DWriteFactory dwriteFactory)
     : base(initialRenderTarget, random, d2DFactory, bitmap, dwriteFactory)
 {
     RandomizeTextLayout();
     Point0 = RandomPoint();
 }
예제 #48
0
        void CreateDeviceIndependentResources()
        {
            string msc_fontName = "Verdana";
            float msc_fontSize = 50;

            string fps_fontName = "Courier New";
            float fps_fontSize = 12;

            GeometrySink spSink;

            // Create D2D factory
            d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create WIC factory
            imagingFactory = ImagingFactory.Create();

            // Create DWrite factory
            dWriteFactory = DWriteFactory.CreateFactory();

            // Create DWrite text format object
            textFormat = dWriteFactory.CreateTextFormat(
                msc_fontName,
                msc_fontSize);

            textFormat.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Center;
            textFormat.ParagraphAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ParagraphAlignment.Center;


            // Create DWrite text format object
            textFormatFps = dWriteFactory.CreateTextFormat(
                fps_fontName,
                fps_fontSize);

            textFormatFps.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Leading;
            textFormatFps.ParagraphAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ParagraphAlignment.Near;

            // Create the path geometry.
            pathGeometry = d2DFactory.CreatePathGeometry();

            // Write to the path geometry using the geometry sink. We are going to create an
            // hour glass.
            spSink = pathGeometry.Open();

            spSink.SetFillMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FillMode.Alternate);

            spSink.BeginFigure(
                new Point2F(0, 0),
                FigureBegin.Filled
                );

            spSink.AddLine(new Point2F(200, 0));

            spSink.AddBezier(
                new BezierSegment(
                new Point2F(150, 50),
                new Point2F(150, 150),
                new Point2F(200, 200)
                ));

            spSink.AddLine(
                new Point2F(0,
                200)
                );

            spSink.AddBezier(
                new BezierSegment(
                new Point2F(50, 150),
                new Point2F(50, 50),
                new Point2F(0, 0)
                ));

            spSink.EndFigure(
                FigureEnd.Closed
                );

            spSink.Close(
                );
        }
예제 #49
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         //dispose of all layouts
         while (layouts.Keys.Count > 0)
             foreach (string key in layouts.Keys)
             {
                 layouts[key].Dispose();
                 layouts.Remove(key);
                 break;
             }
             
         if (brush != null)
             brush.Dispose();
         brush = null;
         if (dcRenderTarget != null)
             dcRenderTarget.Dispose();
         dcRenderTarget = null;
         if (dwriteFactory != null)
             dwriteFactory.Dispose();
         dwriteFactory = null;
         if (d2DFactory != null)
             d2DFactory.Dispose();
         d2DFactory = null;
     }
     base.Dispose(disposing);
 } 
예제 #50
0
        void CreateDeviceIndependentResources()
        {
            // Create a Direct2D factory.
            d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded);

            // Create a DirectWrite factory.
            dWriteFactory = DWriteFactory.CreateFactory();

            // Create a DirectWrite text format object.
            textFormat = dWriteFactory.CreateTextFormat("Calibri", 50, DWrite.FontWeight.Bold, DWrite.FontStyle.Normal, DWrite.FontStretch.Normal);

            // Center the text both horizontally and vertically.
            textFormat.TextAlignment = DWrite.TextAlignment.Leading;
            textFormat.ParagraphAlignment = ParagraphAlignment.Near;
        }