Ace Scheldule indeed.
Here's the renumbering part in an overly functional style:
type acadApp = Autodesk.AutoCAD.ApplicationServices.Application
type acadObjectId = Autodesk.AutoCAD.DatabaseServices.ObjectId
module Seq =
let zipConst x =
Seq.initInfinite (fun _ -> x) |> Seq.zip
let updateScheduleNumbering scheduleId lowerLimit upperLimit increment =
let doc = acadApp.DocumentManager.MdiActiveDocument
let db = doc.Database
let ed = doc.Editor
use tr = db.TransactionManager.StartTransaction()
let inline OPEN oId = tr.GetObject(oId, OpenMode.ForRead, false, false) :?> _
let MAPOPEN oids = oids |> Seq.cast<acadObjectId> |> Seq.map OPEN
let scheduleTbl : ScheduleTable = OPEN scheduleId
MAPOPEN scheduleTbl.SelectionSet
|> Seq.collect (PropertyDataServices.GetPropertySets >> MAPOPEN)
|> Seq.collect (fun (propSet : PropertySet) ->
let propSetDef : PropertySetDefinition =
OPEN propSet.PropertySetDefinition
propSetDef.Definitions
|> Seq.cast<PropertyDefinition>
|> Seq.zipConst propSet )
|> Seq.map (fun (propSet, propDef) ->
(propSet, propDef.Id), propDef.DataType )
|> Seq.filter (fun (_, dataType) ->
dataType = Autodesk.Aec.PropertyData.DataType.AutoIncrement )
|> Seq.map (fun ((propSet, pid), _) ->
(propSet, pid), (propSet.GetAt pid :?> int) )
|> Seq.filter (fun (_, value) ->
value >= lowerLimit && value <= upperLimit )
|> Seq.iter (fun ((propSet, pid), value) ->
propSet.UpgradeOpen()
propSet.SetAt(pid, value + increment) )
tr.Commit()