Skip to content

Parts ​

Partly availableSome of what this page describes is in DimSum today and some is still coming. Parts marked Coming are designed but not built yet.

Parts (formerly "sub items") are the lines under a takeoff item — materials, labor, anything you count — each with its own Qty formula and the default properties, so one drawn wall or floor becomes a full material list, built the way your trade works.

Overview ​

A takeoff item measures; parts turn the measurement into things you buy or pay for. A Floor Sheathing area becomes sheets of subfloor, tubes of glue, boxes of nails and, if you want it, hours of labor. A Data Drop point becomes a bracket, a jack, a faceplate and install time.

Parts were formerly called Sub Items in the plan. Every screen now says Part.

What you get today:

  • A part lives under an item or under another part. There is no depth limit.
  • Every part has a Qty. It starts as a formula — the item's quantity for a top-level part, the parent's Qty for a nested one — and you change it to whatever your trade needs.
  • "This list can be added to, but never removed form": none of them can be deleted, and you can add properties of your own.
  • A part has a Type. It is always Part; Linear, Area and Point parts (tools inside tools) are still Coming.
  • A part can be saved to a library on its own and loaded into any other tool, with its own parts and its own Qty formula — see Save a part and load it into another tool.
  • A part has a Color and an Opacity, but nothing draws a part yet.
  • Parts are not listed in the Project tree. An item row there shows a small part-count badge. You see and edit parts in the Properties panel, the Takeoff list and the Estimating tab.

Three rules decide the maths, and all three are yours:

  • Nothing is rounded unless you ask. Round with ROUNDUP() in the Qty formula. It is gone — see Round a quantity.)*
  • Waste goes where your formula puts it. There is no built-in Waste %. Write * 1.10, or add a Waste % property of your own.
  • Labor is never added for you. Build it as its own part, or as a number on a material part, or leave it out.

Every part carries Cost Each, Markup %, Price Each, Tax Rate and Taxable, and DimSum does no maths between them.

Where to find it ​

WhereWhat you do thereStatus
Properties panel → Parts (n) (right panel, item selected)Add parts with + Part, run the part actions, click a part to open it
Part editor (click a part in the panel)Name, Type, Qty and the rest of the part's properties, and its own child parts
Takeoff list (left panel) → expand an itemThe item's measured chips, then its parts with their Qty and name
Project treeA part-count badge on the item row (hover: "3 parts"). Parts are not listed
Estimating tabEach item opens into its parts, with their Division and Trade, and a column for every number they carry— see Estimating tab
Tool Designer → a tool → Parts tabBuild the parts into a tool, with the same eight actions, Load a part… and Save to a folder…— see Tool Designer
Tool Designer → a tool → Parts tab → +A dropdown: New part or Load part… — at the top of the tab and, with a part selected, beside it. Load part… is Load a part… moved up from the bottom of the tab, its source box reading FROM FOLDER. its choices name the place — Tools → Custom → Framing, Materials → Custom → My Tools, DimSum Defaults (read-only) — and a material folder's rows are listed under MATERIALS. each material row is marked with what it is missing (missing Cost Each), and clicking one loads it straight awaymaterial folders ****
Tool Designer → a part loaded from a table row → the strip across the top of its paneLinked to Lumber2 → STUD-92 · Unlink; after Unlink, Not linked — loaded from Lumber2 (Linked to its row)
Tool Designer → a tool → Parts tab → + → Advanced partA part tied to one Material Library table, with its filters and sort; the + reads New part · Advanced part · Load part… (The Advanced Part)
A job → a placed Advanced Part → Properties panelWhat it matched and why, read-only, under the part's properties — Filters are set on the tool, in the Tool Designer.
Tool Designer → Refresh in the bottom bar, or opening the Tools tabThe Update from the Material Library screen, for loaded parts whose row or table has changed — Refresh reads 1 behind while something is
Tool Designer → PlaygroundDraw with the tool you are designing, and every property and every part of it follows the drawing— it replaces's Test Bench, whose sample boxes are still under the sheet
Set from a table… on a part row's menuSet the part's properties from a table row, and keep them following it— see Dynamic Lists & tables
Linked the part to one of the job's materials, read with {Material > …}— removed, with the job's own materials (Material)
Tool Designer → Materials → Add as partMake a saved part from a material, following its row — one row, one part per folder, a second refused by name. Gone: Add as a part left the Material Library's table rows — — and a material becomes a part through the Parts tab's + → Load part…the refusal and the what it made and where line, ****
Load a part… → the Materials groupPlace a material out of a library straight onto an item, with no import into the job first — searched by the same box, and a row short of the material standard marked table tied, so it is visibly tied before you pick it.: the Tool Designer's Load part… keeps its From folder, marks each material row with what it is missing of the material standard — the same label — and loads a row on a click. A material in place of any part waits for a later build— see Material Library
Tools panel → DimSum Defaults → PartsThe saved part Cat6 Network Cable, ready to load— see DimSum Defaults
Tool Settings dialog → PartsParts in the item's settings dialogComing The dialog with Form / Input / Advanced and no Parts tab; parts stay in the Properties panel

How to use it ​

