0

I'm using VS 2008 - C# Express. I want to reflect a text block onto 3D mesh object. I found a sample code snippet in a website. I added into my project and then ran it, unfortunately the debugger sent the error message "The type or namespace name "Run" could not be found...". What am I doing wrong ? Is there a missing namespace ?

Could you help me. Regards.

The code snippet :

public static ModelVisual3D CreateTextLabel3D(string text, Brush textColor, bool bDoubleSided, double height, Point3D center, Vector3D over, Vector3D up)
{
    // First we need a textblock containing the text of our label
    TextBlock tb = new TextBlock(new Run(text));
    tb.Foreground = textColor;
    tb.FontFamily = new FontFamily("Arial");

    // Now use that TextBlock as the brush for a material
    DiffuseMaterial mat = new DiffuseMaterial();
    mat.Brush = new VisualBrush(tb);

    // We just assume the characters are square
    double width = text.Length * height;

    // Since the parameter coming in was the center of the label,
    // we need to find the four corners
    // p0 is the lower left corner
    // p1 is the upper left
    // p2 is the lower right
    // p3 is the upper right
    Point3D p0 = center - width / 2 * over - height / 2 * up;
    Point3D p1 = p0 + up * 1 * height;
    Point3D p2 = p0 + over * width;
    Point3D p3 = p0 + up * 1 * height + over * width;

    // Now build the geometry for the sign.  It's just a
    // rectangle made of two triangles, on each side.

    MeshGeometry3D mg = new MeshGeometry3D();
    mg.Positions = new Point3DCollection();
    mg.Positions.Add(p0);    // 0
    mg.Positions.Add(p1);    // 1
    mg.Positions.Add(p2);    // 2
    mg.Positions.Add(p3);    // 3

    if (bDoubleSided)
    {
        mg.Positions.Add(p0);    // 4
        mg.Positions.Add(p1);    // 5
        mg.Positions.Add(p2);    // 6
        mg.Positions.Add(p3);    // 7
    }

    mg.TriangleIndices.Add(0);
    mg.TriangleIndices.Add(3);
    mg.TriangleIndices.Add(1);
    mg.TriangleIndices.Add(0);
    mg.TriangleIndices.Add(2);
    mg.TriangleIndices.Add(3);

    if (bDoubleSided)
    {
        mg.TriangleIndices.Add(4);
        mg.TriangleIndices.Add(5);
        mg.TriangleIndices.Add(7);
        mg.TriangleIndices.Add(4);
        mg.TriangleIndices.Add(7);
        mg.TriangleIndices.Add(6);
    }

    // These texture coordinates basically stretch the
    // TextBox brush to cover the full side of the label.

    mg.TextureCoordinates.Add(new Point(0, 1));
    mg.TextureCoordinates.Add(new Point(0, 0));
    mg.TextureCoordinates.Add(new Point(1, 1));
    mg.TextureCoordinates.Add(new Point(1, 0));

    if (bDoubleSided)
    {
        mg.TextureCoordinates.Add(new Point(1, 1));
        mg.TextureCoordinates.Add(new Point(1, 0));
        mg.TextureCoordinates.Add(new Point(0, 1));
        mg.TextureCoordinates.Add(new Point(0, 0));
    }

    // And that's all.  Return the result.

    ModelVisual3D mv3d = new ModelVisual3D();
    mv3d.Content = new GeometryModel3D(mg, mat);;
    return mv3d;
}
3
  • if the guys below didnt answer your question, you should answer it yourself and accept that as an answer. Otherwise accept the right answer below Commented Dec 30, 2009 at 20:25
  • @Allen - give the guy a chance. The question's only been asked an hour! Commented Dec 30, 2009 at 20:40
  • Although, he mentioned in a comment on my post that he solved it already ;) Commented Dec 30, 2009 at 23:26

2 Answers 2

2

You need to make sure you've got:

using System.Windows.Documents;

in your code, which is where the Run class resides.

You might need to add a reference to PresentationFramework.dll as well.

Sign up to request clarification or add additional context in comments.

Comments

1

Make sure to add, at the top of your file:

using System.Windows.Documents;

The Run class is System.Windows.Documents.Run - not part of System.Windows.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.