/// <summary> /// Converts a Revit element to a <see cref="CADProduct"/>. /// </summary> /// <param name="elements">The Revit elements to convert.</param> /// <param name="progressBar">The progress bar uesd for showing progress.</param> /// <returns>A <see cref="CADProduct"/>.</returns> public CADProduct ConvertToCADProduct(Element element) { if (element is FamilyInstance familyInstance && !string.IsNullOrEmpty(element.Document.PathName)) { var cadFilterResultString = File.ReadAllText(element.Document.PathName.Replace(".rvt", $"_{familyInstance.Symbol.Id.IntegerValue.ToString()}.met")); if (!string.IsNullOrEmpty(cadFilterResultString)) { var cadFilterResult = JsonConvert.DeserializeObject <CADFilterResult>(cadFilterResultString); var cadProduct = cadFilterResult.CADProducts.FirstOrDefault(); UOLAddInUtilities.UpdatePropertiesWithValuesFromFamily(familyInstance.Symbol, cadProduct.Properties, false, true); UOLAddInUtilities.UpdatePropertiesWithValuesFromFamily(familyInstance, cadProduct.Properties, false, true); cadProduct.Id = familyInstance.Id.ToString(); cadProduct.ProductId = cadProduct.ProductId ?? 0; return(cadProduct); } } return(null); }
public CADHostResult InsertCadContent(string contentPath, string name, IEnumerable <CADProperty> properties, bool placeInstance, CADMetadata cadMetadata) { using (var monitoredExecutionBlock = monitoredExecutionContext .MonitorMethod <RevitHost>(nameof(InsertCadContent)) .WithParameter(nameof(contentPath), contentPath) .WithParameter(nameof(name), name) .WithParameter(nameof(properties), properties) .WithParameter(nameof(placeInstance), placeInstance) .WithTiming()) { var parameters = new Dictionary <string, ParameterInfo>(); try { parameters = ConvertProperties(properties); } catch { MessageBox.Show(Properties.Resources.MessageBoxCadPropertiesIncomplete_Text, Properties.Resources.ApplicationTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); return(new CADHostResult { State = CADHostResultState.Failed }); } ElementType loadedElementType; using (var transaction = new Transaction(ApplicationGlobals.ExternalCommandData.Application.ActiveUIDocument.Document, "Insert Family")) { transaction.Start(); var typeDataList = new List <TypeData>() { new TypeData() { Path = contentPath, Parameters = new Dictionary <string, ParameterInfo>(), TypeName = name } }; loadedElementType = familyHelper.LoadTypes(ApplicationGlobals.ExternalCommandData.Application.ActiveUIDocument.Document, typeDataList); SetDefaultParameterValues(loadedElementType, properties, cadMetadata); foreach (var parameter in parameters) { var revitParameter = parameterHelper.GetParameterBySearchString(loadedElementType, parameter.Value.Name); if (revitParameter == null) { revitParameter = parameterHelper.GetParameterBySearchString(loadedElementType, parameter.Value.Name.Replace("_0_", "_")); } parameterHelper.SetParameterValue(revitParameter, parameter.Value.Value); } transaction.Commit(); } if (!loadedElementType.IsValidObject) { return(new CADHostResult { State = CADHostResultState.Failed }); } UOLAddInUtilities.UpdatePropertiesWithValuesFromFamily(loadedElementType, properties, false); if (placeInstance) { try { if ((FamilySymbol)loadedElementType != null && ApplicationGlobals.ExternalCommandData.Application.ActiveUIDocument.ActiveView.ViewType != ViewType.Elevation && ApplicationGlobals.ExternalCommandData.Application.ActiveUIDocument.ActiveView.ViewType != ViewType.Section) { new ElementHelper().PlaceFamilyInstance(ApplicationGlobals.ExternalCommandData.Application.ActiveUIDocument, (FamilySymbol)loadedElementType); } else { MessageBox.Show(Properties.Resources.MessageBoxCadContentLoadedCantPlace_Text, Properties.Resources.ApplicationTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } catch (Autodesk.Revit.Exceptions.InvalidOperationException invalidOperationException) { monitoredExecutionBlock.LogException(invalidOperationException); MessageBox.Show(Properties.Resources.MessageBoxCadContentLoadedCantPlace_Text, Properties.Resources.ApplicationTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(new CADHostResult { CADObject = loadedElementType, State = CADHostResultState.Succeeded }); } } return(new CADHostResult { CADObject = loadedElementType, State = CADHostResultState.Succeeded }); } }