2027 Class
Changes 8
C

NumberingSchema

Description:
A class to support assigning numbers to elements for the purpose of tagging and scheduling them. Complete configuration settings for formatting.
Remarks:

Each NumberingSchema controls numbering for elements. Instances of NumberingSchema are also elements.

Elements belonging to a particular schema based on a filter ScopeDefiningFilter. And are organized and numbered in sequences. A sequence is a collection of elements that share the same numbering partition as defined by their respective partition matching criteria. 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 partitioning parameters have different values then on the other elements. If the last element is removed (deleted or if it's partitioning parameters have values corresponding to another partition) the then empty sequence ceases to exist.

Elements get assigned to sequences either upon their creation (based on the then current numbering partition criteria)

In addition to directly or indirectly changing the partitioning criteria, numbering sequences can be reorganized by using methods of the NumberingSchema class. The SetMatchingParameters method changes the parameters used to assign the same number to multiple elements in the same schema. The SetPartitioningParameters method sets the parameters used in the partitioning criteria allowing a set of elements that have the same value for this set of parameters to be numbered independently. The property MatchGeometry is used to match the elements in this schema based on their geometry. The property UseBuiltInMatching is used to match the elements based on internal logic specific for that element. All the matched or partitioned 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 matched 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 for the value of the parameter for the respective numbered element. If set the system will try to maintain consistency and if the input number is in use an actionable warning will be displayed.

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. The input for this method is not the formatted version of the number, but the integer value used in the generation of the formatted number. To obtain the non-formatted numbers see GetNumbers and GetNumberingInfoForReferences

Formatting is controlled trough the NumberingFormatSettings. To get access to this object see GetFormatting. and to set it SetFormatting. The formatting getter returns a copy of the NumberingFormatSettings, if modified, the setter must be used for the changes to be applied.

Inheritance Hierarchy:
System.Object
  Autodesk.Revit.DB.Element
    Autodesk.Revit.DB.NumberingSchema
public class NumberingSchema : Element
        /// <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 
#pragma warning disable CS0618 // Type or member is obsolete
         NumberingSchema schema = NumberingSchema.GetNumberingSchema(document,NumberingSchemaTypes.StructuralNumberingSchemas.Rebar);
#pragma warning restore CS0618 // Type or member is obsolete

         // 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();
            }
        }
