Skip to content

Get Optimization Default Settings

This example demonstrates how to retrieve the default optimization settings for a specific G-Code. This is useful for understanding what parameters will be used when running an optimization, and for customizing those parameters as needed.

Create the following GraphQL query file, then run your language’s codegen tool to generate the types.

queries/DefaultOptimizationSettings.graphql
query DefaultOptimizationSettings($gcodeId: ID!) {
defaultOptimizationSettings(gcodeId: $gcodeId) {
minVelocity
maxVelocity
minVelocityIncrement
minExtruderFlowRate
maxExtruderFlowRate
tolerance
maxIterations
nNodes
optimizer
optimizeOuterwall
reductionStrategySettings {
strategy
}
residualStrategySettings {
strategy
exponentialPenaltyLow
exponentialPenaltyHigh
}
layersToOptimize {
fromLayer
toLayer
}
}
}

API Reference:

  1. Setup the client and configuration

    index.ts
    import { ApolloClient, InMemoryCache, HttpLink } from "@apollo/client";
    import { DefaultOptimizationSettingsDocument } from "./queries/__generated/DefaultOptimizationSettings.generated";
    // Load PAT from environment
    const PAT = process.env.PAT;
    if (!PAT) {
    throw new Error("PAT environment variable is required");
    }
    // Create Apollo Client
    const client = new ApolloClient({
    cache: new InMemoryCache(),
    link: new HttpLink({
    uri: "https://api.helioadditive.com/graphql",
    headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${PAT}`,
    },
    }),
    });
    // Replace with an actual G-Code ID from your account
    const GCODE_ID = process.env.GCODE_ID ?? "your-gcode-id";
  2. Fetch the default optimization settings

    Query the API to get the default settings for your G-Code.

    async function getOptimizationDefaults(gcodeId: string) {
    console.log(`Fetching default optimization settings for G-Code: ${gcodeId}`);
    const { data } = await client.query({
    query: DefaultOptimizationSettingsDocument,
    variables: { gcodeId },
    fetchPolicy: "no-cache",
    });
    const settings = data?.defaultOptimizationSettings;
    if (!settings) {
    throw new Error("Failed to get default optimization settings");
    }
    return settings;
    }
  3. Display the settings

    Print the default settings in a readable format.

    function displaySettings(settings: any) {
    console.log("\nDefault Optimization Settings:");
    console.log("==============================");
    console.log(`Min Velocity: ${settings.minVelocity} m/s`);
    console.log(`Max Velocity: ${settings.maxVelocity} m/s`);
    console.log(`Min Velocity Increment: ${settings.minVelocityIncrement} m/s`);
    console.log(`Min Extruder Flow Rate: ${settings.minExtruderFlowRate}`);
    console.log(`Max Extruder Flow Rate: ${settings.maxExtruderFlowRate}`);
    console.log(`Tolerance: ${settings.tolerance}`);
    console.log(`Max Iterations: ${settings.maxIterations}`);
    console.log(`Number of Nodes: ${settings.nNodes}`);
    console.log(`Optimizer: ${settings.optimizer}`);
    console.log(`Optimize Outer Wall: ${settings.optimizeOuterwall}`);
    if (settings.layersToOptimize && settings.layersToOptimize.length > 0) {
    console.log("\nLayers to Optimize:");
    for (const range of settings.layersToOptimize) {
    console.log(` From layer ${range.fromLayer} to layer ${range.toLayer}`);
    }
    }
    }
  4. Put it all together

    Combine all the steps and run the example.

    // Example usage
    getOptimizationDefaults(GCODE_ID)
    .then((settings) => {
    displaySettings(settings);
    console.log("\nExample completed successfully!");
    })
    .catch(console.error);
  1. Create a .env.local file with your PAT and G-Code ID:

    Terminal window
    PAT="your-personal-access-token"
    GCODE_ID="your-gcode-id"
  2. Update the GCODE_ID with a valid G-Code ID from your account that is in READY status.

  3. Run the example:

    Terminal window
    bun run index.ts

Using Default Settings with an Optimization

Section titled “Using Default Settings with an Optimization”

You can use these default settings as a starting point and override specific values when creating an optimization:

import { CreateOptimizationDocument } from "./mutations/__generated/CreateOptimization.generated";
// First, get the defaults
const defaults = await getOptimizationDefaults(GCODE_ID);
// Then create an optimization with some overrides
const { data } = await client.mutate({
mutation: CreateOptimizationDocument,
variables: {
input: {
gcodeId: GCODE_ID,
name: "my-optimization",
optimizationSettings: {
// Use custom layer range instead of default
layersToOptimize: [{ fromLayer: 1, toLayer: 50 }],
// Override max velocity
maxVelocity: defaults.maxVelocity * 0.8,
// Keep other defaults by not specifying them
},
},
},
});