Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

3dMake Foundation Final Exam

Name: _________________________ | Date: ____________

Total Points: 100 (4 points per problem)

Instructions:

  • Answer all 25 questions
  • For code errors, identify the specific problem and explain why it’s wrong
  • For behavioral questions, show your reasoning
  • For design problems, explain your approach and why it solves the stated challenge
  • You may reference the OpenSCAD documentation and appendices
  • All work must be your own

Section 1: Error Detection & Code Analysis (Problems 1-10)

For each code block, identify any errors. If there is an error, explain what’s wrong and how to fix it. If the code is correct, state “No error” and explain what the code does.


Problem 1: Primitive Definition Error

cube([10, 10, 10], center=true);
sphere(r=5, $fn=16);
cylinder(h=20, r=8);

Question: Is there an error in this code? If yes, identify it. If no, explain what this code renders.

Answer: ________________________________________________________________



Problem 2: Transform Syntax Error

translate([5, 5, 0])
  rotate([0, 45, 0])
    cube([10, 10, 10], center=true);

Question: Does this code have a syntax error? Explain what this code does.

Answer: ________________________________________________________________



Problem 3: CSG Operation Error

cube([20, 20, 20], center=true);
difference() {
  sphere(r=12);
  cylinder(h=30, r=5, center=true);
}

Question: What is wrong with this CSG operation? Explain the fix.

Answer: ________________________________________________________________



Problem 4: Module Definition Error

module bracket(width, height, depth) {
  cube([width, height, depth], center=true);
  translate([width/2 + 2, 0, 0])
    cube([4, height, depth/2], center=true);
}

bracket(20, 15, 10);

Question: Is there an error in this module definition or call? Why or why not?

Answer: ________________________________________________________________



Problem 5: Parameter & Variable Scoping Error

wall_thickness = 2;

module hollow_cube(size) {
  difference() {
    cube([size, size, size], center=true);
    cube([size - wall_thickness, size - wall_thickness, size - wall_thickness], center=true);
  }
}

hollow_cube(20);

Question: Will this code work correctly? If not, what is the problem and how would you fix it?

Answer: ________________________________________________________________



Problem 6: Loop & Iteration Error

for (i = [0:5:20]) {
  translate([i, 0, 0])
    cube([4, 4, 4]);
}

Question: Will this code produce 5 cubes? Show the positions and explain why or why not.

Answer: ________________________________________________________________



Problem 7: Center Parameter Misunderstanding

cube([10, 10, 20], center=false);
sphere(r=5);

Question: What is the relationship between these two shapes? Where would the sphere appear relative to the cube?

Answer: ________________________________________________________________



Problem 8: Intersection Error

intersection() {
  cube([20, 20, 20], center=true);
  sphere(r=8, $fn=32);
}

Question: Is there an error? What will this code render?

Answer: ________________________________________________________________



Problem 9: Nested Transform Error

translate([10, 0, 0])
  rotate([0, 0, 45])
    translate([5, 0, 0])
      cube([5, 5, 5], center=true);

Question: Are the transforms applied in the correct order? Trace the final position of the cube.

Answer: ________________________________________________________________



Problem 10: Resolution Parameter Error

sphere(r=10, $fn=4);
cylinder(h=20, r=8, $fn=3);
cube([10, 10, 10]);

Question: Identify the problem(s) with resolution in this code. What will happen when rendered?

Answer: ________________________________________________________________



Section 2: Code Behavior & Theory (Problems 11-17)

For each question, show your reasoning. You may draw diagrams if helpful.


Problem 11: Vertex Coordinates

Question: A cube is defined as cube([10, 10, 20], center=false).

a) List the XYZ coordinates of all 8 vertices.

Answer:

  • Vertex 1: _______________
  • Vertex 2: _______________
  • Vertex 3: _______________
  • Vertex 4: _______________
  • Vertex 5: _______________
  • Vertex 6: _______________
  • Vertex 7: _______________
  • Vertex 8: _______________

b) Now define the SAME cube with center=true. List the NEW coordinates of all 8 vertices.

Answer:

  • Vertex 1: _______________
  • Vertex 2: _______________
  • Vertex 3: _______________
  • Vertex 4: _______________
  • Vertex 5: _______________
  • Vertex 6: _______________
  • Vertex 7: _______________
  • Vertex 8: _______________

Problem 12: Sphere Geometry

Question: Explain the difference between sphere(r=10, $fn=8) and sphere(r=10, $fn=128).

Which would you use for a prototype and which for final printing? Why?

Answer: ________________________________________________________________




Problem 13: Transform Order

Question: Given this code:

translate([10, 0, 0])
  rotate([0, 0, 45])
    cube([5, 5, 5], center=true);

Does the order matter? What if you swap translate and rotate? Show both final positions.

Answer: ________________________________________________________________




Problem 14: Boolean Operation Behavior

Question: You have a solid cube and you want to create a hole through it. Which CSG operation would you use: union(), difference(), or intersection()?

Explain your choice and write pseudocode showing how you’d accomplish this.

Answer: ________________________________________________________________




Problem 15: Parametric Design Advantage

Question: Compare these two approaches:

