Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

You don’t need to be a programmer to understand how to build a pricing script.
Using and modifying the example scripts is actually quite simple.

There are 3 four places in the software where pricing scripts can be used:

...

Comparison and Relational operators

Name

Syntax

Examples

Equality

x == y

1 == 1; true
0 == 1; false

Inequality

x != y

1 != 2; true
1 != 1; false

Greater than operator

x > y

4 > 3; true

Greater than or equal operator

x >= y

4 >= 3; true
3 >= 3; true

Less than operator

x < y

3 < 4; true

Less than or equal operator

x <= y

3 <= 4; true
3 <= 3; true

Providing Conditions & Discounts

...

Additional costs that are generated by your business can also be accounted for, one of the most common being labor costs for preparing build platforms.

Code Block
let labor = ;                         // € or $
let platformPreparationCost = ;     let otherCosts = labor + platformPreparationCost/item.quantity;
Info

In this case platform preparation cost is calculated per part (this is why platformPreparationCost variable is divided by item.quantity).

...

Variable

...

Description

...

Unit

...

Code Block
labour

...

Costs related to all work done by people when preparing the part for printing.

...

$ or €

...

Code Block
platformPreparationCost

...

Cost of preparing the printer (e.g. of warming up the powder bed).

...

$ or €

  // € or $

// platform preparation cost is calculated per part

let otherCosts = labor + platformPreparationCost/item.quantity;

Sample Complete Pricing Formula for FDM

Code Block
languagejs
//material cost
let materialPrice = 80;         // € or $
let materialDensity = 1.04;     // g/cm^3
let supportPrice = 80;          // €/kg or $/kg
let supportDensity = 1.04;      // g/cm^3
let infill = 0.2;               // number in [0,1]
let supportInfill = 0.2;        // number in [0,1]
let wallThickness = 2;          // mm

let materialUsedmaterialUsedInfill = Math.max((model.volume - model.area * wallThickness) * infill, 0);
let materialUsedContour += Math.min(model.area * wallThickness, model.volume);
let materialUsed = materialUsedInfill + materialUsedContour;

let totalMaterialPrice = (materialUsed*materialDensity*materialPrice +
support.volume*supportPrice*supportDensity*supportInfill)*0.000001;

// hourly rate
let priceOfMachine = 200000;    // € or $
let usefulLife = 7;             // years  
let maintenance = 40000;        // € or $
let powerConsumption = 10000;   // €/year or $/year
let roomCost = 4000;            // €/year/m^2 or $/year/m^2
let space = 10;                 // m^2
let spareParts = 2000;          // €/year or $/year
let gasUsage = 0;               // €/year or $/year
let workingHoursPerYear = 3500; // hours/year

let hourlyRate = ((priceOfMachine + maintenance)/usefulLife + powerConsumption +
roomCost*space + spareParts + gasUsage)/workingHoursPerYear;

// machine time
let lineWidth = 0.1;      // mm
let layerHeight = 0.1;    // mm
let speed = 45;           // mm/s
let wallThickness = 2;    // mm

let volumeFactor = 0.0010747;
let areaFactor = 0.04317783;
let supportFactor = 0.0003774;

let exponent;
if( model.volume < 3000){
        exponent = 0.55;
} else {
        exponent = 0.88;
}
let volumeFactor
=
0.0010747;
let areaFactor = 0.04317783;
let supportFactor = 0.0003774;

let time let volumePart = volumeFactor*(0.818182 - lineWidth)*(Math.pow(layerHeight, (-1.07)) +
0.232)*(Math.pow(speed, (-1.08)))*(Math.pow(infill*100, (1.02)))*model.volume +;

let areaPart = areaFactor*(1.578431 - lineWidth)*(Math.pow(layerHeight, (-0.98)) + 0.341)*
(Math.pow(wallThickness, exponent) + 0.002)*(Math.pow(speed, (-0.84)) +
0.003)*model.area +;

let supportPart = supportFactor*supportInfill*support.volume;

let time = volumePart + areaPart + supportPart;

let machineTime = time/60;

// other costs
let labour = 15;                      // € or $
let platformPreparationCost = 200;    // € or $

let otherCosts = labour + platformPreparationCost/item.quantity;

// final unit price
let margin = 0.1;

let price = (totalMaterialPrice + hourlyRate*machineTime + otherCosts)*(1+margin);
price;