Add a part ​

  1. Select the item: on the canvas, in the Project tree or in the Takeoff list.
  2. In the Properties panel, find Parts (0) and click + Part.
  3. DimSum adds a part called New Part (then New Part 2, New Part 3…), Type Part, and opens it. Its Qty is the formula {Item > Qty}: the item's own quantity (its Linear for a Linear item, its Area for an Area item, its Point Count for a Point item).
  4. Type a Name, e.g. Studs.
  5. Click fx on Qty and write the formula, e.g. ROUNDUP({Item > Linear} / {Item > O.C.}, 0) + 1. The line under the box shows the result as you type. Press Enter or Apply. See Formula language.
  6. Set the unit if ea is not right. It is the small box beside the Qty number, on the same row: type sheet, box, tube, roll, hr, lf, cy, or anything you like — the box suggests the common ones, and takes whatever you type. It is a unit, never a formula.
  7. Say what it is in Classification: pick a Division (06 Wood, Plastics, and Composites) and a Trade (Framing) from their lists, or type your own. The four Classification properties are already filled in from the item, in grey; fill one in only when this part is different.

A part name has to be unique among its siblings (ignoring capitals), because a formula finds a part by its name. It can't contain { } > (the three characters a reference is made of), nor [ ] \ or :. A / is fine, so Subfloor 3/4" T&G is a good name — and {Parent > Subfloor 3/4" T&G > Qty} reaches it with nothing to escape. Up to 120 characters.

The part editor ​

Clicking a part opens it in the Properties panel, top to bottom:

  1. Where you are: Ext Wall 2x6 › Plates › Nails, each name clickable, and Back.
  2. Name and Type.
  3. Enabled and Qty, with the unit in a box beside the Qty number — always shown.
  4. The eight part action buttons (below).
  5. The part's properties in groups — General, Quantity, Cost, Product, Classification, Appearance, 3D, Audit, then Custom — with Only set / Show all at the top. Only set is the default: it lists what is set on this part, plus anything in ERROR or with a warning, and shows a count (n of m).
  6. + Add property at the end of the Custom group.
  7. Parts (n) with its own + Part, for this part's children, and beside it Load a part… and Save to a folder….

A formula that already names one still reads blank, with its warning. A material is a part loaded from a Material Library row in the Tool Designer (Linked to its row). What it was:* Material sat beside Type: none linked, or the material's name, with Pick… and Unlink. Pick… listed the job's own materials, grouped by the list they came from, with a search box; rows the last import did not carry were marked and still linkable. Once linked, {Material > Cost} — any column of that list — read on this part. The job's materials were made in Project Settings → Materials, gone (Materials Library).

A part placed from a library holds its own numbers. Load a part… can now take a material straight out of a library, and what lands on the item is literal values plus three names — the library's, the list's, and the row's key. No list or table comes with it, a formula doing arithmetic on a table value is frozen with it ({Table > Lumber > Cost} * 2 arrives as 8.42 * 2), and the part reads the same numbers on any machine with no library present. The names are for one thing: while that library is open, the update screen can find the row again and offer the newer numbers, every instance of it, with one Ctrl+Z over the batch — and an instance you leave unticked keeps its number and is offered again next time. Linking with Pick… was the other, older mechanism, reading one field from the job's own materials — removed.

Hover a property's name to read its hint. The right panel's left edge is a drag handle, because parts need room. Double-click it to go back to the default width.

Linked to its row, in the Tool Designer ​

A part loaded into a tool from a Material Library row — + → Load part…, From folder Materials → Custom → ‹folder›, click the row — is a frozen copy with the folder's, table's and row's names, as and it stays linked: when that row changes (a price — Cost Each 3.48 → 3.79), or its table's column settings do (a Type, Units or Group — Item # — Type: Text → Number), or a column is added or removed, the Tool Designer asks on the Update from the Material Library screen. That screen opens by itself when you come to the Tools tab with something behind, and from the bottom bar's Refresh — 1 behind — any time; tick what to take, Update selected (1) or Skip (remembered per version), one Undo per update — Undo Update 1 part from Lumber2 in Framing. A value that won't convert to a column's new type is kept (Item # STUD-92 stays), and a removed column is offered as removed, the part keeping its value unless you take it.

Across the top of a linked part's pane: Linked to Lumber2 → STUD-92 (the table, and the row's key) · Unlink. Unlink forgets the names as one Undo — Undo Unlink from Lumber2 in Framing; the part's values stay as they are and it is never asked again, and the strip reads Not linked — loaded from Lumber2. Full detail: Tool Designer → Parts stay linked.

A job is asked separately: a part placed into a job with its tool keeps the job's frozen numbers and the job's own update screen, as above — and that screen can update parts; before, they came through it labelled wrong and could not be updated.

When the tool changes, a job is asked ​

Placing a tool copies its parts onto the item, so changing the tool's parts afterwards changes no job by itself. a job opening with anything behind shows its update screen — titled Updates when any tool is behind — with a group per changed tool (Critter · Framing · version 28 → 31 — 2 items) that lists what changed once for the tool: New part: Top Plate, Removed part: Blocking, a part renamed, a part's formula old → new (Studs › Qty), a property added or removed. Every item placed from that tool has a tick; Update selected is one Undo (Update 2 items from Critter), Skip skips that tool version for every item placed from it, and nothing is written until you say so.

  • What you changed on a placed item's parts stays yours — a value you typed or picked, or one that no longer matches the version you placed from, is kept, and the screen says so under the item.
  • A part you deleted from the item comes back only if the tool adds it new. A part you renamed keeps your name.
  • A tool whose folder isn't on this machine is never offered, and nothing in the job changes.

