Example #1
0
        private void RenderText()
        {
            lock (Prims)
            {
                int primNr = 0;
                foreach (FacetedMesh mesh in Prims.Values)
                {
                    primNr++;
                    Primitive prim = mesh.Prim;
                    if (!string.IsNullOrEmpty(prim.Text))
                    {
                        string         text      = System.Text.RegularExpressions.Regex.Replace(prim.Text, "(\r?\n)+", "\n");
                        OpenTK.Vector3 screenPos = OpenTK.Vector3.Zero;
                        OpenTK.Vector3 primPos   = OpenTK.Vector3.Zero;

                        // Is it child prim
                        FacetedMesh parent = null;
                        if (Prims.TryGetValue(prim.ParentID, out parent))
                        {
                            var newPrimPos = prim.Position * Matrix4.CreateFromQuaternion(parent.Prim.Rotation);
                            primPos = new OpenTK.Vector3(newPrimPos.X, newPrimPos.Y, newPrimPos.Z);
                        }

                        primPos.Z += prim.Scale.Z * 0.8f;
                        if (!Math3D.GluProject(primPos, ModelMatrix, ProjectionMatrix, Viewport, out screenPos))
                        {
                            continue;
                        }
                        screenPos.Y = glControl.Height - screenPos.Y;

                        textRendering.Begin();

                        Color           color = Color.FromArgb((int)(prim.TextColor.A * 255), (int)(prim.TextColor.R * 255), (int)(prim.TextColor.G * 255), (int)(prim.TextColor.B * 255));
                        TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.Top;

                        using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular))
                        {
                            var size = TextRendering.Measure(text, f, flags);
                            screenPos.X -= size.Width / 2;
                            screenPos.Y -= size.Height;

                            // Shadow
                            if (color != Color.Black)
                            {
                                textRendering.Print(text, f, Color.Black, new Rectangle((int)screenPos.X + 1, (int)screenPos.Y + 1, size.Width, size.Height), flags);
                            }
                            textRendering.Print(text, f, color, new Rectangle((int)screenPos.X, (int)screenPos.Y, size.Width, size.Height), flags);
                        }
                        textRendering.End();
                    }
                }
            }
        }
Example #2
0
        void frmPrimWorkshop_Disposed(object sender, EventArgs e)
        {
            if (textRendering != null)
            {
                textRendering.Dispose();
                textRendering = null;
            }

            if (glControl != null)
            {
                glControl.Dispose();
            }
            glControl = null;
            Client.Objects.TerseObjectUpdate     -= new EventHandler <TerseObjectUpdateEventArgs>(Objects_TerseObjectUpdate);
            Client.Objects.ObjectUpdate          -= new EventHandler <PrimEventArgs>(Objects_ObjectUpdate);
            Client.Objects.ObjectDataBlockUpdate -= new EventHandler <ObjectDataBlockUpdateEventArgs>(Objects_ObjectDataBlockUpdate);
        }
Example #3
0
        public frmPrimWorkshop(METAboltInstance instance, uint rootLocalID)
            : base(instance)
        {
            this.RootPrimLocalID = rootLocalID;

            InitializeComponent();
            Disposed            += new EventHandler(frmPrimWorkshop_Disposed);
            AutoSavePosition     = true;
            UseMultiSampling     = cbAA.Checked = instance.GlobalSettings["use_multi_sampling"];
            cbAA.CheckedChanged += cbAA_CheckedChanged;

            this.instance = instance;

            renderer      = new MeshmerizerR();
            textRendering = new TextRendering(instance);

            Client.Objects.TerseObjectUpdate     += new EventHandler <TerseObjectUpdateEventArgs>(Objects_TerseObjectUpdate);
            Client.Objects.ObjectUpdate          += new EventHandler <PrimEventArgs>(Objects_ObjectUpdate);
            Client.Objects.ObjectDataBlockUpdate += new EventHandler <ObjectDataBlockUpdateEventArgs>(Objects_ObjectDataBlockUpdate);
        }