NumberingSchema
A class to support assigning numbers to elements of a particular kind for the purpose of tagging and scheduling them.
Inheritance Hierarchy
System.Object
Autodesk.Revit.DB.Element
Autodesk.Revit.DB.NumberingSchema
Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
Syntax
public class NumberingSchema : Element
The NumberingSchema type exposes the following members.
Properties
Name
Description
Public Property
AssemblyInstanceId
The id of the assembly instance to which the element belongs.
(Inherited from Element)
Public Property
Code Example
BoundingBox
Retrieves a box that circumscribes all geometry of the element.
(Inherited from Element)
Public Property
Category
Retrieves a Category object that represents the category or sub category in which the element resides.
(Inherited from Element)
Public Property
Code Example
CreatedPhaseId
Id of a Phase at which the Element was created.
(Inherited from Element)
Public Property
Code Example
DemolishedPhaseId
Id of a Phase at which the Element was demolished.
(Inherited from Element)
Public Property
Code Example
DesignOption
Returns the design option to which the element belongs.
(Inherited from Element)
Public Property
Document
Returns the Document in which the Element resides.
(Inherited from Element)
Public Property
Code Example
Geometry
Retrieves the geometric representation of the element.
(Inherited from Element)
Public Property
GroupId
The id of the group to which an element belongs.
(Inherited from Element)
Public Property
Code Example
Id
A unique identifier for an Element in an Autodesk Revit project.
(Inherited from Element)
Public Property
IsModifiable
Identifies if the element is modifiable.
(Inherited from Element)
Public Property
IsTransient
Indicates whether an element is transient or permanent.
(Inherited from Element)
Public Property
IsValidObject
Specifies whether the .NET object represents a valid Revit entity.
(Inherited from Element)
Public Property
LevelId
The id of the level associated with the element.
(Inherited from Element)
Public Property
Code Example
Location
This property is used to find the physical location of an element within a project.
(Inherited from Element)
Public Property
Static Member
MaximumStartingNumber
A static property defining the maximum number a numbering sequence can use as its starting number (the lowest number in the sequence).
Public Property
Name
A human readable name for the Element.
(Inherited from Element)
Public Property
NumberingParameterId
Id of the parameter that stores values of the numbers on enumerated elements.
Public Property
OwnerViewId
The id of the view that owns the element.
(Inherited from Element)
Public Property
Code Example
Parameter.BuiltInParameter.
Retrieves a parameter from the element given a parameter id.
(Inherited from Element)
Public Property
Parameter.Definition.
Retrieves a parameter from the element based on its definition.
(Inherited from Element)
Public Property
Parameter.Guid.
Retrieves a parameter from the element given a GUID for a shared parameter.
(Inherited from Element)
Public Property
Code Example
Parameters
Retrieves a set containing all of the parameters that are contained within the element.
(Inherited from Element)
Public Property
ParametersMap
Retrieves a map containing all of the parameters that are contained within the element.
(Inherited from Element)
Public Property
Pinned
Identifies if the element has been pinned to prevent changes.
(Inherited from Element)
Public Property
SchemaType
Identifies the kind of elements/objects this numbering schema is used for.
Public Property
Code Example
UniqueId
A stable unique identifier for an element within the document.
(Inherited from Element)
Public Property
VersionGuid
Get the element version Guid.
(Inherited from Element)
Public Property
ViewSpecific
Identifies if the element is owned by a view.
(Inherited from Element)
Public Property
WorksetId
Get Id of the Workset which owns the element.
(Inherited from Element)
Methods
Name
Description
Public Method
AppendSequence
Appends all elements of one numbering sequence to the end of another sequence.
Public Method
ArePhasesModifiable
Returns true if the properties CreatedPhaseId and DemolishedPhaseId can be modified for this Element.
(Inherited from Element)
Public Method
AssignElementsToSequence
Assigns the input elements to a sequence identified by the given partition name.
Public Method
CanBeHidden
Indicates if the element can be hidden in the view.
(Inherited from Element)
Public Method
CanBeLocked
Identifies if the element can be locked.
(Inherited from Element)
Public Method
CanDeleteSubelement
Checks if given subelement can be removed from the element.
(Inherited from Element)
Public Method
CanHaveTypeAssigned.
Identifies if the element can have a type assigned.
(Inherited from Element)
Public Method
ChangeNumber
Replaces an existing number with a new one (that does not exist yet).
Public Method
ChangeTypeId(ElementId)
Changes the type of the element.
(Inherited from Element)
Public Method
DeleteEntity
Deletes the existing entity created by %schema% in the element
(Inherited from Element)
Public Method
DeleteSubelement
Removes a subelement from the element.
(Inherited from Element)
Public Method
DeleteSubelements
Removes the subelements from the element.
(Inherited from Element)
Public Method
Dispose
(Inherited from Element)
Public Method
Equals
Determines whether the specified object is equal to the current object.
(Inherited from Object)
Public Method
EvaluateAllParameterValues
Evaluates all the parameters’ values of the element.
(Inherited from Element)
Public Method
EvaluateParameterValues
Evaluate the parameters’ values of the element on the given parameter ID set.
(Inherited from Element)
Public Method
GetDependentElements
Get all elements that, from a logical point of view, are the children of this Element.
(Inherited from Element)
Public Method
GetEntity
Returns the existing entity corresponding to the Schema if it has been saved in the Element, or an invalid entity otherwise.
(Inherited from Element)
Public Method
GetEntitySchemaGuids
Returns the Schema guids of any Entities stored in this element.
(Inherited from Element)
Public Method
GetExternalFileReference
Gets information pertaining to the external file referenced by the element.
(Inherited from Element)
Public Method
GetExternalResourceReference
Gets the ExternalResourceReference associated with a specified external resource type.
(Inherited from Element)
Public Method
GetExternalResourceReferenceExpanded
Gets the collection of ExternalResourceReference associated with a specified external resource type.
(Inherited from Element)
Public Method
GetExternalResourceReferences
Gets the map of the external resource references referenced by the element.
(Inherited from Element)
Public Method
GetExternalResourceReferencesExpanded
Gets the expanded map of the external resource references referenced by the element.
(Inherited from Element)
Public Method
Code Example
GetGeneratingElementIds
Returns the ids of the element(s) that generated the input geometry object.
(Inherited from Element)
Public Method
GetGeometryObjectFromReference
Retrieve one geometric primitive contained in the element given a reference.
(Inherited from Element)
Public Method
GetHashCode
Serves as the default hash function.
(Inherited from Object)
Public Method
GetMaterialArea
Gets the area of the material with the given id.
(Inherited from Element)
Public Method
GetMaterialIds
Gets the element ids of all materials present in the element.
(Inherited from Element)
Public Method
GetMaterialVolume
Gets the volume of the material with the given id.
(Inherited from Element)
Public Method
Static Member
GetMinimumNumberOfDigits
Returns the minimum number of digits to be used for formating the Number parameter of all enumerable elements of the given document.
Public Method
GetMonitoredLinkElementIds
Provides the link instance IDs when the element is monitoring.
(Inherited from Element)
Public Method
GetMonitoredLocalElementIds
Provides the local element IDs when the element is monitoring.
(Inherited from Element)
Public Method
Static Member
GetNumberingSchema
Returns an instance of the specified Numbering Schema in the given document.
Public Method
GetNumberingSequences
Returns all numbering sequences within this numbering schema.
Public Method
GetNumbers
Returns all numbers currently used in the given numbering sequence
Public Method
GetOrderedParameters
Gets the parameters associated to the element in order.
(Inherited from Element)
Public Method
GetParameter
Retrieves a parameter from the element given identifier.
(Inherited from Element)
Public Method
GetParameterFormatOptions
Returns a FormatOptions override for the element Parameter, or a default FormatOptions if no override exists.
(Inherited from Element)
Public Method
GetParameters
Retrieves the parameters from the element via the given name.
(Inherited from Element)
Public Method
GetPhaseStatus
Gets the status of a given element in the input phase
(Inherited from Element)
Public Method
Static Member
GetSchemasInDocument
Returns a set of Ids of all Numbering Schema elements for a given document.
Public Method
GetSubelements
Returns the collection of element subelements.
(Inherited from Element)
Public Method
GetType
Gets the Type of the current instance.
(Inherited from Object)
Public Method
Code Example
GetTypeId
Returns the identifier of this element’s type.
(Inherited from Element)
Public Method
GetValidTypes.
Obtains a set of types that are valid for this element.
(Inherited from Element)
Public Method
HasPhases
Returns true if this Element has the properties CreatedPhaseId and DemolishedPhaseId.
(Inherited from Element)
Public Method
IsCreatedPhaseOrderValid
Returns true if createdPhaseId and demolishedPhaseId are in order.
(Inherited from Element)
Public Method
IsDemolishedPhaseOrderValid
Returns true if createdPhaseId and demolishedPhaseId are in order.
(Inherited from Element)
Public Method
IsExternalFileReference
Determines whether this Element represents an external file.
(Inherited from Element)
Public Method
IsHidden
Identifies if the element has been permanently hidden in the view.
(Inherited from Element)
Public Method
IsMonitoringLinkElement
Indicate whether an element is monitoring any elements in any linked models.
(Inherited from Element)
Public Method
IsMonitoringLocalElement
Indicate whether an element is monitoring other local elements.
(Inherited from Element)
Public Method
IsPhaseCreatedValid
Returns true if createdPhaseId is an allowed value for the property CreatedPhaseId in this Element.
(Inherited from Element)
Public Method
IsPhaseDemolishedValid
Returns true if demolishedPhaseId is an allowed value for the property DemolishedPhaseId in this Element.
(Inherited from Element)
Public Method
Static Member
IsValidPartitionName
Tests if the given string can be used as a name for a numbering partition.
Public Method
IsValidType(ElementId)
Checks if given type is valid for this element.
(Inherited from Element)
Public Method
LookupParameter
Attempts to find a parameter on the element which has the given name.
(Inherited from Element)
Public Method
MergeSequences
Merges all elements from given numbering sequences to a new sequence.
Public Method
Code Example
MoveSequence
Moves all elements of a numbering sequence from one partition to another.
Public Method
RefersToExternalResourceReference
Determines whether this Element uses external resources associated with a specified external resource type.
(Inherited from Element)
Public Method
RefersToExternalResourceReferences
Determines whether this Element uses external resources.
(Inherited from Element)
Public Method
RemoveGaps
Removes gaps, if any, in a numbering sequence
Public Method
SetEntity
Stores the entity in the element. If an Entity described by the same Schema already exists, it is overwritten.
(Inherited from Element)
Public Method
Static Member
SetMinimumNumberOfDigits
Sets a new value for the minimum number of digits to be used for formating the Number parameter of all numbered elements of the given document.
Public Method
ShiftNumbers
Shifts all numbers in the sequence so the starting number has the given value.
Public Method
ToString
Returns a string that represents the current object.
(Inherited from Object)
Remarks
Each NumberingSchema controls numbering of elements of one particular kind, typically of the same category such as Rebar or Fabric Reinforcement. Instances of NumberingSchema are also elements and there is always only one of each type in every Revit document. Available types of all built-in numbering schemas are enumerated in NumberingSchemaTypes class. At present, schema elements cannot be manually added, deleted, or copied. Attempts to do so will result in a failure warning and/or exceptions thrown.
Elements (e.g. Rebar) belonging to a particular schema (e.g. NumberingSchemaTypes.StructuralNumberingSchemas.Rebar) are organized and numbered in sequences. A sequence is a collection of elements that share the same numbering partition as defined by their respective values of the Partition parameter (NUMBER_PARTITION_PARAM). For a numbering sequence to exist it must contain at least one element. In other words, a sequence is established once there is at least one element of which the partition parameter has a value that differs from other elements (in the same numbering schema). If the last element is removed (deleted or moved to a different sequence) the then empty sequence ceases to exist.
Elements get assigned to sequences either upon their creation (based on the then current numbering partition value), or by explicitly modifying the Partition parameter of an element, or by using the AssignElementsToSequence method. It is highly recommended using that method over explicitly changing the Partition parameter, because the methods applies changes to sequences and element numbers immediately, while changed parameters get into effect only after the current transaction is closed.
In addition to directly or indirectly changing the Partition parameter of elements, numbering sequences can be reorganized by using methods of the NumberingSchema class. The MoveSequence method moves all elements of an existing sequence to a new sequence that does not exist yet in the schema, thus effectively renaming the Partition parameter on all the affected elements. The AppendSequence method removes all elements from one sequence and appends them to elements of another existing sequence while applying the matching policy. The method MergeSequences takes elements of all specified sequences and moves them all into a newly created sequence. All the merged elements will be renumbered and matched as needed based on the matching algorithm.
Elements in different sequences are numbered independently, meaning that there may be elements with the same number in two sequences even though the elements are different. Likewise, there may be perfectly identical elements in two or more sequences bearing different numbers. However, within each one numbering sequence any two identical elements will always have the same number, while different elements will never have the same number within a numbering sequence. Revit refers to this rule as the matching policy.
Enumerable elements are always numbered automatically upon their creation. Each new element will get an incrementally higher number. However, thanks to the matching policy, new elements that match existing elements within the same sequence will get the same number assigned. Elements will keep their assigned numbers as long as it is possible. This means, for example, that if some previously created elements (e.g. Rebar) get deleted, all remaining elements (within the same numbering sequence) will keep their numbers, which may result in gaps in the respective numbering sequence. Gaps can be removed by invoking RemoveGaps for sequences in which gaps are not desired.
Numbers are stored as values of a numbering parameter on each numbered element. The Id of the parameter is obtained by querying the NumberingParameterId property. The value of the number can be obtained by querying the parameter for the respective numbered element. The value is read-only and thus cannot be set; it is always computed based on relations of elements across numbering partitions and the matching policy within the numbering sequence of each element.
Even though numbers are always assigned automatically to all elements of a schema, the method ChangeNumber gives the programmer a way to explicitly overwrite a specific number as long as the new number is unique in the numbering sequence. The caller specifies a number to be changed and a new value that is to be applied, providing the value does not exist yet in the same numbering sequence. Although this operation may seem rather limited, it provides the programmer with freedom to change practically any number even if it may be achieved in multiple steps.
Example
/// <summary>/// This function consolidates the numbers on Rebar elements by removing/// any remaining gaps in numbering sequences and setting the start number/// of each sequence so numbers in sequences do not overlap./// </summary>/// <param name="document">The document in which Rebar numbers are to be consolidated</param>private void ConsolidateRebarNumbers(Document document){ // Obtain a schema object for a particular kind of elements NumberingSchema schema = NumberingSchema.GetNumberingSchema(document,NumberingSchemaTypes.StructuralNumberingSchemas.Rebar);
// Collect the names of partitions of all the numbering sequences currently contained in the schema IList<string> sequences = schema.GetNumberingSequences();
using (Transaction transaction = new Transaction(document)) { // Changes to numbers must be made inside a transaction transaction.Start("Consolidate Rebar Numbers");
// First we make sure numbers in all sequences are consecutive // by removing possible gaps in numbers. Note: RemoveGaps does // nothing for a sequence where there are no gaps present.
// We also want to find what the maximum range of numbers is // of all the sequences (the one the widest span of used numbers) int maxRange = 0;
foreach (string name in sequences) { schema.RemoveGaps(name);
// Here we use First() from the Linq extension. // There is always at least one range in every sequence, // and after gaps are closed there is exactly one range. IntegerRange range = schema.GetNumbers(name).First(); int rangeSpan = 1 + (range.High - range.Low); if (rangeSpan > maxRange) { maxRange = rangeSpan; } }
// Next we give sequences different start numbers // starting with 100 and then stepping by at least // the maximum range we found in the previous step int startNumber = 100;
// We round the range up to the closest 100 int step = 100 * (int)((maxRange + 99) / 100.0);
foreach (string name in sequences) { schema.ShiftNumbers(name, startNumber); startNumber += step; }
transaction.Commit(); }}