Full detail: Dynamic Lists → A changed tool.

The Advanced Part ​

This is what List Matching became.*

Load part… brings in one row you chose (Linked to its row). An Advanced Part chooses the row itself, from the item's answers: it is tied to one Material Library table, filters that table, and fills itself from the row left first in line. Change the wall's height and it picks again.

  • A part with a table, filters and a sort. Its Type is still Part. In the Tool Designer the Parts tab's + drops down New part · Advanced part · Load part…; the new part is called Advanced part, and its row in the parts tree carries a small filter icon.
  • Where it's set: a pane at the top of the part, above its properties — Table, what it matched, Filters, Sort and Try it. In a job the same pane is read-only, under the part's properties: Filters are set on the tool, in the Tool Designer.
  • It must name one table. Until it does, the Table box reads Pick a table… and the part says Pick a table from the Material Library — until it has one, this part matches nothing. — never a silent blank.
  • Only the table's columns are filled by the match. Every column of its table is a property of the part, filled from the matched row — the column that names the row included, a column called Name left out. Everything else is a regular part's — its Qty and Qty formula, its children, a custom property, a note — set exactly as on any other part.
  • Filters, empty to start, each a row of Column (Stock Length, Call Size) · Compare (equals, the default, at least, at most, contains) · Input (Property — picked with Pick…, the Property Picker, and shown as This item › Height, This part › … or The job › … — or Value, typed) · Only when (optional, a condition formula; blank means always). They combine: a row has to pass every filter that applies. Numbers compare in the column's unit (10' equals 120 in); text ignores capitals and end spaces. A property the match itself writes can't be an input: Height is this part's own, and the match writes it — pick This item › Height instead.
  • A sort (optional) — Stock Length, smallest first — so at least takes the shortest board that fits. Blank is the table's own order.
  • One row left is the part. Several: the first in line. None: flagged No material matches these conditions — Stock Length equals Height left nothing. — in its pane, with a ⚠ on its tree row and as a Material match warning in Needs attention — with its table properties kept as they last were. It always says what it picked: Matched Lumber3 → 2X6-10 (1 of 6).
  • When it matches: at placement, after the tool's Form questions; again whenever an input changes on the item, at once, inside the same Undo as the edit, and a notice says what changed — Studs matched Lumber3 → 2X6-12 (1 of 5). In the Tool Designer, Try it shows which row sample inputs would match.
  • Linked like any pull: frozen values plus the three names, so a job never needs the material folder. A change to the table is asked on the update screen — a new price under the same row, or Matched row 2X6-12 → 2X6-11 when another row now comes first; a table change that leaves nothing matching is not offered. A re-match caused by the item's own inputs happens at once. An Advanced Part has no Linked to … · Unlink strip: its match is its link. With its folder not on this machine it keeps its values and says it can't be matched, unflagged.

the example: a wall with Height 10' and Stud Size 2x6, and a Studs Advanced Part on Lumber3 filtering Stock Length equals Height and Call Size equals Stud Size, matches 2X6-10 and reads its Cost Each, 7.95. At 9' nothing is exactly 9' and the part is flagged; with at least and a sort, smallest first, it is Matched Lumber3 → 2X6-10 (1 of 6). Full detail and the worked example: Dynamic Lists → The Advanced Part and the studs.

A part's Type: Part, Linear, Area or Point ​

A part's Type is one of Part · Linear · Area · Count. It says how the part behaves if it is placed on the canvas:

  • Part (the default) is a line under its item, counted by its Qty formula. Every part today is a Part.
  • Linear, Area and Point are listed but greyed, and picking one is refused. When they arrive, a part of one of these types is a tool of its own inside the item.

A part's Width is its own. On an item, {Width} and Line Width became one number with two names — but a part's Width is a different and ambiguous question, because a wall has plates, studs and sheathing and that is three widths. So nothing was aliased here: a tool author who means the studs writes {Studs > Width}.

Advanced Part is not a fifth type: it is a Part that picks its own row from a Material Library table (above).

The old types, Material · Labor · Equipment · Subcontract · Other, are gone. Whether a part is material or labor is said by its Trade and Division.

Nest a part (parent → child) ​

Glue depends on how many sheets you buy, so put it under the subfloor:

  1. Open Subfloor 3/4" T&G and click + Part in its Parts section (or pick it and use Add child).
  2. The new part's Qty starts as {Parent > Qty} — the parent's Qty.
  3. Change it to ROUNDUP({Parent > Qty} / 4, 0) for one tube per four sheets.

The eight part actions ​

ActionWhat it does
Add partA new part right after the picked one, at the same level (or at the end, with nothing picked)
Add childA new part inside the picked one, at the end
DuplicateA copy right after it, with everything under it, named Plates (2)
DeleteThe part and everything under it. Delete on a picked part row does the same
Move up / Move downOne place among its siblings
IndentUnder the part above it, as that part's last child
OutdentOut beside its parent, straight after it

The same eight are in three places: the button row above the parts list (it acts on the part you picked), right-click on a part row or its ⋯ button (the menu also has Open), and the button row in the part editor. Each one is one command and one Ctrl+Z. A button that can't run is greyed and says why when you hover, e.g. "Plates is already first".

