# Rhino Guided Exercise
Task: Model the following Lego piece in Rhino.

---
## Interface
1. **Views**
- Rhino uses multiple viewports to display your model from different angles (Top, Front, Right, Perspective, etc.).
- You can maximize a viewport by double-clicking its title or switch between views using the *Viewport Tabs*.
2. **Layers Pane**
- Layers help organize your model by separating different parts or components.
- Use the *Layers* panel to create, rename, and manage layers. Assign objects to layers to control visibility, color, and linetype.
3. **Properties Pane**
- The *Properties* panel displays information about selected objects, such as their dimensions, material, and layer.
- It’s also where you can adjust object attributes like color and linetype.
- Most important for 3D printing: open/closed.
4. **Selection Filters**
- Use selection filters to limit what types of objects can be selected (e.g., curves, surfaces, points).
- Access filters via the *Selection Filter* toolbar or by typing `Sel` + the object type (e.g., `SelCurve`).
5. **OSnaps (Object Snaps)**
- OSnaps help you accurately place points by snapping to specific locations on objects (e.g., endpoints, midpoints, centers).
- Common OSnaps: End, Mid, Cen, Int, Perp, Near. Enable/disable them in the *OSnap* toolbar or status bar.
6. **Commands and Command Window**
- Rhino is command-driven. Type commands in the *Command Line* or use toolbars/menus.
- Press `Enter` or `Right-Click` to execute a command. Use `Esc` to cancel.
- Pressing `Enter`, `Right-Click` or `Space` when the Command Window is empty will repeat the last command.
- The *Command History* shows previous commands for reference.
7. **CPlane and World Coordinates**
- The *Construction Plane (CPlane)* defines the active working plane for drawing and editing.
- The *World Coordinate System* is the global reference for all objects. Use `CPlane` commands to adjust the working plane.
---
## Drawing 2D Shapes
1. **Rectangle**
- Command: `Rectangle`
- Draw rectangles by specifying corner points or using options like `Center`, `3Point`, or `Vertical`.
2. **Circle**
- Command: `Circle`
- Draw circles by specifying the center and radius or using options like `Diameter`, `3Point`, or `Tangent`.
---
## Moving Objects
1. **With the Gumball**
- The *Gumball* is a interactive tool for moving, rotating, and scaling objects.
- Click and drag the arrows to move, the circles to rotate, or the squares to scale.
- Hold `Alt` while dragging to create a copy of the object.
2. **With the Move Command**
- Command: `Move`
- Select objects, specify a base point, and then a destination point.
- Hold `Shift` to constrain movement to perpendicular directions. Use `Tab` to lock movement along a specific axis.
---
## Selecting Objects
- **Left to Right Selection**: Selects objects entirely within the selection window.
- **Right to Left Selection**: Selects objects that touch or are within the selection window.
---
## Making Volumes
There are many strategies to create 3D volumes: using primitives, Boolean operations, extruding, revolving, etc.
### Extruding
- Command: `Extrude`
- Select a 2D shape (e.g., a rectangle or circle) and use the *Gumball* or specify a distance to extrude it into a 3D volume.
### PushPull (New in Rhino 8)
- Command: `PushPull`
- Click and drag faces of a 3D object to modify its shape interactively.
### Offset
- Command: `Offset`
- Create a parallel copy of a curve or surface at a specified distance.
---
### Boolean Operations
1. **Boolean Union**
- Command: `BooleanUnion`
- Combines multiple objects into a single object.
2. **Boolean Difference**
- Command: `BooleanDifference`
- Subtracts one object from another.
3. **Boolean Intersection**
- Command: `BooleanIntersection`
- Keeps only the overlapping portion of objects.
#### Using OSnaps
1. Build a **Cylinder** centered on one of the top face pins.
- Command: `Cylinder`
- Use OSnaps like `Cen` to place the center accurately.
2. Move the cylinder down to its position using the **Move** command.
- Command: `Move`
- Use OSnaps like `End` or `Mid` for precise placement.
3. Create 7 more copies with the **Array** command.
- Command: `Array`
- Use options like `Rectangular` or `Polar` to create copies in a pattern.
4. Use **BooleanUnion** and **BooleanDifference** to combine or subtract the resulting closed polysurfaces.
---
### Exercise
Build the rest of the Lego piece using a combination of the above strategies and commands.
---
## Other Important or Neat Commands
- **Distance**: Measure the distance between two points.
- **Trim**: Cut objects at their intersections.
- **Join**: Combine multiple objects into a single object.
- **Fillet**: Create rounded edges between curves or surfaces.
- **Chamfer**: Create beveled edges between curves or surfaces.
- **FlowAlongSrf**: Deform an object to follow a surface.
- **Sweep**: Create a surface by sweeping a profile along a path.
- **Loft**: Create a surface by blending between multiple curves.
- **Zoom Selected All Viewports**: Zoom to the selected object in all viewports.