Use Shaded Viewports (.NET)

If your drawing contains 3D faces, meshes, surfaces, or solids, you can control how the 3D objects appear when outputting a layout. A viewport can be set to use a visual style, render preset, one of the other values defined by the ShadePlotStype enum. Shaded and rendered viewports are previewed, plotted, and plotted to file with full shading and rendering. Use the SetShadePlot method and ShadePlot property of the Viewport object to query and set the option for plotting a shaded viewport.

When outputting a layout, you can override the ShadePlot property of all the viewports on a Layout object by using the layout's ShadePlot property and control the shaded quality using the ShadePlotResLevel property.

Note: The hidden lines for the objects in a Viewport object can be enabled with the HiddenLinesRemoved property. This property takes a boolean value: TRUE to remove hidden lines or FALSE to draw them.

Assign a visual style or render preset to a viewport

This example creates two new viewports (rectangular and nonrectangular, and assigns a visual style to one and a render preset to another. A help function is used to create a render preset that can then be assigned to the viewport.

VB.NET

' Standard .NET namespaces
Imports System.Runtime.InteropServices

' Main AutoCAD namespaces
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.GraphicsInterface
Imports Autodesk.AutoCAD

' Used to set a viewport current
<DllImport("accore.dll", CallingConvention:=CallingConvention.Cdecl, _
 EntryPoint:="?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@@PEBVAcDbViewport@@@Z")> _
Public Shared Function acedSetCurrentVPort(ByVal AcDbVport As IntPtr) As IntPtr
End Function

' Used to create a rectangular and nonrectangular viewports
<CommandMethod("CreatViewportsAndSetShadePlot")> _
Public Sub CreatViewportsAndSetShadePlot()
    ' Get the current document and database, and start a transaction
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim acCurDb As Database = acDoc.Database

    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
        ' Open the Block table for read
        Dim acBlkTbl As BlockTable = acTrans.GetObject(acCurDb.BlockTableId, _
                                                       OpenMode.ForRead)

        ' Open the Block table record Paper space for write
        Dim acBlkTblRec As BlockTableRecord = _
            acTrans.GetObject(acBlkTbl(BlockTableRecord.PaperSpace), _
                              OpenMode.ForWrite)

        ' Switch to the previous Paper space layout
        Application.SetSystemVariable("TILEMODE", 0)
        acDoc.Editor.SwitchToPaperSpace()

        ' Remove any viewports that already exist
        For Each objId As ObjectId In acBlkTblRec
            Dim dbObj As DBObject = acTrans.GetObject(objId, OpenMode.ForRead)

            ' Remove any viewports in the block
            If TypeOf dbObj Is DatabaseServices.Viewport Then
                dbObj.UpgradeOpen()
                dbObj.Erase(True)
            End If
        Next

        ' Create a Viewport
        Using acVport1 As DatabaseServices.Viewport = New DatabaseServices.Viewport()
            ' Set the center point and size of the viewport
            acVport1.CenterPoint = New Point3d(3.75, 4, 0)
            acVport1.Width = 7.5
            acVport1.Height = 7.5

            ' Lock the viewport
            acVport1.Locked = True

            ' Set the scale to 1" = 4'
            acVport1.CustomScale = 48

            ' Set visual style
            Dim vStyles As DBDictionary = _
                acTrans.GetObject(acCurDb.VisualStyleDictionaryId, _
                                  OpenMode.ForRead)

            acVport1.SetShadePlot(ShadePlotType.VisualStyle, _
                                  vStyles.GetAt("Sketchy"))

            ' Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acVport1)
            acTrans.AddNewlyCreatedDBObject(acVport1, True)

            ' Change the view direction and enable the viewport
            acVport1.ViewDirection = New Vector3d(-1, -1, 1)
            acVport1.On = True

            ' Create a rectangular viewport to change to a non-rectangular viewport
            Using acVport2 As DatabaseServices.Viewport = New DatabaseServices.Viewport()
                acVport2.CenterPoint = New Point3d(9, 6.5, 0)
                acVport2.Width = 2.5
                acVport2.Height = 2.5

                ' Set the scale to 1" = 8'
                acVport2.CustomScale = 96

                ' Set render preset
                Dim namedObjs As DBDictionary = _
                    acTrans.GetObject(acCurDb.NamedObjectsDictionaryId, _
                                      OpenMode.ForRead)

                ' Check to see if the Render Settings dictionary already exists
                Dim renderSettings As DBDictionary
                If namedObjs.Contains("ACAD_RENDER_PLOT_SETTINGS") = True Then
                    renderSettings = acTrans.GetObject( _
                        namedObjs.GetAt("ACAD_RENDER_PLOT_SETTINGS"), _
                        OpenMode.ForWrite)
                Else
                    ' If it does not exist, create it and add it to the drawing
                    namedObjs.UpgradeOpen()
                    renderSettings = New DBDictionary
                    namedObjs.SetAt("ACAD_RENDER_PLOT_SETTINGS", renderSettings)
                    acTrans.AddNewlyCreatedDBObject(renderSettings, True)
                End If

                ' Create the new render preset, based on the settings 
                ' of the Medium render preset
                Using renderSetting As New MentalRayRenderSettings
                    GetDefaultRenderPreset(renderSetting, "Medium")

                    renderSetting.Name = "Medium"
                    renderSettings.SetAt("Medium", renderSetting)
                    acTrans.AddNewlyCreatedDBObject(renderSetting, True)

                    acVport2.SetShadePlot(ShadePlotType.RenderPreset, _
                                          renderSetting.ObjectId)
                End Using

                ' Create a circle
                Using acCirc As Circle = New Circle()
                    acCirc.Center = acVport2.CenterPoint
                    acCirc.Radius = 1.25

                    ' Add the new object to the block table record and the transaction
                    acBlkTblRec.AppendEntity(acCirc)
                    acTrans.AddNewlyCreatedDBObject(acCirc, True)

                    ' Clip the viewport using the circle  
                    acVport2.NonRectClipEntityId = acCirc.ObjectId
                    acVport2.NonRectClipOn = True
                End Using

                ' Add the new object to the block table record and the transaction
                acBlkTblRec.AppendEntity(acVport2)
                acTrans.AddNewlyCreatedDBObject(acVport2, True)

                ' Change the view direction
                acVport2.ViewDirection = New Vector3d(0, 0, 1)

                ' Enable the viewport
                acVport2.On = True
            End Using

            ' Activate model space
            acDoc.Editor.SwitchToModelSpace()

            ' Set the new viewport current via an imported ObjectARX function
            acedSetCurrentVPort(acVport1.UnmanagedObject)
        End Using

        ' Save the new objects to the database
        acTrans.Commit()
    End Using
End Sub

' Method used to populate a MentalRayRenderSettings object with the
' same settings used by the standard render presets
Private Shared Sub GetDefaultRenderPreset( _
                   ByRef renderPreset As MentalRayRenderSettings, _
                   ByVal name As String)
    ' Set the values common to multiple default render presets
    renderPreset.BackFacesEnabled = False
    renderPreset.DiagnosticBackgroundEnabled = False
    renderPreset.DiagnosticBSPMode = _
        DiagnosticBSPMode.Depth
    renderPreset.DiagnosticGridMode = _
        New MentalRayRenderSettingsTraitsDiagnosticGridModeParameter( _
            DiagnosticGridMode.Object, 10.0)

    renderPreset.DiagnosticMode = _
        DiagnosticMode.Off
    renderPreset.DiagnosticPhotonMode = _
        DiagnosticPhotonMode.Density
    renderPreset.DisplayIndex = 0
    renderPreset.EnergyMultiplier = 1.0
    renderPreset.ExportMIEnabled = False
    renderPreset.ExportMIFileName = ""
    renderPreset.FGRayCount = 100

    ' FGSampleRadius cannot be set, it returns invalid input
    renderPreset.FGSampleRadiusState = _
        New MentalRayRenderSettingsTraitsBoolParameter( _
            False, False, False)

    renderPreset.FinalGatheringEnabled = False
    renderPreset.FinalGatheringMode = _
        FinalGatheringMode.FinalGatherOff
    renderPreset.GIPhotonsPerLight = 1000
    renderPreset.GISampleCount = 500
    renderPreset.GISampleRadius = 1.0
    renderPreset.GISampleRadiusEnabled = False
    renderPreset.GlobalIlluminationEnabled = False
    renderPreset.LightLuminanceScale = 1500.0
    renderPreset.MaterialsEnabled = True
    renderPreset.MemoryLimit = 1048

    renderPreset.PhotonTraceDepth = _
        New MentalRayRenderSettingsTraitsTraceParameter( _
            5, 5, 5)
    renderPreset.PreviewImageFileName = ""
    renderPreset.RayTraceDepth = _
        New MentalRayRenderSettingsTraitsTraceParameter( _
            3, 3, 3)
    renderPreset.RayTracingEnabled = False
    renderPreset.Sampling = _
        New MentalRayRenderSettingsTraitsIntegerRangeParameter( _
            -2, -1)
    renderPreset.SamplingContrastColor = _
        New MentalRayRenderSettingsTraitsFloatParameter( _
            0.1, 0.1, 0.1, 0.1)
    renderPreset.SamplingFilter = _
        New MentalRayRenderSettingsTraitsSamplingParameter( _
            Filter.Box, 1.0, 1.0)

    renderPreset.ShadowMapsEnabled = False
    renderPreset.ShadowMode = ShadowMode.Simple
    renderPreset.ShadowSamplingMultiplier = _
        ShadowSamplingMultiplier.SamplingMultiplierZero
    renderPreset.ShadowsEnabled = True
    renderPreset.TextureSampling = False
    renderPreset.TileOrder = TileOrder.Hilbert
    renderPreset.TileSize = 32

    Select Case name.ToUpper()
        ' Assigns the values to match the Draft render preset
        Case "DRAFT"
            renderPreset.Description = _
                "The lowest rendering quality which entails no raytracing, " & _
                "no texture filtering and force 2-sided is inactive."
            renderPreset.Name = "Draft"
        Case ("LOW")
            renderPreset.Description = _
                "Rendering quality is improved over Draft. " & _
                "Low anti-aliasing and a raytracing depth of 3 " & _
                "reflection/refraction are processed."
            renderPreset.Name = "Low"

            renderPreset.RayTracingEnabled = True

            renderPreset.Sampling = _
                New MentalRayRenderSettingsTraitsIntegerRangeParameter( _
                    -1, 0)
            renderPreset.SamplingContrastColor = _
                New MentalRayRenderSettingsTraitsFloatParameter( _
                    0.1, 0.1, 0.1, 0.1)
            renderPreset.SamplingFilter = _
                New MentalRayRenderSettingsTraitsSamplingParameter( _
                    Filter.Triangle, 2.0, 2.0)

            renderPreset.ShadowSamplingMultiplier = _
                ShadowSamplingMultiplier.SamplingMultiplierOneFourth
        Case "MEDIUM"
            renderPreset.BackFacesEnabled = True
            renderPreset.Description = _
                "Rendering quality is improved over Low to include " & _
                "texture filtering and force 2-sided is active. " & _
                "Moderate anti-aliasing and a raytracing depth of " & _
                "5 reflections/refractions are processed."

            renderPreset.FGRayCount = 200
            renderPreset.FinalGatheringMode = _
                FinalGatheringMode.FinalGatherAuto
            renderPreset.GIPhotonsPerLight = 10000

            renderPreset.Name = "Medium"
            renderPreset.RayTraceDepth = _
                New MentalRayRenderSettingsTraitsTraceParameter( _
                    5, 5, 5)
            renderPreset.RayTracingEnabled = True
            renderPreset.Sampling = _
                New MentalRayRenderSettingsTraitsIntegerRangeParameter( _
                    0, 1)
            renderPreset.SamplingContrastColor = _
                New MentalRayRenderSettingsTraitsFloatParameter( _
                    0.05, 0.05, 0.05, 0.05)
            renderPreset.SamplingFilter = _
                New MentalRayRenderSettingsTraitsSamplingParameter( _
                    Filter.Gauss, 3.0, 3.0)

            renderPreset.ShadowSamplingMultiplier = _
                ShadowSamplingMultiplier.SamplingMultiplierOneHalf
            renderPreset.TextureSampling = True
        Case "HIGH"
            renderPreset.BackFacesEnabled = True
            renderPreset.Description = _
                "Rendering quality is improved over Medium. " & _
                "High anti-aliasing and a raytracing depth of 7 " & _
                "reflections/refractions are processed."

            renderPreset.FGRayCount = 500
            renderPreset.FinalGatheringMode = _
                FinalGatheringMode.FinalGatherAuto
            renderPreset.GIPhotonsPerLight = 10000

            renderPreset.Name = "High"
            renderPreset.RayTraceDepth = _
                New MentalRayRenderSettingsTraitsTraceParameter( _
                    7, 7, 7)
            renderPreset.RayTracingEnabled = True
            renderPreset.Sampling = _
                New MentalRayRenderSettingsTraitsIntegerRangeParameter( _
                    0, 2)
            renderPreset.SamplingContrastColor = _
                New MentalRayRenderSettingsTraitsFloatParameter( _
                    0.05, 0.05, 0.05, 0.05)
            renderPreset.SamplingFilter = _
                New MentalRayRenderSettingsTraitsSamplingParameter( _
                    Filter.Mitchell, 4.0, 4.0)

            renderPreset.ShadowSamplingMultiplier = _
                ShadowSamplingMultiplier.SamplingMultiplierOne
            renderPreset.TextureSampling = True
        Case "PRESENTATION"
            renderPreset.BackFacesEnabled = True
            renderPreset.Description = _
                "Rendering quality is improved over High. " & _
                "Very high anti-aliasing and a raytracing depth of 9 " & _
                "reflections/refractions are processed."

            renderPreset.FGRayCount = 1000
            renderPreset.FinalGatheringMode = _
                FinalGatheringMode.FinalGatherAuto
            renderPreset.GIPhotonsPerLight = 10000

            renderPreset.Name = "Presentation"
            renderPreset.RayTraceDepth = _
                New MentalRayRenderSettingsTraitsTraceParameter( _
                    9, 9, 9)
            renderPreset.RayTracingEnabled = True
            renderPreset.Sampling = _
                New MentalRayRenderSettingsTraitsIntegerRangeParameter( _
                    1, 2)
            renderPreset.SamplingContrastColor = _
                New MentalRayRenderSettingsTraitsFloatParameter( _
                    0.05, 0.05, 0.05, 0.05)
            renderPreset.SamplingFilter = _
                New MentalRayRenderSettingsTraitsSamplingParameter( _
                    Filter.Lanczos, 4.0, 4.0)

            renderPreset.ShadowSamplingMultiplier = _
                ShadowSamplingMultiplier.SamplingMultiplierOne
            renderPreset.TextureSampling = True
    End Select
End Sub

C#

// Standard .NET namespaces
using System;
using System.Runtime.InteropServices;

// Main AutoCAD namespaces
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD;

// Used to set a viewport current
[DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl,
 EntryPoint = "?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@@PEBVAcDbViewport@@@Z")]
