## Purpose of Project
The goal is to capture high-resolution screenshots or vector graphics of gear items from their manuals and annotate the positions of dynamic interface elements (buttons and knobs). This will enable us to integrate all the gear interfaces into an online web database, allowing users to interact with the interfaces for educational and creative purposes.
## Object-Oriented Approach
We’ll use object-oriented programming principles to create classes that define the structure for different gear, providing constructor arguments to describe each gear item.
The class defines the shape of the data structure in detail, making it easier to construct data later.
An object allows you to quickly create an instance of a class using a few constructor arguments to specify its unique attributes.
When designing the class’s arguments, it’s beneficial to keep them as minimal as possible to reduce the number of instructions needed. As an analogy, if you know that all people share common attributes, you don’t need to describe each person as having 46 chromosomes, a circulatory system, or a nervous system. Instead, you focus on the unique characteristics, such as personality traits, careers, and specific physical appearances.
When defining the class, we clearly specify the shape of the data. Here, we would be explicit, such as defining a human as having a circulatory system. You might also consider class inheritance (for example, the class human inheriting from the class primate), but for gear manual entries, we don’t require that level of complexity when describing the shape of the data and its specific attributes.
## Example of Conceptual Breakdown

### Classes
I’ve decided to split the items in the interface into 2 different classes:
- Knob
- Button
I’ve chosen to define the classes as follows:
- Knob
- Constructor Arguments:
- Center Pixel Position X
- Center Pixel Position Y
- Radius
- Knob Values Object {Angle1: Value, Angle2: Value}
- Color (optional)
- Roundness Styling: (optional)
- Constructor Main Method Call
- Generate Knob from Knob Library
- Leverage Global Offset
- Button
- Constructor Arguments:
- Bottom Left X Position (required constructor argument,])
- Bottom Left Y Position (required constructor argument)
- Diagonal Distance Vector, X Coordinate (required constructor argument)
- Diagonal Distance Vector, Y Coordinate (required constructor argument)
- Color (optional)
- Roundness Styling: (optional)
- Constructor Main Method Call
- Generate Button from Button Library
- Leverage Global Offset
## Class Implementations (Objects)
In the above example, we have 5 knobs and 8 buttons. They are described in the gear screenshot spreadsheet as follows. Each class instance is denoted by closed parentheses indicating the number of instances. The parameters are listed as empty elements for now, to be filled in later.

## Collect Screenshots
Capture high-resolution screenshots of the interface pictures within the gear manuals. Zoom in as much as possible before capturing the screenshot, ensuring that you clearly snip the correct area so it looks nice and is logically consistent with other screenshots from the same interface. For complex gear, like the SSL Duality, multiple screenshots may be necessary to display the various elements of the interface. Don’t worry about capturing too many screenshots; it's relatively easy to annotate them to create interfaces, and we can always create additional interfaces later if needed.
Store the screenshots in the associated Google Drive folder for the gear manuals, within a subfolder called `<Gear Name> - Gear Screenshots`, for example, `SSL Duality - Gear Screenshots`.
Open the Gear Screenshots spreadsheet. The first column’s entry should describe the name of the screenshot (starting with `<Gear Name> - <Gear Function>`, for example, `SSL Duality - Foldback B`). Document the class types according to the guidelines from the constructor arguments outlined above, and document the specific Class Implementations (Objects with constructor arguments).
Use GIMP to make the correct measurements and input them into the spreadsheet.**