示例#1
0
        private RendererBase GetPropellerRTT()
        {
            var teapot = TeapotRenderer.Create();

            teapot.Scale *= 0.5f;

            int width = 600, height = 400;
            var innerCamera = new Camera(new vec3(0, 2, 5), new vec3(0, 0, 0), new vec3(0, 1, 0), CameraType.Ortho, width, height);
            var rtt         = new RTTRenderer(width, height, innerCamera);

            rtt.Children.Add(teapot);

            var billboard = TextureBillboardRenderer.Create(rtt as ITextureSource, width, height);

            var group = new GroupRenderer();

            group.Children.Add(rtt);                    // rtt must be before billboard.
            group.Children.Add(billboard);
            group.WorldPosition = new vec3(3, 0.5f, 0); // this looks nice.

            var propeller = GetPropellerFlabellum();

            propeller.Children.Add(group);

            return(propeller);
        }
        public GroupFigure(List <Figure> figures = null)
        {
            if (figures == null)
            {
                _placeHolder = new Placeholder();
                figures      = new List <Figure> {
                    _placeHolder
                };
            }
            Style.BorderStyle = null;
            var path = new SerializableGraphicsPath();

            path.Path.AddRectangle(new RectangleF(-0.5f, -0.5f, 1, 1));
            foreach (var figure in figures)
            {
                var fig = figure.DeepClone();
                fig.Transform.Matrix.Multiply(Transform, MatrixOrder.Append);
                _figures.Add(fig);
            }
            Geometry = new PrimitiveGeometry(path, AllowedOperations.All ^
                                             (AllowedOperations.Vertex | AllowedOperations.Pathed))
            {
                Name = "Group"
            };
            Renderer  = new GroupRenderer();
            Transform = new SerializableGraphicsMatrix();
        }
示例#3
0
        private void FormMain_Load(object sender, EventArgs e)
        {
            var teapot = TeapotRenderer.Create();

            this.teapot = teapot;

            int width = 400, height = 200;
            var rtt = new RTTRenderer(width, height, new Camera(new vec3(0, 0, 5), new vec3(0, 0, 0), new vec3(0, 1, 0), CameraType.Perspecitive, width, height));

            rtt.Children.Add(teapot);// rendered to framebuffer, then to texture.
            this.rtt = rtt;

            var rectangle = RectangleRenderer.Create();

            //var rectangle = new LegacyRectangleRenderer();//LegacyRectangleRenderer dosen't work in rendering-to-texture.
            rectangle.TextureSource = rtt;
            rectangle.Scale         = new vec3(7, 7, 7);
            this.rectangle          = rectangle;

            var group = new GroupRenderer();

            group.Children.Add(rtt);
            group.Children.Add(rectangle);

            var position = new vec3(5, 1, 4);
            var center   = new vec3(0, 0, 0);
            var up       = new vec3(0, 1, 0);
            var camera   = new Camera(position, center, up, CameraType.Perspecitive, this.winGLCanvas1.Width, this.winGLCanvas1.Height);

            this.scene = new Scene(camera, this.winGLCanvas1)
            {
                ClearColor  = Color.SkyBlue.ToVec4(),
                RootElement = group,
            };
        }
示例#4
0
        /// <summary>
        /// paint the group box
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPaint(PaintEventArgs e)
        {
            if (ControlStyle == ControlStyle.TwoD)
            {
                Rectangle bounds    = new Rectangle(0, 0, Width, Height);
                Rectangle rectangle = bounds;
                rectangle.Width -= 14;
                TextFormatFlags flags = TextFormatFlags.PreserveGraphicsTranslateTransform | TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak;

                if (this.RightToLeft == RightToLeft.Yes)
                {
                    flags |= TextFormatFlags.RightToLeft | TextFormatFlags.Right;
                }

                Size size = TextRenderer.MeasureText(e.Graphics, Text, Font, new Size(rectangle.Width, rectangle.Height), flags);
                rectangle.Width  = size.Width;
                rectangle.Height = size.Height;

                if ((flags & TextFormatFlags.Right) == TextFormatFlags.Right)
                {
                    rectangle.X = ((bounds.Right - rectangle.Width) - 7) + 1;
                }
                else
                {
                    rectangle.X += 6;
                }

                TextRenderer.DrawText(e.Graphics, Text, Font, rectangle, ForeColor, flags);

                Color borderColor = BorderColor;
                if (borderColor == Color.Empty)
                {
                    borderColor = Color.Black;
                }

                Pen pen = PensCache.GetInstance().Get(borderColor);
                rectangle.Inflate(-1, 0);

                GroupRenderer.DrawBorder(e.Graphics, ClientRectangle, pen, ControlStyle.TwoD, rectangle, Font, ShouldDisplayTopBorderMargin);

                //Fixed defect 142805 & 142774: The logical controls present inside the group control were not painted.
                //Reason : The reason was the when group controls style is 2D, then we don't call base.paint() which internally calls logical control's paint event from Control.OnPaint() method.
                //Solution : Raise Control's OnPaint event so that the logical control's present inside the Group control will be painted.
                RaisePaintEvent(this, e);
            }
            else
            {
                base.OnPaint(e);
            }
        }