void ReconstructFamilyInstanceByLocation ( DB.Document doc, ref DB.FamilyInstance element, [Description("Location where to place the element. Point or plane is accepted.")] Plane location, DB.FamilySymbol type, Optional <DB.Level> level, [Optional] DB.Element host ) { if (!location.IsValid) { ThrowArgumentException(nameof(location), "Location is not valid."); } if (!type.IsActive) { type.Activate(); } { FamilyInstanceCreationData creationData; switch (type.Family.FamilyPlacementType) { case DB.FamilyPlacementType.OneLevelBased: creationData = CreateOneLevelBased(doc, location, type, level, host); break; case DB.FamilyPlacementType.OneLevelBasedHosted: creationData = CreateOneLevelBasedHosted(doc, location, type, level, host); break; case DB.FamilyPlacementType.TwoLevelsBased: creationData = CreateTwoLevelsBased(doc, location, type, level, host); break; case DB.FamilyPlacementType.WorkPlaneBased: creationData = CreateWorkPlaneBased(doc, location, type, level, host); break; default: creationData = CreateDefault(doc, location, type, level, host); break; } var dataList = new List <FamilyInstanceCreationData>() { creationData }; var newElementIds = doc.IsFamilyDocument ? doc.FamilyCreate.NewFamilyInstances2(dataList) : doc.Create.NewFamilyInstances2(dataList); if (newElementIds.Count != 1) { doc.Delete(newElementIds); throw new InvalidOperationException(); } var parametersMask = new DB.BuiltInParameter[] { DB.BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM, DB.BuiltInParameter.ELEM_FAMILY_PARAM, DB.BuiltInParameter.ELEM_TYPE_PARAM, DB.BuiltInParameter.FAMILY_LEVEL_PARAM, DB.BuiltInParameter.FAMILY_BASE_LEVEL_PARAM, DB.BuiltInParameter.FAMILY_BASE_LEVEL_OFFSET_PARAM, DB.BuiltInParameter.FAMILY_TOP_LEVEL_PARAM, DB.BuiltInParameter.FAMILY_TOP_LEVEL_OFFSET_PARAM, DB.BuiltInParameter.SCHEDULE_LEVEL_PARAM, DB.BuiltInParameter.SCHEDULE_BASE_LEVEL_PARAM, DB.BuiltInParameter.SCHEDULE_BASE_LEVEL_OFFSET_PARAM, DB.BuiltInParameter.SCHEDULE_TOP_LEVEL_PARAM, DB.BuiltInParameter.SCHEDULE_TOP_LEVEL_OFFSET_PARAM, DB.BuiltInParameter.INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM, DB.BuiltInParameter.INSTANCE_REFERENCE_LEVEL_PARAM }; ReplaceElement(ref element, doc.GetElement(newElementIds.First()) as DB.FamilyInstance, parametersMask); doc.Regenerate(); if (element.Pinned) { try { element.Pinned = false; } catch (Autodesk.Revit.Exceptions.InvalidOperationException) { } } } element?.SetLocation(location.Origin.ToXYZ(), location.XAxis.ToXYZ(), location.YAxis.ToXYZ()); }