Everything with the sheet set command is now working how I would like it.
below is the resulting code:
Imports Autodesk.AutoCAD.Runtime
Imports ACSMCOMPONENTS18Lib
Imports Autodesk.AutoCAD.Windows
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.Geometry
Public Class Class1
'Specifies the command to use
<CommandMethod("psetup")> _
Public Sub plansetup()
Dim doc As DocumentCollection = Application.DocumentManager
Dim db As New Database(False, False)
'Get a reference to the Sheet Set Manager object
Dim ssm As New AcSmSheetSetMgr
'Selects the save location of the sheet set
Dim sfd As New SaveFileDialog(title:="Save Location", defaultName:="", dialogName:="Save Location", extension:="dst", flags:=SaveFileDialog.SaveFileDialogFlags.NoFtpSites)
sfd.ShowDialog()
'Create a new sheet set file
Dim ssdb As AcSmDatabase
ssdb = ssm.CreateDatabase(sfd.Filename, "", True)
Dim info As SheetSetInfo = New SheetSetInfo
info.ShowDialog()
Dim ssf As String
ssf = Mid(ssdb.GetFileName, 1, InStrRev(ssdb.GetFileName, "\"))
'Locks the database
ssdb.LockDb(ssdb)
'Get the sheet set
Dim sss As AcSmSheetSet
sss = ssdb.GetSheetSet
'Set Custom Properties of the sheet set
SetCustomProperty(sss, "Author", info.AuthorTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "County", info.CountyTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Job Date", info.JobDateTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Job Name", info.JobNameTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Job Number", info.JobNumberTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Job Type", info.JobTypeTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Owner / Developer", info.OwnerTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Street", info.StreetTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Total Sheets", info.TotalSheetNum.Value.ToString, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Town", info.TownTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
SetCustomProperty(sss, "Township", info.MunicipalityTxt.Text, PropertyFlags.CUSTOM_SHEETSET_PROP)
Dim efd As New OpenFileDialog(title:="Existing Xref File", defaultName:="", dialogName:="Select Existing Xref", extension:="dwg", flags:=OpenFileDialog.OpenFileDialogFlags.NoFtpSites)
Dim pfd As New OpenFileDialog(title:="Proposed Xref File", defaultName:="", dialogName:="Select Proposed Xref", extension:="dwg", flags:=OpenFileDialog.OpenFileDialogFlags.NoFtpSites)
Dim xrefd As New Xrefdia
xrefd.ShowDialog()
Dim sheetinfo As SheetProps = New SheetProps
If xrefd.DialogResult = Windows.Forms.DialogResult.Yes Then
efd.ShowDialog()
pfd.ShowDialog()
For i As Integer = 1 To info.TotalSheetNum.Value
sheetinfo.ShowDialog()
If sheetinfo.SheetNum.Text = "1" Then
SetSheetSetDefaults(ssdb, sfd.Filename, "Description", ssf, "C:\Users\Barclay\Documents\lrgsht1a.dwt", "01 INDEX PLAN")
Else
If sheetinfo.SheetNum.Text = "CS-01" Then
SetSheetSetDefaults(ssdb, sfd.Filename, "Description", ssf, "C:\Users\Barclay\Documents\lrgsht1a.dwt", "01 INDEX PLAN")
Else
SetSheetSetDefaults(ssdb, sfd.Filename, "Description", ssf, "C:\Users\Barclay\Documents\lrgsht2.dwt", "01 INDEX PLAN")
End If
End If
AddSheet(ssdb, sheetinfo.SheetName.Text, sheetinfo.SheetDesc.Text, sheetinfo.SheetNum.Text, sheetinfo.SheetName.Text)
db.ReadDwgFile(ssf & sheetinfo.SheetName.Text & ".dwg", FileOpenMode.OpenForReadAndAllShare, False, "")
Dim xrefid As ObjectId = db.OverlayXref(efd.Filename, efd.Filename)
Dim xrefid2 As ObjectId = db.OverlayXref(pfd.Filename, pfd.Filename)
Using trans As Transaction = db.TransactionManager.StartTransaction()
Dim bt As BlockTable = TryCast(db.BlockTableId.GetObject(OpenMode.ForRead), BlockTable)
Dim btr As BlockTableRecord = TryCast(bt(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite), BlockTableRecord)
Dim bref As New BlockReference(Point3d.Origin, xrefid)
Dim bref2 As New BlockReference(Point3d.Origin, xrefid2)
btr.AppendEntity(bref)
btr.AppendEntity(bref2)
trans.AddNewlyCreatedDBObject(bref, True)
trans.AddNewlyCreatedDBObject(bref2, True)
trans.Commit()
End Using
db.SaveAs(ssf & sheetinfo.SheetName.Text & ".dwg", DwgVersion.Current)
db.CloseInput(True)
db.Dispose()
Next
Else
For i As Integer = 1 To info.TotalSheetNum.Value
sheetinfo.ShowDialog()
If sheetinfo.SheetNum.Text = "1" Then
SetSheetSetDefaults(ssdb, sfd.Filename, "Description", ssf, "C:\Users\Barclay\Documents\lrgsht1a.dwt", "01 INDEX PLAN")
Else
If sheetinfo.SheetNum.Text = "CS-01" Then
SetSheetSetDefaults(ssdb, sfd.Filename, "Description", ssf, "C:\Users\Barclay\Documents\lrgsht1a.dwt", "01 INDEX PLAN")
Else
SetSheetSetDefaults(ssdb, sfd.Filename, "Description", ssf, "C:\Users\Barclay\Documents\lrgsht2.dwt", "01 INDEX PLAN")
End If
End If
AddSheet(ssdb, sheetinfo.SheetName.Text, sheetinfo.SheetDesc.Text, sheetinfo.SheetNum.Text, sheetinfo.SheetName.Text)
Next
End If
'Unlocks the database
ssdb.UnlockDb(ssdb)
'Closes the database
ssm.Close(ssdb)
End Sub
' Used to add a sheet to a sheet set
' Note: This function is dependent on a Default Template and Storage location
' being set for the sheet set
Private Function AddSheet(ByVal component As IAcSmComponent, ByVal name As String, ByVal desc As String, ByVal number As String, ByVal title As String) As AcSmSheet
Dim sheet As AcSmSheet
sheet = component.GetDatabase().GetSheetSet().AddNewSheet(name, _
desc)
' Add the sheet as the first one in the sheet set
component.GetDatabase().GetSheetSet().InsertComponentAfter(sheet, Nothing)
' Set the number and title of the sheet
sheet.SetNumber(number)
sheet.SetTitle(title)
AddSheet = sheet
End Function
' Set the default properties of a sheet set
Private Sub SetSheetSetDefaults(ByVal sheetSetDatabase As AcSmDatabase, _
ByVal name As String, _
ByVal description As String, _
Optional ByVal newSheetLocation As String = "", _
Optional ByVal newSheetDWTLocation As String = "", _
Optional ByVal newSheetDWTLayout As String = "", _
Optional ByVal promptForDWT As Boolean = False)
' Set the Name and Description for the sheet set
sheetSetDatabase.GetSheetSet().SetName(name)
sheetSetDatabase.GetSheetSet().SetDesc(description)
' Check to see if a Storage Location was provided
If newSheetLocation <> "" Then
' Get the folder the sheet set is stored in
Dim sheetSetFolder As String
sheetSetFolder = Mid(sheetSetDatabase.GetFileName(), 1, _
InStrRev(sheetSetDatabase.GetFileName(), "\"))
' Create a reference to a File Reference object
Dim fileReference As IAcSmFileReference
fileReference = sheetSetDatabase.GetSheetSet().GetNewSheetLocation()
' Set the default storage location based on the location of the sheet set
fileReference.SetFileName(sheetSetFolder)
' Set the new Sheet location for the sheet set
sheetSetDatabase.GetSheetSet().SetNewSheetLocation(fileReference)
End If
' Check to see if a Template was provided
If newSheetDWTLocation <> "" Then
' Set the Default Template for the sheet set
Dim layoutReference As AcSmAcDbLayoutReference
layoutReference = sheetSetDatabase.GetSheetSet().GetDefDwtLayout()
' Set the template location and name of the layout
' for the Layout Reference object
layoutReference.SetFileName(newSheetDWTLocation)
layoutReference.SetName(newSheetDWTLayout)
' Set the Layout Reference for the sheet set
sheetSetDatabase.GetSheetSet().SetDefDwtLayout(layoutReference)
End If
' Set the Prompt for Template option of the subset
sheetSetDatabase.GetSheetSet().SetPromptForDwt(promptForDWT)
End Sub
' Set/create a custom sheet or sheet set property
Private Sub SetCustomProperty(ByVal owner As IAcSmPersist, _
ByVal propertyName As String, _
ByVal propertyValue As Object, _
ByVal sheetSetFlag As PropertyFlags)
' Create a reference to the Custom Property Bag
Dim customPropertyBag As AcSmCustomPropertyBag
' Create a reference to a Custom Property Value
Dim customPropertyValue As AcSmCustomPropertyValue = New AcSmCustomPropertyValue()
If owner.GetTypeName() = "AcSmSheet" Then
Dim sheet As AcSmSheet = owner
customPropertyBag = sheet.GetCustomPropertyBag()
customPropertyValue.InitNew(sheet)
Else
Dim sheetSet As AcSmSheetSet = owner
customPropertyBag = sheetSet.GetCustomPropertyBag()
customPropertyValue.InitNew(sheetSet)
End If
' Set the flag for the property
customPropertyValue.SetFlags(sheetSetFlag)
' Set the value for the property
customPropertyValue.SetValue(propertyValue)
' Create the property
customPropertyBag.SetProperty(propertyName, customPropertyValue)
End Sub
End Class