Quantcast
Channel: Manufacturing DevBlog
Viewing all articles
Browse latest Browse all 516

Splitting a HoleTable

$
0
0

By Balaji Ramamoorthy

Splitting a HoleTable using API is not possible at present. In this blog post we will look at a workaround that mimics a split HoleTable by creating two HoleTables each of which lists a certain hole information. Please note that this workaround creates two separate HoleTables both of which are unrelated and have Sheet as its parent. In case of splitting a HoleTable using Inventor UI, the split HoleTable is nested under a parent HoleTable. This structure provides the option to un-split the HoleTables at any time, if you need to. Such un-split option would not be available when using the workaround demonstrated in this blog post, as the two HoleTables are unrelated. As the HoleTables are separate and have Sheet as their parent, Inventor would not know that the two tables are related by a split.

Here is a VBA code snippet which should work with the attached drawing. If you are trying it on any other drawing, the index values may need to be modified accordingly.

Dim  oDoc As  DrawingDocument
Set  oDoc = ThisDocument
Dim  oSheet As  Sheet
Set  oSheet = oDoc.Sheets.Item(1)
Dim  oDrawingView As  DrawingView
Set  oDrawingView = oSheet.DrawingViews.Item(2)
'Modify the index to ensure that the right
'drawing curve is used to create the intent
'For the attached drawing, this will locate 
'the origin indicator at the lower left corner
Dim  oCurve As  DrawingCurve
Set  oCurve = oDrawingView.DrawingCurves.Item(53)
 Debug.Print oCurve.CurveType
Dim  oIntent As  GeometryIntent
Set  oIntent _
     = oSheet.CreateGeometryIntent(oCurve, oCurve.StartPoint)
'Create an origin indicator
IfNot  oDrawingView.HasOriginIndicator Then
Call  oDrawingView.CreateOriginIndicator(oIntent)
EndIf
'Positions of the hole tables
Dim  oPt1 As  Point2d
Set  oPt1 _
     = ThisApplication.TransientGeometry.CreatePoint2d(35, 45)
Dim  oPt2 As  Point2d
Set  oPt2 _
     = ThisApplication.TransientGeometry.CreatePoint2d(55, 45)
'Create a hole table for the drawing view
Dim  oHoleTable1 As  HoleTable
Set  oHoleTable1 = oSheet.HoleTables.Add(oDrawingView, oPt1)
Dim  oCollection1 As  ObjectCollection
Set  oCollection1 _
     = ThisApplication.TransientObjects.CreateObjectCollection()
Dim  oCollection2 As  ObjectCollection
Set  oCollection2 _
     = ThisApplication.TransientObjects.CreateObjectCollection()
'Identify the row to split
Dim  splitRow AsInteger
Dim  rowsCnt AsInteger
 rowsCnt = oHoleTable1.HoleTableRows.Count
If  rowsCnt Mod  2 = 0 Then
     splitRow = rowsCnt / 2
Else
     splitRow = (rowsCnt - 1) / 2
EndIf
'Get the hole curves for creating the hole tables
Dim  cnt AsInteger
 cnt = 1
ForEach  oRow In  oHoleTable1.HoleTableRows
     cnt = cnt + 1
If  cnt < splitRow Then
         oCollection1.Add oRow.ReferencedHole
Else
         oCollection2.Add oRow.ReferencedHole
EndIf
Next
 oHoleTable1.Delete
'Split hole table - 1
Dim  oSplitHoleTable1 As  HoleTable
Set  oSplitHoleTable1 _
     = oSheet.HoleTables.AddSelected(oCollection1, oPt1)
'Split hole table - 2
Dim  oSplitHoleTable2 As  HoleTable
Set  oSplitHoleTable2 _
     = oSheet.HoleTables.AddSelected(oCollection2, oPt2)
'Renumber the second hole table to mimic a split table
 cnt = oSplitHoleTable1.HoleTableRows.Count + 1
ForEach  oRow In  oSplitHoleTable2.HoleTableRows
     oRow.Item(1).FormattedText = "A" & CStr (cnt)
     cnt = cnt + 1
Next
Download BasePart.idw

Download BasePart.ipt

Viewing all articles
Browse latest Browse all 516

Trending Articles