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.
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.
' Standard .NET namespaces
Imports System.Runtime.InteropServices
' Main AutoCAD namespaces
Imports Autodesk.AutoCAD
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.PlottingServices
Imports Autodesk.AutoCAD.GraphicsInterface
' Used to create a rectangular and nonrectangular viewports - RapidRT example
<CommandMethod("RRTCreatViewportsAndSetShadePlot")> _
Public Sub RRTCreatViewportsAndSetShadePlot()
' 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)
' Create a Viewport
Using acVport1 As Autodesk.AutoCAD.DatabaseServices.Viewport =
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
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
acVport1.ViewDirection = New Vector3d(-1, -1, 1)
' Create a rectangular viewport to change to a non-rectangular viewport
Using acVport2 As Autodesk.AutoCAD.DatabaseServices.Viewport =
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
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_RAPIDRT_SETTINGS") = True) Then
renderSettings = acTrans.GetObject(
namedObjs.GetAt("ACAD_RENDER_RAPIDRT_SETTINGS"),
OpenMode.ForWrite)
Else
' If it does not exist, create it and add it to the drawing
acTrans.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForWrite)
renderSettings = New DBDictionary()
namedObjs.SetAt("ACAD_RENDER_RAPIDRT_SETTINGS", renderSettings)
acTrans.AddNewlyCreatedDBObject(renderSettings, True)
End If
' Create a new render preset and assign it to the new viewport
Dim renderSetting As RapidRTRenderSettings
If (renderSettings.Contains("MyPreset") = False) Then
renderSetting = New RapidRTRenderSettings()
renderSetting.Name = "MyPreset"
renderSetting.Description = "Custom new render preset"
renderSettings.SetAt("MyPreset", renderSetting)
acTrans.AddNewlyCreatedDBObject(renderSetting, True)
Else
renderSetting = acTrans.GetObject(
renderSettings.GetAt("MyPreset"), OpenMode.ForRead)
End If
acVport2.SetShadePlot(ShadePlotType.RenderPreset,
renderSetting.ObjectId)
renderSetting.Dispose()
' 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)
' Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acVport2)
acTrans.AddNewlyCreatedDBObject(acVport2, True)
' Clip the viewport using the circle
acVport2.NonRectClipEntityId = acCirc.ObjectId
acVport2.NonRectClipOn = True
End Using
' Change the view direction
acVport2.ViewDirection = New Vector3d(0, 0, 1)
' Enable the viewports
acVport1.On = True
acVport2.On = True
End Using
End Using
' Save the new objects to the database
acTrans.Commit()
End Using
' Switch to the last named layout
acDoc.Database.TileMode = False
End Sub
// Standard .NET namespaces
using System;
using System.Runtime.InteropServices;
// Main AutoCAD namespaces
using Autodesk.AutoCAD;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.EditorInput;
// Used to create a rectangular and nonrectangular viewports - RapidRT example
[CommandMethod("RRTCreatViewportsAndSetShadePlot")]
public void RRTCreatViewportsAndSetShadePlot()
{
// 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;
// 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
acVport1.ViewDirection = new Vector3d(-1, -1, 1);
// 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_RAPIDRT_SETTINGS") == true)
{
renderSettings = acTrans.GetObject(
namedObjs.GetAt("ACAD_RENDER_RAPIDRT_SETTINGS"),
OpenMode.ForWrite) as DBDictionary;
}
else
{
// If it does not exist, create it and add it to the drawing
acTrans.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForWrite);
renderSettings = new DBDictionary();
namedObjs.SetAt("ACAD_RENDER_RAPIDRT_SETTINGS", renderSettings);
acTrans.AddNewlyCreatedDBObject(renderSettings, true);
}
// Create a new render preset and assign it to the new viewport
RapidRTRenderSettings renderSetting;
if (renderSettings.Contains("MyPreset") == false)
{
renderSetting = new RapidRTRenderSettings();
renderSetting.Name = "MyPreset";
renderSetting.Description = "Custom new render preset";
renderSettings.SetAt("MyPreset", renderSetting);
acTrans.AddNewlyCreatedDBObject(renderSetting, true);
}
else
{
renderSetting = (RapidRTRenderSettings)acTrans.GetObject(
renderSettings.GetAt("MyPreset"), OpenMode.ForRead);
}
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);
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acVport2);
acTrans.AddNewlyCreatedDBObject(acVport2, true);
// Clip the viewport using the circle
acVport2.NonRectClipEntityId = acCirc.ObjectId;
acVport2.NonRectClipOn = true;
}
// Change the view direction
acVport2.ViewDirection = new Vector3d(0, 0, 1);
// Enable the viewports
acVport1.On = true;
acVport2.On = true;
}
}
// Save the new objects to the database
acTrans.Commit();
}
// Switch to the last named layout
acDoc.Database.TileMode = false;
}
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.
' Standard .NET namespaces
Imports System.Runtime.InteropServices
' Main AutoCAD namespaces
Imports Autodesk.AutoCAD
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.PlottingServices
Imports Autodesk.AutoCAD.GraphicsInterface
' Used to create a rectangular and nonrectangular viewports - MentalRay example
<CommandMethod("MRCreatViewportsAndSetShadePlot")> _
Public Sub MRCreatViewportsAndSetShadePlot()
' 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)
' Create a Viewport
Using acVport1 As Autodesk.AutoCAD.DatabaseServices.Viewport =
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
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 Autodesk.AutoCAD.DatabaseServices.Viewport =
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
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
acTrans.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForWrite)
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
Dim renderSetting As MentalRayRenderSettings = New MentalRayRenderSettings
GetDefaultRenderPreset(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 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)
' Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acVport2)
acTrans.AddNewlyCreatedDBObject(acVport2, True)
' Clip the viewport using the circle
acVport2.NonRectClipEntityId = acCirc.ObjectId
acVport2.NonRectClipOn = True
End Using
' Change the view direction
acVport2.ViewDirection = New Vector3d(0, 0, 1)
' Enable the viewport
acVport2.On = True
End Using
End Using
' Save the new objects to the database
acTrans.Commit()
End Using
' Switch to the previous Paper space layout
acCurDb.TileMode = False
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
// Standard .NET namespaces
using System;
using System.Runtime.InteropServices;
// Main AutoCAD namespaces
using Autodesk.AutoCAD;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.EditorInput;
// Used to create a rectangular and nonrectangular viewports - MentalRay example
[CommandMethod("MRCreatViewportsAndSetShadePlot")]
public void MRCreatViewportsAndSetShadePlot()
{
// 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;
// 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
acTrans.GetObject(acCurDb.NamedObjectsDictionaryId, OpenMode.ForWrite);
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);
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acVport2);
acTrans.AddNewlyCreatedDBObject(acVport2, true);
// Clip the viewport using the circle
acVport2.NonRectClipEntityId = acCirc.ObjectId;
acVport2.NonRectClipOn = true;
}
// Change the view direction
acVport2.ViewDirection = new Vector3d(0, 0, 1);
// Enable the viewport
acVport2.On = true;
}
}
// Save the new objects to the database
acTrans.Commit();
}
// Switch to the previous Paper space layout
acCurDb.TileMode = false;
}
// 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;
}
}