Example #1
0
        public static async Task <CubeObject3D> Create()
        {
            var item = new CubeObject3D();
            await item.Rebuild();

            return(item);
        }
Example #2
0
        public static CubeObject3D Create()
        {
            var item = new CubeObject3D();

            item.Rebuild(null);
            return(item);
        }
Example #3
0
        public static CubeObject3D Create(double x, double y, double z)
        {
            var item = new CubeObject3D()
            {
                Width  = x,
                Depth  = y,
                Height = z,
            };

            item.Rebuild(null);
            return(item);
        }
Example #4
0
        public static async Task <CubeObject3D> Create(double x, double y, double z)
        {
            var item = new CubeObject3D()
            {
                Width  = x,
                Depth  = y,
                Height = z,
            };

            await item.Rebuild();

            return(item);
        }
Example #5
0
        public override async Task Rebuild()
        {
            this.DebugDepth("Rebuild");

            using (RebuildLock())
            {
                var currentAssetPath = ImageObject == null?AggContext.StaticData.ToAssetPath(Path.Combine("Images", "mh-logo.png")) : ImageObject.AssetPath;

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

                var imageObject = new ImageObject3D()
                {
                    AssetPath = currentAssetPath,
                };

                await imageObject.Rebuild();

                this.Children.Add(imageObject);

                IObject3D logoBase = new CylinderObject3D(outerDiameter, 3, 60);
                IObject3D logoRing = new AlignObject3D(new RingObject3D(outerDiameter, innerDiameter, 2, 60), FaceAlign.Bottom, logoBase, FaceAlign.Top);

                IObject3D coinBlank = logoBase.Plus(logoRing);
                if (CreateHook)
                {
                    var cube = await CubeObject3D.Create(4, 2, 4);

                    IObject3D connect = logoBase.Plus(new AlignObject3D(cube, FaceAlign.Front | FaceAlign.Bottom, logoBase, FaceAlign.Back | FaceAlign.Bottom, 0, -.5));
                    IObject3D hook    = logoBase.Plus(new AlignObject3D(new RingObject3D(10, 7, 5, 30), FaceAlign.Front | FaceAlign.Bottom, connect, FaceAlign.Back | FaceAlign.Bottom, 0, -.5));

                    coinBlank = coinBlank.Plus(connect);
                    coinBlank = coinBlank.Plus(hook);
                }

                var imageToPath = new ImageToPathObject3D();

                imageToPath.Children.Add(imageObject);

                await imageToPath.Rebuild();

                var inputShape = imageToPath.VertexSource;

                if (Inflate != 0)
                {
                    var bounds = inputShape.GetBounds();
                    var scale  = Math.Max(bounds.Width, bounds.Height) / (17 * 4);
                    inputShape = inputShape.Offset(Inflate * scale);
                }

                if (AlternateCentering)
                {
                    inputShape = new VertexSourceApplyTransform(inputShape, GetCenteringTransformVisualCenter(inputShape, innerDiameter / 2));
                }
                else
                {
                    inputShape = new VertexSourceApplyTransform(inputShape, GetCenteringTransformExpandedToRadius(inputShape, innerDiameter / 2));
                }

                if (ScalePercent != 100 &&
                    ScalePercent != 0)
                {
                    inputShape = new VertexSourceApplyTransform(inputShape, Affine.NewScaling(ScalePercent / 100.0));
                }

                if (NegativeSpace)
                {
                    var disk = new Ellipse(0, 0, innerDiameter / 2 + .2, innerDiameter / 2 + .2)
                    {
                        ResolutionScale = 1000
                    };
                    inputShape = disk.Minus(inputShape);
                }

                imageToPath.VertexSource = inputShape;

                var pathExtrusion = new LinearExtrudeObject3D();
                pathExtrusion.Children.Add(imageToPath);
                await pathExtrusion.Rebuild();

                IObject3D extrusionObject = imageObject;

                var loadingScale = 32 / extrusionObject.XSize();
                extrusionObject = new ScaleObject3D(extrusionObject, loadingScale, loadingScale, 1 / extrusionObject.ZSize());
                extrusionObject = PlaceOnBase(logoBase, extrusionObject);

                this.Children.Add(coinBlank);
                this.Children.Add(extrusionObject);
            }

            Invalidate(InvalidateType.Mesh);
        }
Example #6
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 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));
        }