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 Wireframe, regardless of the active display mode, by using the following class derived from Mesh:
class MyWireMesh : Mesh
{
public MyWireMesh(IList vertices, IList triangles) : base(vertices, triangles)
{
}
public override void Draw(DrawParams data)
{
Pre(data);
data.RenderContext.SetColorWireframe(Color);
base.Draw(data);
Post(data);
}
public override void DrawEdges(DrawParams data)
{
// intentionally left blank
}
public override void DrawSilhouettes(DrawSilhouettesParams data)
{
// intentionally left blank
}
public override void SetShader(DrawParams data)
{
if (data != null)
{
bool prevLighting = data.ShaderParams.Lighting;
data.ShaderParams.Lighting = false;
base.SetShader(data);
data.ShaderParams.Lighting = prevLighting;
}
}
public override void DrawForShadow(RenderParams data)
{
Pre(data);
base.DrawForShadow(data);
Post(data);
}
public override void Render(RenderParams data)
{
Pre(data);
data.RenderContext.SetColorWireframe(Color);
base.Render(data);
Post(data);
}
public override void DrawSelected(DrawParams data)
{
Pre(data);
data.RenderContext.SetColorWireframe(Color.Gold); // Set the selection color
base.DrawSelected(data);
Post(data);
}
public override void DrawForSelection(DrawForSelectionParams data)
{
Pre(data);
base.DrawForSelection(data);
Post(data);
}
private void Pre(DrawParams drawParams)
{
drawParams.RenderContext.PushRasterizerState();
drawParams.RenderContext.SetRasterizerState(rasterizerPolygonDrawingType.Line, rasterizerCullFaceType.None);
drawParams.RenderContext.SetLighting(false);
}
private void Post(DrawParams drawParams)
{
drawParams.RenderContext.SetLighting(true);
drawParams.RenderContext.PopRasterizerState();
}
}
Usage:
design1.ActiveViewport.DisplayMode = displayType.Rendered;
// Image-based silhouette drawing is not suitable for this custom entity
design1.Rendered.SilhouettesDrawingMode = silhouettesDrawingType.LastFrame;
Mesh sphere = Mesh.CreateSphere(10, 24, 12);
design1.Entities.Add(new MyWireMesh(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);
Comments
Please sign in to leave a comment.