This document is archived and information here might be outdated.  Recommended version.


Create A Standard Builder Schematic Diagram Class From Scratch Snippet (ArcObjects .NET 10.4 SDK)
ArcObjects Library Reference

Create A Standard Builder Schematic Diagram Class From Scratch Snippet

This sample code creates a schematic diagram template based on the standard builder to generate diagrams from any network feature selected in a map or any record selected in an object table.

[C#]
using System;
using System.Collections.Generic;
using System.Text;

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Schematic;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.Geodatabase;

namespace CodeSnippetCS
{
     
    public class StandardDiagramClass
    {
        #region Create Standard builder diagram template

        // This sample code creates a schematic diagram template based on the standard builder to generate diagrams from any network feature selected in a map or any record selected in an object table.
        const string DATASET_NAME="MyStandardBuilderDataset";
        const string DIAGRAM_TEMPLATE_NAME="MyDiagramClass";

        public ESRI.ArcGIS.Schematic.ISchematicDataset CreateStandardSchematicDataset(ESRI.ArcGIS.Geodatabase.IWorkspace esriWorkspace)
        {
            ESRI.ArcGIS.Schematic.ISchematicWorkspace schWorkspace=null;
            ISchematicDataset schData=null;
            
            //-- STEP#1 -- Opening the ISchematicWorkspace related to the input IWorkspace
            Type objectType=Type.GetTypeFromProgID("esriSchematic.SchematicWorkspaceFactory");

            ESRI.ArcGIS.Schematic.ISchematicWorkspaceFactory schWorkspaceFct;
            schWorkspaceFct=Activator.CreateInstance(objectType) as ESRI.ArcGIS.Schematic.ISchematicWorkspaceFactory;

            if (esriWorkspace != null) schWorkspace=schWorkspaceFct.Open(esriWorkspace);

            //-- STEP#2 -- Creating the new ISchematicDataset
            // verify that the ISchematicDataset to create doesn't already exist in the input IWorkspace
            schData=schWorkspace.get_SchematicDatasetByName(DATASET_NAME);
            // if it already exists, exit
            if (schData != null) return schData;

            // create the new ISchematicDataset
            try
            {
                schData=schWorkspace.CreateSchematicDataset(DATASET_NAME, "");
                schData.DesignMode=true;
            }
            catch
            {
                // if the ISchematicDataset cannot be created, the process stops
                return null;
            }

            //-- STEP#3 -- Creating the ISchematicStandardBuilder that will be assigned afterwards to the schematic diagram template
            objectType=Type.GetTypeFromProgID("esriSchematic.SchematicStandardBuilder");
            ESRI.ArcGIS.Schematic.ISchematicStandardBuilder pSchStandardBuilder;
            if (objectType == null) return null;

            pSchStandardBuilder=Activator.CreateInstance(objectType) as ESRI.ArcGIS.Schematic.ISchematicStandardBuilder;
            // if the ISchematicStandardBuilder is Nothing, exit
            if (pSchStandardBuilder == null) return null;

            pSchStandardBuilder.AddConnectedNodes=true;
            pSchStandardBuilder.InitializeLinksVertices=true;
            // the builder is configured to work with the AutoCreateElementClasses mode enabled
            pSchStandardBuilder.AutoCreateElementClasses=true;
            // this makes that the builder will automatically create schematic feature classes that could be missing from the schematic diagram template when it operates

            ESRI.ArcGIS.Schematic.ISchematicBuilder pSchBuilder=(ISchematicBuilder)pSchStandardBuilder;

            //-- STEP#4 -- Creating the ISchematicDiagramClass
            ESRI.ArcGIS.Schematic.ISchematicDiagramClass schDiagClass=null;
            try
            {
                schDiagClass=schData.CreateSchematicDiagramClass(DIAGRAM_TEMPLATE_NAME);
            }
            catch { }
            schDiagClass.SchematicBuilder=pSchBuilder;

            //-- STEP#5 -- Configuring some diagram class parameters
            schDiagClass.SchematicDataSource=schData.DefaultSchematicDataSource;
            schDiagClass.ExternalQueryEvaluationMode=esriSchematicExternalQueryEvaluationMode.esriSchematicNoQuery;
            
            //-- STEP#6 -- Saving the schematic dataset and exit the design mode
            schData.Save(ESRI.ArcGIS.esriSystem.esriArcGISVersion.esriArcGISVersionCurrent, false);
            schData.DesignMode=false;

            return schData;
        }
        #endregion
    }

}

[Visual Basic .NET]
Imports System
Imports System.Collections.Generic
Imports System.Text

Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Schematic
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.Geodatabase

Public Class StandardDiagramClass

#Region "Create Standard builder diagram template"

    'This sample code creates a schematic diagram template based on the standard builder to generate diagrams from any network feature selected in a map or any record selected in an object table.
    Const DATASET_NAME As String="MyStandardBuilderDataset"
    Const DIAGRAM_TEMPLATE_NAME As String="MyDiagramClass"

    Public Function CreateStandardSchematicDataset(ByVal esriWorkspace As ESRI.ArcGIS.Geodatabase.IWorkspace) As ESRI.ArcGIS.Schematic.ISchematicDataset

        Dim schWorkspace As ESRI.ArcGIS.Schematic.ISchematicWorkspace=Nothing
        Dim schData As ESRI.ArcGIS.Schematic.ISchematicDataset=Nothing

        '-- STEP#1 -- Opening the ISchematicWorkspace related to the input IWorkspace
        Dim objectType As Type=Type.GetTypeFromProgID("esriSchematic.SchematicWorkspaceFactory")

        Dim schWorkspaceFct As ESRI.ArcGIS.Schematic.ISchematicWorkspaceFactory
        schWorkspaceFct=TryCast(Activator.CreateInstance(objectType), ISchematicWorkspaceFactory)

        If (esriWorkspace IsNot Nothing) Then schWorkspace=schWorkspaceFct.Open(esriWorkspace)

        '-- STEP#2 -- Creating the new ISchematicDataset
        ' verify that the ISchematicDataset to create doesn't already exist in the input IWorkspace
        schData=schWorkspace.SchematicDatasetByName(DATASET_NAME)
        ' if it already exists, exit
        If (schData IsNot Nothing) Then Return schData

        ' create the new ISchematicDataset
        Try
            schData=schWorkspace.CreateSchematicDataset(DATASET_NAME, "")
            schData.DesignMode=True
        Catch

            ' if the ISchematicDataset cannot be created, the process stops
            Return Nothing
        End Try

        '-- STEP#3 -- Creating the ISchematicStandardBuilder that will be assigned afterwards to the schematic diagram template
        objectType=Type.GetTypeFromProgID("esriSchematic.SchematicStandardBuilder")
        Dim pSchStandardBuilder As ESRI.ArcGIS.Schematic.ISchematicStandardBuilder
        If (objectType Is Nothing) Then Return Nothing

        pSchStandardBuilder=TryCast(Activator.CreateInstance(objectType), ESRI.ArcGIS.Schematic.ISchematicStandardBuilder)
        ' if the ISchematicStandardBuilder is Nothing, exit
        If (pSchStandardBuilder Is Nothing) Then Return Nothing

        pSchStandardBuilder.AddConnectedNodes=True
        pSchStandardBuilder.InitializeLinksVertices=True
        ' the builder is configured to work with the AutoCreateElementClasses mode enabled
        pSchStandardBuilder.AutoCreateElementClasses=True
        ' this makes that the builder will automatically create schematic feature classes that could be missing from the schematic diagram template when it operates

        Dim pSchBuilder As ESRI.ArcGIS.Schematic.ISchematicBuilder=TryCast(pSchStandardBuilder, ISchematicBuilder)

        '-- STEP#4 -- Creating the ISchematicDiagramClass
        Dim schDiagClass As ESRI.ArcGIS.Schematic.ISchematicDiagramClass=Nothing
        Try
            schDiagClass=schData.CreateSchematicDiagramClass(DIAGRAM_TEMPLATE_NAME)
        Catch
        End Try
        schDiagClass.SchematicBuilder=pSchBuilder

        '-- STEP#5 -- Configuring some diagram class parameters
        schDiagClass.SchematicDataSource=schData.DefaultSchematicDataSource
        schDiagClass.ExternalQueryEvaluationMode=esriSchematicExternalQueryEvaluationMode.esriSchematicNoQuery

        '-- STEP#6 -- Saving the schematic dataset and exit the design mode
        schData.Save(ESRI.ArcGIS.esriSystem.esriArcGISVersion.esriArcGISVersionCurrent, False)
        schData.DesignMode=False

        Return schData
    End Function
#End Region

End Class


Additional Requirements
  • The code in this document requires the following References added to the Visual Studio project:
  • ESRI.ArcGIS.Carto
  • ESRI.ArcGIS.Framework
  • ESRI.ArcGIS.Geodatabase
  • ESRI.ArcGIS.Geometry
  • ESRI.ArcGIS.Schematic
  • System