Solid Edge ST7 SDK
Modeling Parts

When you create a model interactively, you always begin by creating a base feature. You then add subsequent features to this base feature to completely define the model. When you create a model using automation, the workflow is identical. Using add methods on the Models collection, you first create a base feature commonly using either an extruded or revolved protrusion.

See Handling 'Application is Busy' and 'Call was Rejected By Callee' errors for information regarding the use of OleMessageFilter.
Modeling a Part in Visual Basic .NET
Copy Code
Imports SolidEdgeConstants
Imports System.Runtime.InteropServices

Module Program
    <STAThread()> _
    Sub Main()
        Dim objApplication As SolidEdgeFramework.Application = Nothing
        Dim objDocuments As SolidEdgeFramework.Documents = Nothing
        Dim objPart As SolidEdgePart.PartDocument = Nothing
        Dim objProfileSets As SolidEdgePart.ProfileSets = Nothing
        Dim objProfileSet As SolidEdgePart.ProfileSet = Nothing
        Dim objProfiles As SolidEdgePart.Profiles = Nothing
        Dim objProfile As SolidEdgePart.Profile = Nothing
        Dim objRefplanes As SolidEdgePart.RefPlanes = Nothing
        Dim objRelations2d As SolidEdgeFrameworkSupport.Relations2d = Nothing
        Dim objRelation2d As SolidEdgeFrameworkSupport.Relation2d = Nothing
        Dim objLines2d As SolidEdgeFrameworkSupport.Lines2d = Nothing
        Dim objLine2d As SolidEdgeFrameworkSupport.Line2d = Nothing
        Dim objModels As SolidEdgePart.Models = Nothing
        Dim objModel As SolidEdgePart.Model = Nothing
        Dim aProfiles As Array

        Try
            OleMessageFilter.Register()

            ' Connect to a running instance of Solid Edge
            objApplication = Marshal.GetActiveObject("SolidEdge.Application")

            ' Get a reference to the documents collection
            objDocuments = objApplication.Documents

            ' Create a new part document
            objPart = objApplication.Add("SolidEdge.PartDocument")

            ' Get a reference to the profile sets collection
            objProfileSets = objPart.ProfileSets

            ' Add a new profile set
            objProfileSet = objProfileSets.Add()

            ' Get a reference to the profiles collection
            objProfiles = objProfileSet.Profiles

            ' Get a reference to the ref planes collection
            objRefplanes = objPart.RefPlanes

            ' Add a new profile
            objProfile = objProfiles.Add(objRefplanes.Item(3))

            ' Get a reference to the lines2d collection
            objLines2d = objProfile.Lines2d

            ' Draw the Base Profile
            objLine2d = objLines2d.AddBy2Points(0, 0, 0.08, 0)
            objLine2d = objLines2d.AddBy2Points(0.08, 0, 0.08, 0.06)
            objLine2d = objLines2d.AddBy2Points(0.08, 0.06, 0.064, 0.06)
            objLine2d = objLines2d.AddBy2Points(0.064, 0.06, 0.064, 0.02)
            objLine2d = objLines2d.AddBy2Points(0.064, 0.02, 0.048, 0.02)
            objLine2d = objLines2d.AddBy2Points(0.048, 0.02, 0.048, 0.06)
            objLine2d = objLines2d.AddBy2Points(0.048, 0.06, 0.032, 0.06)
            objLine2d = objLines2d.AddBy2Points(0.032, 0.06, 0.032, 0.02)
            objLine2d = objLines2d.AddBy2Points(0.032, 0.02, 0.016, 0.02)
            objLine2d = objLines2d.AddBy2Points(0.016, 0.02, 0.016, 0.06)
            objLine2d = objLines2d.AddBy2Points(0.016, 0.06, 0, 0.06)
            objLine2d = objLines2d.AddBy2Points(0, 0.06, 0, 0)

            ' Define Relations among the Line objects to make the Profile closed
            objRelations2d = objProfile.Relations2d
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(1), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(2), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(2), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(3), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(3), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(4), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(4), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(5), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(5), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(6), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(6), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(7), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(7), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(8), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(8), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(9), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(9), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(10), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(10), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(11), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(11), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(12), _
              KeypointIndexConstants.igLineStart)
            objRelation2d = objRelations2d.AddKeypoint( _
              objLines2d.Item(12), _
              KeypointIndexConstants.igLineEnd, _
              objLines2d.Item(1), _
              KeypointIndexConstants.igLineStart)

            ' Close the profile
            objProfile.End( _
              SolidEdgePart.ProfileValidationType.igProfileClosed)

            ' Hide the profile
            objProfile.Visible = False

            ' Create a new array of profile objects
            aProfiles = Array.CreateInstance(GetType(SolidEdgePart.Profile), 1)
            aProfiles.SetValue(objProfile, 0)

            ' Get a reference to the models collection
            objModels = objPart.Models

            ' Create the extended protrusion.
            objModel = objModels.AddFiniteExtrudedProtrusion( _
              aProfiles.Length, _
              aProfiles, _
              SolidEdgePart.FeaturePropertyConstants.igRight, _
              0.05)

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            OleMessageFilter.Revoke()
        End Try
    End Sub
