Cancel
Showing results for 
Search instead for 
Did you mean: 

Extension Methods in the Solid Edge API

Gears Honored Contributor Gears Honored Contributor
Gears Honored Contributor

 

Prolog

   

Maintaining a library of commonly used functions and re-using them across projects is one of the best practices of programming especially with Solid Edge.

  

Did you know it is possible to add methods to both intrinsic and Solid Edge objects and call them the same way as the built-in methods? For example, if you frequently use a function to convert an angle in degrees to radians by calling a function similar to the one below:

 

 EB04.png

 

Then it can be easily restructured and called as an intrinsic or built-in function as below:

 

 EB05.png

 

It is possible to add a method to the Double data type or class such that it appears in the IntelliSense as shown below:

 

EB10.png

 

and call it directly on the variables without the need to pass arguments.

 

Definition

 

Extension methods enable you to create a method in a module decorated with an attribute and have that method appear as if it was an instance method defined on another type.

 

To create such extension methods to both .Net and Solid Edge objects, follow these steps:

 

VB.Net

 

1. Add a module to your project and include the 2 statements as shown in the image below:

EB01.png

 

2. Now in any other module of the project, for example, the main module, you may start using the extension methods as below:

  

EB02.png

 

 

 

 

 

 

 

Note how the extension method can be called directly on the variable instead of passing the variable as an argument to the function.

 

This, however, does not mean you must write all of the extension methods in every project. Create a class library and compile it as a DLL and simply referring to the library in the project will do the job.

 

Let's see how to create a library and also how to create extension methods using CSharp both in the next step.

 

CSharp

 

1. Create a class library in a CSharp

 

EB03.png

 

2. Add a public static class:

 

EB06.png

 

3. Note that the methods are also static.

 

4. Finally, note the keyword this in the function argument, which denotes the method is an extension method for the data type or class following it.

 

Compile the project and reference the library generated in either a CSharp or VB.Net project from the pulldown menu Project - Add Reference.

 

In the Reference Manager dialog, select 'Browse Category' in the left pane and then click the Browse... button at the bottom.

 

Extension Method Rules:

 

  1. The type of the first parameter is the data type that is being extended.
  2. Return type could be any.
  3. Need not be a returning function - a Sub/void is OK.
  4. <Extension()> attribute should be specified in VB.Net.
  5. The this keyword should be used in CSharp.
  6. static class and static methods in CSharp.

TipIcon.png One way to ‘extend’ a class is to create a new class that inherits the old one. This doesn't work if the class is 'sealed'; that means it can't be inherited.

 

Extension Methods in Solid Edge

 

Extension methods can be added to Solid Edge objects too. For example, the Layer object.

 

Here are two functions ShowOrHideInViews and ShowOrHideEverywhere that extend the existing functions list for the Layer object and show up in the IntelliSense for a Layer object:

 

 

<Extension()>
Public Sub ShowOrHideInViews(ByVal oLayer As SolidEdgeFramework.Layer, ByVal bShowOrHide As Boolean)
  Dim oDoc As DraftDocument = CType(oLayer.Parent, DraftDocument)
  Dim sLayerName As String = oLayer.Name
  Dim oSheet As Sheet = oDoc.ActiveSheet

  For Each oView As DrawingView In oSheet.DrawingViews
    If bShowOrHide = True Then
	oView.ShowLayer(sLayerName)
	ElseIf bShowOrHide = False Then
	  oView.HideLayer(sLayerName)
	End If
  Next
End Sub

<Extension()>
Public Sub ShowOrHideEverywhere(ByVal oLayer As SolidEdgeFramework.Layer, ByVal bShowOrHide As Boolean)
  Dim oDoc As SolidEdgeDraft.DraftDocument = CType(oLayer.Parent, SolidEdgeDraft.DraftDocument)
  Dim sLayerName As String = oLayer.Name
  Dim oSections As SolidEdgeDraft.Sections = oDoc.Sections
  Dim oSection As SolidEdgeDraft.Section = oSections.WorkingSection
  Dim oSheets As SolidEdgeDraft.SectionSheets = oSection.Sheets

  For Each oSheet As SolidEdgeDraft.Sheet In oSheets
    If bShowOrHide Then
	oSheet.Layers.Item(sLayerName).ShowInContext(oSheet)
    Else
	oSheet.Layers.Item(sLayerName).HideInContext(oSheet)
    End If

    For Each oView As DrawingView In oSheet.DrawingViews
	If bShowOrHide = True Then
	  oView.ShowLayer(sLayerName)
	ElseIf bShowOrHide = False Then
	  oView.HideLayer(sLayerName)
	End If
    Next
  Next
End Sub

 

 

The methods follow all the rules mentioned above and add to the Layer object's functions as below:

 

EB09.png

 

TipIcon.png Observe that in the image above, extension methods have a downward pointing blue arrow in their icon.

 

EB07.png

 

After calling the ShowOrHideEverywhere method, the Layers panel in the Edgebar appears like this, where the layer 'Dimensions' is hidden in all drawing views:

 

EB08.png

 

TipIcon.png Note: The Visual Studio 2015 project files are attached to this article. Note the three modules:

Myextensions.vb

Form1 [Design]

Form1 .vb

 

Advantages of Extension Methods:

 

  1. Changes the syntax for calling a method.
  2. It makes a non-Class method look like a Class method.
  3. Clearer Syntax.
  4. Simpler programs that are easier to read.

 

Summary of Extension Methods in Solid Edge

 

  1. Extension methods, as the name suggests, are additional methods.
  2. Extension methods allow you to inject additional methods without modifying, deriving or recompiling the original class, struct or interface.
  3. Extension methods can be added to your own custom class, .NET framework classes, third-party classes or interfaces and to Solid Edge objects.

 

Tushar Suradkar

www.CADVertex.com

www.SurfAndCode.IN

Comments
Genius

Hi @Tushar ,

 

Thanks for the well prepared clearcut Tutorial and Appreciation for your efforts and help, to the SE Developers as well as Users.

 

I followed the same process as you mentioned in the tutorial, finally, results came.

 

Thanks & Regards

V.Sudheer......... Smiley Happy

Gears Honored Contributor

Hi @VSudheer 

Glad to know you got the results.

I was planning to make the tutorial more entry level but then changed it to be of use for mid-experience level developers.