Rendered Mesh in Wireframe display mode

The proposed solution is not natively supported and may not work in all scenarios or versions.

You can have a Mesh entity displayed always as Rendered, regardless of the active display mode, by using the following class derived from Mesh:

public class MyShadedMesh : Mesh
{
    public MyShadedMesh(Point3D[] vertices, IndexTriangle[] triangles) : base(vertices, triangles)
    {
    }

    public override void DrawWireframe(DrawParams data)
    {
        Pre(data);
        SetRenderedShader(data);

        Color col = Color;

        if (data.Selected)
        {
            col = Color.Gold; // sets the selection color
        }

        data.RenderContext.SetColorDiffuse(col, col);

        Draw(data);

        Post(data);
    }

    void SetRenderedShader(DrawParams data)
    {
        if (data.ShaderParams != null)
        {
            bool prevLighting = data.ShaderParams.Lighting;
            var prevPrimitiveType = data.ShaderParams.PrimitiveType;

            data.ShaderParams.Lighting = true;
            data.ShaderParams.PrimitiveType = shaderPrimitiveType.Polygon;

            base.SetShader(data);

            data.ShaderParams.Lighting = prevLighting;
            data.ShaderParams.PrimitiveType = prevPrimitiveType;
        }
    }

    public override void DrawIsocurves(DrawParams data)
    {
        // intentionally left blank
    }

    public override void DrawForSelection(DrawForSelectionParams data)
    {
        Pre(data);

        base.DrawForSelection(data);

        Post(data);
    }
private void Pre(DrawParams data) { data.RenderContext.PushRasterizerState(); data.RenderContext.SetState(rasterizerStateType.CCW_PolygonFill_CullFaceBack_PolygonOffset_1_1); } private static void Post(DrawParams data) { data.RenderContext.PopRasterizerState(); } }

Usage:

design1.ActiveViewport.DisplayMode = displayType.Wireframe;

Mesh sphere = Mesh.CreateSphere(10, 24, 12);
design1.Entities.Add(new MyShadedMesh(sphere.Vertices, sphere.Triangles), Color.Red);

Mesh cone = Mesh.CreateCone(10, 0, new Point3D(20, 0, 0), new Point3D(20, 0, 20), 16);
design1.Entities.Add(cone, Color.Green);
Was this article helpful?
0 out of 0 found this helpful

Comments

0 comments

Please sign in to leave a comment.

Articles in this section

See more