public static void ConvertBrailleText()
        {
            Assert.IsTrue(BrailleGrade2.ConvertWord("taylor") == "taylor");
            Assert.IsTrue(BrailleGrade2.ConvertWord("Taylor") == ",taylor");
            Assert.IsTrue(BrailleGrade2.ConvertWord("TayLor") == ",tay,lor");
            Assert.IsTrue(BrailleGrade2.ConvertWord("energy") == "5}gy");
            Assert.IsTrue(BrailleGrade2.ConvertWord("men") == "m5");
            Assert.IsTrue(BrailleGrade2.ConvertWord("runabout") == "runab");
            Assert.IsTrue(BrailleGrade2.ConvertWord("afternoon") == "afn");
            Assert.IsTrue(BrailleGrade2.ConvertWord("really") == "re,y");
            Assert.IsTrue(BrailleGrade2.ConvertWord("glance") == "gl.e");
            Assert.IsTrue(BrailleGrade2.ConvertWord("station") == "/,n");
            Assert.IsTrue(BrailleGrade2.ConvertWord("as") == "z");
            Assert.IsTrue(BrailleGrade2.ConvertWord("abby") == "a2y");
            Assert.IsTrue(BrailleGrade2.ConvertWord("commitment") == "-mit;t");
            Assert.IsTrue(BrailleGrade2.ConvertWord("mother") == "\"m");
            Assert.IsTrue(BrailleGrade2.ConvertWord("myself") == "myf");
            Assert.IsTrue(BrailleGrade2.ConvertWord("lochness") == "lo*;s");
            Assert.IsTrue(BrailleGrade2.ConvertWord("Seven o'clock") == ",sev5 o'c");

            Assert.IsTrue(BrailleGrade2.ConvertWord("test") == "te/");
            Assert.IsTrue(BrailleGrade2.ConvertWord("that") == "t");
            Assert.IsTrue(BrailleGrade2.ConvertWord("will") == "w");
            Assert.IsTrue(BrailleGrade2.ConvertWord("show") == "%{");
            Assert.IsTrue(BrailleGrade2.ConvertWord("our") == "|r");
            Assert.IsTrue(BrailleGrade2.ConvertWord("with") == ")");
            Assert.IsTrue(BrailleGrade2.ConvertWord("braille") == "brl");
            Assert.IsTrue(BrailleGrade2.ConvertWord("conformance") == "3=m.e");

            Assert.IsTrue(BrailleGrade2.ConvertString("go to sleep") == "g 6sleep");
            Assert.IsTrue(BrailleGrade2.ConvertString("go to") == "g to");
            Assert.IsTrue(BrailleGrade2.ConvertString("here it is") == "\"h x is");
            Assert.IsTrue(BrailleGrade2.ConvertString("test that will show our conformance with braille") == "te/ t w %{ |r 3=m.e ) brl");
            Assert.IsTrue(BrailleGrade2.ConvertString("so we can create some strings and then this gives us the output that is expected") == "s we c cr1te \"s /r+s & !n ? gives u ! |tput t is expect$");

            Assert.IsTrue(BrailleGrade2.ConvertString("Waltz, bad nymph, for quick jigs vex.") == ",waltz1 bad nymph1 = qk jigs vex4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Quick zephyrs blow, vexing daft Jim.") == ",qk zephyrs bl{1 vex+ daft ,jim4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Sphinx of black quartz, judge my vow.") == ",sph9x ( black qu>tz1 judge my v{4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Two driven jocks help fax my big quiz.") == ",two driv5 jocks help fax my big quiz4");
            //				Assert.IsTrue(BrailleGrade2.ConvertString("Five quacking zephyrs jolt my wax bed.") == ",five quack+ zephyrs jolt my wax b$4");
            Assert.IsTrue(BrailleGrade2.ConvertString("The five boxing wizards jump quickly.") == ",! five box+ wiz>ds jump qkly4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Pack my box with five dozen liquor jugs.") == ",pack my box ) five doz5 liquor jugs4");
            Assert.IsTrue(BrailleGrade2.ConvertString("The quick brown fox jumps over the lazy dog.") == ",! qk br{n fox jumps ov} ! lazy dog4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Jinxed wizards pluck ivy from the big quilt.") == ",j9x$ wiz>ds pluck ivy f ! big quilt4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Crazy Fredrick bought many very exquisite opal jewels.") == ",crazy ,fr$rick b\"| _m v exquisite opal jewels4");
            Assert.IsTrue(BrailleGrade2.ConvertString("We promptly judged antique ivory buckles for the next prize.") == ",we promptly judg$ antique ivory buckles =! next prize4");
            Assert.IsTrue(BrailleGrade2.ConvertString("A mad boxer shot a quick, gloved jab to the jaw of his dizzy opponent.") == ",a mad box} %ot a qk1 glov$ jab 6! jaw ( 8 dizzy opp\"ont4");
            Assert.IsTrue(BrailleGrade2.ConvertString("Jaded zombies acted quaintly but kept driving their oxen forward.") == ",jad$ zombies act$ qua9tly b kept driv+ _! ox5 =w>d4");
            Assert.IsTrue(BrailleGrade2.ConvertString("14. The job requires extra pluck and zeal from every young wage earner.") == "#ad4 ,! job requires extra pluck & z1l f e \"y wage e>n}4");

            Assert.IsTrue(BrailleGrade2.ConvertString("Just wanting to put together some more tests to show the effectiveness of our converter.") == ",j want+ 6put tgr \"s m te/s 6%{ ! e6ective;s ( |r 3v}t}4");
        }
