Week 02: Computer-Aided Design

This week has been pretty fun. The topic is one that I've had a bit of experience with previously: Computer-Aided Design, which ranges from simple 2D image designs to complicated 3D simulations and designs.

I also got to go to Madeira with a friend where I worked on my projects while enjoying nature. That sidequest was really fun, but it meant I had less time to work on the assignment and final projects this week. Nevertheless, done > perfect, and those are skills that I will be improving throughout Fab Academy.

Given my time constraints, the goal this week was to create a 2D vector design, a logo for my project, and a 3D initial design for my glasses. Yup, I chose that for my final project, go to the final project page to learn more about my decision. I will complete those and continue building on top of them as we go.

Jump to this week's checklist


Learning from the Global Session

This week's global session was taught by Sophia Brueckner and Kenny Cheung. Sophia has been teaching Sci-fi prototyping, and Kenny worked at NASA on making infrastructure in space.

Designers learn from engineers about design and engineers learn from designers about engineering.

Neil talked about why there is a strict limit on storage: it is a constraint not about price but rather compressed formats make sites much more accessible and faster.

What is CAD?

CAD is the use of computers to assist in the creation, modification, analysis, or optimization of a design. CAD is pretty much any design on a computer.

For 2D designs, raster images (jpg, png, gif, tif) aren't really good for communicating to a machine. Vector formats (dxf, ai, svg) are preferable for fabrication. Boolean operations are one way to create more complex shapes from simple shapes like differences and unions.

CAD categorization

Ways to Create with 3D Shapes

  1. Start with 2D shapes and extrude, revolve, sweep, or loft
  2. Sketch on the face of 3D objects
  3. Boolean operations
  4. Sculpting meshes
  5. Fillets and chamfers to round edges or slice straight lines
  6. Offsetting
  7. Measurements
  8. Rendering
  9. Animation (Blender)

Important features to know:

  1. History/Hierarchies, available in Fusion and FreeCAD
  2. Constraints on a sketch: you can put specifications like making certain lines always the same length as each other, which is usually more relevant for engineers
  3. Assemblies: constraints on 3D shapes in their relationship to others
  4. Parametric CAD: usually two styles, spreadsheets of named dimensions and equations which include things like hole diameters, tab sizes, and material thickness, or node-based visual programming where varying inputs varies the output 3D models. You are designing a system that could produce different shapes (Blender has this functionality with geometry nodes). Sometimes it is just faster to write it in Python. This is required for laser cutters.
  5. Agent-based Modeling: simulations to study interactions between people, things, places, and time

Mechanical Analysis is really powerful in simulation, but what you could do on paper is still extremely powerful!

Software Recommendations

  • Solidworks wins for production
  • Fusion is mostly best for end-to-end
  • Onshape for cloud
  • FreeCAD wins for open source and has a ton of tools
  • Blender for graphics and animation

For next week, we are going to design a parametric construction kit, so it is important that this week we learn parametric design so next week we don't get stuck learning something else.


2D Vector Design: A Logo for My Project

I have previously worked extensively with some of Adobe's products like Illustrator and Photoshop, but this week I wanted to try an open-source tool: Inkscape.

Here is a cheat sheet I found for using Inkscape after being an Illustrator user, since the shortcuts are quite different: Inkscape for Adobe Illustrator users

Fun fact

Pixel stands for picture elements!

I wanted the logo to have AR glasses that show the project title combined with a representation of the brain in the middle of the glasses. I started by sketching an idea on my "notebook" (GoodNotes on my iPad):

Logo sketch on iPad

Then, I started brainstorming logo designs with ChatGPT image and nano-banana-Pro. They already have context about my project in their memory, so I attached the sketch and told them to start exploring how it could look.

Logo Generation Prompt

"based on what you know about my project, generate a logo based on the attached design."

Here are the results from nano-banana-Pro:

nano-banana-Pro logo generation 1

nano-banana-Pro logo generation 2

And from ChatGPT:

ChatGPT logo generation

I really liked the first design by nano-banana. With better prompts I could have gotten better results, but my goal here was just to visualize how my design idea could end up looking because I want to do the actual vector design in Inkscape, since we will also need that skill next week for computer controlled cutting. I am also planning to make this into stickers :)

I started designing in Inkscape to create the first lens of the glasses:

Starting the design in Inkscape

As I was designing, I thought: is there any way I could translate the design nano-banana generated into an SVG that I could edit, refine, and practice my vector editing skills on in Inkscape?

Turns out yes! So I took the first image and put it into the tool picsvg.com:

picsvg conversion result

Well, that wasn't the result I really wanted. But why?

Why picsvg struggled with this

Picsvg converts raster images (JPG, PNG, GIF) into scalable SVG vector format by tracing pixel edges and converting them into mathematical paths and shapes. Detailed images, like the one I uploaded, convert poorly because every texture, gradient, and color variation becomes a separate vector path, creating massive file sizes and losing photographic quality.

So I prompted nano-banana-Pro to reduce the details:

Simplification Prompt

"Make this design into a very simple svg without black lines and without background colors."

Here is the result:

Simplified nano-banana design

I started cleaning up the SVG since it had weird unnecessary paths, but the issue was that it made the whole thing into one single path. So I went back to nano-banana-Pro:

Separation Prompt

"Separate each element"

Then went back to the SVG tool:

Separated elements in picsvg

Separated elements result

I cleaned it up again in Inkscape and started editing the design. At the top is what I designed myself in Inkscape:

Editing the design in Inkscape

I wanted to make some edits to the design like changing the glasses lens designs, using a different font for the name, and a different EEG pattern. I removed the old path I started and completely edited the SVG provided by nano-banana-Pro, changing its design and colors. This shows all the different layers that I edited:

