2009-12-30 5 views
0

VS 2008 - C# Express를 사용하고 있습니다. 3D 메쉬 객체 위에 텍스트 블록을 반영하고 싶습니다. 웹 사이트에서 샘플 코드 스 니펫을 발견했습니다. 내 프로젝트에 추가 한 다음 불행히도 디버거가 오류 메시지 "형식 또는 네임 스페이스 이름"실행 "찾을 수 없습니다 ..."보냈습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ? 누락 된 네임 스페이스가 있습니까?C#의 3D 개체에 텍스처

도와 주시겠습니까? 감사합니다.

코드 조각 : 당신이있어 확인해야

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

아래 질문에 답을 얻지 못했다면 직접 대답하고 대답으로 받아 들여야합니다. 그렇지 않으면 –

+0

@Allen 아래에서 정답을 수락하십시오. 그 사람에게 기회를주십시오. 질문은 한 시간 만 물었습니다! – ChrisF

+0

그는 내 게시물에 대한 언급에서 그는 이미 그것을 해결했다;) –

답변

2

다음 Run 클래스가있는 곳이다 코드에

using System.Windows.Documents; 

.

PresentationFramework.dll에 대한 참조를 추가해야 할 수도 있습니다.

1

파일의 상단에 추가해야합니다 :

using System.Windows.Documents; 

Run class는 System.Windows.Documents.Run입니다 -하지 System.Windows의 일부.

+0

나는 당신의 도움 후에 문제를 해결했다. 모두에게 감사드립니다. – user241101