End Module
Modeling a Part in C#
Copy Code
using Examples;
using SolidEdgeConstants;
using System;
using System.Reflection;
using System.Runtime.InteropServices;

namespace SolidEdge.SDK
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            SolidEdgeFramework.Application application = null;
            SolidEdgeFramework.Documents documents = null;
            SolidEdgePart.PartDocument part = null;
            SolidEdgePart.ProfileSets profileSets = null;
            SolidEdgePart.ProfileSet profileSet = null;
            SolidEdgePart.Profiles profiles = null;
            SolidEdgePart.Profile profile = null;
            SolidEdgePart.RefPlanes refplanes = null;
            SolidEdgeFrameworkSupport.Relations2d relations2d = null;
            SolidEdgeFrameworkSupport.Relation2d relation2d = null;
            SolidEdgeFrameworkSupport.Lines2d lines2d = null;
            SolidEdgeFrameworkSupport.Line2d line2d = null;
            SolidEdgePart.Models models = null;
            SolidEdgePart.Model model = null;
            System.Array aProfiles = null;

            try
            {
                OleMessageFilter.Register();

                // Connect to a running instance of Solid Edge
                application = (SolidEdgeFramework.Application)
                  Marshal.GetActiveObject("SolidEdge.Application");

                // Get a reference to the documents collection
                documents = application.Documents;

                // Create a new part document
                part = (SolidEdgePart.PartDocument)
                  documents.Add("SolidEdge.PartDocument", Missing.Value);

                // Get a reference to the profile sets collection
                profileSets = part.ProfileSets;

                // Add a new profile set
                profileSet = profileSets.Add();

                // Get a reference to the profiles collection
                profiles = profileSet.Profiles;

                // Get a reference to the ref planes collection
                refplanes = part.RefPlanes;

                // Add a new profile
                profile = profiles.Add(refplanes.Item(3));

                // Get a reference to the lines2d collection
                lines2d = profile.Lines2d;

                // Draw the Base Profile
                lines2d.AddBy2Points(0, 0, 0.08, 0);
                lines2d.AddBy2Points(0.08, 0, 0.08, 0.06);
                lines2d.AddBy2Points(0.08, 0.06, 0.064, 0.06);
                lines2d.AddBy2Points(0.064, 0.06, 0.064, 0.02);
                lines2d.AddBy2Points(0.064, 0.02, 0.048, 0.02);
                lines2d.AddBy2Points(0.048, 0.02, 0.048, 0.06);
                lines2d.AddBy2Points(0.048, 0.06, 0.032, 0.06);
                lines2d.AddBy2Points(0.032, 0.06, 0.032, 0.02);
                lines2d.AddBy2Points(0.032, 0.02, 0.016, 0.02);
                lines2d.AddBy2Points(0.016, 0.02, 0.016, 0.06);
                lines2d.AddBy2Points(0.016, 0.06, 0, 0.06);
                lines2d.AddBy2Points(0, 0.06, 0, 0);

                // Define Relations among the Line objects to make the Profile closed
                relations2d = (SolidEdgeFrameworkSupport.Relations2d)
                  profile.Relations2d;
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(1),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(2),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(2),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(3),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(3),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(4),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(4),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(5),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(5),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(6),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(6),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(7),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(7),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(8),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(8),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(9),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(10),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(11),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(11),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(12),
                  (int)KeypointIndexConstants.igLineStart,
                  true);
                relation2d = relations2d.AddKeypoint(
                  lines2d.Item(12),
                  (int)KeypointIndexConstants.igLineEnd,
                  lines2d.Item(1),
                  (int)KeypointIndexConstants.igLineStart,
                  true);

                // Close the profile
                profile.End(
                  SolidEdgePart.ProfileValidationType.igProfileClosed);

                // Hide the profile
                profile.Visible = false;

                // Create a new array of profile objects
                aProfiles = Array.CreateInstance(typeof(SolidEdgePart.Profile), 1);
                aProfiles.SetValue(profile, 0);

                // Get a reference to the models collection
                models = part.Models;

                // Create the extended protrusion.
                model = models.AddFiniteExtrudedProtrusion(
                  aProfiles.Length,
                  ref aProfiles,
                  SolidEdgePart.FeaturePropertyConstants.igRight,
                  0.05,
                  Missing.Value,
                  Missing.Value,
                  Missing.Value,
                  Missing.Value);
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                OleMessageFilter.Revoke();
            }
        }
    }
}

The previous code examples produce the following model.