Moving a part never breaks a formula that names a part. A formula that names a part keeps reaching that part after Indent, Outdent or a move, and the formula text is rewritten to match:

  • Studs' {Parent > Plates > Qty} * 2 becomes {Parent > Parent > Plates > Qty} * 2 when Studs is indented under Framing.
  • Outdenting Studs back gives {Parent > Plates > Qty} * 2 again.
  • Moving Plates itself under Framing makes it {Parent > Framing > Plates > Qty} * 2.

A reference that only climbs, such as {Parent > Qty}, means my parent, so it follows the move. Nails with ROUNDUP({Parent > Qty} / 4, 0), moved under Studs, counts Studs. The rewrite is part of the same Ctrl+Z as the move. Input Conditions that name a part are rewritten the same way.

Round a quantity: your formula ​

Rounding lives in the Qty formula. Wrap it in ROUNDUP(…, 0) for anything you buy whole, and leave it out for anything you don't.

WayStatusExample
In the formulaROUNDUP({Item > Area} * 1.10 / 32, 0) → 43 sheets
A named rounding preset (ROUNDTO, "Up to next 2 ft (even)")ComingSee DimSum Defaults
A smart tool's own Ordered Length settings (Beam, Joist)for the Beam tool: its Shortest Length, Longest Length, Length Step and Length Rules; the Joist tool had none (its Joist Material filtered on {Item > Longest Joist}). for the Joist tool: each joist has a Joist Length, rounded by Joist Length Rounding (default Up to even foot, so a 9' joist orders as 10'), and the fixed Joist part (renamed from Joist Material) is matched joist by joist, so its list link can filter on {Joist Length}Beam 13'-4" → ordered 14'

Write no rounding and the Qty is not rounded: 42.797 shows as 42.80 at the default 2 decimal places.

The Round Up checkbox is gone. There is now one way to round, not two, and it is visible in the formula where you can see it.

Add waste ​

There is no built-in Waste %. Two ways that work today:

  • In the formula: ROUNDUP({Item > Area} * 1.10 / 32, 0).
  • As your own property: on the item, + Add property → Waste %, type Percentage, value 10. Then the part reads it: ROUNDUP({Item > Area} * (1 + {Item > Waste %}) / 32, 0). Change the 10 to 5 and every part that uses it follows.

⚠ Don't apply waste twice. If the formula already has * 1.10, don't also multiply by a Waste % property.

Turn a part on or off ​

  • Untick Enabled. The part greys out, shows an Off tag, and is left out of every sum — on the Estimating tab, in its parent's SUM({Children > …}), everywhere. Its children go with it.
  • Or make it conditional: click fx on Enabled and write a test. With a checkbox property Glued on the item, {Item > Glued} includes the glue only when the box is ticked.

Price a part ​

Every part has a Cost group: Cost Each, Markup %, Price Each, Tax Rate and Taxable. They start blank (Taxable unticked), and DimSum never fills them, multiplies them or adds tax. Cost Each and Price Each are plain Numbers, shown without a $.

  1. Fill in what you know. Cost Each 4, Markup % 25 → 4.00 and 25.00%. Price Each stays blank.
  2. Write the maths you want. fx on Price Each: {Cost Each} * (1 + {Markup %}) → 5.00.
  3. A rate for the whole job: Project Settings → Job properties → + Add property: Labor Rate, Number, 65 → 65.00. Give a part's Tax Rate the formula {Job > Tax Rate} to follow a job-wide tax rate the same way. See Project Settings.
  4. The extended amount: + Add property → Ext Price, Number, then fx: {Qty} * {Price Each}. Tax, if you want it: Tax = IF({Taxable}, {Ext Price} * {Tax Rate}, 0).
  5. Labor: a part Labor – Framing with its unit set to hr and your own Labor Cost (Number) = {Qty} * {Job > Labor Rate}.
  6. Open the Estimating tab. Cost Each, Price Each, Ext Price and every other number a part has a value for is a column, subtotalled by sheet, by level and for the job.

Two things to know:

  • It does not multiply by Qty. Put the extended amount in its own property (Ext Price) and total that. The Cost Each column gets a total too, and that total is just the unit costs added together.
  • A property you add lives on that one part. To give twenty parts an Ext Price, add it to each, or set up one part and Duplicate it. Better still, build it once and Save to a folder…: a saved part carries its own properties, so Load a part… brings them with it every time. The Cost group is already on every part.

Classify a part: Division, SubDivision, Construction Phase, Trade ​

the list puts four text properties on every part and every item, in the Classification group:

PropertyTodayStill to come
DivisionClick it for the CSI MasterFormat divisions, one per line, as "03 Concrete". Pick one, or type anything else: it is keptA real list on the Lists tab, linked to this property
SubDivisionTypedA list on the Lists tab
Construction PhaseTypedA list
TradeClick it for the trades: Site Work, Demolition, Concrete, Masonry, Framing, Roofing, Siding, Windows & Doors, Insulation, Drywall, Trim & Finish Carpentry, Cabinets & Countertops, Painting, Flooring, Tile, Plumbing, HVAC, Electrical, Landscaping, General Conditions. Pick one, or type anything elseA real list on the Lists tab

