Drawing a factory AutoCAD layout in Python

I have established an extensive VBA and Python documentation covering AutoCAD automatization. In this article I demonstrate some of this in Python, using pyautocad and win32com. I do so by creating a factory layout drawing in AutoCAD. It is a simple layout with a few machines.

The example is provided in below Python code:

import math
import win32com.client
from pyautocad import Autocad, APoint

# AutoCAD instance
acad = Autocad(create_if_not_exists=True)

# Set the drawing units to millimeters
acad.doc.Units = win32com.client.constants.acMillimeters

# drawing limits
acad.doc.SetLimits(APoint(-5000, -5000), APoint(5000, 5000))

# machine dimensions
machine_width = 500
machine_length = 1000
machine_height = 500

# machine positions
machine_positions = [
    APoint(1000, 1000),
    APoint(2500, 1000),
    APoint(2500, 2500),
    APoint(1000, 2500)

# machine names
machine_names = ["Machine 1", "Machine 2", "Machine 3", "Machine 4"]

# machine colors
machine_colors = [1, 2, 3, 4]

# new layer for the machines
machines_layer = acad.doc.Layers.Add("Machines")

# create the machines
for i, position in enumerate(machine_positions):
    # Create the machine block
    machine_block = acad.model.InsertBlock(
        APoint(position.x, position.y, 0),
    # set machine name
    machine_block.GetAttributes()[0].TextString = machine_names[i]
    # machine color setting
    machine_block.TrueColor = machine_colors[i]
    # add machine block to desired layer
    machine_block.Layer = machines_layer
    # save AutoCAD drawing

This code creates a basic factory layout with four machines, each with a different color and name. You can modify the machine positions, names, and colors to create your own factory layout.

Related content

If you are interested in Python for AutoCAD you can check our documentation on SCDA. Below are some exemplary contributions to our documentation:

You May Also Like

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.