- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi all,
I have a problem with (re)loading a family symbol.
// FamilySymbol ophalen vanuit familyName en familytype name
fs = new FilteredElementCollector(doc)
.OfClass(typeof(FamilySymbol))
.Cast<FamilySymbol>()
.FirstOrDefault(x => x.FamilyName == familyName && x.Name == familyTypeName);
CustomFamilyLoadOptions load_options = new CustomFamilyLoadOptions();
// Als niet aanwezig is dan inladen
if (fs == null)
{
if (!doc.LoadFamilySymbol(familyPath, familyTypeName, load_options, out fs))
{
TaskDialog.Show("Error", "Er gaat iets mis met het inladen van de family.");
fs = null;
}
}
else if(fs != null)
{
// content versie xml ophalen
string contentVersieXml = selectedFileData.ContentVersie.Replace("Contentversie: ", "");
// Contentversie uit symbol halen
string contVersieFamily = fs.LookupParameter("NLRS_C_content_versie")?.AsString();
if(contentVersieXml != contVersieFamily)
{
bool result = doc.LoadFamilySymbol(familyPath, familyTypeName, load_options, out fs);
if (!result)
{
TaskDialog.Show("Error", "Er gaat iets mis met het (her)inladen van de family.");
fs = null;
}
}
}
When I use the debug function, the first familysymbol i try to reload is reloading well.
The parameters are change and everything is fine.
The second family type that I try reload fails, the result is true but the IFamilyLoadOptions doesn't activate.
Here is my IFamilyLoadOptions, the first time the debug is writing this line:
OnFamilyFound _ FamilyInUse: True - overwriteParameterValues True"
The second time there is no debug.
/// <summary>
/// Methode hoe de family ingeladen moet worden.
/// Als family gevonden wordt dan overschrijft de family de parameters.
/// Als Shared family gevonden worden de subcomponenten ook overschrijven.
/// </summary>
[Transaction(TransactionMode.Manual)]
public class CustomFamilyLoadOptions : IFamilyLoadOptions
{
public bool OnFamilyFound(bool familyInUse, out bool overwriteParameterValues)
{
// Als de familie al in gebruik is, beslissen we hier of we deze willen overschrijven of niet.
// In dit voorbeeld zullen we de familie altijd overschrijven, zelfs als deze in gebruik is.
overwriteParameterValues = true;
Debug.WriteLine($"OnFamilyFound _ FamilyInUse: {familyInUse} - overwriteParameterValues {overwriteParameterValues}");
return true;
}
public bool OnSharedFamilyFound(Family sharedFamily, bool familyInUse, out FamilySource source, out bool overwriteParameterValues)
{
// Als een gedeelde familie wordt gevonden, kunnen we hier beslissen of we deze willen laden of niet.
// In dit voorbeeld zullen we de gedeelde familie altijd laden, zelfs als deze al in gebruik is.
source = FamilySource.Family;
overwriteParameterValues = true;
Debug.WriteLine($"OnSharedFamilyFound _ sharedFamily: {sharedFamily} - familyInUse {familyInUse} - source {source} - overwriteParameterValues {overwriteParameterValues}");
return true;
}
}
I found this example in the SDK:
@jeremytammik is there a specific reason that this example is creating a temp file?
KG
Jan Willem
Solved! Go to Solution.
Link copied