/// <summary> /// Convert a GeometryObject to an applicable ProtoGeometry type. /// </summary> /// <param name="geom"></param> /// <param name="reference"></param> /// <param name="transform"></param> /// <returns>A Geometry type. Null if there's no suitable conversion.</returns> public static object Convert(this Autodesk.Revit.DB.GeometryObject geom, Autodesk.Revit.DB.Reference reference = null, Autodesk.DesignScript.Geometry.CoordinateSystem transform = null) { if (geom == null) { return(null); } dynamic dynGeom = geom; dynamic protoGeom = null; try { protoGeom = InternalConvert(dynGeom); // if protoGeom is null, Transform will be ambiguous between // IEnumerable<Autodesk.DesignScript.Geometry.Geometry> Transform(IEnumerable<Autodesk.DesignScript.Geometry.Geometry> geom, CoordinateSystem coordinateSystem) // and // Autodesk.DesignScript.Geometry.Geometry Transform(Autodesk.DesignScript.Geometry.Geometry geom, CoordinateSystem coordinateSystem) if (protoGeom == null) { throw new ArgumentNullException(); } return(Tag(Transform(protoGeom, transform), reference)); } catch (Exception e) { DynamoServices.LogWarningMessageEvents.OnLogWarningMessage(Properties.Resources.GeometryConversionFailure + e.Message); return(null); } finally { // Dispose the temporary geometry that has been transformed. DisposeGeometry(protoGeom, transform); } }
/// <summary> /// Convert a GeometryObject to an applicable ProtoGeometry type. /// </summary> /// <param name="geom"></param> /// <param name="reference"></param> /// <param name="transform"></param> /// <returns>A Geometry type. Null if there's no suitable conversion.</returns> public static object Convert(this Autodesk.Revit.DB.GeometryObject geom, Autodesk.Revit.DB.Reference reference = null, Autodesk.DesignScript.Geometry.CoordinateSystem transform = null) { if (geom == null) { return(null); } dynamic dynGeom = geom; dynamic protoGeom = null; try { protoGeom = InternalConvert(dynGeom); return(Tag(Transform(protoGeom, transform), reference)); } catch (Exception e) { DynamoServices.LogWarningMessageEvents.OnLogWarningMessage(Properties.Resources.GeometryConversionFailure + e.Message); return(null); } finally { // Dispose the temporary geometry that has been transformed. DisposeGeometry(protoGeom, transform); } }
static bool SkipGeometryObject(DB.GeometryObject geometryObject, DB.Document doc) { if (doc.GetElement(geometryObject.GraphicsStyleId) is DB.GraphicsStyle style) { return(style.GraphicsStyleCategory.Id.IntegerValue == (int)DB.BuiltInCategory.OST_LightingFixtureSource); } return(false); }
/// <summary> /// Update Context from <see cref="DB.GeometryObject"/> <paramref name="geometryObject"/> /// </summary> /// <param name="geometryObject"></param> static void UpdateGraphicAttributes(DB.GeometryObject geometryObject) { if (geometryObject is object) { var context = Context.Peek; if (context.Element is object) { if (geometryObject is DB.GeometryInstance instance) { context.Element = instance.Symbol; } context.Visibility = geometryObject.Visibility; if (geometryObject.GraphicsStyleId != DB.ElementId.InvalidElementId) { context.GraphicsStyleId = geometryObject.GraphicsStyleId; if (context.Element.Document.GetElement(context.GraphicsStyleId) is DB.GraphicsStyle graphicsStyle) { if (graphicsStyle.GraphicsStyleCategory.Material is DB.Material material) { context.MaterialId = material.Id; } } } if (geometryObject is DB.GeometryElement element) { if (element.MaterialElement is object) { context.MaterialId = element.MaterialElement.Id; } } else if (geometryObject is DB.Solid solid) { if (!solid.Faces.IsEmpty) { var face0 = solid.Faces.get_Item(0); if (face0.MaterialElementId != DB.ElementId.InvalidElementId) { context.MaterialId = face0.MaterialElementId; } } } else if (geometryObject is DB.Mesh mesh) { if (mesh.MaterialElementId != DB.ElementId.InvalidElementId) { context.MaterialId = mesh.MaterialElementId; } } } } }
public static IEnumerable <GeometryBase> ToRhino(this DB.GeometryObject geometry) { var scaleFactor = Revit.ModelUnits; switch (geometry) { case DB.GeometryElement element: foreach (var g in element.SelectMany(x => x.ToRhino())) { yield return(g); } break; case DB.GeometryInstance instance: var xform = instance.Transform.ToRhino().ChangeUnits(scaleFactor); foreach (var g in instance.SymbolGeometry.ToRhino()) { g?.Transform(xform); yield return(g); } break; case DB.Mesh mesh: var m = mesh.ToRhino(); yield return(m?.ChangeUnits(scaleFactor)); break; case DB.Solid solid: var s = solid.ToRhino(); yield return(s?.ChangeUnits(scaleFactor)); break; case DB.Curve curve: var c = curve.ToRhino(); yield return(c?.ChangeUnits(scaleFactor)); break; case DB.PolyLine polyline: var p = new PolylineCurve(polyline.GetCoordinates().ToRhino()); yield return(p?.ChangeUnits(scaleFactor)); break; } }
public override FScheme.Value Evaluate(FSharpList <FScheme.Value> args) { double length = 0.0; object arg0 = ((FScheme.Value.Container)args[0]).Item; Autodesk.Revit.DB.GeometryObject curveOrEdge = null; if (arg0 is Reference) { var curveRef = arg0 as Reference; curveOrEdge = dynRevitSettings.Doc.Document.GetElement(curveRef.ElementId) .GetGeometryObjectFromReference(curveRef) as Autodesk.Revit.DB.GeometryObject; if (!(curveOrEdge is Autodesk.Revit.DB.Curve || curveOrEdge is Autodesk.Revit.DB.Edge)) { throw new Exception("Reference is not to curve or edge."); } } else if (arg0 is CurveElement) { var curveElem = arg0 as CurveElement; curveOrEdge = curveElem.GeometryCurve; } else if (arg0 is Autodesk.Revit.DB.GeometryObject) { curveOrEdge = arg0 as Autodesk.Revit.DB.GeometryObject; } else { throw new Exception("Argument is not a curve or a edge."); } if (curveOrEdge is Autodesk.Revit.DB.Curve) { var thisCurve = curveOrEdge as Autodesk.Revit.DB.Curve; length = thisCurve.Length; } else if (curveOrEdge is Autodesk.Revit.DB.Edge) { var thisEdge = curveOrEdge as Autodesk.Revit.DB.Edge; length = thisEdge.AsCurve().Length; } else { throw new Exception("Argument is not a curve or a edge."); } //Fin return(FScheme.Value.NewContainer(Units.Length.FromFeet(length, dynSettings.Controller.UnitsManager))); }
public static IEnumerable <GeometryBase> ToGeometryBaseMany(this DB.GeometryObject geometry) { switch (geometry) { case DB.GeometryElement element: foreach (var g in element.SelectMany(x => x.ToGeometryBaseMany())) { yield return(g); } yield break; case DB.GeometryInstance instance: var xform = ToTransform(instance.Transform); foreach (var g in instance.SymbolGeometry.ToGeometryBaseMany()) { g?.Transform(xform); yield return(g); } break; case DB.Mesh mesh: yield return(mesh.ToMesh()); yield break; case DB.Solid solid: yield return(solid.ToBrep()); yield break; case DB.Curve curve: yield return(curve.ToCurve()); yield break; case DB.PolyLine polyline: yield return(polyline.ToPolylineCurve()); yield break; } }
/// <summary> /// Update Context from <see cref="DB.GeometryObject"/> <paramref name="geometryObject"/> /// </summary> /// <param name="geometryObject"></param> internal static void UpdateGraphicAttributes(DB.GeometryObject geometryObject) { if (geometryObject is object) { var context = Context.Peek; if (context.Element is object) { context.Visibility = geometryObject.Visibility; if (geometryObject is DB.GeometryInstance instance) { context.Element = instance.Symbol; context.GraphicsStyleId = instance.Symbol.Category?.GetGraphicsStyle(DB.GraphicsStyleType.Projection)?.Id ?? DB.ElementId.InvalidElementId; context.MaterialId = instance.Symbol.Category?.Material?.Id ?? DB.ElementId.InvalidElementId; } else if (geometryObject is DB.GeometryElement element) { context.MaterialId = element.MaterialElement?.Id ?? DB.ElementId.InvalidElementId; } else if (geometryObject is DB.Solid solid) { if (!solid.Faces.IsEmpty) { var faces = solid.Faces; var count = faces.Size; context.FaceMaterialId = new DB.ElementId[count]; for (int f = 0; f < count; ++f) { context.FaceMaterialId[f] = faces.get_Item(f).MaterialElementId; } } } else if (geometryObject is DB.Mesh mesh) { context.FaceMaterialId = new DB.ElementId[] { mesh.MaterialElementId }; } if (geometryObject.GraphicsStyleId != DB.ElementId.InvalidElementId) { context.GraphicsStyleId = geometryObject.GraphicsStyleId; } } } }
/// <summary> /// Convert a GeometryObject to an applicable ProtoGeometry type. /// </summary> /// <param name="geom"></param> /// <param name="reference"></param> /// <returns>A Geometry type. Null if there's no suitable conversion.</returns> public static object Convert(this Autodesk.Revit.DB.GeometryObject geom, Autodesk.Revit.DB.Reference reference = null) { if (geom == null) { return(null); } dynamic dynGeom = geom; try { return(Tag(InternalConvert(dynGeom), reference)); } catch (RuntimeBinderException e) { return(null); } }
/// <summary> /// Convert a GeometryObject to an applicable ProtoGeometry type. /// </summary> /// <param name="geom"></param> /// <returns>A Geometry type. Null if there's no suitable conversion.</returns> public static Autodesk.DesignScript.Geometry.Geometry Convert(this Autodesk.Revit.DB.GeometryObject geom) { if (geom == null) { return(null); } dynamic dynGeom = geom; try { return(InternalConvert(dynGeom)); } catch (RuntimeBinderException e) { // There's no InternalConvert method return(null); } }
/// <summary> /// Convert a GeometryObject to an applicable ProtoGeometry type. /// </summary> /// <param name="geom"></param> /// <param name="reference"></param> /// <param name="transform"></param> /// <returns>A Geometry type. Null if there's no suitable conversion.</returns> public static object Convert(this Autodesk.Revit.DB.GeometryObject geom, Autodesk.Revit.DB.Reference reference = null, Autodesk.DesignScript.Geometry.CoordinateSystem transform = null) { if (geom == null) { return(null); } dynamic dynGeom = geom; dynamic protoGeom = null; try { protoGeom = InternalConvert(dynGeom); return(Tag(Transform(protoGeom, transform), reference)); } catch (Exception) { return(null); } finally { // Dispose the temporary geometry that has been transformed. if (protoGeom != null && transform != null) { if (protoGeom is Autodesk.DesignScript.Geometry.Geometry) { protoGeom.Dispose(); } else if (protoGeom is IEnumerable <Autodesk.DesignScript.Geometry.Geometry> ) { var geoms = protoGeom as IEnumerable <Autodesk.DesignScript.Geometry.Geometry>; foreach (var g in geoms) { if (g != null) { g.Dispose(); } } } } } }
/// <summary> /// Convert a GeometryObject to an applicable ProtoGeometry type. /// </summary> /// <param name="geom"></param> /// <param name="reference"></param> /// <param name="transform"></param> /// <returns>A Geometry type. Null if there's no suitable conversion.</returns> public static object Convert(this Autodesk.Revit.DB.GeometryObject geom, Autodesk.Revit.DB.Reference reference = null, Autodesk.DesignScript.Geometry.CoordinateSystem transform = null) { if (geom == null) { return(null); } dynamic dynGeom = geom; try { return(Tag(Transform(InternalConvert(dynGeom), transform), reference)); } catch (RuntimeBinderException) { return(null); } }
public static IEnumerable <GeometryBase> ToGeometryBaseMany(this DB.GeometryObject geometry) { UpdateGraphicAttributes(geometry); switch (geometry) { case DB.GeometryElement element: foreach (var g in element.SelectMany(x => x.ToGeometryBaseMany())) { yield return(g); } yield break; case DB.GeometryInstance instance: foreach (var g in instance.GetInstanceGeometry().ToGeometryBaseMany()) { yield return(g); } yield break; case DB.Mesh mesh: yield return(SetGraphicAttributes(mesh.ToMesh())); yield break; case DB.Solid solid: yield return(SetGraphicAttributes(solid.ToBrep())); yield break; case DB.Curve curve: yield return(SetGraphicAttributes(curve.ToCurve())); yield break; case DB.PolyLine polyline: yield return(SetGraphicAttributes(polyline.ToPolylineCurve())); yield break; } }
public static IEnumerable <GeometryBase> ToRhino(this DB.GeometryObject geometry) => geometry.ToGeometryBaseMany();