In this section, we load a new entire family or
a single family instance into the current document.
The document object provides straightforward methods to load either a whole RFA file
or just a specific symbol from the corresponding TXT catalog file.
Before implementing a new command, we add some new constants to
LabConstants
module to define which family and symbol to load. This ensures that all the hard-coded
constant values have a single repository for easy access in case we need to alter
them at a later date:
// Lab 3_3 public const string gsLibPath = @"C:\Documents and Settings\All Users\Application Data\Autodesk\RST 2009\Metric Library\"; public const string gsWholeFamilyFileToLoad1 = gsLibPath + @"Structural\Framing\Steel\M_C-Channel.rfa"; // has TXT catalog file public const string gsWholeFamilyFileToLoad2 = gsLibPath + @"Structural\Framing\Steel\M_Plate.rfa"; // no TXT catalog file public const string gsFamilyFileToLoadSingleSymbol = gsLibPath + @"Structural\Framing\Steel\M_L-Angle.rfa"; public const string gsSymbolName = "L152x102x12.7";
' Lab 3_3 Public Const gsLibPath As String = "C:\Documents and Settings\All Users\Application Data\Autodesk\RST 2009\Metric Library\" Public Const gsWholeFamilyFileToLoad1 As String = gsLibPath + "Structural\Framing\Steel\M_C-Channel.rfa" ' has TXT catalog file Public Const gsWholeFamilyFileToLoad2 As String = gsLibPath + "Structural\Framing\Steel\M_Plate.rfa" ' no TXT catalog file Public Const gsFamilyFileToLoadSingleSymbol As String = gsLibPath + "Structural\Framing\Steel\M_L-Angle.rfa" Public Const gsSymbolName As String = "L152x102x12.7"
You may need to change the paths and family names to make sure the RFA files and the corresponding TXT catalog files exist on your machine.
Now we can add a new command to Labs3 calling the document method to load an entire family using the LoadFamily
method:
/// <summary> /// Load an entire family or a specific type from a family. /// </summary> public class Lab3_2_LoadStandardFamilies : IExternalCommand { public IExternalCommand.Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements ) { Document doc = commandData.Application.ActiveDocument; // // Load a whole Family // // example for a family WITH TXT file if( doc.LoadFamily( LabConstants.gsWholeFamilyFileToLoad1 ) ) { LabUtils.InfoMsg( "Successfully loaded family " + LabConstants.gsWholeFamilyFileToLoad1 + "." ); } else { LabUtils.ErrorMsg( "ERROR loading family " + LabConstants.gsWholeFamilyFileToLoad1 + "." ); } // example for a family WITHOUT TXT file if( doc.LoadFamily( LabConstants.gsWholeFamilyFileToLoad2 ) ) { LabUtils.InfoMsg( "Successfully loaded family " + LabConstants.gsWholeFamilyFileToLoad2 + "." ); } else { LabUtils.ErrorMsg( "ERROR loading family " + LabConstants.gsWholeFamilyFileToLoad2 + "." ); } return IExternalCommand.Result.Succeeded; } }
Public Class Lab3_2_LoadStandardFamilies Implements IExternalCommand Public Function Execute( ByVal commandData As Autodesk.Revit.ExternalCommandData, ByRef message As String, ByVal elements As Autodesk.Revit.ElementSet) As Autodesk.Revit.IExternalCommand.Result Implements Autodesk.Revit.IExternalCommand.Execute Dim doc As Revit.Document = commandData.Application.ActiveDocument 'Load a whole Family ' example for a family WITH TXT file If Not CType(doc.LoadFamily(gsWholeFamilyFileToLoad1), Boolean) Then MsgBox("ERROR in loading Family " & gsWholeFamilyFileToLoad1 & "?") Else MsgBox("Successfully loaded Family " & gsWholeFamilyFileToLoad1 & "!") End If ' example for a family WITHOUT TXT file If Not CType(doc.LoadFamily(gsWholeFamilyFileToLoad2), Boolean) Then MsgBox("ERROR in loading Family " & gsWholeFamilyFileToLoad2 & "?") Else MsgBox("Successfully loaded Family " & gsWholeFamilyFileToLoad2 & "!") End If Return Revit.IExternalCommand.Result.Succeeded End Function End Class
Build the project, adjust the ini file and test loading the whole family. In order to load a single symbol, you can add the following piece of code before return statement:
// // Load only a specific Symbol (Type) // The symbol MUST exist in the corresponding catalog (TXT) file - same as in the UI if( doc.LoadFamilySymbol( LabConstants.gsFamilyFileToLoadSingleSymbol, LabConstants.gsSymbolName ) ) { LabUtils.InfoMsg( "Successfully loaded family symbol " + LabConstants.gsFamilyFileToLoadSingleSymbol + " : " + LabConstants.gsSymbolName + "." ); } else { LabUtils.ErrorMsg( "ERROR loading family symbol " + LabConstants.gsFamilyFileToLoadSingleSymbol + " : " + LabConstants.gsSymbolName + "." ); }
'Load only a specific Symbol (Type) ' The symbol MUST exist in the corresponding catalog (TXT) file - same as in the UI If Not CType(doc.LoadFamilySymbol(gsFamilyFileToLoadSingleSymbol, gsSymbolName), Boolean) Then MsgBox("ERROR in loading FamilySymbol " & gsFamilyFileToLoadSingleSymbol & " : " & gsSymbolName & "?") Else MsgBox("Successfully loaded FamilySymbol " & gsFamilyFileToLoadSingleSymbol & " : " & gsSymbolName & "!") End If
Compile and test again, and discuss with the course instructor and your peers.
next previous home copyright © 2007-2009 jeremy tammik, autodesk inc. all rights reserved.