Name Return Type Description Inherited From
M AddMatchingParameter(NumberingParameter) None Add a new parameter to the matching criteria for this numbering schema.
M AddPartitioningParameter(NumberingParameter) None Add a parameter to be used for partitioning elements in this schema.
M AppendSequence(String, String) None Obsolete. Appends all elements of one numbering sequence to the end of another sequence.
M ApplyExternalSorting(String, IDictionary<ReferenceInt32>) None Applies an externally defined sort order to elements in a partition by assigning specific numbers.
M ArePhasesModifiable() Boolean Returns true if the properties CreatedPhaseId and DemolishedPhaseId can be modified for this Element. (Inherited from Element ) Element
M AssignElementsToSequence(ISet<ElementId>, String) None Obsolete. Assigns the input elements to a sequence identified by the given partition name.
M CanBeHidden(View) Boolean Indicates if the element can be hidden in the view. (Inherited from Element ) Element
M CanBeLocked() Boolean Identifies if the element can be locked. (Inherited from Element ) Element
M CanChangePartitioningValue() Boolean Returns true if this schema has partitions based on one parameter, that parameter is of type Text and it is modifiable.
M CanDeleteSubelement(Subelement) Boolean Checks if given subelement can be removed from the element. (Inherited from Element ) Element
M CanHaveTypeAssigned() Boolean Identifies if the element can have a type assigned. (Inherited from Element ) Element
M ChangeNumber(String, Int32, Int32) IList<ElementId> Replaces an existing number with a another one that does not exists in the same partition.
M ChangePartitioningValue(String, String) None Moves all elements of a numbering sequence from one partition to another.
M ChangeTypeId(ElementId) ElementId Changes the type of the element. (Inherited from Element ) Element
M Create(Document, String, ElementId, ElementId, Int32) NumberingSchema Creates a numbering schema and registers it with a document.
M DeleteEntity(Schema) Boolean Deletes the existing entity created by %schema% in the element (Inherited from Element ) Element
M DeleteSubelement(Subelement) Boolean Removes a subelement from the element. (Inherited from Element ) Element
M DeleteSubelements(IList<Subelement>) Boolean Removes the subelements from the element. (Inherited from Element ) Element
M Dispose() None (Inherited from Element ) Element
M Equals None Determines whether the specified object is equal to the current object. (Inherited from Object ) Object
M EvaluateAllParameterValues() IList<EvaluatedParameter> Evaluates all the parameters' values of the element. (Inherited from Element ) Element
M EvaluateParameterValues(ISet<ElementId>) IList<EvaluatedParameter> Evaluate the parameters' values of the element on the given parameter ID set. (Inherited from Element ) Element
M FilterCompatibleOutputParameters(Document, ISet<NumberingParameter>, ISet<ElementId>, ElementId) ISet<NumberingParameter> Returns the subset of input parameters that are valid as numbering output parameters for the specified categories or filter.
M FilterToNumberableCategories(ISet<ElementId>, Document) ISet<ElementId> Filters a set of categorie IDs to only does that are usable in numbering.
M GetAvailableParameters(ElementId, Document) ISet<NumberingParameter> Get all the available parameters that can be used with numbering.
M GetCategoriesWitheBuiltInMatching() ISet<ElementId> Returns a set of all the categories ids that support built-in matching.
M GetDependentElements(ElementFilter) IList<ElementId> Get all elements that, from a logical point of view, are the children of this Element. (Inherited from Element ) Element
M GetEntity(Schema) Entity Returns the existing entity corresponding to the Schema if it has been saved in the Element, or an invalid entity otherwise. (Inherited from Element ) Element
M GetEntitySchemaGuids() IList<Guid> Returns the Schema guids of any Entities stored in this element. (Inherited from Element ) Element
M GetExternalFileReference() ExternalFileReference Gets information pertaining to the external file referenced by the element. (Inherited from Element ) Element
M GetExternalResourceReference(ExternalResourceType) ExternalResourceReference Gets the ExternalResourceReference associated with a specified external resource type. (Inherited from Element ) Element
M GetExternalResourceReferenceExpanded(ExternalResourceType) IList<ExternalResourceReference> Gets the collection of ExternalResourceReference associated with a specified external resource type. (Inherited from Element ) Element
M GetExternalResourceReferences() IDictionary<ExternalResourceType,ExternalResourceReference> Gets the map of the external resource references referenced by the element. (Inherited from Element ) Element
M GetExternalResourceReferencesExpanded() ExternalResourceType Gets the expanded map of the external resource references referenced by the element. (Inherited from Element ) Element
M GetFormatting() NumberingFormatSettings Get the configuration for formatting.
M GetGeneratingElementIds(GeometryObject) ICollection<ElementId> Returns the ids of the element(s) that generated the input geometry object. (Inherited from Element ) Element
M GetGeometryObjectFromReference(Reference) GeometryObject Retrieve one geometric primitive contained in the element given a reference. (Inherited from Element ) Element
M GetHashCode None Serves as the default hash function. (Inherited from Object ) Object
M GetMatchingParameters() ICollection<NumberingParameter> Returns the parameters used for matching elements in this schema.
M GetMaterialArea(ElementId, Boolean) Double Gets the area of the material with the given id. (Inherited from Element ) Element
M GetMaterialIds(Boolean) ICollection<ElementId> Gets the element ids of all materials present in the element. (Inherited from Element ) Element
M GetMaterialVolume(ElementId) Double Gets the volume of the material with the given id. (Inherited from Element ) Element
M GetMinimumNumberOfDigits(Document) Int32 Obsolete. Returns the minimum number of digits to be used for formating the Number parameter of all enumerable elements of the given document.
M GetMonitoredLinkElementIds() IList<ElementId> Provides the link instance IDs when the element is monitoring. (Inherited from Element ) Element
M GetMonitoredLocalElementIds() IList<ElementId> Provides the local element IDs when the element is monitoring. (Inherited from Element ) Element
M GetNumberingInfoForReferences(Document, IList<Reference>) IList<NumberedReferenceInfo> Get all the ElementInfos from a given document related to a set of references.
M GetNumberingSchema(Document, NumberingSchemaType) NumberingSchema Obsolete. Returns an instance of the specified Numbering Schema in the given document.
M GetNumberingSchema(Document, String) NumberingSchema Returns an instance of the specified Numbering Schema in the given document.
M GetNumberingSequences() IList<String> Returns all numbering sequences within this numbering schema.
M GetNumberingSequencesInfos() IList<NumberingSequenceInfo> Returns all numbering sequences infos within this numbering schema.
M GetNumberOfPartitions() Int32 Get the number of partitions managed by the schema.
M GetNumbers(String) IList<IntegerRange> Returns all numbers currently used in the given numbering sequence
M GetOrderedParameters() IList<Parameter> Gets the parameters associated to the element in order. (Inherited from Element ) Element
M GetParameter(ForgeTypeId) Parameter Retrieves a parameter from the element given identifier. (Inherited from Element ) Element
M GetParameterFormatOptions(ElementId) FormatOptions Returns a FormatOptions override for the element Parameter, or a default FormatOptions if no override exists. (Inherited from Element ) Element
M GetParameters(String) IList<Parameter> Retrieves the parameters from the element via the given name. (Inherited from Element ) Element
M GetPartitioningParameters() ICollection<NumberingParameter> Get the set of parameters used by this numbering schema to segregate a set of elements to a separate set of element where matching and numbering will be performed.
M GetPhaseStatus(ElementId) ElementOnPhaseStatus Gets the status of a given element in the input phase (Inherited from Element ) Element
M GetSchemasInDocument(Document) ISet<ElementId> Returns a set of Ids of all Numbering Schema elements for a given document.
M GetScopeDefiningCategories() ISet<ElementId> Get the categories that define the scope of this numbering schema.
M GetSubelements() IList<Subelement> Returns the collection of element subelements. (Inherited from Element ) Element
M GetType None Gets the Type of the current instance. (Inherited from Object ) Object
M GetTypeId() ElementId Returns the identifier of this element's type. (Inherited from Element ) Element
M GetUseBuiltInMatchingForCategories() ISet<ElementId> Get the set of categories where the built-in matching criteria is used.
M GetValidCategoriesForNumbering(Document) ICollection<ElementId> Gets a list of categories that can be used for a numbering.
M GetValidTypes() ICollection<ElementId> Obtains a set of types that are valid for this element. (Inherited from Element ) Element
M HasPhases() Boolean Returns true if this Element has the properties CreatedPhaseId and DemolishedPhaseId. (Inherited from Element ) Element
M IsCreatedPhaseOrderValid(ElementId) Boolean Returns true if createdPhaseId and demolishedPhaseId are in order. (Inherited from Element ) Element
M IsDemolishedPhaseOrderValid(ElementId) Boolean Returns true if createdPhaseId and demolishedPhaseId are in order. (Inherited from Element ) Element
M IsExternalFileReference() Boolean Determines whether this Element represents an external file. (Inherited from Element ) Element
M IsHidden(View) Boolean Identifies if the element has been permanently hidden in the view. (Inherited from Element ) Element
M IsMonitoringLinkElement() Boolean Indicate whether an element is monitoring any elements in any linked models. (Inherited from Element ) Element
M IsMonitoringLocalElement() Boolean Indicate whether an element is monitoring other local elements. (Inherited from Element ) Element
M IsPhaseCreatedValid(ElementId) Boolean Returns true if createdPhaseId is an allowed value for the property CreatedPhaseId in this Element. (Inherited from Element ) Element
M IsPhaseDemolishedValid(ElementId) Boolean Returns true if demolishedPhaseId is an allowed value for the property DemolishedPhaseId in this Element. (Inherited from Element ) Element
M IsValidPartitionName(String, String%) Boolean Tests if the given string can be used as a name for a numbering partition.
M IsValidType(ElementId) Boolean Checks if given type is valid for this element. (Inherited from Element ) Element
M LookupParameter(String) Parameter Attempts to find a parameter on the element which has the given name. (Inherited from Element ) Element
M MergeSequences(IList<String>, String) None Obsolete. Merges all elements from given numbering sequences to a new sequence.
M MoveSequence(String, String) None Obsolete. Moves all elements of a numbering sequence from one partition to another.
M RefersToExternalResourceReference(ExternalResourceType) Boolean Determines whether this Element uses external resources associated with a specified external resource type. (Inherited from Element ) Element
M RefersToExternalResourceReferences() Boolean Determines whether this Element uses external resources. (Inherited from Element ) Element
M RemoveGaps(String) None Removes gaps, if any, in a numbering sequence
M RemoveMatchingParameter(NumberingParameter) None Remove a parameter from the set of parameters used in matching elements so they would get the same number.
M RemovePartitioningParameter(NumberingParameter) None Remove a parameter that is used for partitioning elements in this schema.
M SetEntity(Entity) None Stores the entity in the element. If an Entity described by the same Schema already exists, it is overwritten. (Inherited from Element ) Element
M SetFormatting(NumberingFormatSettings) None Set the NumberingFormatSettings for this schema.
M SetMatchingParameters(ISet<NumberingParameter>) None Sets the parameters used by a specific numbering schema for matching elements so they would get the same number.
M SetMinimumNumberOfDigits(Document, Int32) None Obsolete. 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.
M SetPartitioningParameters(ISet<NumberingParameter>) None Set the set of parameters used by this numbering schema to segregate a set of elements to a separate set of element where matching and numbering will be performed.
M SetScopeDefiningFilterAndOutputParam(ElementId, ElementId) None Sets the filter and the output parameter that is going to be used by this schema.
M SetUseBuiltInMatchingForCategories(ISet<ElementId>) None Use the built-in matching criteria for a set of categories if one is available for a given category.
M ShiftNumbers(String, Int32) None Shifts all numbers in the sequence so the starting number has the given value.
M SwapNumber(String, Int32, Int32) IList<ElementId> Replaces an existing number with a another one that exists in the same partition.
M ToString None Returns a string that represents the current object. (Inherited from Object ) Object
Name Return Type Description Inherited From
P AssemblyInstanceId ElementId The id of the assembly instance to which the element belongs. (Inherited from Element ) Element
P BoundingBox BoundingBoxXYZ Retrieves a box that circumscribes all geometry of the element. (Inherited from Element ) Element
P Category Category Retrieves a Category object that represents the category or sub category in which the element resides. (Inherited from Element ) Element
P CreatedPhaseId ElementId Id of a Phase at which the Element was created. (Inherited from Element ) Element
P DemolishedPhaseId ElementId Id of a Phase at which the Element was demolished. (Inherited from Element ) Element
P DesignOption DesignOption Returns the design option to which the element belongs. (Inherited from Element ) Element
P Document Document Returns the Document in which the Element resides. (Inherited from Element ) Element
P Enabled bool True if the NumberingSchema is in use. False otherwise.
P Geometry GeometryElement Retrieves the geometric representation of the element. (Inherited from Element ) Element
P GroupId ElementId The id of the group to which an element belongs. (Inherited from Element ) Element
P HasRoomRelatedParameters bool Returns true if in the partitioning, matching or formatting there are parameters that require room associations.
P Id ElementId A unique identifier for an Element in an Autodesk Revit project. (Inherited from Element ) Element
P IsModifiable bool Identifies if the element is modifiable. (Inherited from Element ) Element
P IsTransient bool Indicates whether an element is transient or permanent. (Inherited from Element ) Element
P IsValidObject Boolean Specifies whether the .NET object represents a valid Revit entity. (Inherited from Element ) Element
P LevelId ElementId The id of the level associated with the element. (Inherited from Element ) Element
P Location Location This property is used to find the physical location of an element within a project. (Inherited from Element ) Element
P MatchGeometry bool If true the matching for this numbering schema will consider the geometry of the input elements.
P MaximumStartingNumber int A static property defining the maximum number a numbering sequence can use as its starting number (the lowest number in the sequence).
P Name string A human readable name for the Element. (Inherited from Element ) Element
P NumberingParameterId ElementId The output parameter where the numbering schema generate the final number can now also be set.
P OwnerViewId ElementId The id of the view that owns the element. (Inherited from Element ) Element
P Parameter[BuiltInParameter] Parameter Retrieves a parameter from the element given a parameter id. (Inherited from Element ) Element
P Parameter[Definition] Parameter Retrieves a parameter from the element based on its definition. (Inherited from Element ) Element
P Parameter[Guid] Parameter Retrieves a parameter from the element given a GUID for a shared parameter. (Inherited from Element ) Element
P Parameters ParameterSet Retrieves a set containing all of the parameters that are contained within the element. (Inherited from Element ) Element
P ParametersMap ParameterMap Retrieves a map containing all of the parameters that are contained within the element. (Inherited from Element ) Element
P Pinned bool Identifies if the element has been pinned to prevent changes. (Inherited from Element ) Element
P Priority int The priority for this numbering schema.
P SchemaType NumberingSchemaType Obsolete. Uniquly identifies this numbering schema.
P ScopeDefiningFilter ElementId The id of the filter that determines the scope for this schema.
P UniqueId string A stable unique identifier for an element within the document. (Inherited from Element ) Element
P VersionGuid Guid Get the element version Guid. (Inherited from Element ) Element
P ViewSpecific bool Identifies if the element is owned by a view. (Inherited from Element ) Element
P WorksetId WorksetId Get Id of the Workset which owns the element. (Inherited from Element ) Element