All layers edited in Inkscape

Through Inkscape's tools, with inspiration from the designs I generated through nano-banana-Pro and converted to SVG, I created the new glasses frame design based on the one I got from nano-banana, edited different parts of the brain and the signals, then created text with the name of the project and turned it into a path with a custom design for the AR part.

I had previously done similar work, but it is crazy how AI makes the process much faster.


3D Design: Glasses Frame

There have been AR projects in the past that are very reliable and great resources to learn from as a basis to continue building upon. I am utilizing the open source smart glasses from the Mentra Community: OpenSourceSmartGlasses

Shoutout to Cayden and Nicolo who work at Mentra and have been doing some amazing work across the AR ecosystem. They have been part of YC and raised money to pursue making an open-source platform for AR development.


My first step was to clone the 3D designs from their GitHub repo. I don't want to copy everything at the moment since I only need the 3D designs to build upon for this week:

cd 3d_design
git init #initializes the directory for cloning files from the repo
git remote add origin git@github.com:Mentra-Community/OpenSourceSmartGlasses.git #setting it up using the ssh key I already have initialized on my github, check week 01's tutorial
git config core.sparseCheckout true #enables us to only clone a specific subset of files
echo "mechanical/*" >> .git/info/sparse-checkout #specify the folder to clone
git pull origin main #pull the files

I opened the files in Fusion 360:

Mentra files opened in Fusion 360

What I wanted to do to practice 3D design was to start designing it myself in my own file. So we start by having a simple sketch of the glasses frame. I could have a starting point by importing the design from Inkscape as an SVG and editing it to fit the needs of the actual design. I also ensured the right naming convention:

SVG imported as reference sketch

After that, I unfixed the lines of the sketch so I could freely edit them and their sizes, but I faced the problem that all the constraints were greyed out:

Greyed out constraints issue

I faced a lot of errors trying to fix this issue, so I decided to sketch it from scratch in Fusion 360 since the imported lines are considered curves, not actual lines. I ended up using that sketch as a reference and redrew it in Fusion.


Here are the steps I followed:

Step 1: Created a sketch for the reference dimensions, meaning the upper width and the side lengths that connect with the hinges. I created two parameters here: frame_width (135 mm) and frame_sides (frame_width/11)

Step 1: Reference sketch with parameters

Step 2: Imported the SVG design from my logo, since I wanted the glasses to still represent the logo while being in a shape that suits my face

Step 2: Imported SVG logo as reference

Step 3: Traced the original design, making sense of the dimensions so all the lines turn white, which makes it easier to edit and work on the model in the future. Tools used: mirror, project, coincident, horizontal alignment, control point spline, offset to create a general guide for the lenses, auto_constraint, and mirrored the design from the left to the right side.

Step 3: Traced design with constraints

Step 4: Created a curved surface in a construction mode rectangle that enclosed the glasses, and used the control point spline to create the curvature I wanted

Step 4: Curved surface construction

Step 5: Created a 3D surface from that curve and extruded it:

Step 5: Extruded 3D surface

Step 6: Projected the glasses design onto the curved surface:

Step 6: Projected onto curved surface

Step 7: Used the patch tool on the 3D surface:

Step 7: Patch tool applied

Step 8: Trimmed the design to cut out the lenses:

Step 8: Trimmed for lenses

Step 9: Thickened the frames:

Step 9: Thickened frames

3D video of the design:


Compressing Image and Video Files

I used ImageMagick to handle the conversion and compression of all the images this week. First, I converted all 24 PNG screenshots to JPG format using:

convert input.png output.jpg

Then I compressed all the converted JPGs in one go using mogrify, setting the quality to 50% and resizing to a max of 1000 pixels. The original PNGs totaled about 21 MB and after compression the JPGs came down to about 1.07 MB:

mogrify -quality 50% -resize 1000 *.jpg

For the video, I used ffmpeg to compress the screen recording from the original 53 MB MOV file down to 1.82 MB. I used H.264 encoding with a variable bitrate at CRF 25, scaled to 1080p, with MP3 audio:

ffmpeg -i input_video.mov -vcodec libx264 -crf 25 -preset medium -vf scale=-2:1080 -acodec libmp3lame -q:a 4 -ar 48000 -ac 2 output_video.mp4

Compression Prompt

Here is the prompt I used with Claude Code to handle the image and video compression process:

"I have a week of Fab Academy documentation with images exported as PNGs and a screen recording MOV file. Please do the following:

  1. Convert all the PNG images to JPG format using ImageMagick's convert command
  2. Name them in order of appearance as week_XX_01.jpg, week_XX_02.jpg, etc.
  3. Compress all the converted JPGs using mogrify with quality 50% and resize to 1000px max: mogrify -quality 50% -resize 1000 *.jpg
  4. Compress the screen recording MOV file using ffmpeg with H.264 variable bitrate encoding, CRF 25, scaled to 1080p, with MP3 audio: ffmpeg -i input.mov -vcodec libx264 -crf 25 -preset medium -vf scale=-2:1080 -acodec libmp3lame -q:a 4 -ar 48000 -ac 2 output.mp4
  5. Move all compressed files to the docs/images/ folder
  6. Update the markdown file with the correct file paths and names"

Original Design Files

Logo SVG file:

logo design

Glasses front design only:

glasses_front.svg

my_glasses_frame_design.step


This week's checklist

  • Modeled experimental objects/part of a possible final project in 2D and/or 3D software
  • Shown how you did it with words/images/screenshots
  • Documented how you compressed your image and video files
  • Included your original design files