Chapter 32. Creating and Using Macros

IN THIS CHAPTER

  • Recording macros

  • Creating a macro with a user form

  • Finding macro help

Macros can be an important source of productivity enhancements that are not offered directly by SolidWorks software. Being able to create your own macros can make you more valuable at your place of work. Macros can do anything from centering a rectangle on the Origin, to setting all face colors back to the part color, to changing the decimal places of a selected dimension, to creating a spline from an equation. You do not have to be a programmer to follow the information in this chapter. However, you should have a general understanding of Visual Basic.

Visual Basic is a common programming language. Visual Basic for Applications, or VBA, is included in SolidWorks in the same way that it is included in Word and Excel. If you have programming skills with these other common applications, then those skills are largely transferable to working with SolidWorks macros.

Application Programming Interface, or API, refers to the available SolidWorks functions that can be called programmatically (numbered in the hundreds) from VB, VBA, VB.NET, C++, C# (c sharp), or macro files that have the filename extension of *.swp or *.swb.

Note

The *.swb filename extension type is a legacy macro. You can edit and save these files into the newer SWP format, or you can run them as they are. Also keep in mind that *.swp is the filename extension that is used by the Windows Swap file.

This chapter is a quick overview of how to create simple macros, and how to connect them to hotkeys and custom toolbar buttons. It guides you through the creation of an intermediate-level macro to show some of the capabilities that are available to combine with Excel and SolidWorks at the same time.

This chapter is not a comprehensive how-to guide for API programming. That would be a book unto itself. However, the end of this chapter does offer some useful resources for help with macros.

Recording Macros

Everything has to start somewhere, and macros start from one of three places:

  • As a completely new macro

  • From another copied and edited macro

  • From a recorded macro

Recorded macros do not always do everything that you want them to do, but they usually offer a good starting place and direction. When recording a macro, SolidWorks lists the SolidWorks API commands that are used to create the action that is being recorded. The macro recorder does not always capture all of the actions, and it does not always record the latest versions of the functions, but again, it is a starting place.

Recording a rectangle-sketching macro

Before getting started, you need to become acquainted with the Macro toolbar. This is shown in Figure 32.1.

The Macro toolbar

Figure 32.1. The Macro toolbar

The first macro in this chapter is a simple one that is used frequently: sketching a rectangle and centering it on the Origin. When you start to make a new macro, you have to think about where you want it to start and finish. What exactly do you want to automate? Do you want the macro to always create a rectangle on the Front plane, or just on a selected plane? Does it always center on the Origin or on a selected point?

The macro in this example needs to do the following:

  • Create a rectangle on a selected plane

  • Center the rectangle on the part Origin

  • Add dimensions and allow the user to enter values as the macro plays

This means that the selection of the sketch plane needs to be either not recorded or edited out afterward. Because this section discusses recording rather than editing, the macro will be recorded without the reference.

To prepare for recording the macro, you need to turn off PhotoWorks if it is turned on. Macros record some PhotoWorks settings, which are not needed unless you are doing something that is specific to PhotoWorks. You can turn it off at Tools

The Macro toolbar

Also, when recording a macro, be careful not to make a lot of extra mouse-clicks or keyboard strokes. These may record unnecessary data to the macro, which requires additional editing.

Recording the macro

To record the macro, follow these steps:

  1. Open a new part and select a plane.

  2. Click the Record Macro button on the Macro toolbar.

  3. Open a sketch on the selected plane and sketch the rectangle around the Origin.

  4. Sketch a construction line either from corner to corner or from midpoint to opposite midpoint.

  5. Select the construction line and the Origin, and assign a sketch relation of Midpoint.

  6. Apply a dimension to a horizontal line and accept the default dimension.

  7. Apply a dimension to a vertical line and accept the default dimension.

  8. Click the Stop Macro button on the Macro toolbar, and save the macro with a name such as Rectangle.swp.

The Macro Editor appears and shows the recorded macro:

