Solid Edge ST7 SDK
Working with Synchronous and Ordered features

Starting with Solid Edge ST3, Synchronous and Ordered modeling in the Part and SheetMetal environments have been integrated. By setting the PartDocument.ModelingMode or SheetMetalDocument.ModelingMode, you can now toggle between Synchronous and Ordered modeling environments dynamically during automation.

The following code demonstrates how to create a Synchronous ExtrudedProtrusion and Ordered ExtrudedProtrusion in the same model.

See Handling 'Application is Busy' and 'Call was Rejected By Callee' errors for information regarding the use of OleMessageFilter.
Creating Synchronous and Ordered features in Visual Basic .NET
Copy Code
Imports System.IO
Imports System.Runtime.InteropServices

Module Program
    <STAThread()> _
    Sub Main()
        Dim objApplication As SolidEdgeFramework.Application = Nothing
        Dim objDocuments As SolidEdgeFramework.Documents = Nothing
        Dim objPartDocument As SolidEdgePart.PartDocument = Nothing
        Dim objModels As SolidEdgePart.Models = Nothing
        Dim objModel As SolidEdgePart.Model = 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 aProfile(2) As SolidEdgePart.Profile
        Dim objExtrudedProtrusion As SolidEdgePart.ExtrudedProtrusion = Nothing
        Dim objLines2d As SolidEdgeFrameworkSupport.Lines2d = Nothing
        Dim objRelations2d As SolidEdgeFrameworkSupport.Relations2d = Nothing
        Dim objRefPlane As SolidEdgePart.RefPlane = Nothing
        Dim objCircles2d As SolidEdgeFrameworkSupport.Circles2d = Nothing
        Dim mode As SolidEdgeConstants.ModelingModeConstants = Nothing
        Dim lngStatus As Integer

        Try
            OleMessageFilter.Register()

            ' Start Solid Edge
            objApplication = Activator.CreateInstance(Type.GetTypeFromProgID("SolidEdge.Application"))

            ' Show Solid Edge
            objApplication.Visible = True
            objDocuments = objApplication.Documents

            ' Create a new part document
            objPartDocument = objDocuments.Add("SolidEdge.PartDocument")
            objModels = objPartDocument.Models

            ' Set the modeling mode to synchronous
            objPartDocument.ModelingMode = SolidEdgeConstants.ModelingModeConstants.seModelingModeSynchronous

            ' Create synchronous features
            objProfileSets = objPartDocument.ProfileSets
            objProfileSet = objProfileSets.Add()
            objProfiles = objProfileSet.Profiles
            objRefPlanes = objPartDocument.RefPlanes

            aProfile(0) = objProfiles.Add(objRefPlanes.Item(3))
            objLines2d = aProfile(0).Lines2d

            ' Draw lines
            objLines2d.AddBy2Points(0, 0, 0.08, 0)
            objLines2d.AddBy2Points(0.08, 0, 0.08, 0.06)
            objLines2d.AddBy2Points(0.08, 0.06, 0.064, 0.06)
            objLines2d.AddBy2Points(0.064, 0.06, 0.064, 0.02)
            objLines2d.AddBy2Points(0.064, 0.02, 0.048, 0.02)
            objLines2d.AddBy2Points(0.048, 0.02, 0.048, 0.06)
            objLines2d.AddBy2Points(0.048, 0.06, 0.032, 0.06)
            objLines2d.AddBy2Points(0.032, 0.06, 0.032, 0.02)
            objLines2d.AddBy2Points(0.032, 0.02, 0.016, 0.02)
            objLines2d.AddBy2Points(0.016, 0.02, 0.016, 0.06)
            objLines2d.AddBy2Points(0.016, 0.06, 0, 0.06)
            objLines2d.AddBy2Points(0, 0.06, 0, 0)
            objRelations2d = aProfile(0).Relations2d

            ' Connect lines
            objRelations2d.AddKeypoint(objLines2d.Item(1), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(2), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(2), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(3), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(3), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(4), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(4), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(5), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(5), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(6), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(6), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(7), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(7), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(8), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(8), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(9), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(9), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(10), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(10), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(11), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(11), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(12), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)
            objRelations2d.AddKeypoint(objLines2d.Item(12), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineEnd, _
                                       objLines2d.Item(1), _
                                       SolidEdgeConstants.KeypointIndexConstants.igLineStart)

            lngStatus = aProfile(0).End(SolidEdgePart.ProfileValidationType.igProfileClosed)

            If lngStatus <> 0 Then
                Throw New System.Exception("Profile not closed")
            End If

            objModel = objModels.AddFiniteExtrudedProtrusion(1, _
                                                             aProfile, _
                                                             SolidEdgeConstants.FeaturePropertyConstants.igRight, _
                                                             0.05)

            If objModel.ExtrudedProtrusions.Item(1).Status <> SolidEdgeConstants.FeatureStatusConstants.igFeatureOK Then
                Throw New System.Exception("Error in the Creation of Base Protrusion Feature object")
            End If

            ' Now change the modeling mode to ordered
            objPartDocument.ModelingMode = SolidEdgeConstants.ModelingModeConstants.seModelingModeOrdered

            ' Create ordered features
            objRefPlane = objRefPlanes.AddParallelByDistance(objRefPlanes.Item(2), _
                                                             0.01, _
                                                             SolidEdgeConstants.FeaturePropertyConstants.igRight)
            objProfileSet = objProfileSets.Add()
            objProfiles = objProfileSet.Profiles
            objProfile = objProfiles.Add(objRefPlane)
            objCircles2d = objProfile.Circles2d
            objCircles2d.AddByCenterRadius(-0.025, 0.035, 0.005)
            lngStatus = objProfile.End(SolidEdgePart.ProfileValidationType.igProfileClosed)

            If lngStatus <> 0 Then
                Throw New System.Exception("Profile not closed")
            End If

            objExtrudedProtrusion = objModel.ExtrudedProtrusions.AddFinite(objProfile, _
                                                                           SolidEdgeConstants.FeaturePropertyConstants.igLeft, _
                                                                           SolidEdgeConstants.FeaturePropertyConstants.igRight, _
                                                                           0.1)

            ' This feature is seModelingModeSynchronous
            mode = objModel.ExtrudedProtrusions.Item(1).ModelingModeType

            ' This feature is seModelingModeOrdered
            mode = objModel.ExtrudedProtrusions.Item(2).ModelingModeType

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            OleMessageFilter.Revoke()
        End Try
    End Sub
End Module
See Also