- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I am stuck on a code issue. I need a sheet name pushed to a prompted entry in the Titleblock. I have a rule that updates the sheet name from the filename of the baseview item. I have a need to change some of the sheetnames to other names because of a sequencing requirement of the assembly (They are curtain wall window units and a single assembly can be used for multiple unit locations and the sheet name needs to represent that location, or address as it is referred to in the existing code.) The code works great until it gets to the part to push the value to the UpdateUnitAddress Function. If I comment that out, all works prefect without pushing the value. Any help would be appreciated. The text in red is where it halts.
Sub Main() 'Set Number of Addresses for Unit in Overall Assembly Dim NumberOfUnits = InputBox("Enter quantity of Units required:", "Units Required") 'Check that we are in a drawing document. If ThisDoc.Document.DocumentType = DocumentTypeEnum.kDrawingDocumentObject Then 'Get a reference to the current drawing. Dim dwgDoc As DrawingDocument = ThisDoc.Document 'Check that we have atleast one view on the sheet. If dwgDoc.ActiveSheet.DrawingViews.Count > 0 Then 'Get a reference to the original model in the view. Dim compDoc As Document = dwgDoc.ActiveSheet.DrawingViews(1).ReferencedDocumentDescriptor.ReferencedDocument 'Get the filename of the replacement model Dim newFileName As String = GetNewReference() 'Sub to show dialog and get file name. 'Open the replacement model. Dim newFile As Document If Not String.IsNullOrEmpty(newFileName) Then 'If Not String.IsNullOrEmpty(compDoc) Then Try newFile = ThisApplication.Documents.Open(newFileName, False) 'newFile = ThisApplication.Documents.Open(compDoc, False) Catch MessageBox.Show("Could not open target file.") End Try 'Check to see if we have valid documents to work with. If Not newFile Is Nothing Then Dim okContinue As Boolean = True If Not newFile.InternalName = compDoc.InternalName Then 'Display warning if inner names of models do not math. msgResult = MessageBox.Show("Warning, files do not match." & vbCrLf & " Results can be unpredictable." & vbCrLf & _ "Do you want To Continue", "Copy/Replace Sheet", MessageBoxButtons.YesNo) If Not msgResult = DialogResult.Yes Then okContinue = False End If End If If okContinue Then Dim newDwg As DrawingDocument Try 'Create the new drawing document. newDwg = ThisApplication.Documents.Add(kDrawingDocumentObject, Nothing, False) 'Copy the active sheet to the new document. Dim newSheet As Sheet = dwgDoc.ActiveSheet.CopyTo(newDwg) 'Replace the model reference on the new sheet with the replacement reference newSheet.DrawingViews(1).ReferencedDocumentDescriptor. _ ReferencedFileDescriptor.ReplaceReference(newFileName) 'rename Active Sheet to Unit Address dwgDoc.ActiveSheet.Name = "_" & InputBox("Enter Unit Address", "Unit Address") UpdateUnitAddress() Dim i As Long = 0 For i = 1 To NumberOfUnits - 1 'Copy the sheet back to the original drawing. Dim copiedSheet As Sheet = newSheet.CopyTo(dwgDoc) copiedSheet.Name = "_" & InputBox("Enter Unit Address", "Unit Address") Next newDwg.Close(True) 'Activate the new sheet. 'copiedSheet.Activate() InventorVb.DocumentUpdate() Catch MessageBox.Show("Error occurred copying sheet.") End Try End If End If End If End If End If iLogicVb.RunRule("ResetSectionViewCallout_Rule") End Sub Function UpdateUnitAddress() As String Dim dwgDoc2 As DrawingDocument = ThisDoc.Document Dim oPromptEntry Dim actSheet As Sheet = ThisApplication.ActiveDocument.ActiveSheet ActiveSheet = ThisDrawing.Sheet(actSheet.Name) oTitleBlock=actSheet.TitleBlock oTextBoxes=oTitleBlock.Definition.Sketch.TextBoxes For Each oTextBox In oTitleBlock.Definition.Sketch.TextBoxes Select oTextBox.Text Case "Unit Address" : oPromptEntry = dwgDoc2.ActiveSheet.Name MessageBox.Show("Phase1.") 'oTitleBlock.SetPromptResultText(oTextBox, oPromptEntry) Call oTitleBlock.SetPromptResultText(oTextBox, oPromptEntry) MessageBox.Show("Phase2.") End Select Next MessageBox.Show("Phase3.") 'actSheet.Activate 'InventorVb.DocumentUpdate() End Function Function GetNewReference() As String ' Create a new FileDialog object. Dim oFileDlg As Inventor.FileDialog Call ThisApplication.CreateFileDialog(oFileDlg) ' Define the filter to select part and assembly files or any file. oFileDlg.Filter = "Inventor Files (*.iam;*.ipt)|*.iam;*.ipt|All Files (*.*)|*.*" ' Define the part and assembly files filter to be the default filter. oFileDlg.FilterIndex = 1 ' Set the title for the dialog. oFileDlg.DialogTitle = "Copy/Replace Sheet - Select Replacement Model" ' Set the initial directory that will be displayed in the dialog. oFileDlg.InitialDirectory = ThisDoc.Path ' Set the flag so an error will be raised if the user clicks the Cancel button. oFileDlg.CancelError = True ' Show the open dialog. The same procedure is also used for the Save dialog. ' The commented code can be used for the Save dialog. Try oFileDlg.ShowOpen Catch 'MessageBox.Show("User cancelled out of dialog", "Replace Reference") Finally If Not oFileDlg.FileName = "" Then 'MessageBox.Show("File " & oFileDlg.FileName & " was selected.", "Replace Reference") GetNewReference = oFileDlg.FileName End If End Try End Function
Scott Hallmark, Design Specialist | Fluor Corporation
Inventor and AutoCAD Certified Professional, Autodesk Certified Instructor | My Plant3D Notes | AU Speaker | ROLL TIDE!
Solved! Go to Solution.