FullControl Basics

Learn the fundamental concepts of FullControl

What is FullControl?

FullControl is a Python library that gives you complete control over 3D printing toolpaths. Instead of working with traditional CAD models and slicers, you define exactly where the printer moves and what it does at each point.

Core Concepts

Points

The foundation of all designs. Every position in 3D space is defined as a Point with x, y, and z coordinates.

point = fc.Point(x=10, y=20, z=0.2)

Steps

Individual instructions that tell the printer what to do. Steps can be movements, extrusion changes, or other commands.

steps = [
    fc.Point(x=0, y=0, z=0.2),
    fc.Point(x=10, y=0, z=0.2),
    fc.Extruder(on=False)
]

Layer Management

Build up your design layer by layer, with full control over layer height and transitions.

layer_height = 0.2
for layer in range(5):
    z = layer * layer_height
    # Add layer geometry here

State Objects

Control printer settings like temperature, speed, and extrusion throughout your design.

steps.append(fc.Extruder(on=True))
steps.append(fc.ExtrusionRate(rate=0.5))
steps.append(fc.PrintSpeed(speed=20))

Basic Workflow

Every FullControl design follows the same basic pattern:

  1. Import the library: import fullcontrol as fc
  2. Create a list: Start with an empty list to store your steps
  3. Add geometry: Use FullControl functions to create shapes and movements
  4. Add controls: Insert printer commands like extrusion and speed changes
  5. Transform to G-code: Convert your steps to printer instructions
import fullcontrol as fc

# Initialize
steps = []

# Add some geometry
steps.extend(fc.rectangleXY(
    start_point=fc.Point(x=0, y=0, z=0.2),
    x_size=20, 
    y_size=20
))

# Transform to G-code
gcode = fc.transform(steps, 'gcode')

Common Functions

Geometry Functions

  • fc.rectangleXY() - Create rectangular shapes
  • fc.circleXY() - Create circular paths
  • fc.lineXY() - Create straight lines
  • fc.arcXY() - Create curved paths

Movement Functions

  • fc.travel_to() - Move without extruding
  • fc.move_polar() - Move in polar coordinates
  • fc.relative_move() - Move relative to current position

Control Functions

  • fc.Extruder(on=True/False) - Turn extrusion on/off
  • fc.PrintSpeed(speed=value) - Set printing speed
  • fc.ExtrusionRate(rate=value) - Control extrusion amount
  • fc.Hotend(temp=value) - Set nozzle temperature

Working with Coordinates

FullControl uses a standard 3D coordinate system:

  • X-axis: Left/right movement (usually bed width)
  • Y-axis: Forward/backward movement (usually bed depth)
  • Z-axis: Up/down movement (layer height)

💡 Coordinate Tips

  • Start with Z=layer_height (not Z=0) for the first layer
  • Use consistent units throughout your design (usually millimeters)
  • Consider your printer's build volume when setting coordinates

Example: Simple Square

Here's a complete example that creates a simple square:

import fullcontrol as fc

# Parameters
layer_height = 0.2
size = 20

# Initialize
steps = []

# Move to start position (travel move)
steps.append(fc.Point(x=0, y=0, z=layer_height))

# Turn on extrusion
steps.append(fc.Extruder(on=True))

# Create square
steps.extend(fc.rectangleXY(
    start_point=fc.Point(x=0, y=0, z=layer_height),
    x_size=size,
    y_size=size
))

# Turn off extrusion
steps.append(fc.Extruder(on=False))

# Move up (travel move)
steps.append(fc.Point(x=0, y=0, z=layer_height * 2))

# Generate G-code
gcode = fc.transform(steps, 'gcode')

Next Steps

Now that you understand the basics, you can explore more advanced topics: