/// <summary> /// /// </summary> /// <param name="parameters"></param> /// <param name="parasiteObject"></param> public static void AddParametersToParasiteObj(ParasiteObject parasiteObject, P_Parameter[] parameters = null) { if (parameters != null) { for (int i = 0; i < parameters.Length; i++) { parasiteObject.AddParameter(parameters[i].ParameterType.ToString(), parameters[i]); } } }
/// <summary> /// /// </summary> /// <param name="parameters"></param> /// <param name="dynSolid"></param> /// <returns></returns> public static ParasiteObject CreateParasiteObject(DynSolid dynSolid, P_Parameter[] parameters = null) { ParasiteObject parasiteObject = new ParasiteObject(dynSolid); if (parameters != null) { for (int i = 0; i < parameters.Length; i++) { parasiteObject.AddParameter(parameters[i].ParameterType.ToString(), parameters[i]); } } return(parasiteObject); }
/// <summary> /// /// </summary> /// <param name="geometryElement"></param> /// <param name="parameters"></param> /// <param name="outPutSolids"></param> /// <param name="parasiteObjects"></param> public static void CreateParasiteObjectFromGeometryElement(GeometryElement geometryElement, P_Parameter [] parameters, List <DynSolid> outPutSolids, List <ParasiteObject> parasiteObjects) { bool success; ParasiteObject parasiteObject = new ParasiteObject(); foreach (GeometryObject item in geometryElement) { success = GeometryExtraction.TryGetGeometryFromGeometryObject(item, out Autodesk.DesignScript.Geometry.Solid dynS); if (success) { parasiteObject = CreateParasiteObject(dynS); AddParametersToParasiteObj(parasiteObject, parameters); parasiteObjects.Add(parasiteObject); outPutSolids.Add(dynS); } } }
/// <summary> /// "Bakes" geometry to the current Rhino Document /// </summary> /// <param name="obj"></param> /// <param name="att"></param> private static void Bake(ParasiteAbstractObject obj, ObjectAttributes att, Rhino.RhinoDoc DOC) { if (obj == null) { throw new ParasiteArgumentException("You are attempting to bake a null object!"); } if (obj is ParasiteObject) { ParasiteObject parasiteObject = obj as ParasiteObject; if (parasiteObject.Data is Parasite_BrepSolid solid) { DOC.Objects.AddBrep(RhinoConversion.ToRhinoType(solid, 0.001), att); } else { throw new ParasiteNotImplementedExceptions($"Baking capabilities for " + $"{parasiteObject.Data.GetType().ToString()} are still not implemented! check back later"); } } }
/// <summary> /// This method selects all family instances from a given category, and returns /// a collection of Parasite Objects. Each Parasite Object will contain Revit data of each /// of the geometry. For example a given frame of a window will identify itself as a frame /// </summary> /// <param name="element"></param> /// <param name="outPutSolids"></param> /// <returns></returns> public static void GeometryDataFromFamilyInstance(Element element, List <DynamoSolid> outPutSolids, List <ParasiteObject> parasiteObjects, Options OP, Document doc) { if (element.Category.Name == "Windows") { GeometryElement geoElement = element.get_Geometry(OP); for (int i = 0; i < geoElement.Count(); i++) { GeometryInstance geoInstance = geoElement.ElementAt(i) as GeometryInstance; GeometryElement geometryElement = geoInstance.GetInstanceGeometry(); if (geometryElement != null) { foreach (GeometryObject item in geometryElement) { bool success = TryeGetGeometryDataFromGeometryObject(item, out Solid solid, out DynamoSolid dynS); ParasiteObject parasiteObject = new ParasiteObject(); if (success) { // GraphicsStyle will never be null for windows if (doc.GetElement(solid.GraphicsStyleId) is GraphicsStyle gStyle) { P_Parameter paramChildLayer = new P_Parameter(P_ParameterType.ChildLayer, gStyle.GraphicsStyleCategory.Name, P_StorageType.String); P_Parameter paramLayer = new P_Parameter(P_ParameterType.Layer, element.Category.Name, P_StorageType.String); parasiteObject = DynamoParasiteFactory.CreateParasiteObject(dynS); DynamoParasiteFactory.AddParametersToParasiteObj(parasiteObject, new P_Parameter[] { paramChildLayer, paramLayer }); parasiteObjects.Add(parasiteObject); outPutSolids.Add(dynS); } else { throw new ParasiteConversionExceptions(element.GetType(), parasiteObject.GetType()); } } } } } } else if (element.Category.Name == "Doors") { GeometryElement geoElement = element.get_Geometry(OP); P_Parameter paramChildLayer = new P_Parameter(P_ParameterType.ChildLayer, element.Name, P_StorageType.String); P_Parameter paramLayer = new P_Parameter(P_ParameterType.Layer, element.Category.Name, P_StorageType.String); for (int i = 0; i < geoElement.Count(); i++) { GeometryInstance geoInstance = geoElement.ElementAt(i) as GeometryInstance; GeometryElement geometryElement = geoInstance.GetInstanceGeometry(); if (geometryElement != null) { DynamoParasiteFactory.CreateParasiteObjectFromGeometryElement(geometryElement, new P_Parameter[] { paramChildLayer, paramLayer }, outPutSolids, parasiteObjects); } } } else { throw new ParasiteNotImplementedExceptions("Family Instance Category not implemented yet"); } }
public static ParasiteObject CreateParasiteObject(DynSolid dynSolid) { ParasiteObject parasiteObject = new ParasiteObject(dynSolid); return(parasiteObject); }