Approach A: Hard-coded cube with fixed dimensions

cube([10, 10, 20]);

Approach B: Parametric cube

module parametric_box(width, height, depth) {
  cube([width, height, depth], center=true);
}

parametric_box(10, 10, 20);

Why is Approach B better for design iteration? Give an example of how you’d use it.

Answer: ________________________________________________________________




Problem 16: Scale Transform Behavior

Question: If you apply scale([2, 1, 0.5]) to a cube([10, 10, 10], center=true), what are the NEW dimensions of the cube?

Answer: New dimensions: _______________

Show your calculation:




Problem 17: Library Organization

Question: You’ve created three useful modules:

  • bracket(width, height, depth)
  • hollow_cube(size, wall_thickness)
  • connector_pin(diameter, height)

How would you organize these into a reusable library? What file structure would you create and why?

Answer: ________________________________________________________________




Section 3: Design & Problem-Solving (Problems 18-25)

These problems test your ability to design solutions, debug real-world issues, and think creatively.


Problem 18: Tolerance Design Challenge

Question: You’re designing a snap-fit connector. The male part has a thickness of 2mm. The female slot needs to accommodate this part with enough flexibility to snap but not fall out.

Should the slot be: a) Exactly 2mm wide b) 2.1mm wide c) 1.9mm wide d) 2.5mm wide

Explain your choice and the design thinking behind it.

Answer: ________________________________________________________________




Problem 19: Design Iteration Problem

Question: You print a keycap with key_size=12 and the text embossing is too shallow to feel. Your code uses:

linear_extrude(height=1)
  text("A", size=8);

What parameter(s) would you adjust to make the embossing deeper? Show your new code.

Answer: ________________________________________________________________




Problem 20: Error Diagnosis

Question: Your 3dMake build fails with this error: “Geometry is non-manifold.” You have this code:

difference() {
  cube([20, 20, 20], center=true);
  cylinder(h=30, r=4, center=true);
}

Why might this fail? What’s the common fix for non-manifold geometry?

Answer: ________________________________________________________________




Problem 21: Multi-Part Assembly

Question: You’re designing a two-part box (lid + base). The base has dimensions [50, 30, 20]. The lid should sit on top of the base.

Write parametric modules for both parts and show how you’d position them together. Include appropriate positioning logic.

Answer:

module base(length, width, height) {
  // Your code here
  
}

module lid(length, width, height) {
  // Your code here
  
}

// Positioning code here:


Problem 22: Optimization Challenge

Question: You have a design that takes 5 minutes to render. You notice you have:

sphere(r=10, $fn=256);
cylinder(h=20, r=8, $fn=256);
cube([20, 20, 20]);

Which parameter(s) would you reduce to speed up rendering while maintaining acceptable quality for a prototype? Explain your choices.

Answer: ________________________________________________________________




Problem 23: Real-World Constraint Problem

Question: A stakeholder requests a custom handle for a tool. They specify:

  • Must fit a hand (approximately 80mm long)
  • Must accommodate fingers 60mm long inside
  • Wall thickness must be at least 3mm for durability
  • Should be ergonomic (slightly curved)

Sketch or describe a parametric design for this handle. What parameters would you expose to allow customization?

Answer: ________________________________________________________________





Problem 24: Code Reusability Challenge

Question: You’ve created a single keycap module. Now you need to create a keyboard with 5 keys arranged in a row. Keys are spaced 15mm apart.

Write code using a loop that creates 5 keycaps with letters A-E, properly spaced.

Answer:

module keycap(letter, key_size=10) {
  // Keycap code here (you can assume this exists)
}

// Your loop code here:


Problem 25: Design Thinking & Iteration

Question: You’ve printed Iteration 1 of a product and measured the results. The wall thickness is 3mm but feels too fragile. In Iteration 2, you increased it to 5mm, and now it feels too rigid and won’t flex as intended.

For Iteration 3, what thickness would you try and why? How would you make this decision more scientific/data-driven?

Answer: ________________________________________________________________





Bonus Challenge (Optional, +5 points)

Question: Design a parametric model for a custom assistive technology device (e.g., a tactile measuring tool, a custom gripper, an adapted eating utensil, etc.).

  • Identify the user’s specific need
  • Specify the key dimensions and parameters
  • Write at least one module with realistic dimensions
  • Explain how the design would be tested and iterated

Answer:

// Your design here:

User Need: _________________________________________________________________

Parameters: _________________________________________________________________

Testing Plan: ________________________________________________________________



Scoring Rubric

Points per ProblemCriteria
4Correct answer with clear, complete explanation; demonstrates deep understanding
3Mostly correct answer; minor gaps in explanation or reasoning
2Partially correct; shows some understanding but has significant gaps
1Minimal effort; shows limited understanding
0No answer or completely incorrect

Total Possible: 100 + 5 bonus = 105 points


References You May Use


End of Final Exam

Submission Instructions:

  1. Answer all 25 questions completely
  2. Show your work for calculations and reasoning
  3. Include code samples where requested
  4. Submit as a PDF with your name and date
  5. Scoring will be based on correctness, clarity, and depth of understanding

Good luck! [celebration]