'********************************************************************
' C:DOCUME~1MATT~1.SONLOCALS~1Tempswx3696Macro1.swb - macro _ recorded on 12/05/06 by matt
'********************************************************************
Dim swApp As Object
Dim Part As Object
Dim SelMgr As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim Feature As Object
Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
Part.SketchRectangle -0.04490775510204, 0.02713176870748, 0, _ 0.06081258503401, -0.02806734693878, 0, 1
Part.ClearSelection2 True
Part.CreateLine2(-0.04490775510204, -4.677891156463E-04, 0, _ 0.06081258503401, -4.677891156463E-04, 0).ConstructionGeometry = True
Part.SetPickMode
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Point1@Origin", _ "EXTSKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line5", "SKETCHSEGMENT", _ 0.007328696145125, -6.237188208617E-04, 0, True, 0, Nothing, 0)
Part.SketchAddConstraints "sgATMIDDLE"
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", _ 0.009355782312925, 0.02759955782313, 0, False, 0, Nothing, 0)
Dim Annotation As Object
Set Annotation = Part.AddDimension2(0.0057694, 0.039918, 0)
Part.ClearSelection2 True
Part.Parameter("D1@Sketch6").SystemValue = 0.0898155
boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", _ 0.04490775510204, 0.009667641723356, 0, False, 0, Nothing, 0)
Set Annotation = Part.AddDimension2(0.0661142, 0.0057694, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("D1@[email protected]", _ "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)
Part.Parameter("D2@Sketch6").SystemValue = 0.0551991
Part.ClearSelection2 True
End Sub

Understanding what was recorded

A few pieces of macro syntax and terminology need to be covered first, especially for those who are not familiar with programming, or who need a refresher.

A single quote in front of a line of text is a way to comment out a line, which means that anything after the single quote is not processed, but may be used for reference, explanation, or troubleshooting.

A space followed by an underscore at the end of a line means that the line is continued to the next line. You do not see this in the recorded macro, but it is used here because the lines are too long for the page and must therefore wrap.

At the beginning of the macro, the line with the file path between two rows of asterisks is only added to make a record of who created the macro and when they did so. The name is taken from the user's Windows login name. It is common practice to leave this information in the macro, and even to edit it as various people update the macros. This is one way of giving credit to the original author when macros are shared among users.

The six lines of Dim statements are establishing the different types of variables that are often used in macros. Just because a variable has a Dim statement does not necessarily mean that it is used in the macro. You can remove some of these if you want. The first two, swApp and Part, must remain; in fact, these are used for almost all SolidWorks macros. In this case, you can leave all of the Dim statements in.

The line starting with Part.SketchRectangle is placing the two corners that are used to describe the rectangle. These dimensions are in meters. SolidWorks macros all work in meters, and to use other units, you have to work with conversion factors as appropriate. In more sophisticated macros, the document units are determined, and any user input is filtered through that setting. The corner coordinate data is given in the form X1, Y1, Z1, X2, Y2, Z2, with the 1 and 2 representing the first and second corners. To clean up the macro, you could change some of the numbers to round them out to whole numbers in the unit system of your choice. However, if you do that, then you will need to make other changes, such as changing the endpoint coordinates of the construction line that is sketched later at the Part.CreateLine2 command.

Going through the rest of the macro in this way helps you to understand what each of the functions does. It helps even more if you keep the SolidWorks API Help file open and look up functions as you go through the macro, such as the Part.ClearSelection2 True line. Searching the Index on just the ClearSelection2 code brings you to an entry that also indicates what the True option does. You can access the API Help from the main SolidWorks Help menu, under SolidWorks and Add-Ins API Help Topics. This help file has a lot of detailed information about specific methods.

Replaying the macro

The first step in using your new macro is to see what the recording contains. Exit and delete the sketch. As an experiment to see how the macro reacts, do not pre-select a plane. Return to the macro editor window, and press the Run Macro button.

The rectangle is drawn, the construction line is drawn, the sketch relation is applied, and the first dimension is applied, but when you enter a value for the dimension, there is an error. The error originates from the Part.Parameter line. In this short chapter, there is not enough space to discuss troubleshooting API functions; in this case, it is acceptable to comment out the offending line. The error message enables you to debug the problem. After you click the Debug button, the editor highlights the problem line of code, and if you put a single quote in front of the line and press Run Macro again, the same error occurs for the second dimension at an almost identical line. You can comment out the second line as you did with the first line. This is shown in Figure 32.2.

Commenting out offending lines in the code

Figure 32.2. Commenting out offending lines in the code

Clear the sketch and run the macro again. This time, with the two lines of code commented out, it works perfectly. Also notice that if no plane is pre-selected, then it goes to the Front plane by default; however, if a plane is pre-selected, then the rectangle is built on that plane.

You may notice some irregularities, for example, that the sketch overdefines if multiple rectangles are built in a single sketch, or a that new rectangle may pick up automatic relations to existing geometry. You can either live with these shortcomings or learn more sophisticated programming techniques to overcome them.

So with a simple recording operation and some minor revisions, you have a simple yet functional and highly useful macro that draws a centered rectangle around the Origin. Many of the tutorials in this book start with the instruction to "sketch a rectangle centered on the Origin," and this is a macro that I use frequently.

Storing your macro

Out of necessity, I usually store macros in two locations. One location is in the SolidWorks installation directory in a folder called macros. It is important for this folder to exist with the name spelled just that way so that certain functions with the Tools

Storing your macro

Of course, the other location is not in the SolidWorks installation directory so that when you uninstall the software, you do not lose all of your macros. When you do this, remember to also set the Tools

Storing your macro

Connecting to a hotkey

You can connect a macro to a hotkey through the Tools, Customize, Keyboard interface. This interface has been greatly improved in SolidWorks 2007. In order to connect a macro to a hotkey, you require the macros folder mentioned previously. You may need to restart the software if you have just created the macros folder, or if you have added new macros in the current session. Scrolling to the bottom of the list shows the macros in the folder, as shown in Figure 32.3.

The ToolsCustomizeKeyboard interface

Figure 32.3. The Tools

The ToolsCustomizeKeyboard interface
Customize
The ToolsCustomizeKeyboard interface
Keyboard interface

Notice that some of the listed macros already have shortcuts, or hotkeys, assigned. Hotkey assignments are discussed in Chapter 2.

Connecting to a custom toolbar button

Connecting a macro to a custom toolbar button is far easier than it sounds. You can place custom toolbar buttons onto your toolbar from Tools

Connecting to a custom toolbar button
The Customize Macro Button dialog box

Figure 32.4. The Customize Macro Button dialog box

Type a Tooltip and a Prompt. You can select a custom image for the button. The custom image must be 16 pixels square, in a bitmap format using 256 colors. In the Macro selection box, click the Ellipse button (. . .) to browse to the macro location. You can even assign a shortcut, or hotkey, here; however, I would recommend one or the other, but not both a custom toolbar button and a hotkey. You will end up using one technique or the other, but not both.

Creating a Macro with a User Form

The rectangle macro is a very simple macro that performs a set operation using standard SolidWorks input forms for the dimensional data. While that was a very simple macro, the macro in this section is an intermediate-level macro; it is still not highly complex, but it may take more than an hour to put together. The interface, or user form, is shown in Figure 32.5.

The user form for the macro

Figure 32.5. The user form for the macro

This macro creates a spline from an equation, using Excel to evaluate points in the equation. It allows the user to enter an equation in the form Y = <expression>, where the expression can use quadratic or periodic functions. The user then specifies a first and a last value, and then tells the macro to create the spline.

You can open this macro using the Edit Macro tool on the Macro toolbar. The macro can be found on the CD-ROM for Chapter 32, with the filename Chapter 32 – User Form.swp.

Building the Form

Whenever an interface is created, specific actions are assigned to specific controls in the interface. The most obvious control that performs an action here is the Create Spline feature. In the macro editor, you can double-click the Create Spline button to display the code for the form.

Each of the controls that accept user input drives a particular variable, which is then used to calculate another value or to set a part of the interface. You should have enough controls to do what needs to be done, but not so many that the interface becomes confusing. For example, the Spin Increment is an unnecessary control, and could be removed to make the interface a little less confusing.

You can build the form visually by using the tools on the Toolbox toolbar. The properties for each control are found in the Properties window, which you can access through the View menu. The Properties window and Toolbox toolbar are shown in Figure 32.6.

The Properties window and Toolbox toolbar

Figure 32.6. The Properties window and Toolbox toolbar

After the user fills out all of the boxes and presses the Create Spline button, the subroutine called CommandButton1_Click takes over. This is the code that you can see by double-clicking the Create Spline button in Design mode.

The macro starts by checking to see if there is an active SolidWorks document:

Set swApp = CreateObject("SldWorks.Application")
Set Model = swApp.ActiveDoc
If Model Is Nothing Then                     ' If no active doc found
   swApp.SendMsgToUser "No active doc found!"   ' Warning to the user
   Exit Sub                                         ' Exit this app
End If

Then, based on user input, the last X value of the spline is either calculated or used directly. The first X is entered explicitly by the user.

first = firstval.Value
last = rangeInt.Value
If rangeInt1.Value = True Then last = first + rangeInt.Value
If rangeInt2.Value = True Then last = first + (howMany - 1) * rangeInt.Value

Then the step interval is calculated, based on the range and number of data points.

step = Abs((last - first) / (howMany - 1))

In macros, you find yourself checking for situations that you may normally assume to be the case, and having the macro make a decision, based on the results of the check. For example, this macro checks for an open sketch, and if it does not find one, then it creates one.

Set activeSketch = Model.GetActiveSketch
If (activeSketch Is Nothing) Then   ' If a Sketch is not active, then
   Model.InsertSketch            ' insert a new sketch for our spline
End If

The real functional part of the macro exists in the next few lines.

For row = 1 To howMany

'Rebuild user input equation

strlen = Len(equation.Value)  'length of equation string
neweq = "=" & equation.Value   'put an "=" in front of the eq
repl = "A" & row
neweq = Replace(neweq, "X", repl, 1)'step through string and find "X"
neweq = Replace(neweq, "x", repl, 1)  'replace "X" with "a(row)"

ws.Cells(row, col).Value = xvalue    'write values to excel
ws.Cells(row, col + 1).Value = neweq

yvalue = ws.Cells(row, col + 1).Value 'read Y value from excel

    Model.SketchSpline (howMany - row), xvalue * unitconv, yvalue * unitconv, 0# ' Draw the sketch thru it

xvalue = xvalue + step ' read X value from excel

Next row

This macro writes an equation in each cell with the appropriate X value, and then draws a spline point using the matching X and Y values. It then steps to the next row and does it again until all of the values have been calculated and all of the points drawn. This has the additional benefit of being able to leave you with an Excel spreadsheet that contains the values.

Finding Macro Help

SolidWorks has some excellent on-line resources with a lot of sample code for many applications. If you are creating a completely new macro with programming, then it is probably best to start out by taking a class in Visual Basic or getting a book on the topic. This will give you a general foundation in programming with Visual Basic.

Beyond Visual Basic programming, you need to know some things that are specific to programming for SolidWorks; the best solution is probably to take an API class from your local reseller. This class is not as popular as other classes, and so you may need to wait until the class is offered, or you may be able to find the class available from another reseller. This class can be very useful when taught by someone who knows the material well. I advise checking into the instructor's credentials before taking the course.

SolidWorks has a Web site with a lot of great information that is dedicated to API help: www.solidworks.com/pages/services/APISupport.html. If you know what you are looking for, then this is an excellent resource.

Also keep in mind that the Web is a great source of free information. A simple search reveals many personal Web sites of individuals who share or trade SolidWorks macros. In addition to using search engines, check the major forums, including comp.cad.solidworks, eng-tips, and the SolidWorks Discussion Forums.

Summary

The SolidWorks API is extremely powerful, enabling you to create useful macros that range from simple to very complex. However, macro programming is not a casual pursuit, and some basic programming knowledge is a definite prerequisite. Fortunately, you do not need to be an expert, as many macros are put together by cut-and-paste programming, and by incorporating parts of useful macros from many different sources.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset