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(); }
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, }; }
/// <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); } }