示例#2
0
        override public Task Rebuild()
        {
            using (RebuildLock())
            {
                using (new CenterAndHeightMantainer(this))
                {
                    this.Children.Modify(list =>
                    {
                        list.Clear();
                    });

                    var brailleText = TextToEncode;
                    if (UseGrade2)
                    {
                        brailleText = BrailleGrade2.ConvertString(brailleText);
                    }

                    double    pointSize  = 18.5;
                    double    pointsToMm = 0.352778;
                    IObject3D textObject = new Object3D();
                    var       offest     = 0.0;

                    TypeFacePrinter textPrinter;
                    if (RenderAsBraille)
                    {
                        textPrinter = new TypeFacePrinter(brailleText, new StyledTypeFace(typeFace, pointSize));
                    }
                    else
                    {
                        textPrinter = new TypeFacePrinter(brailleText, new StyledTypeFace(ApplicationController.GetTypeFace(NamedTypeFace.Liberation_Mono), pointSize));
                    }

                    foreach (var letter in brailleText.ToCharArray())
                    {
                        IObject3D       letterObject;
                        TypeFacePrinter letterPrinter;
                        if (RenderAsBraille)
                        {
                            letterPrinter = new TypeFacePrinter(letter.ToString(), new StyledTypeFace(typeFace, pointSize));
                            var scalledLetterPrinter = new VertexSourceApplyTransform(letterPrinter, Affine.NewScaling(pointsToMm));

                            // add all the spheres to letterObject
                            letterObject = new Object3D();

                            var vertexCount  = 0;
                            var positionSum  = Vector2.Zero;
                            var lastPosition = Vector2.Zero;
                            // find each dot outline and get it's center and place a sphere there
                            foreach (var vertex in scalledLetterPrinter.Vertices())
                            {
                                switch (vertex.command)
                                {
                                case Agg.ShapePath.FlagsAndCommand.Stop:
                                case Agg.ShapePath.FlagsAndCommand.EndPoly:
                                case Agg.ShapePath.FlagsAndCommand.FlagClose:
                                case Agg.ShapePath.FlagsAndCommand.MoveTo:
                                    if (vertexCount > 0)
                                    {
                                        var    center = positionSum / vertexCount;
                                        double radius = 1.44 / 2;                                                // (center - lastPosition).Length;
                                        var    sphere = new HalfSphereObject3D(radius * 2, 15)
                                        {
                                            Color = Color.LightBlue
                                        };
                                        sphere.Translate(center.X, center.Y);
                                        letterObject.Children.Add(sphere);
                                    }
                                    vertexCount = 0;
                                    positionSum = Vector2.Zero;
                                    break;

                                case Agg.ShapePath.FlagsAndCommand.Curve3:
                                case Agg.ShapePath.FlagsAndCommand.Curve4:
                                case Agg.ShapePath.FlagsAndCommand.LineTo:
                                    vertexCount++;
                                    lastPosition = vertex.position;
                                    positionSum += lastPosition;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            letterPrinter = new TypeFacePrinter(letter.ToString(), new StyledTypeFace(ApplicationController.GetTypeFace(NamedTypeFace.Liberation_Mono), pointSize));
                            var scalledLetterPrinter = new VertexSourceApplyTransform(letterPrinter, Affine.NewScaling(pointsToMm));
                            letterObject = new Object3D()
                            {
                                Mesh  = VertexSourceToMesh.Extrude(scalledLetterPrinter, 1),
                                Color = Color.LightBlue
                            };
                        }

                        letterObject.Matrix = Matrix4X4.CreateTranslation(offest, 0, 0);
                        textObject.Children.Add(letterObject);

                        offest += letterPrinter.GetSize(letter.ToString()).X *pointsToMm;
                    }

                    // add a plate under the dots
                    var padding = .9 * pointSize * pointsToMm / 2;
                    var size    = textPrinter.LocalBounds * pointsToMm;

                    // make the base
                    var basePath = new VertexStorage();
                    basePath.MoveTo(0, 0);
                    basePath.LineTo(size.Width + padding, 0);
                    basePath.LineTo(size.Width + padding, size.Height + padding);
                    basePath.LineTo(padding, size.Height + padding);
                    basePath.LineTo(0, size.Height);

                    IObject3D basePlate = new Object3D()
                    {
                        Mesh = VertexSourceToMesh.Extrude(basePath, BaseHeight)
                    };

                    basePlate = new AlignObject3D(basePlate, FaceAlign.Top, textObject, FaceAlign.Bottom, 0, 0, .01);
                    basePlate = new AlignObject3D(basePlate, FaceAlign.Left | FaceAlign.Front,
                                                  size.Left - padding / 2,
                                                  size.Bottom - padding / 2);
                    this.Children.Add(basePlate);

                    basePlate.Matrix *= Matrix4X4.CreateRotationX(MathHelper.Tau / 4);

                    // add an optional chain hook
                    if (AddHook)
                    {
                        // x 10 to make it smoother
                        double        edgeWidth      = 3;
                        double        height         = basePlate.ZSize();
                        IVertexSource leftSideObject = new RoundedRect(0, 0, height / 2, height, 0)
                        {
                            ResolutionScale = 10
                        };

                        IVertexSource cicleObject = new Ellipse(0, 0, height / 2, height / 2)
                        {
                            ResolutionScale = 10
                        };

                        cicleObject = new Align2D(cicleObject, Side2D.Left | Side2D.Bottom, leftSideObject, Side2D.Left | Side2D.Bottom, -.01);
                        IVertexSource holeObject = new Ellipse(0, 0, height / 2 - edgeWidth, height / 2 - edgeWidth)
                        {
                            ResolutionScale = 10
                        };
                        holeObject = new SetCenter2D(holeObject, cicleObject.GetBounds().Center);

                        IVertexSource hookPath = leftSideObject.Plus(cicleObject);
                        hookPath = hookPath.Minus(holeObject);

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

                        chainHook = new AlignObject3D(chainHook, FaceAlign.Left | FaceAlign.Bottom | FaceAlign.Back, basePlate, FaceAlign.Right | FaceAlign.Bottom | FaceAlign.Back, -.01);

                        this.Children.Add(chainHook);
                    }

                    // add the object that is the dots
                    this.Children.Add(textObject);
                    textObject.Matrix *= Matrix4X4.CreateRotationX(MathHelper.Tau / 4);
                }
            }

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