A fabricator needs to quote material. You hand them a bracket modelled as a solid body — not a sheet metal part, no flat pattern feature, just an extrusion with a uniform thickness. They want the raw stock area: how many square millimetres of plate does this part consume before cutting.
SolidWorks Mass Properties gives you volume, surface area, and inertia. But the total surface area of a solid body includes every face — both flat faces, four edges, any chamfers or holes. That number is meaningless for material estimation. What you need is the area of one face, or equivalently, the part’s volume divided by its thickness.
This comes up constantly with laser-cut gears, mounting brackets, architectural components, and any flat part that was modelled as a simple boss extrude instead of with sheet metal features. Here are five methods, from quickest to most automatable.
Method 1: Select the face, read mass properties
SolidWorks’s Mass Properties dialog can operate on a selected face rather than the entire body. Select the large flat face in the graphics window (click it), then go to Evaluate → Mass Properties (or Tools → Evaluate → Mass Properties).
In the dialog, enable Selected Items at the bottom. The reported Surface Area is now the area of only that face.
For a simple flat body this works immediately. For a body with multiple faces (a part with a pocket that creates multiple coplanar face regions), you need to hold Ctrl and select all coplanar faces that make up the cutting contour. SolidWorks will sum their areas.
The number appears in the dialog header alongside mass and volume. The unit system matches your document settings. No macro needed.
Limitation: This is manual — one face at a time, per part. For a 200-part assembly where you want the area of every flat body in one go, you need the API.
Method 2: Volume divided by thickness
For a uniform-thickness extrusion, the math is exact:
flat_area = volume / thickness
SolidWorks Mass Properties reports volume. If you know your design thickness, divide. The advantage is that you do not need to select a specific face and the result is independent of how the model was built (whether the flat face is a clean single face or split into segments by internal features).
In metric, if your part is 3 mm thick and has a volume of 4800 mm³:
flat_area = 4800 / 3 = 1600 mm²
The same result you would get from a 40mm × 40mm square.
Limitation: This requires you to know the nominal thickness independently. For parts with variable thickness (tapers, turned profiles, compound geometry) the formula does not apply. Also, SolidWorks reports volume in the active document unit, but if you are calling the API, volume is always returned in cubic metres — watch the unit conversion.
Method 3: Surface body extraction
A surface body has no thickness, so its Mass Properties reports face area directly. You can create a surface body from any face via Insert → Surface → Offset Surface, selecting the target face and setting the offset distance to 0.
The resulting surface body has one face equal in area to the original face. Open Mass Properties, select that body, and read the surface area.
This is particularly useful when the flat face is curved (a warped panel, a shallow compound surface) and method 2 fails because there is no meaningful uniform thickness. The surface body area is the true geometric area of the face.
After reading the value, suppress or delete the surface body — it is a measurement artefact.
Limitation: Works interactively but awkward in batch scenarios. Suppress/delete cleanup is easy to forget.
Method 4: Bounding box area (what fabricators usually want)
For material ordering and nesting, fabricators often want the bounding box area, not the exact cut-out area. A 200 mm × 300 mm gear that is 60% hole still consumes a 200 × 300 blank. The nest program will try to pack parts but quote the blank size for material cost.
SolidWorks has a Bounding Box feature (Insert → Reference Geometry → Bounding Box, or from the Sheet Metal toolbar). Once added, the bounding box dimensions are exposed as custom properties in the part:
Bounding Box WidthBounding Box LengthBounding Box Thickness
Multiply width by length to get the raw blank area. These properties are also extractable via the API using ICustomPropertyManager.Get6().
If you are exporting DXF files for a batch of parts and also need blank area for your BOM, the bounding box approach is the most practical: set up the feature in the template, and every part that inherits the template gets the property automatically.
Limitation: The bounding box is axis-aligned to the model coordinate system. If the part is rotated in the assembly, the bounding box may not align with the cutting grain direction on the sheet. For accurate nesting, use dedicated nesting software that imports the DXF and optimises placement.
Method 5: API — IFace2.GetArea()
For batch workflows and automation, the SolidWorks API provides IFace2.GetArea(). This method returns the area of a single face in square metres — SolidWorks uses SI units (metres) internally for all geometry, regardless of the document unit setting.
Convert to mm²: multiply by 1,000,000 (1 m² = 10⁶ mm²).
A complete VBA macro to find the largest face area of the active part body:
Sub GetLargestFaceArea()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swBody As SldWorks.Body2
Dim swFace As SldWorks.Face2
Dim bodies As Variant
Dim i As Integer
Dim maxArea As Double
Dim faceArea As Double
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swPart = swModel
bodies = swPart.GetBodies2(swSolidBody, True)
maxArea = 0#
If IsEmpty(bodies) Then
MsgBox "No solid bodies found."
Exit Sub
End If
For i = 0 To UBound(bodies)
Set swBody = bodies(i)
Set swFace = swBody.GetFirstFace()
Do While Not swFace Is Nothing
faceArea = swFace.GetArea() ' returns m²
If faceArea > maxArea Then
maxArea = faceArea
End If
Set swFace = swFace.GetNextFace()
Loop
Next i
' Convert m² to mm²
Dim areaMM2 As Double
areaMM2 = maxArea * 1000000#
MsgBox "Largest face area: " & Format(areaMM2, "0.00") & " mm²"
End Sub
The loop iterates all faces of all solid bodies and returns the largest single face area. For a uniformly thick flat part, the largest face is always one of the two flat faces.
In C# (add-in context):
using SolidWorks.Interop.sldworks;
public double GetLargestFaceAreaMm2(IPartDoc swPart)
{
object[] bodies = (object[])swPart.GetBodies2(
(int)swBodyType_e.swSolidBody, true);
double maxArea = 0;
foreach (object b in bodies)
{
IBody2 body = (IBody2)b;
IFace2 face = body.IGetFirstFace();
while (face != null)
{
double area = face.GetArea(); // m²
if (area > maxArea)
maxArea = area;
face = face.IGetNextFace();
}
}
return maxArea * 1_000_000.0; // convert to mm²
}
Filtering to only flat faces:
If the body has complex geometry (fillets, chamfers, holes), iterating all faces and taking the largest is usually sufficient for a flat laser-cut part — the flat top face will always be the largest. For rigorously correct filtering, check the face’s surface type:
ISurface surf = face.IGetSurface();
bool isFlat = surf.IsPlane();
ISurface.IsPlane() returns true for planar faces only. For a body where the two large flat faces are equal in area (symmetric extrusion), you can take either one.
Sheet metal parts: use the flat pattern properties
For parts with sheet metal features, skip the above entirely. The IFlatPatternFolder interface exposes the flat pattern directly:
IFlatPatternFolder fp = swPart.GetFlatPatternFolder();
double[] props = (double[])fp.GetFlatPatternProperties();
// props[0] = flat pattern area in m²
// props[1] = flat pattern perimeter in m
// props[2..7] = bounding box dimensions
The flat pattern area accounts for holes, punch-outs, and bend deductions — it is the actual cut area from the sheet, not the blank area. This is more accurate than any face-area approach for sheet metal.
If you are writing a batch export tool, check whether the body has a flat pattern folder first:
IFlatPatternFolder fp = swPart.GetFlatPatternFolder();
if (fp != null)
{
// Use flat pattern properties
}
else
{
// Fall back to largest face area
}
Embedding area into the DXF or BOM
Once you have the face area, the natural next step is to record it somewhere useful — either as a custom property on the part (so it appears in your BOM) or as metadata embedded in the DXF export.
Writing a custom property from a macro:
ICustomPropertyManager cpm = swModel.Extension.CustomPropertyManager[""];
cpm.Add3("FlatArea_mm2", (int)swCustomInfoType_e.swCustomInfoNumber,
areaMm2.ToString("F2"), (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
Once it is a custom property, it flows naturally into SolidWorks BOMs and can be picked up by export tools. CadShift reads custom properties during batch DXF export and can embed them as DXF layer metadata alongside bend lines and part numbers — so the flat area travels with the file to the fabricator.
Choosing the right method
| Scenario | Best method |
|---|---|
| One-off check, interactive | Method 1 (select face, Mass Properties) |
| Known uniform thickness | Method 2 (volume / thickness) |
| Curved or non-uniform face | Method 3 (surface body extraction) |
| Material quoting / stock ordering | Method 4 (bounding box) |
| Batch processing in a macro or add-in | Method 5 (IFace2.GetArea) |
| Sheet metal part with flat pattern | IFlatPatternFolder.GetFlatPatternProperties |
For fabrication workflows, the most useful output is often bounding box area (for ordering stock) alongside exact cut area (for material waste estimation). Both are derivable from the API in a single pass over the body’s faces — no sheet metal feature required, no special modelling assumptions. The data exists in the geometry regardless of how the part was built; you just need to know which interface to ask.