extern static private int acedSetCurrentVPort(IntPtr AcDbVport);

// Used to create a rectangular and nonrectangular viewports
[CommandMethod("CreatViewportsAndSetShadePlot")]
public void CreatViewportsAndSetShadePlot()
{
    // Get the current document and database, and start a transaction
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;

    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
    {
        // Open the Block table for read
        BlockTable acBlkTbl= acTrans.GetObject(acCurDb.BlockTableId,
                                               OpenMode.ForRead) as BlockTable;

        // Open the Block table record Paper space for write
        BlockTableRecord acBlkTblRec =
            acTrans.GetObject(acBlkTbl[BlockTableRecord.PaperSpace],
                              OpenMode.ForWrite) as BlockTableRecord;

        // Switch to the previous Paper space layout
        Application.SetSystemVariable("TILEMODE", 0);
        acDoc.Editor.SwitchToPaperSpace();

        // Remove any viewports that already exist
        foreach (ObjectId objId in acBlkTblRec)
        {
            DBObject dbObj = acTrans.GetObject(objId,
                                               OpenMode.ForRead) as DBObject;

            // Remove any viewports in the block
            Autodesk.AutoCAD.DatabaseServices.Viewport acVport = 
                dbObj as Autodesk.AutoCAD.DatabaseServices.Viewport;

            if (acVport != null)
            {
                dbObj.UpgradeOpen();
                dbObj.Erase(true);
            }
        }

        // Create a Viewport
        using (Autodesk.AutoCAD.DatabaseServices.Viewport acVport1 = 
                   new Autodesk.AutoCAD.DatabaseServices.Viewport())
        {
            // Set the center point and size of the viewport
            acVport1.CenterPoint = new Point3d(3.75, 4, 0);
            acVport1.Width = 7.5;
            acVport1.Height = 7.5;

            // Lock the viewport
            acVport1.Locked = true;

            // Set the scale to 1" = 4'
            acVport1.CustomScale = 48;

            // Set visual style
            DBDictionary vStyles =
                acTrans.GetObject(acCurDb.VisualStyleDictionaryId,
                                  OpenMode.ForRead) as DBDictionary;

            acVport1.SetShadePlot(ShadePlotType.VisualStyle,
                                  vStyles.GetAt("Sketchy"));

            // Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acVport1);
            acTrans.AddNewlyCreatedDBObject(acVport1, true);

            // Change the view direction and enable the viewport
            acVport1.ViewDirection = new Vector3d(-1, -1, 1);
            acVport1.On = true;

            // Create a rectangular viewport to change to a non-rectangular viewport
            using (Autodesk.AutoCAD.DatabaseServices.Viewport acVport2 = 
                       new Autodesk.AutoCAD.DatabaseServices.Viewport())
            {
                acVport2.CenterPoint = new Point3d(9, 6.5, 0);
                acVport2.Width = 2.5;
                acVport2.Height = 2.5;

                // Set the scale to 1" = 8'
                acVport2.CustomScale = 96;

                // Set render preset
                DBDictionary namedObjs =
                    acTrans.GetObject(acCurDb.NamedObjectsDictionaryId,
                                      OpenMode.ForRead) as DBDictionary;

                // Check to see if the Render Settings dictionary already exists
                DBDictionary renderSettings; 
                if (namedObjs.Contains("ACAD_RENDER_PLOT_SETTINGS") == true)
                {
                    renderSettings = acTrans.GetObject(
                        namedObjs.GetAt("ACAD_RENDER_PLOT_SETTINGS"),
                        OpenMode.ForWrite) as DBDictionary;
                }
                else
                {
                    // If it does not exist, create it and add it to the drawing
                    namedObjs.UpgradeOpen();
                    renderSettings = new DBDictionary();
                    namedObjs.SetAt("ACAD_RENDER_PLOT_SETTINGS", renderSettings);
                    acTrans.AddNewlyCreatedDBObject(renderSettings, true);
                }

                // Create the new render preset, based on the settings
                // of the Medium render preset
                MentalRayRenderSettings renderSetting = new MentalRayRenderSettings();

                GetDefaultRenderPreset(ref renderSetting, "Medium");

                renderSetting.Name = "Medium";
                renderSettings.SetAt("Medium", renderSetting);
                acTrans.AddNewlyCreatedDBObject(renderSetting, true);

                acVport2.SetShadePlot(ShadePlotType.RenderPreset,
                                      renderSetting.ObjectId);
                renderSetting.Dispose();

                // Create a circle
                using (Circle acCirc = new Circle())
                {
                    acCirc.Center = acVport2.CenterPoint;
                    acCirc.Radius = 1.25;

                    // Add the new object to the block table record and the transaction
                    acBlkTblRec.AppendEntity(acCirc);
                    acTrans.AddNewlyCreatedDBObject(acCirc, true);

                    // Clip the viewport using the circle  
                    acVport2.NonRectClipEntityId = acCirc.ObjectId;
                    acVport2.NonRectClipOn = true;
                }

                // Add the new object to the block table record and the transaction
                acBlkTblRec.AppendEntity(acVport2);
                acTrans.AddNewlyCreatedDBObject(acVport2, true);

                // Change the view direction
                acVport2.ViewDirection = new Vector3d(0, 0, 1);

                // Enable the viewport
                acVport2.On = true;
            }

            // Activate model space
            acDoc.Editor.SwitchToModelSpace();

            // Set the new viewport current via an imported ObjectARX function
            acedSetCurrentVPort(acVport1.UnmanagedObject);
        }

        // Save the new objects to the database
        acTrans.Commit();
    }
}

