Monday, September 29, 2014

Drawing View Scale Part II

In my last post, I discussed one solution to get a drawing view scale.  That solution found the drawing view with the lowest numerical value as part of view name (VIEW1, VIEW5, etc.) and used it's scale as an iProperty of the drawing.


Another solution that my client wanted was to present all the view names and allow the user to select which view he/she wanted to represent the scale in the title block.


Like the first solution, we cycled through each sheet on the drawing and looked at the view name.  If the view name begins with "VIEW" then it was used to build a one dimensional array.  We also concatenated the view scale with the view name to satisfy the needs of seeing both the view name and the view scale.

'    Cycle thru each sheet.  Build array of View Name and View Scale.
     For Each oSheet In oSheets
         oViews = oSheet.DrawingViews
         For Each oView In oViews
             oViewName = oView.Name
             If Left(oViewName,4) = "VIEW" Then
                 oScale = oView.Scale
                 oConc = oViewName & ": @ " & oScale
                 oViewList.Add(oConc)
             End If
         Next
     Next

We then sorted the array and set a MultiValue list using that array.

'    Sort array
     oViewList.Sort

'    Set Multi-Value List from array
     MultiValue.List("ViewList") = oViewList

Next we presented an input box to the user using the MultiValue list.

'    Present Input Box for user selection
     selected = InputListBox("Select a view from the list", _
     MultiValue.List("ViewList"), oViewList.item(0), Title := "Views", _
     ListName := "View Name @ Scale")

Next we extracted the view name and view scale from the user selection.

'    Extract View Name and View Scale from user selection    
     delimpos = InStr(selected, "@")
     oSelectedView = Left(selected,delimpos - 1)
     oSelectedScale = Right(selected,Len(selected)-delimpos)

Finally, the view scale was pushed to a custom iProperty that was displayed in the drawing title block.

'    Set custom iProperty based on user selection
     iProperties.Value("Custom", "Scale") = RoundToFraction(oSelectedScale, 1/8, _
     RoundingMethod.Round) & ":1"

The full code is listed here:

'    Setting Variables
     Dim oDrawDoc As DrawingDocument = ThisDrawing.Document
     Dim oSheet As Sheet
     Dim oSheets As Sheets
     oSheets = oDrawDoc.Sheets
     Dim oView As DrawingView
     Dim oViews As DrawingViews
    
     Dim oScale As Double
     Dim oViewName As String
     Dim oConc as String
     Dim oSelectedView As String
     Dim oSelectedScale As String
     Dim oViewList As New ArrayList
    
'    Cycle thru each sheet.  Build array of View Name and View Scale.
     For Each oSheet In oSheets
         oViews = oSheet.DrawingViews
         For Each oView In oViews
             oViewName = oView.Name
             If Left(oViewName,4) = "VIEW" Then
                 oScale = oView.Scale
                 oConc = oViewName & ": @ " & oScale
                 oViewList.Add(oConc)
             End If
         Next
     Next

'    Sort array
     oViewList.Sort

'    Set Multi-Value List from array
     MultiValue.List("ViewList") = oViewList
    
'    Present Input Box for user selection
     selected = InputListBox("Select a view from the list", _
     MultiValue.List("ViewList"), oViewList.item(0), Title := "Views", _
     ListName := "View Name @ Scale")
    
'    Extract View Name and View Scale from user selection    
     delimpos = InStr(selected, "@")
     oSelectedView = Left(selected,delimpos - 1)
     oSelectedScale = Right(selected,Len(selected)-delimpos)

'    Set custom iProperty based on user selection
     iProperties.Value("Custom", "Scale") = RoundToFraction(oSelectedScale, 1/8, _
     RoundingMethod.Round) & ":1"
    
'    Update
     iLogicVb.UpdateWhenDone = True

PS - Sorry about the formatting.  I can't seem to get those extra spaces out of the sections where I've broken up the code.

Please leave a comment and let me know what you think.

Randy

"Opportunity is missed by most people because it is dressed in overalls and looks like work." - Thomas Edison

2 comments:

  1. when running the program I received the following:
    Error in rule: Rule0, in document: 88F16434-S-N MainPIN.idw

    MultiValue: Could not find a parameter named: "ViewList".
    can you have a look again
    Thanks

    ReplyDelete
  2. Hi shammam,

    Make sure you are copying the entire code. The full code is located lower in the blog. It's labeled "The full code is listed here:"

    Please let me know if that works for you.
    Randy

    ReplyDelete