开发者

Texture on 3D object in C#

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 s开发者_C百科nippet :

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;
}


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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