CATIA V5 Automation

Generating code with Insert Object Resolution

Advertisements

You are probably already aware that you can record macros in CATIA V5 much like you can in Microsoft Office and other softwares.  Recording macros is very simple, so I’m not going to discuss in detail how to do it in this article other than to direct you to the “Tools-Macros” pull down menu.  What I will discuss in this article is another related tool called Insert Object Resolution (I will refer to it as IOR) that you can also use to generate code.  I will discuss how to use IOR and show how it complements the recording capability.

How does it work?

Using this command is very simple.  Here is a step by step overview:

  1. Edit an existing macro.
  2. Place the cursor where you want the generated code to be inserted
  3. Start the IOR command.  You will be prompted to select an object in CATIA.
  4. The IOR command will then generate a block of code where your cursor was.

To avoid confusing this new code with your other code, starting and ending comments are automatically inserted as shown below,


'---- Begin resolution script for object : Object name

'        < The generated code will be here >

'---- End resolution script

It’s as simple as that – just a couple clicks and you have some new code to work with.

How is this different from recording a macro?

When you record a macro, you manually perform some operations and code is automatically generated that when executed will hopefully mimic the exact same operations.  This method of code generation has many uses such as:

On the other hand, IOR just asks you to select an object and it generates code showing how to access that object.  The produced code will start at the active document object and it will go step by step down the CATIA object model until it reaches the object you selected.  This method of code generation has some unique benefits:

Above, I introduced a few benefits of using IOR.  Below, are some more detailed scenarios showing how this command is useful.

  1. When you already have some existing code but you need to access some other object that is not yet referenced in your program.  Sure, you could record a separate macro of yourself modifying that object then edit the new macro and copy that code back into your original macro.  However, I find IOR to be faster and more convenient because it simply puts the snippet of code I need right where I need it.  Just be aware that in this situation, the generated code will ONLY get you a reference to the selected object so you should either have a good idea of what properties you intend to access and how to write that code or you should understand how to look up such information in the API documentation.  If not, recording may still be the best option.
  2. Sometimes when I am writing code that deals with objects that I have never coded before, I like to just play around with IOR to understand how those objects are structured relative to other objects in the CATIA object model.  I might not even use any of the generated code, but it allows me to get an idea of things like what collection an object is referenced in, or maybe its parent / child relationships with other objects.  I find it really helps me write code if I can build a picture in my head of that object hierarchy.
  3. As mentioned earlier, macro recording will not generate any code for some objects. This is especially true in the Generative Drafting workbench.  When writing code in these areas, you have few choices besides using IOR on some previously created data to generate the code you need.  Once you see how to access the needed objects, then you can refer to the API documentation to understand how to use their properties and methods.

Using Insert Object Resolution

Now that I discussed when IOR is useful, I’ll show how to use it and run through an actual scenario.  To start, you need to have one of the CATIA V5 macro editors open.  This means you should either be in the CATIA VBA editor (ALT-F11) or be in the CATIA macro editor window (Tools-Macros-Macros-Edit).  In VBA, you can find this command under the Insert drop down menu.  If you are in the CATIA macro editor, it is the second button in from the right at the top of the window.

Now let’s look at a hypothetical example.  Let’s assume I already have some code written that opens a drawing and gets at the first view on the first sheet.  Now I need to check if any of the text objects in that view have a text value of “Front View”.  So basically, I want to understand how to access a text object in a view.  I will use IOR to generate some code to get at one text object then I will extend that code a bit to work in a loop so that we can check all text objects in the view.

Step 1 – Open the drawing and the code

Open or create a drawing that has one sheet with at least one view.  In that view there should be at least one text.  Open the existing code (listed below) in one of the CATIA V5 code editors.  This code gets at the view object but does not yet access the text objects in that view.


Sub CheckTextValue()

'This code assumes a drawing is already open!

Dim objDwgDoc As Drawing
Dim objSheet As DrawingSheet
Dim objView As DrawingView
Dim objText As DrawingText
Dim intCount As Integer
Dim intIndex As Integer

‘Get at the active drawing
Set objDwgDoc = CATIA.ActiveDocument

'Get at the first sheet or notify user if none are found
intCount = objDwgDoc.Sheets.Count
If intCount = 0 Then
   Set objSheet = objDwgDoc.Sheets.Item(1)
Else
   MsgBox "This drawing has no sheets!", 16, "Error"
   Exit Sub
End If

'Get at the first view or notify user if none are found
intCount = objSheet.Views.Count
If intCount = 0 Then
   Set objView = objSheet.Views.Item(1)
Else
   MsgBox "The first sheet has no views!", 16, "Error"
   Exit Sub
End If

'...We need to add some code here to see if there
'...is a drawing text with a value of "Front View"

End Sub

Step 2 – Using IOR to get a single text object

Position the cursor on line 35 then start the IOR command.  Next, select one of the drawing texts in that view.  New code will be generated something like this,


'...Need to add some code here to see if there
'...is a drawing text with a value of "Front View"

'---- Begin resolution script for object : Text.1

Dim drawingDocument1 As DrawingDocument
Set drawingDocument1 = CATIA.ActiveDocument

Dim drawingSheets1 As DrawingSheets
Set drawingSheets1 = drawingDocument1.Sheets

Dim drawingSheet1 As DrawingSheet
Set drawingSheet1 = drawingSheets1.Item("Sheet.1")

Dim drawingViews1 As DrawingViews
Set drawingViews1 = drawingSheet1.Views

Dim drawingView1 As DrawingView
Set drawingView1 = drawingViews1.Item("Front view")

Dim drawingTexts1 As DrawingTexts
Set drawingTexts1 = drawingView1.Texts

Dim drawingText1 As DrawingText
Set drawingText1 = drawingTexts1.Item("Text.1")

'---- End resolution script

End Sub

Step 3 – Using the generated code

In the code generated by IOR I am really just looking to see how to get at each text object in a view.  I can see that the text objects exist in a collection called Texts and each one can be retrieved by the Item method.  I will clearly need a loop to check each text object in that collection.  At this point, I have all the information I need so I will just delete most of the generated code and tweak the rest to look something like this,


'...Need to add some code here to see if there
'...is a drawing text with a value of "Front View"

'Get at the collection of text objects
intCount = objView.Texts.Count
If intCount = 0 Then
   For intIndex = 1 to intCount
      Set objText = objView.Texts.Item(intIndex)
      If objText.Text = "Front View" Then
         Msgbox "Text ""Front View"" was found." , 16, "Result"
         Exit Sub
      End If
   Next
Else
   MsgBox "The view has no text objects!", 16, "Error"
   Exit Sub
End If

‘Notify user the text was not found
Msgbox "Text ""Front View"" was not found." , 16, "Text Not Found"

End Sub

The goal in this scenario was to check multiple text objects.  Because this required a loop to access each text in the collection, neither recording nor IOR can perfectly produce the code we need.  However, I hope you can see how IOR can be a quicker alternative to directly inject some rough code in the editor which can then be tweaked to your needs.

Please take a moment to rate this article…Just click the stars up near the title.

Add to: del.icio.us, StumbleUpon, Digg, Google

Advertisements