Example #1
0
        public static TextObject3D Create()
        {
            var item = new TextObject3D();

            item.Rebuild(null);
            return(item);
        }
Example #2
0
        public static async Task <TextObject3D> Create()
        {
            var item = new TextObject3D();

            await item.Rebuild();

            return(item);
        }
        public void Rebuild(UndoBuffer undoBuffer)
        {
            using (RebuildLock())
            {
                var aabb = this.GetAxisAlignedBoundingBox();

                this.Children.Modify(list =>
                {
                    list.Clear();
                });

                var brailleLetter = new BrailleObject3D()
                {
                    TextToEncode = Letter.ToString(),
                    BaseHeight   = BaseHeight,
                };
                brailleLetter.Rebuild(null);
                this.Children.Add(brailleLetter);

                var textObject = new TextObject3D()
                {
                    PointSize   = 46,
                    Color       = Color.LightBlue,
                    NameToWrite = Letter.ToString(),
                    Height      = BaseHeight
                };

                textObject.Invalidate(new InvalidateArgs(textObject, InvalidateType.Properties, null));
                IObject3D letterObject = new RotateObject3D(textObject, MathHelper.Tau / 4);
                letterObject = new AlignObject3D(letterObject, FaceAlign.Bottom | FaceAlign.Front, brailleLetter, FaceAlign.Top | FaceAlign.Front, 0, 0, 3.5);
                letterObject = new SetCenterObject3D(letterObject, brailleLetter.GetCenter(), true, false, false);
                this.Children.Add(letterObject);

                var basePath = new RoundedRect(0, 0, 22, 34, 3)
                {
                    ResolutionScale = 10
                };

                IObject3D basePlate = new Object3D()
                {
                    Mesh   = VertexSourceToMesh.Extrude(basePath, BaseHeight),
                    Matrix = Matrix4X4.CreateRotationX(MathHelper.Tau / 4)
                };

                basePlate = new AlignObject3D(basePlate, FaceAlign.Bottom | FaceAlign.Back, brailleLetter, FaceAlign.Bottom | FaceAlign.Back);
                basePlate = new SetCenterObject3D(basePlate, brailleLetter.GetCenter(), true, false, false);
                this.Children.Add(basePlate);

                IObject3D underline = new CubeObject3D(basePlate.XSize(), .2, 1);
                underline = new AlignObject3D(underline, FaceAlign.Bottom, brailleLetter, FaceAlign.Top);
                underline = new AlignObject3D(underline, FaceAlign.Back | FaceAlign.Left, basePlate, FaceAlign.Front | FaceAlign.Left, 0, .01);
                this.Children.Add(underline);

                if (aabb.ZSize > 0)
                {
                    // If the part was already created and at a height, maintain the height.
                    PlatingHelper.PlaceMeshAtHeight(this, aabb.minXYZ.Z);
                }
            }

            Invalidate(new InvalidateArgs(this, InvalidateType.Content));
        }
Example #4
0
        public override async Task Rebuild()
        {
            using (RebuildLock())
            {
                using (new CenterAndHeightMantainer(this))
                {
                    this.Children.Modify(list =>
                    {
                        list.Clear();
                    });

                    var brailleLetter = new BrailleObject3D()
                    {
                        TextToEncode = Letter.ToString(),
                        BaseHeight   = BaseHeight,
                    };
                    await brailleLetter.Rebuild();

                    this.Children.Add(brailleLetter);

                    var textObject = new TextObject3D()
                    {
                        PointSize   = 46,
                        Color       = Color.LightBlue,
                        NameToWrite = Letter.ToString(),
                        Height      = BaseHeight
                    };

                    await textObject.Rebuild();

                    IObject3D letterObject = new RotateObject3D_2(textObject, Vector3.UnitX, -90);
                    await letterObject.Rebuild();

                    var scaleRatio = Math.Max(letterObject.XSize() / 17, letterObject.ZSize() / 17);
                    if (scaleRatio > 1)
                    {
                        letterObject = new ScaleObject3D(letterObject, 1.0 / scaleRatio, 1, 1.0 / scaleRatio);
                    }
                    letterObject = new AlignObject3D(letterObject, FaceAlign.Bottom | FaceAlign.Front, brailleLetter, FaceAlign.Top | FaceAlign.Front, 0, 0, 3.5);
                    letterObject = new SetCenterObject3D(letterObject, brailleLetter.GetCenter(), true, false, false);
                    this.Children.Add(letterObject);

                    var basePath = new RoundedRect(0, 0, 22, 34, 3)
                    {
                        ResolutionScale = 10
                    };

                    IObject3D basePlate = new Object3D()
                    {
                        Mesh   = VertexSourceToMesh.Extrude(basePath, BaseHeight),
                        Matrix = Matrix4X4.CreateRotationX(MathHelper.Tau / 4)
                    };

                    basePlate = new AlignObject3D(basePlate, FaceAlign.Bottom | FaceAlign.Back, brailleLetter, FaceAlign.Bottom | FaceAlign.Back);
                    basePlate = new SetCenterObject3D(basePlate, brailleLetter.GetCenter(), true, false, false);
                    this.Children.Add(basePlate);

                    IObject3D underline = await CubeObject3D.Create(basePlate.XSize(), .2, 1);

                    underline = new AlignObject3D(underline, FaceAlign.Bottom, brailleLetter, FaceAlign.Top);
                    underline = new AlignObject3D(underline, FaceAlign.Back | FaceAlign.Left, basePlate, FaceAlign.Front | FaceAlign.Left, 0, .01);
                    this.Children.Add(underline);
                }
            }

            Parent?.Invalidate(new InvalidateArgs(this, InvalidateType.Children));
        }
        public override Task Rebuild()
        {
            // Point Size 10
            // Height 1
            // Font Fredoka

            // Align
            // X: Right Right -11
            // Y: Front -.3
            // Z: Bottom .8

            this.DebugDepth("Rebuild");
            bool valuesChanged = false;

            using (RebuildLock())
            {
                MaxTemperature = agg_basics.Clamp(MaxTemperature, 140, 400, ref valuesChanged);
                Sections       = agg_basics.Clamp(Sections, 2, 20, ref valuesChanged);
                ChangeAmount   = agg_basics.Clamp(ChangeAmount, 1, 30, ref valuesChanged);

                using (new CenterAndHeightMaintainer(this))
                {
                    Children.Modify(async(children) =>
                    {
                        children.Clear();

                        // add the base
                        var towerBase = new Object3D()
                        {
                            Mesh = new RoundedRect(-25, -15, 25, 15, 3)
                            {
                                ResolutionScale = 10
                            }.Extrude(BaseHeight),
                            Name = "Base"
                        };

                        children.Add(towerBase);

                        // Add each section
                        for (int i = 0; i < Sections; i++)
                        {
                            var temp    = MaxTemperature - i * ChangeAmount;
                            var section = new Object3D()
                            {
                                Matrix = Matrix4X4.CreateTranslation(0, 0, BaseHeight + i * SectionHeight),
                                Name   = $"{temp:0.##}"
                            };
                            children.Add(section);
                            // Add base mesh
                            section.Children.Add(new Object3D()
                            {
                                Mesh = shape,
                                Name = "CC - gaaZolee - AS"
                            });
                            // Add temp changer
                            section.Children.Add(new SetTemperatureObject3D()
                            {
                                Temperature = temp,
                                Name        = $"Set to {temp:0.##}",
                                Matrix      = Matrix4X4.CreateScale(.2, .1, 1)
                            });
                            // Add temperature text
                            var text = new TextObject3D()
                            {
                                Font        = NamedTypeFace.Fredoka,
                                Height      = 1,
                                Name        = $"{temp:0.##}",
                                PointSize   = 10,
                                NameToWrite = $"{temp:0.##}",
                                Matrix      = Matrix4X4.CreateRotationX(MathHelper.Tau / 4) * Matrix4X4.CreateTranslation(0, -4.3, .8),
                            };
                            text.Rebuild().Wait();
                            var textBounds = text.GetAxisAlignedBoundingBox();
                            text.Matrix   *= Matrix4X4.CreateTranslation(11 - textBounds.MaxXYZ.X, 0, 0);
                            section.Children.Add(text);
                        }
                    });
                }
            }

            Invalidate(InvalidateType.DisplayValues);

            Parent?.Invalidate(new InvalidateArgs(this, InvalidateType.Mesh));
            return(Task.CompletedTask);
        }