So the Division and Trade choices are still typed into the properties themselves, with Only allow choosing from list off.

A part's classifications follow its parent ​

Classify the item once and its parts follow. These four properties look up the tree until they find a value:

  1. what is set on this part;
  2. the part above it, if it is nested under another part;
  3. the item;
  4. blank.
  • A value that came from above is shown grey, and hovering it says where from: "from Ext Wall 2x6" (or "from the part above" when the panel has no name to give).
  • Change the item's Trade and every part that was following it changes too, at once.
  • Type your own on a part and that one property stops following. It goes black, and it stays yours however the item changes.
  • Clear it (empty the box and press Enter, or click ↺) and it follows again.
  • Each of the four follows on its own: a part can take its Division from the item and carry its own Trade.

Only these four follow. Everything else on a part still starts blank — a part's Cost Each never comes from the item, and neither does its Description, its Product Number or anything you added yourself.

a part's Division started blank and stayed blank, so each part had to be classified by hand.

Any of them can be a formula: SubDivision = {Level > Name} & " Walls" reads Main Level Walls on the Main Level. The Estimating tab shows Division and Trade beside each part.

Coming sorting the Estimating tab by a list's order (the earlier Report Sections design) — no build named. Reports: the Test Report groups every part that is turned on by Division, ordered by the Division list's order, a part with no Division last. While My Tools has its own Division list, that list's order wins over a job's own — a known gap.

3D: Length, Width, Depth and Used in render ​

The 3D group holds what the 3D model will use: Length (typed in feet, shown in feet and inches), Width and Depth (typed in inches, shown in feet and inches). the list has "Width / Height"; a name can't hold a /, so it is Width, with the hint "Width or height, however the part sits".

Used in render says whether the part is drawn in 3D later. It is off on every new part. … "This is to distinguish between drawn items and sub-items of the drawn EX: Subfloor and Subfloor Glue, we want to draw the subfloor, but not the subfloor glue." So tick it on Subfloor 3/4" T&G and leave it off on Subfloor Glue. Its hint reads "Show it in 3D later. Off for things you don't draw, like subfloor glue."

Nothing draws a part yet; these are stored now so tools and jobs carry them into 3D.

Neither has a build named yet. Line Width is drawn, and filling it from the parts is a formula you can already write on the item's Line Width: SUM({Children > Width}).

Appearance and Product ​

  • Color (a swatch and its hex) and Opacity (a slider, 100% on a new part) are stored on every part. Nothing draws a part yet; they are there for tools inside tools and 3D. Texture is an Image property, Coming — Image is still greyed in + Add property.
  • Product Number and Manufacturer are typed text.

Save a part and load it into another tool ​

A library can hold a saved part on its own — its properties, its Qty formula and its own child parts, the same shape as a part on an item. Two commands move parts in and out:

CommandWhereWhat it does
Save to a folder…right-click a part, or the button beside + Part — in the Tool Designer and in a jobPuts this part, and everything under it, into a folder as a saved part
Load a part…the Parts tab's + → Load part… in the Tool Designer, and an entry on every part row — in the Tool Designer and in a jobCopies a saved part, and everything under it, into the tool or the part you are working on

The picker's source box reads FROM FOLDER, with choices such as Custom → Framing and DimSum Defaults (read-only) — what were libraries are folders (Tool Designer → Folders). Right-click a part and Load a part… is still there. A job's part editor is unchanged. the box names the place — Tools → Custom → Framing, Tools → Custom → My Tools, Materials → Custom → My Tools, DimSum Defaults (read-only). Pick a material folder and every row of its tables is listed under MATERIALS, each named by its naming column with its table beside it; loading one makes a part — Undo Load a part in Framing — and no table is copied into the tool folder. It is how a material becomes a part since Add as a part left the table rows. each material row there is marked with what it is missing, a click loads it, and the part it makes stays linked to its row (above).

Load part… from the + at the top drops the part in at the top, under the tool itself; Load a part… on a part row drops it in under that part. In a job the picker can read any library you have registered, DimSum Defaults included. In the Tool Designer it reads every folder too, picked in its FROM FOLDER box. It lists each saved part with a count of the parts it carries, and says plainly: "A saved part is copied in with its own parts and properties — built once, used anywhere."

