The example demonstrates how to add layers with optional content using ByteScout PDF SDK.

Program.vb:
VB

'*******************************************************************
'       ByteScout PDF SDK
'                                                                   
'       Copyright © 2016 Bytescout, http://www.bytescout.com        
'       ALL RIGHTS RESERVED                                         
'                                                                   
'*******************************************************************

Imports System.Drawing
Imports Bytescout.PDF

''' <summary>
''' This example demonstrates how to add layers with optional content.
''' </summary>
Class Program

    Shared Sub Main()

        ' Create new document
        Dim pdfDocument = New Document()
        pdfDocument.RegistrationName = "demo"
		pdfDocument.RegistrationKey = "demo"
        ' Add page
        Dim page = New Page(PaperFormat.A4)
        pdfDocument.Pages.Add(page)

        Dim canvas = page.Canvas

        ' Add main layer
        Dim allContents = New Layer("Main Layer")
        canvas.BeginMarkedContent(allContents)

        ' Add sub-layer
        Dim layer1 = New Layer("Square")
        canvas.BeginMarkedContent(layer1)
        canvas.DrawRectangle(New Bytescout.PDF.SolidBrush(New ColorRGB(0, 255, 0)), 20, 20, 100, 100)
        canvas.EndMarkedContent()

        ' Add second sub-layer
        Dim layer2 = New Layer("Circle")
        canvas.BeginMarkedContent(layer2)
        canvas.DrawCircle(New Bytescout.PDF.SolidBrush(New ColorRGB(255, 0, 0)), 70, 180, 50)
        canvas.EndMarkedContent()

        ' Add third sub-layer
        Dim layer3 = New Layer("Triangle")
        canvas.BeginMarkedContent(layer3)
        canvas.DrawPolygon(New Bytescout.PDF.SolidBrush(New ColorRGB(0, 0, 255)), New PointF() {New PointF(20, 340), New PointF(70, 240), New PointF(120, 340)})
        canvas.EndMarkedContent()

        canvas.EndMarkedContent()

        pdfDocument.OptionalContents.Layers.Add(layer1)
        pdfDocument.OptionalContents.Layers.Add(layer2)
        pdfDocument.OptionalContents.Layers.Add(layer3)
        pdfDocument.OptionalContents.Layers.Add(allContents)

        ' Configure layers

        ' Group sub-layers
        Dim group = New OptionalContentGroup()
        group.Add(New OptionalContentGroupLayer(layer1))
        group.Add(New OptionalContentGroupLayer(layer2))
        group.Add(New OptionalContentGroupLayer(layer3))

        ' Order sub-layers
        pdfDocument.OptionalContents.Configuration.Order.Add(New OptionalContentGroupLayer(allContents))
        pdfDocument.OptionalContents.Configuration.Order.Add(group)

        ' Make the third layer invisible by default (for example)
        pdfDocument.OptionalContents.Configuration.OFF.Add(layer3)

        ' Force the PDF viewer to show the layers panel initially
        pdfDocument.PageMode = PageMode.OptionalContent

        ' Save document to file
        pdfDocument.Save("result.pdf")

        ' Cleanup 
        pdfDocument.Dispose()

        ' Open document in default PDF viewer app
        Process.Start("result.pdf")

    End Sub

End Class 

Program.cs:
C#

//*******************************************************************
//       ByteScout PDF SDK		                                     
//                                                                   
//       Copyright © 2016 ByteScout - http://www.bytescout.com       
//       ALL RIGHTS RESERVED                                         
//                                                                   
//*******************************************************************

using System.Diagnostics;
using System.Drawing;
using Bytescout.PDF;
using SolidBrush = Bytescout.PDF.SolidBrush;

namespace Layers
{
	/// <summary>
	/// This example demonstrates how to add layers with optional content.
	/// </summary>
	class Program
	{
		static void Main()
		{
			// Create new document
			Document pdfDocument = new Document();
			pdfDocument.RegistrationName = "demo";
			pdfDocument.RegistrationKey = "demo";
			// Add page
			Page page = new Page(PaperFormat.A4);
			pdfDocument.Pages.Add(page);

			Canvas canvas = page.Canvas;

			// Add main layer
			Layer allContents = new Layer("Main Layer");
			canvas.BeginMarkedContent(allContents);

			// Add sub-layer
			Layer layer1 = new Layer("Square");
			canvas.BeginMarkedContent(layer1);
			canvas.DrawRectangle(new SolidBrush(new ColorRGB(0, 255, 0)), 20, 20, 100, 100);
			canvas.EndMarkedContent();

			// Add second sub-layer
			Layer layer2 = new Layer("Circle");
			canvas.BeginMarkedContent(layer2);
			canvas.DrawCircle(new SolidBrush(new ColorRGB(255, 0, 0)), 70, 180, 50);
			canvas.EndMarkedContent();

			// Add third sub-layer
			Layer layer3 = new Layer("Triangle");
			canvas.BeginMarkedContent(layer3);
			canvas.DrawPolygon(new SolidBrush(new ColorRGB(0, 0, 255)), new PointF[] { new PointF(20, 340), new PointF(70, 240), new PointF(120, 340) });
			canvas.EndMarkedContent();

			canvas.EndMarkedContent();

			pdfDocument.OptionalContents.Layers.Add(layer1);
			pdfDocument.OptionalContents.Layers.Add(layer2);
			pdfDocument.OptionalContents.Layers.Add(layer3);
			pdfDocument.OptionalContents.Layers.Add(allContents);

			// Configure layers

			// Group sub-layers
			OptionalContentGroup group = new OptionalContentGroup();
			group.Add(new OptionalContentGroupLayer(layer1));
			group.Add(new OptionalContentGroupLayer(layer2));
			group.Add(new OptionalContentGroupLayer(layer3));

			// Order sub-layers
			pdfDocument.OptionalContents.Configuration.Order.Add(new OptionalContentGroupLayer(allContents));
			pdfDocument.OptionalContents.Configuration.Order.Add(group);

			// Make the third layer invisible by default (for example)
			pdfDocument.OptionalContents.Configuration.OFF.Add(layer3);

			// Force the PDF viewer to show the layers panel initially
			pdfDocument.PageMode = PageMode.OptionalContent;
			
			// Save document to file
			pdfDocument.Save("result.pdf");

			// Cleanup 
			pdfDocument.Dispose();

			// Open document in default PDF viewer app
			Process.Start("result.pdf");
		}
	}
}