3D Printing Wiki

Advancing 3D printing mastery

User Tools

Site Tools


03_designing_for_3d_printing:02_design_with_svg

This is an old revision of the document!



3D PRINTING AND DESIGN REFERENCE DOCUMENT

Document Title:Create SVG files using Python
Document No.:1729077206
Author(s):jattie
Contributor(s):

REVISION HISTORY


Revision


Details of Modification(s)

Reason for modification

Date

By
0 Draft releaseHow to exploit the power of SVG's in 3D designs. 2024/10/16 11:13 jattie

Design using SVG's

SVG's(Scalable Vector Graphics) are very powerful in designs because of the scalability. Any existing logo or image can be converted to a .svg and as I recently discovered, there are very cool svg libraries available in python.

Create a SVG using Python code

The majority of this code was generated in copilot and I played around with the parameters until I managed to get what I wanted to see in the svg.

create_sundial_svg.py
import svgwrite
from math import cos, sin, pi
 
def create_custom_sundial_face():
    # Create an SVG drawing
    dwg = svgwrite.Drawing('custom_sundial_face.svg', profile='tiny', size=(500, 500))
 
    # Center of the sundial
    center_x = 250
    center_y = 250
    radius = 160
 
    # Draw the outer circle with a decorative border
    dwg.add(dwg.circle(center=(center_x, center_y), r=radius, stroke='black', fill='none', stroke_width=5))
 
    # Function to draw lines
    def draw_line(angle, length, color='black', stroke_width=1):
        x1 = center_x + radius * (1 - length) * cos(angle)
        y1 = center_y + radius * (1 - length) * sin(angle)
        x2 = center_x + radius * cos(angle)
        y2 = center_y + radius * sin(angle)
        dwg.add(dwg.line(start=(x1, y1), end=(x2, y2), stroke=color, stroke_width=stroke_width))
 
    # Function to draw text
    def draw_text(angle, text, radius_offset=10):
        x = center_x + (radius + radius_offset) * cos(angle)
        y = center_y + (radius + radius_offset) * sin(angle) + 0  # Adjust y coordinate for vertical alignment
        rotation_angle = angle * 180 / pi + 90  # Convert radians to degrees and adjust for vertical alignment
        #dwg.add(dwg.text(text, insert=(x, y), text_anchor="middle", font_size="12px", font_family="Roman"))
        dwg.add(dwg.text(text, insert=(x, y), text_anchor="middle", font_size="12px", font_family="Verdana", 
                         font_weight='bold', transform=f"rotate({rotation_angle},{x},{y})"))
 
    # Draw 5-minute lines
    for five_minute in range(288):
        if five_minute % 12 == 0:
            continue
        angle = (five_minute / 288) * 2 * pi - pi / 2
        draw_line(angle, 0.05)#, color='purple')
 
    # Draw 15-minute lines
    for quarter_hour in range(96):
        if quarter_hour % 4 == 0:
            continue
        angle = (quarter_hour / 96) * 2 * pi - pi / 2
        draw_line(angle, 0.08)#, color='red')
 
    # Draw half-hour lines
    for half_hour in range(48):
        if half_hour % 2 == 0:
            continue
        angle = (half_hour / 48) * 2 * pi - pi / 2
        draw_line(angle, 0.10)#, color='green')
 
    # Draw hour lines and Roman numerals with custom colors
    for hour in range(24):
        angle = (hour / 24) * 2 * pi - pi / 2
        draw_line(angle, 0.15, stroke_width=2)#, color='blue')
        roman_numeral = ["XII", "I", "II", "III", "IIII", "V", "VI", "VII", "VIII", "IX", "X", "XI"][hour % 12]
        if hour >= 12:
            roman_numeral #+= " PM"
        else:
            roman_numeral #+= " AM"
        draw_text(angle, roman_numeral)
 
    # Save the SVG file
    dwg.save()
 
# Create the custom sundial face SVG
create_custom_sundial_face()
 
print("The custom sundial face SVG has been created and saved as 'custom_sundial_face.svg'.")

The result of the above code looks like this.

This is the SVG file, right click this to download directly for use.

03_designing_for_3d_printing/02_design_with_svg.1729078008.txt.gz · Last modified: 2024/10/16 11:26 by jattie