// Method used to populate a MentalRayRenderSettings object with the
// same settings used by the standard render presets
private static void GetDefaultRenderPreset(
               ref MentalRayRenderSettings renderPreset,
               string name)
{
    // Set the values common to multiple default render presets
    renderPreset.BackFacesEnabled = false;
    renderPreset.DiagnosticBackgroundEnabled = false;
    renderPreset.DiagnosticBSPMode =
        DiagnosticBSPMode.Depth;
    renderPreset.DiagnosticGridMode =
        new MentalRayRenderSettingsTraitsDiagnosticGridModeParameter(
            DiagnosticGridMode.Object, (float)10.0);

    renderPreset.DiagnosticMode =
        DiagnosticMode.Off;
    renderPreset.DiagnosticPhotonMode =
        DiagnosticPhotonMode.Density;
    renderPreset.DisplayIndex = 0;
    renderPreset.EnergyMultiplier = (float)1.0;
    renderPreset.ExportMIEnabled = false;
    renderPreset.ExportMIFileName = "";
    renderPreset.FGRayCount = 100;

    // FGSampleRadius cannot be set, it returns invalid input
    renderPreset.FGSampleRadiusState =
        new MentalRayRenderSettingsTraitsBoolParameter(
            false, false, false);

    renderPreset.FinalGatheringEnabled = false;
    renderPreset.FinalGatheringMode =
        FinalGatheringMode.FinalGatherOff;
    renderPreset.GIPhotonsPerLight = 1000;
    renderPreset.GISampleCount = 500;
    renderPreset.GISampleRadius = 1.0;
    renderPreset.GISampleRadiusEnabled = false;
    renderPreset.GlobalIlluminationEnabled = false;
    renderPreset.LightLuminanceScale = 1500.0;
    renderPreset.MaterialsEnabled = true;
    renderPreset.MemoryLimit = 1048;

    renderPreset.PhotonTraceDepth =
        new MentalRayRenderSettingsTraitsTraceParameter(
            5, 5, 5);
    renderPreset.PreviewImageFileName = "";
    renderPreset.RayTraceDepth =
        new MentalRayRenderSettingsTraitsTraceParameter(
            3, 3, 3);
    renderPreset.RayTracingEnabled = false;
    renderPreset.Sampling =
        new MentalRayRenderSettingsTraitsIntegerRangeParameter(
            -2, -1);
    renderPreset.SamplingContrastColor =
        new MentalRayRenderSettingsTraitsFloatParameter(
            (float)0.1, (float)0.1, (float)0.1, (float)0.1);
    renderPreset.SamplingFilter =
        new MentalRayRenderSettingsTraitsSamplingParameter(
            Filter.Box, 1.0, 1.0);

    renderPreset.ShadowMapsEnabled = false;
    renderPreset.ShadowMode = ShadowMode.Simple;
    renderPreset.ShadowSamplingMultiplier =
        ShadowSamplingMultiplier.SamplingMultiplierZero;
    renderPreset.ShadowsEnabled = true;
    renderPreset.TextureSampling = false;
    renderPreset.TileOrder = TileOrder.Hilbert;
    renderPreset.TileSize = 32;

    switch (name.ToUpper()) {
        // Assigns the values to match the Draft render preset
	case "DRAFT":
            renderPreset.Description =
                "The lowest rendering quality which entails no raytracing, " +
                "no texture filtering and force 2-sided is inactive.";
            renderPreset.Name = "Draft";
            break;
        case "LOW":
            renderPreset.Description =
                "Rendering quality is improved over Draft. " +
                "Low anti-aliasing and a raytracing depth of 3 " +
                "reflection/refraction are processed.";
            renderPreset.Name = "Low";

            renderPreset.RayTracingEnabled = true;

            renderPreset.Sampling =
                new MentalRayRenderSettingsTraitsIntegerRangeParameter(
                    -1, 0);
            renderPreset.SamplingContrastColor =
                new MentalRayRenderSettingsTraitsFloatParameter(
                    (float)0.1, (float)0.1, (float)0.1, (float)0.1);
            renderPreset.SamplingFilter =
                new MentalRayRenderSettingsTraitsSamplingParameter(
                    Filter.Triangle, 2.0, 2.0);

            renderPreset.ShadowSamplingMultiplier =
                ShadowSamplingMultiplier.SamplingMultiplierOneFourth;
            break;
        case "MEDIUM":
            renderPreset.BackFacesEnabled = true;
            renderPreset.Description =
                "Rendering quality is improved over Low to include " +
                "texture filtering and force 2-sided is active. " +
                "Moderate anti-aliasing and a raytracing depth of " +
                "5 reflections/refractions are processed.";

            renderPreset.FGRayCount = 200;
            renderPreset.FinalGatheringMode =
                FinalGatheringMode.FinalGatherAuto;
            renderPreset.GIPhotonsPerLight = 10000;

            renderPreset.Name = "Medium";
            renderPreset.RayTraceDepth =
                new MentalRayRenderSettingsTraitsTraceParameter(
                    5, 5, 5);
            renderPreset.RayTracingEnabled = true;
            renderPreset.Sampling =
                new MentalRayRenderSettingsTraitsIntegerRangeParameter(
                    0, 1);
            renderPreset.SamplingContrastColor =
                new MentalRayRenderSettingsTraitsFloatParameter(
                    (float)0.05, (float)0.05, (float)0.05, (float)0.05);
            renderPreset.SamplingFilter =
                new MentalRayRenderSettingsTraitsSamplingParameter(
                    Filter.Gauss, 3.0, 3.0);

            renderPreset.ShadowSamplingMultiplier =
                ShadowSamplingMultiplier.SamplingMultiplierOneHalf;
            renderPreset.TextureSampling = true;
            break;
        case "HIGH":
            renderPreset.BackFacesEnabled = true;
            renderPreset.Description =
                "Rendering quality is improved over Medium. " +
                "High anti-aliasing and a raytracing depth of 7 " +
                "reflections/refractions are processed.";

            renderPreset.FGRayCount = 500;
            renderPreset.FinalGatheringMode =
                FinalGatheringMode.FinalGatherAuto;
            renderPreset.GIPhotonsPerLight = 10000;

            renderPreset.Name = "High";
            renderPreset.RayTraceDepth =
                new MentalRayRenderSettingsTraitsTraceParameter(
                    7, 7, 7);
            renderPreset.RayTracingEnabled = true;
            renderPreset.Sampling =
                new MentalRayRenderSettingsTraitsIntegerRangeParameter(
                    0, 2);
            renderPreset.SamplingContrastColor =
                new MentalRayRenderSettingsTraitsFloatParameter(
                    (float)0.05, (float)0.05, (float)0.05, (float)0.05);
            renderPreset.SamplingFilter =
                new MentalRayRenderSettingsTraitsSamplingParameter(
                    Filter.Mitchell, 4.0, 4.0);

            renderPreset.ShadowSamplingMultiplier =
                ShadowSamplingMultiplier.SamplingMultiplierOne;
            renderPreset.TextureSampling = true;
            break;
        case "PRESENTATION":
            renderPreset.BackFacesEnabled = true;
            renderPreset.Description =
                "Rendering quality is improved over High. " +
                "Very high anti-aliasing and a raytracing depth of 9 " +
                "reflections/refractions are processed.";

            renderPreset.FGRayCount = 1000;
            renderPreset.FinalGatheringMode =
                FinalGatheringMode.FinalGatherAuto;
            renderPreset.GIPhotonsPerLight = 10000;

            renderPreset.Name = "Presentation";
            renderPreset.RayTraceDepth =
                new MentalRayRenderSettingsTraitsTraceParameter(
                    9, 9, 9);
            renderPreset.RayTracingEnabled = true;
            renderPreset.Sampling =
                new MentalRayRenderSettingsTraitsIntegerRangeParameter(
                    1, 2);
            renderPreset.SamplingContrastColor =
                new MentalRayRenderSettingsTraitsFloatParameter(
                    (float)0.05, (float)0.05, (float)0.05, (float)0.05);
            renderPreset.SamplingFilter =
                new MentalRayRenderSettingsTraitsSamplingParameter(
                    Filter.Lanczos, 4.0, 4.0);

            renderPreset.ShadowSamplingMultiplier =
                ShadowSamplingMultiplier.SamplingMultiplierOne;
            renderPreset.TextureSampling = true;
            break;
    }
}