Save to a folder… asks three things: which folder, which tab or folder inside it, and a name (the part's own name is filled in for you). DimSum Defaults is read-only, so it is never offered to save into; if you have no folder of your own yet, the button is greyed and says so.

the Cat6 example, end to end ​

  1. On any item, build the part once: name it Cat6 Network Cable, give it a Slack % property of 10, set its Qty to {Item > Linear} * (1 + {Slack %}) and its unit to ft in the box beside the Qty, and add a child part RJ45 Plug with Qty 2.
  2. Right-click it → Save to a folder… → pick your folder, a tab or folder inside it, Save. A toast says "Cat6 Network Cable saved to My Tools". The part on the item is not changed.
  3. On a Linear tool somewhere else — a new job, a different tool — click Load a part… (in the designer, the Parts tab's + → Load part…), pick the folder, pick Cat6 Network Cable, Load.
  4. The whole part arrives: its Slack %, its Qty formula, its ft unit and the RJ45 Plug under it. And because its Qty reads {Item > Linear}, it measures the tool it landed on: draw 200 ft and it reads 220.00 ft (200 × 1.10), with 2 plugs under it.

You don't have to build it first. DimSum Defaults ships this exact part in its Parts folder, ready to load — see DimSum Defaults. One thing the shipped copy is missing: its unit is not set, so it loads reading ea rather than ft, and the number (220.00 on a 200 ft run) is right either way. Type ft into the box beside its Qty once it has landed.

It is a copy, like everything else that comes out of a library. Change the saved part in the library afterwards and this one never changes. (A part loaded from a Material Library row is a copy too, but it stays linked, and a change to its row is offered on the update screen: Linked to its row.) Rename, move or delete the library and the job still opens whole, with the part, its children and every value still on the item (Tool Designer).

A saved part arrives with its classifications blank and follows its new parent. Only what was actually typed on the part travels with it; a Division or Trade it was merely showing in grey from its old item is not carried, so the part takes on the Division and Trade of whatever it lands under.

To copy a part within one item, use Duplicate; to copy a whole item with its parts, use New item like this.

Not yet in the designer ​

In the Tool Designer, a part's own properties cannot be edited in the right-hand pane yet. Pick a part on the Parts tab and the pane says: "A part's own properties need a query the library does not answer yet. Its name, its Qty and the parts under it are all on the left, and every one of them is editable there." So in the designer you rename a part, write its Qty and build its children in the tree, and everything else waits. In a job the part editor is unchanged and full — every property, every group, + Add property, all of it.

Options & settings ​

The default part properties ​

Every part starts with the properties below. None of them can be deleted or renamed, and on a job's parts their settings (hint, unit, decimals, list) are fixed.

GroupPropertyTypeUnitA new part hasNotes
GeneralNameTextNew PartSet at the top of the part editor
DescriptionTextblank
TypePart · Linear · Area · CountPartOnly Part can be chosen; the core refuses the other three
QuantityQtyNumberthe part's own unit{Item > Qty}, or {Parent > Qty} when nestedThe unit is the box beside the number — it belongs to the part, not to the property, and takes no formula. Empty, it reads ea
EnabledCheckboxonCan be a formula
CostCost EachNumberblankNo maths of its own
Markup %Percentageblank
Price EachNumberblankNo formula of its own
Tax RatePercentageblank
TaxableCheckboxoffTax is never added for you
ProductProduct NumberTextblank
ManufacturerTextblank
ClassificationDivisionText, with the CSI listfrom the parent, else blankOther text allowed; a real list is Coming
SubDivisionTextfrom the parent, else blankA list is Coming
Construction PhaseTextfrom the parent, else blankthe ConstructionPhase, spaced like the other names
TradeText, with the trades listfrom the parent, else blankOther text allowed
AppearanceColorColorblankNothing draws a part yet
OpacitySlider, 0–100 %, step 1100%
3DLengthNumberftblankTick Show as feet and inches in its Settings… to read it 9'-6"
WidthNumberinblankHint: "Width or height, however the part sits"
DepthNumberinblank
Used in renderCheckboxoffHint: "Show it in 3D later. Off for things you don't draw, like subfloor glue."
AuditCreated ByText, read-onlywho made it
Time StampText, read-onlywhen it was made2026-09-24 14:02 (UTC); {Created At} still reads it
Modified By, Modified AtText, read-only
CustomAnything you add with + Add propertyNumber, Percentage, Slider, Text, Checkbox or ColorSee Property System

A new part stores only its Qty formula; everything else shows its default or is blank until you set it, which is why Only set keeps the editor short. The four Classification rows show the item's values in grey (above); only those four are filled in for you.

Rounding is ROUNDUP(…) in the Qty formula.

A formula reaches the item's values with {Item > …}, its sheet with {Page > …} and its level with {Level > …}. If you need one of the removed fields, add it as your own property.

Coming Icon and Texture (Image properties) and Relation to the line.

What was designed and what is built now ​

None of that maths is built, by the decisions:

Was designedNow
Material Unit Cost, Material ExtendedCost Each (a blank field on every part) and your own Ext Price = {Qty} * {Price Each}
Labor Hours per Unit, Labor Rate, Labor Hours, Labor CostAdd your own; put a shared rate on the job ({Job > Labor Rate})
Equipment Cost, Subcontract Cost, and part Types Equip / SubYour own properties; Trade and Division say what the part is
Markup %, Tax %, and the maths between themMarkup %, Tax Rate and Taxable are blank fields on every part; you write the formula
Unit Price, Extended Total, Sell PricePrice Each (blank, no formula of its own) and your own formula properties
Overhead %, Discount %Your own Percentage properties (on the job if they are job-wide)
Waste % (list-linked), Rounding PresetYour own Waste % property; rounding presets are Coming
List MatchThe Advanced Part — (above)
The job's "Defaults for this job" (waste, markup, overhead, tax)Job properties you define — see Project Settings

​

Dropped. What was designed: Settings → Properties Toggle would have listed every property, built-in and custom, with a show/hide switch. A hidden property leaves the Properties panel, the Estimating tab and report pickers, but its value is still stored and still used by formulas.

Examples ​

All of these work today. The numbers are worked out so you can check them by hand. On screen a Qty shows the System Settings decimal places, so the 19 below reads 19.00 at the default 2. The first two ship ready-made in DimSum Defaults → Examples (DimSum Defaults) — place one and the parts come with it.

Framing: an exterior wall ​

Linear item Ext Wall 2x6, 100' drawn, Height 9'. On the item, + Add property → O.C., Number, Units in, Show as feet and inches ticked, value 16 → 1'-4".

Ext Wall 2x6 (Linear)                 Linear 100'   Height 9'   O.C. 1'-4"
├── Plates     Qty = ROUNDUP({Item > Linear} * 3 / 16, 0)        → 19
│     └── Nails  Qty = ROUNDUP({Parent > Qty} / 4, 0)                → 5
├── Studs      Qty = ROUNDUP({Item > Linear} / {Item > O.C.}, 0) + 1 → 76
└── Sheathing  Qty = ROUNDUP({Item > Wall Area} * 1.10 / 32, 0)    → 31

Check the math:

  • Plates: 100 × 3 ÷ 16 = 18.75 → 19 sixteen-footers.
  • Nails: 19 ÷ 4 = 4.75 → 5 boxes.
  • Studs: 16" is 1.333'; 100 ÷ 1.333 = 75 spaces → 76 studs. DimSum converts the inches for you because every property knows its units. Change O.C. to 24 → 50 + 1 = 51.
  • Sheathing: Wall Area = 100 × 9 = 900 sf; × 1.10 = 990; ÷ 32 = 30.94 → 31 sheets.

Give all four Division 06 Wood, Plastics, and Composites and Trade Framing. Stretch the wall and all four follow. Change the Plates Qty and the Nails follow, because they read their parent.

Framing: floor sheathing ​

Area item Floor Sheathing, Area 1,245 sf.

Floor Sheathing (Area)                   Area 1,245 sf
├── Subfloor 3/4" T&G   Qty = ROUNDUP({Item > Area} * 1.10 / 32, 0)   → 43   (unit sheet, Used in render ticked)
│     └── Subfloor Glue Qty = ROUNDUP({Parent > Qty} / 4, 0)              → 11   (tube, Used in render off)
├── Nails 8d            Qty = ROUNDUP({Item > Area} / 500, 0)         → 3    (box)
└── Labor – Sheathing   Qty = {Item > Area} / 1000 * 3.5              → 4.36 (hr)
  • Subfloor: 1,245 × 1.10 = 1,369.5 ÷ 32 = 42.80 → 43.
  • Glue: 43 ÷ 4 = 10.75 → 11.
  • Nails: 1,245 ÷ 500 = 2.49 → 3.
  • Labor: 1.245 × 3.5 = 4.3575 → shows 4.36, not rounded, because nothing asked for it. Write ROUNDUP({Item > Area} / 1000 * 3.5, 0) if you buy labor in whole hours → 5.
  • Used in render is the own example: the subfloor will be drawn in 3D, the glue won't.

With your own Waste %: add Waste % (Percentage, 10) to the item and use ROUNDUP({Item > Area} * (1 + {Item > Waste %}) / 32, 0) → 43. Change it to 5 → 1,245 × 1.05 = 1,307.25 ÷ 32 = 40.85 → 41.

Waste after rounding (also valid): ROUNDUP(ROUNDUP({Item > Area} / 32, 0) * 1.10, 0) → 39 × 1.10 = 42.9 → 43. The order is yours; the rounding is always in the formula, where you can read it.

Low-voltage / electrical: boxes, priced with the Cost fields ​

Point item Electrical Box, Point Count 48. Job properties Labor Rate = 65 (Number) and Tax Rate = 7 (Percentage). Both parts: Division 26 Electrical, Trade Electrical.

PartIts propertiesResult
BoxQty {Item > Qty}48
Cost Each 2.102.10
Your own Ext Cost (Number) {Qty} * {Cost Each}100.80
Taxable ticked; Tax Rate = {Job > Tax Rate}7.00%
Your own Tax (Number) IF({Taxable}, {Ext Cost} * {Tax Rate}, 0)7.06
Box – LaborQty {Item > Point Count} * 0.25, unit hr12
Your own Labor Cost (Number) {Qty} * {Job > Labor Rate}780.00

Check: 48 × 2.10 = 100.80. Tax: 100.80 × 7% = 7.056, shown to two places. Labor: 12 hr × 65 = 780.00. Change the job's Labor Rate or Tax Rate and every part that uses it follows at once. Untick Taxable and the Tax is 0.

The Estimating tab shows columns Cost Each, Ext Cost, Tax Rate, Tax and Labor Cost (Tax Rate is a percentage, so it is never totalled). Markup works the same way: fill Markup % (or give it {Job > Markup}) and give Price Each the formula {Cost Each} * (1 + {Markup %}).

Concrete: a slab ​

Area item Slab 4", Area 1,200 sf, Thickness 4" (an item property, in inches).

  • Part Concrete, unit cy: Qty {Item > Area} * {Item > Thickness} * 1.05 → 1,200 sf × 4" = 400 cf; × 1.05 = 420 cf; in cubic yards that is 15.56. The cubic-feet-to-yards step happens because the part's unit is cy. ⚠ ROUNDUP() rounds the number your formula worked out, in the units it worked in — here cubic feet, not yards. Rounding a converted Qty to whole yards needs CONVERT; until then, order off the 15.56, or do the conversion yourself in the formula.
  • Part Vapor Barrier, unit roll: ROUNDUP({Item > Area} * 1.10 / 1000, 0) → 1,320 ÷ 1,000 = 1.32 → 2 rolls.
  • Division 03 Concrete (picked from the list), Trade Concrete.

Job extras (manual count holder) ​

Point item Job Extras with Typed count 1 (see Takeoff tools). Parts Dumpster, Permit, Delivery Fee, each Qty 1, Division 01 General Requirements, with Cost Each 450, 300 and 85. The Estimating tab's Cost Each column totals 835.00. Nothing is rounded, and no $ is added.

SubDivision by level (formula) ​

SubDivision on a wall part = {Level > Name} & " Walls". On the Main Level it reads Main Level Walls; on the Second Level, Second Level Walls.

Tips & shortcuts ​

  • Put anything that depends on another part (glue, tape, fasteners) under it and use {Parent > Qty}.
  • Use the Property Picker instead of typing paths. It can't misspell.
  • Use {Item > …} rather than long {Parent > Parent > …} chains in deep trees; it keeps working when you reorganize.
  • Keep rates (labor rate, tax rate, markup) on the job, and point the part's Tax Rate or Markup % at them, so one edit reprices every part.
  • Set up one fully-built part (Cost Each, Division, Trade, your formulas), then Duplicate it for the next size.
  • Build a part you use on every job — a Cat6 run, a stud, a hanger — once, then Save to a folder…. After that it is one Load a part… away on any tool, in any job, with its children and its formulas intact.
  • Put ROUNDUP(…, 0) around the Qty of anything you buy whole — sheets, boxes, tubes. It is the only place rounding lives, so you can always see it.
  • Classify the item (Division, Trade) and let the parts follow it. Fill one in on a part only where that part is different.
  • Leave the part editor on Only set.
  • Tick Used in render on what you'd draw (subfloor, studs), not on what goes with it (glue, nails).

Rules, limits & edge cases ​

  • A part turned off (Enabled unticked, or its formula FALSE) and everything under it are left out of every sum. They are still listed, greyed, and their Qty is still worked out.
  • The preloaded part properties can't be deleted or renamed — and that is the only thing they refuse. Everything else is on Settings…, on every row, in a job and in the Tool Designer alike: group, hint, input condition, its one unit, decimals, a list, Input, Hidden and Locked.
  • Cost Each, Markup %, Price Each, Tax Rate and Taxable never calculate on their own. An empty one counts as 0 in a formula.
  • A part's Type is always Part; Linear, Area and Point are greyed, and the core refuses them. An Advanced Part is a Part too.
  • A part has a Color and an Opacity, but nothing draws a part yet.
  • A part belongs to one item. Copies made by Duplicate, New item like this, Ungroup or Load a part… are independent.
  • A saved part is a copy in both directions. Saving one never changes the part you saved it from; loading one never links it back to the library. Changing the saved part afterwards leaves every copy already loaded exactly as it was.
  • A saved part loads in with its classifications blank and follows its new parent. Only values actually typed on the part are saved with it.
  • Save to a folder… needs a folder of your own. DimSum Defaults is read-only and is never offered; with no folder of your own the dialog says "DimSum Defaults is read-only, and there is no folder of your own to save into." and offers New folder….
  • Two siblings can't share a name: "There is already a part called Plates on this item" (or "under Subfloor"). Moving a part next to a sibling with its name is refused the same way.
  • A part can't be moved inside itself.
  • Name and Type take a typed value (or a choice) only; a formula on them is refused. So does the part's unit, in the box beside its Qty — a unit is never worked out.
  • The unit is per part, and DimSum will not let you set it as a definition setting. Pick a unit for Qty in its Settings… and it refuses, naming what to use instead: "Qty's unit belongs to the part it is on — set it with part.set_qty_unit". In the Tool Designer, trying it on one part of a tool says "Qty's settings belong to the whole tool, not to one part of it — its unit is lib.qty_unit.set". Both are naming the box beside the Qty. It is that way because the unit genuinely differs part by part: studs in ea, sheathing in sheet, glue in tube, framing labour in hr, all on one wall.
  • Every property on a part carries every setting. Right-click any row — Qty, Cost Each, Division, Color, Created By — and Settings… is there. Rename… and Delete property… stay on a preloaded row's menu too, greyed, with the reason: "Cost Each came preloaded, so its name stays…" and "…cannot be deleted. Hide it instead — it keeps its value, and formulas still reach it."
  • Division, SubDivision, Construction Phase and Trade follow the part above them, then the item, shown grey. Typing your own stops that one following; clearing it starts it again. No other property inherits — everything else on a part starts blank. all four started blank and stayed blank.
  • There is no Round Up checkbox. Rounding is ROUNDUP(…) in the Qty formula.
  • In the Tool Designer, a part's own properties can't be edited in the right-hand pane yet; its name, its Qty and its children are edited in the tree. In a job the part editor is full.
  • A property you add to a part belongs to that part only (and to copies made from it).
  • Deleting an item's last shape keeps the item at 0, with its parts intact. Delete the item itself to remove them.
Planbase Estimating LLCDimSum Takeoff
Sheet titleParts
SectionTakeoff
StatusPartly available
ScaleNTS
Sheet27 / 57

DimSum Takeoff by Planbase Estimating LLC · Kansas City, Missouri