/// <summary> /// This node will return all of the leaders associated with the text note. /// </summary> /// <param name="textNote">The text note to get leaders from.</param> /// <returns name="leaders">The leaders..</returns> /// <search> /// textnote, getleaders, rhythm /// </search> public static List <Leader> GetLeaders(global::Revit.Elements.Element textNote) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.TextNote internalNote = (Autodesk.Revit.DB.TextNote)textNote.InternalElement; return(internalNote.GetLeaders().ToList()); }
/// <summary> /// Get Element Type. /// </summary> /// <param name="element"></param> /// <returns name="Type"></returns> /// <search>element, type</search> public static global::Revit.Elements.Element Type(global::Revit.Elements.Element element) { var doc = DocumentManager.Instance.CurrentDBDocument; var e = element.InternalElement; return(doc.GetElement(e.GetTypeId()).ToDSType(true)); }
/// <summary> /// Returns name of the BuiltInParameter if such exists. /// </summary> /// <param name="element">Element to query.</param> /// <param name="name">Name of the parameter. In case that multiple parameters have the same name, first encountered name will be returned.</param> /// <returns name="bipName">Name of the Bip.</returns> public static string GetBuiltInParameterName(global::Revit.Elements.Element element, string name) { var e = element.InternalElement; var param = e.Parameters.Cast <Autodesk.Revit.DB.Parameter>().FirstOrDefault(x => x.Definition.Name == name); return(((Autodesk.Revit.DB.InternalDefinition)param?.Definition)?.BuiltInParameter.ToString()); }
public static string AddSplitLineWithElevation(global::Revit.Elements.Element roof, Curve curve, double elevation) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.RoofBase internalRoof = (Autodesk.Revit.DB.RoofBase)roof.InternalElement; Point startPoint = Point.ByCoordinates(curve.StartPoint.X, curve.StartPoint.Y, elevation); Point endPoint = Point.ByCoordinates(curve.EndPoint.X, curve.EndPoint.Y, elevation); string result; try { TransactionManager.Instance.EnsureInTransaction(DocumentManager.Instance.CurrentDBDocument); internalRoof.SlabShapeEditor.Enable(); SlabShapeVertex vertex1 = internalRoof.SlabShapeEditor.DrawPoint(startPoint.ToXyz()); SlabShapeVertex vertex2 = internalRoof.SlabShapeEditor.DrawPoint(endPoint.ToXyz()); internalRoof.SlabShapeEditor.DrawSplitLine(vertex1, vertex2); TransactionManager.Instance.TransactionTaskDone(); result = "Success."; } catch (Exception) { result = "not so success."; } return(result); }
/// <summary> /// /// </summary> /// <param name="view"></param> /// <param name="viewFamilyType"></param> /// <param name="extents"></param> /// <returns></returns> public static global::Revit.Elements.Views.View CreateCallout(global::Revit.Elements.Views.View view, global::Revit.Elements.Element viewFamilyType, Autodesk.DesignScript.Geometry.Rectangle extents) { var doc = DocumentManager.Instance.CurrentDBDocument; var v = (Autodesk.Revit.DB.View)view.InternalElement; var pt1 = extents.BoundingBox.MinPoint.ToXyz(); var pt2 = extents.BoundingBox.MaxPoint.ToXyz(); Autodesk.Revit.DB.View newView; TransactionManager.Instance.EnsureInTransaction(doc); switch (v.ViewType) { case Autodesk.Revit.DB.ViewType.FloorPlan: case Autodesk.Revit.DB.ViewType.CeilingPlan: case Autodesk.Revit.DB.ViewType.Elevation: case Autodesk.Revit.DB.ViewType.Section: case Autodesk.Revit.DB.ViewType.Detail: newView = Autodesk.Revit.DB.ViewSection.CreateCallout(doc, v.Id, viewFamilyType.InternalElement.Id, pt1, pt2); break; default: throw new ArgumentOutOfRangeException(nameof(view)); } TransactionManager.Instance.TransactionTaskDone(); return((global::Revit.Elements.Views.View)newView.ToDSType(true)); }
/// <summary> /// Returns Views that View Filter is applied to. /// </summary> /// <param name="viewFilter">View Filter Element.</param> /// <returns name="view">Views.</returns> /// <search>view, filter, owner</search> public static List <global::Revit.Elements.Element> OwnerViews(global::Revit.Elements.Element viewFilter) { var doc = DocumentManager.Instance.CurrentDBDocument; var vf = viewFilter.InternalElement as Autodesk.Revit.DB.ParameterFilterElement; var allViews = new Autodesk.Revit.DB.FilteredElementCollector(doc) .OfClass(typeof(Autodesk.Revit.DB.View)) .Cast <Autodesk.Revit.DB.View>() // exclude view templates and views that filters cannot be applied to .Where(x => x.AreGraphicsOverridesAllowed()) .ToList(); var matches = new List <global::Revit.Elements.Element>(); foreach (var v in allViews) { var filters = v.GetFilters(); if (filters.Count != 0) { foreach (var id in filters) { var f = doc.GetElement(id) as Autodesk.Revit.DB.ParameterFilterElement; if (vf != null && (f != null && f.Name == vf.Name)) { matches.Add(v.ToDSType(true)); } } } } return(matches); }
/// <summary> /// This node will retrieve the geometric skipped curve segments from the curtain wall. /// </summary> /// <param name="curtainGridLine">The curtain gridline to get data from.</param> /// <returns name="skippedSegmentCurves">The segments that make up the curtain grid.</returns> /// <search> /// CurtainGridLine.SkippedSegmentCurves, rhythm /// </search> public static object SkippedSegmentCurves(global::Revit.Elements.Element curtainGridLine) { Autodesk.Revit.DB.CurtainGridLine internalCurtainGridline = (Autodesk.Revit.DB.CurtainGridLine)curtainGridLine.InternalElement; var skippedSegmentCurves = internalCurtainGridline.SkippedSegmentCurves.ToProtoType(); return(skippedSegmentCurves); }
/// <summary> /// This node will retrieve the geometric curve from the curtain wall. /// </summary> /// <param name="curtainGridLine">The curtain gridline to get data from.</param> /// <returns name="fullCurve">The full geometric curve</returns> /// <search> /// CurtainGridLine.FullCurve, rhythm /// </search> public static object FullCurve(global::Revit.Elements.Element curtainGridLine) { Autodesk.Revit.DB.CurtainGridLine internalCurtainGridline = (Autodesk.Revit.DB.CurtainGridLine)curtainGridLine.InternalElement; var fullCurve = internalCurtainGridline.FullCurve.ToProtoType(); return(fullCurve); }
public static List <global::Revit.Elements.Element> CreateParts(global::Revit.Elements.Element element) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //create a list to hold the element ids and add them to it ICollection <Autodesk.Revit.DB.ElementId> elementIds = new List <ElementId>(); elementIds.Add(element.InternalElement.Id); //start a transaction and create the parts TransactionManager.Instance.EnsureInTransaction(doc); PartUtils.CreateParts(doc, elementIds); TransactionManager.Instance.TransactionTaskDone(); doc.ActiveView.PartsVisibility = PartsVisibility.ShowPartsOnly; //regeneration allows the parts to be selectable doc.Regenerate(); //collect the parts that have been created ICollection <ElementId> partIds = PartUtils.GetAssociatedParts(doc, element.InternalElement.Id, false, false); List <global::Revit.Elements.Element> partList = new List <global::Revit.Elements.Element>(); //collect the newly created parts foreach (Autodesk.Revit.DB.ElementId id in partIds) { partList.Add(doc.GetElement(id).ToDSType(true)); } return(partList); }
/// <summary> /// This node will obtain the outline of the Viewport title if one is used. This is the label outline. /// </summary> /// <param name="viewport">Viewport to obtain data from.</param> /// <returns name="labelOutline">The label outline of the viewport.</returns> /// <search> /// viewport, Viewport.LabelOutline, rhythm /// </search> public static List <Autodesk.DesignScript.Geometry.Curve> LabelOutline(global::Revit.Elements.Element viewport) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //obtain the element id from the sheet Autodesk.Revit.DB.Viewport internalViewport = (Autodesk.Revit.DB.Viewport)viewport.InternalElement; //this obtains the label outline var labelOutline = internalViewport.GetLabelOutline(); //create plane that corresponds to sheet plane Plane labelPlane = Plane.ByOriginNormal(labelOutline.MaximumPoint.ToPoint(), Vector.ZAxis()); var labelCuboid = Cuboid.ByCorners(labelOutline.MaximumPoint.ToPoint(), labelOutline.MinimumPoint.ToPoint()); var labelSurface = labelCuboid.Intersect(labelPlane); List <Autodesk.DesignScript.Geometry.Curve[]> labelCurves = new List <Autodesk.DesignScript.Geometry.Curve[]>(); foreach (Surface surf in labelSurface) { labelCurves.Add(surf.PerimeterCurves()); } List <Autodesk.DesignScript.Geometry.Curve> labelSheetCurves = new List <Autodesk.DesignScript.Geometry.Curve>(); //pull the curves onto a plane at 0,0,0 foreach (Autodesk.DesignScript.Geometry.Curve[] curve in labelCurves) { foreach (Autodesk.DesignScript.Geometry.Curve c in curve) { labelSheetCurves.Add(c.PullOntoPlane(Plane.XY())); } } return(labelSheetCurves); }
/// <summary> /// This node will place the given view on the given sheet, if possible. For floor plan views: They cannot be on any other sheets. Now supports schedules! /// </summary> /// <param name="sheet">The sheet to place views on.</param> /// <param name="view">The view to place.</param> /// <param name="location">The location of the view.</param> /// <returns name="Result">The result</returns> /// <search> /// viewport, addview,rhythm /// </search> public static global::Revit.Elements.Element Create(global::Revit.Elements.Views.Sheet sheet, global::Revit.Elements.Element view, Autodesk.DesignScript.Geometry.Point location) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //obtain the element id from the sheet ElementId sheetId = new ElementId(sheet.Id); global::Revit.Elements.Element result = null; if (view.InternalElement.ToString() == "Autodesk.Revit.DB.ViewSchedule") { //obtain the element id from the view ElementId viewId = new ElementId(view.Id); //chane the dynamo point to a revit point var revitPoint = location.ToRevitType(true); //start the transaction to place views TransactionManager.Instance.EnsureInTransaction(doc); result = Autodesk.Revit.DB.ScheduleSheetInstance.Create(doc, sheetId, viewId, revitPoint).ToDSType(true); TransactionManager.Instance.TransactionTaskDone(); } else { //obtain the element id from the view ElementId viewId = new ElementId(view.Id); //chane the dynamo point to a revit point var revitPoint = location.ToRevitType(true); //start the transaction to place views TransactionManager.Instance.EnsureInTransaction(doc); result = Autodesk.Revit.DB.Viewport.Create(doc, sheetId, viewId, revitPoint).ToDSType(true); TransactionManager.Instance.TransactionTaskDone(); } return(result); }
public static object GetParameterValueByNameCaSeiNSeNSiTiVe(global::Revit.Elements.Element element, string parameterName) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //create a list to hold the element ids and add them to it Autodesk.Revit.DB.Element internalElement = element.InternalElement; global::Revit.Elements.Parameter[] elementParams = element.Parameters; string paramToSet = null; //score of each match list List <int> values = new List <int>(); //score the match in the parameter list foreach (var param in elementParams) { values.Add(StringComparisonUtilities.Compute(parameterName, param.Name)); } //get the closest matching parameter name int minIndex = values.IndexOf(values.Min()); paramToSet = elementParams[minIndex].Name; //lookup and get the parameter value var result = internalElement.LookupParameter(paramToSet); var parameterValue = global::Revit.Elements.InternalUtilities.ElementUtils.GetParameterValue(result); return(parameterValue); }
public static Dictionary <string, object> SetSectionBox(global::Revit.Elements.Element view3D, BoundingBox bBox) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.View3D internalView = (Autodesk.Revit.DB.View3D)view3D.InternalElement; BoundingBoxXYZ revitBoxXyz = bBox.ToRevitType(); List <object> success = new List <object>(); List <object> fail = new List <object>(); TransactionManager.Instance.EnsureInTransaction(doc); try { internalView.SetSectionBox(revitBoxXyz); success.Add(view3D); } catch { fail.Add(view3D); } TransactionManager.Instance.TransactionTaskDone(); var outInfo = new Dictionary <string, object> { { "success", success }, { "failed", fail } }; return(outInfo); }
/// <summary> /// This node will obtain the selected link's document. /// </summary> /// <param name="linkInstance">The link to get document from.</param> /// <returns name="Document">The document.</returns> /// <search> /// rhythm /// </search> public static Autodesk.Revit.DB.Document GetDocument(global::Revit.Elements.Element linkInstance) { RevitLinkInstance internalLink = (RevitLinkInstance)linkInstance.InternalElement; Autodesk.Revit.DB.Document linkDoc = internalLink.GetLinkDocument(); return(linkDoc); }
/// <summary> /// This node will set the viewport's box center given the point. /// </summary> /// <param name="viewport">The viewport to set.</param> /// <param name="point">The point to use.</param> /// <search> /// viewport /// </search> public static void SetBoxCenter(global::Revit.Elements.Element viewport, Point point) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.Viewport internalViewport = (Autodesk.Revit.DB.Viewport)viewport.InternalElement; TransactionManager.Instance.EnsureInTransaction(doc); internalViewport.SetBoxCenter(point.ToRevitType()); TransactionManager.Instance.TransactionTaskDone(); }
public static global::Revit.Elements.Element SetPinnedStatus(global::Revit.Elements.Element element, bool status) { Autodesk.Revit.DB.Document doc = element.InternalElement.Document; TransactionManager.Instance.EnsureInTransaction(doc); element.InternalElement.Pinned = status; TransactionManager.Instance.TransactionTaskDone(); return(element); }
/// <summary> /// This node will retrieve the area's solid geometry. /// </summary> /// <param name="area">The area to extract solid from.</param> /// <param name="areaHeight">A manually input area height. Default value is 10.</param> /// <returns name="solid">The solid.</returns> /// <search> /// Area.Boundaries /// </search> public static Solid Solid(global::Revit.Elements.Element area, double areaHeight = 10.0) { Autodesk.Revit.DB.Area internalArea = (Autodesk.Revit.DB.Area)area.InternalElement; var boundaries = new List <List <Autodesk.DesignScript.Geometry.Curve> >(); foreach (var segments in internalArea.GetBoundarySegments(new SpatialElementBoundaryOptions())) { var boundary = new List <Autodesk.DesignScript.Geometry.Curve>(); foreach (Autodesk.Revit.DB.BoundarySegment segment in segments) { boundary.Add(segment.GetCurve().ToProtoType()); } boundaries.Add(boundary); } Autodesk.DesignScript.Geometry.Solid solid = null; List <Autodesk.DesignScript.Geometry.Solid> solidCollection = new List <Solid>(); int flag = 0; while (flag < boundaries.Count) { if (flag == 0) { List <Point> pointList = new List <Point>(); foreach (Autodesk.DesignScript.Geometry.Curve b in boundaries[flag]) { pointList.Add(b.StartPoint); } Polygon polycurveOutline = Polygon.ByPoints(pointList); solid = polycurveOutline.ExtrudeAsSolid(Vector.ByCoordinates(0, 0, 1), areaHeight); } else { List <Point> pointList = new List <Point>(); foreach (Autodesk.DesignScript.Geometry.Curve b in boundaries[flag]) { pointList.Add(b.StartPoint); } Polygon polycurveOutlineVoid = Polygon.ByPoints(pointList); solidCollection.Add(polycurveOutlineVoid.ExtrudeAsSolid(Vector.ByCoordinates(0, 0, 1), areaHeight)); } flag++; } if (solidCollection.Count > 0) { solid = solid.DifferenceAll(solidCollection); } return(solid); }
/// <summary> /// Creates a reference section. /// </summary> /// <param name="parentView"></param> /// <param name="viewToReference"></param> /// <param name="headPoint"></param> /// <param name="tailPoint"></param> public static void CreateReferenceSection(global::Revit.Elements.Element parentView, global::Revit.Elements.Element viewToReference, Point headPoint, Point tailPoint) { //the current document Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(doc); Autodesk.Revit.DB.ViewSection.CreateReferenceSection(doc, parentView.InternalElement.Id, viewToReference.InternalElement.Id, headPoint.ToRevitType(), tailPoint.ToRevitType()); TransactionManager.Instance.TransactionTaskDone(); }
/// <summary> /// This node will obtain the view from the given viewport. /// </summary> /// <param name="viewport">Viewport to obtain view from.</param> /// <returns name="view">The view that belongs to the viewport.</returns> /// <search> /// viewport, location,rhythm /// </search> public static global::Revit.Elements.Element GetView(global::Revit.Elements.Element viewport) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.Viewport internalViewport = (Autodesk.Revit.DB.Viewport)viewport.InternalElement; ElementId viewId = internalViewport.ViewId; global::Revit.Elements.Element view = doc.GetElement(viewId).ToDSType(true); return(view); }
/// <summary> /// This node will return the bottom face or faces for the input host object. This particular method works for ceilings, roofs, or floors. /// </summary> /// <param name="hostObject">The host object to retrieve bottom faces for.</param> /// <returns></returns> public static IEnumerable <List <Surface> > BottomSurface(global::Revit.Elements.Element hostObject) { Autodesk.Revit.DB.HostObject internalHost = hostObject.InternalElement as Autodesk.Revit.DB.HostObject; IList <Reference> sideRefs = HostObjectUtils.GetBottomFaces(internalHost); List <Autodesk.Revit.DB.Face> exteriorGeometryObjects = new List <Autodesk.Revit.DB.Face>(sideRefs.Select(r => internalHost.GetGeometryObjectFromReference(r)).Cast <Autodesk.Revit.DB.Face>()); return(exteriorGeometryObjects.Select(g => g.ToProtoType(true).ToList())); }
public static bool ContainsPoint(global::Revit.Elements.Element area, Point point) { Autodesk.Revit.DB.Area internalArea = area.InternalElement as Autodesk.Revit.DB.Area; if (internalArea.Area == 0) { return(false); } XYZ xyz = point.ToXyz(); return(internalArea.AreaContains(xyz)); }
public static List <global::Revit.Elements.Element> DependentElements(global::Revit.Elements.Element element) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //the element filter, this just filters out type elements. Autodesk.Revit.DB.ElementFilter elemFilter = new ElementIsElementTypeFilter(true); //the dependent element ids IList <ElementId> elemIds = element.InternalElement.GetDependentElements(elemFilter); //get the elements List <global::Revit.Elements.Element> elems = new List <global::Revit.Elements.Element>(elemIds.Select(e => doc.GetElement(new ElementId(e.IntegerValue)).ToDSType(true))); return(elems); }
public static List <global::Revit.Elements.Element> JoinedElements(global::Revit.Elements.Element element) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //the element filter, this just filters out type elements. Autodesk.Revit.DB.ElementFilter elemFilter = new ElementIsElementTypeFilter(true); //the joined element ids ICollection <ElementId> elemIds = JoinGeometryUtils.GetJoinedElements(doc, element.InternalElement); //get the elements List <global::Revit.Elements.Element> elems = new List <global::Revit.Elements.Element>(elemIds.Select(e => doc.GetElement(new ElementId(e.IntegerValue)).ToDSType(true))); return(elems); }
public static List <global::Revit.Elements.Element> Members(global::Revit.Elements.Element BeamSystem) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; //convert input beam system to internal version Autodesk.Revit.DB.BeamSystem beamSystemInternal = (Autodesk.Revit.DB.BeamSystem)BeamSystem.InternalElement; //get beam ids from system var beamIdCollection = beamSystemInternal.GetBeamIds(); //create list for the elements and add the beams to that list. List <global::Revit.Elements.Element> members = new List <global::Revit.Elements.Element>(beamIdCollection.Select(id => doc.GetElement(id).ToDSType(true)).ToArray()); return(members); }
/// <summary> /// This node will remove the given curve segments from the curtain grid line. /// </summary> /// <param name="curtainGridLine">The curtain gridline to remove segments from.</param> /// <param name="curves">The curves that represent the grid segment to remove.</param> /// <returns name="curtainGridLine">The curtain grid that was supplied.</returns> /// <search> /// CurtainGridLine.RemoveSegment, rhythm /// </search> public static global::Revit.Elements.Element RemoveSegment(global::Revit.Elements.Element curtainGridLine, List <Curve> curves) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; Autodesk.Revit.DB.CurtainGridLine internalCurtainGridline = (Autodesk.Revit.DB.CurtainGridLine)curtainGridLine.InternalElement; foreach (var curve in curves) { TransactionManager.Instance.EnsureInTransaction(doc); internalCurtainGridline.RemoveSegment(curve.ToRevitType()); TransactionManager.Instance.TransactionTaskDone(); } return(curtainGridLine); }
/// <summary> /// Room Name /// </summary> /// <param name="room">Room element.</param> /// <returns name="name">Name of the room.</returns> public static string Name(global::Revit.Elements.Element room) { if (room == null) { throw new ArgumentNullException(nameof(room)); } var rm = (Autodesk.Revit.DB.SpatialElement)room.InternalElement; var name = rm.get_Parameter(Autodesk.Revit.DB.BuiltInParameter.ROOM_NAME).AsString(); return(name); }
public static Dictionary <string, string> GetWorksharingTooltipInfo(global::Revit.Elements.Element element) { var doc = DocumentManager.Instance.CurrentDBDocument; var tooltipInfo = Autodesk.Revit.DB.WorksharingUtils.GetWorksharingTooltipInfo(doc, element.InternalElement.Id); return(new Dictionary <string, string> { { "Creator", tooltipInfo.Creator }, { "Owner", tooltipInfo.Owner }, { "LastChangedBy", tooltipInfo.LastChangedBy } }); }
public static bool IsFilterEnabled(global::Revit.Elements.Views.View view, global::Revit.Elements.Element viewFilter) { try { Autodesk.Revit.DB.View internalView = view.InternalElement as Autodesk.Revit.DB.View; return(internalView.GetIsFilterEnabled(viewFilter.InternalElement.Id)); } catch (Exception e) { throw new Exception(e.Message); } }
/// <summary> /// Check if Schedule is Titleblock Schedule. /// </summary> /// <param name="view"></param> /// <returns></returns> public static bool IsTitleblockSchedule(global::Revit.Elements.Element view) { try { // cast to View Schedule, titleblock schedules will fail here var v = (Autodesk.Revit.DB.ViewSchedule)view.InternalElement; return(v.IsTitleblockRevisionSchedule); } catch { return(false); } }
/// <summary> /// Delete element from Revit DB. /// </summary> /// <param name="element">Element to delete.</param> /// <returns></returns> /// <search>delete, remove, element</search> public static bool Delete(global::Revit.Elements.Element element) { var doc = DocumentManager.Instance.CurrentDBDocument; var e = element.InternalElement; TransactionManager.Instance.EnsureInTransaction(doc); try { doc.Delete(e.Id); return(true); } catch (Exception) { return(false); } }