Originally, we wanted our project to provide the user with both a drawing file that they could download and laser cut, and a 3D render that would display on screen and that would reflect the parameters input by the user. We realized that within the scope of the project it would be too difficult to focus on both a 3D model and a 2D render, and thus we decided to focus on providing the user with only a laser cut file.
We used our first technical review to better understand user needs, realizing that users wanted a visualization of their result but were not particularly picky that it be exact.
Our initial concept also included more input variables, but after building our mechanical model we decided that we could still achieve very similar effects by only asking the user for their weight and preferred stiffness. The diagram at left represents an early stage concept for the website.
We also broke the project into three distinct chunks and clearly defined how each chunk interacted with the other. This allowed us to be able to work independently and then integrate when we were able to meet in person.
The chunks were:
To make sure that each person's section interacted as we intended we built a basic website which generated a single hexagon. It started with an input of mass from the web interface that was then converted to a side length by the mathematical model. We took this sidelength and instead of generating and returning a full skateboard generated a single hexagon. This tested out the interactions between the different pieces of our software and helped us to discover the feasibility and scope of each system.
From there we iterated on each block of code to refine the interactions and ultimately produce board CAD at the very end.
By the second technical review, each of the major pieces of our project had been implemented with limited functionality, but not all pieces were necessarily integrated:
We feel our process was effective. Overall, each teammate was prepared to understand how their piece of the project would integrate with those of other teammates, and starting small and scaling up allowed us to test early on before the project became more complicated.
The code below illustrates how we were able to easily scale and integrate our components together. Within our main python script (main.py), flask gets the values input by the user, riding_weight
, and riding_style
, and uses them as inputs to board_math
. We then send the outputs to hexdraw
, which creates a .dxf file that we then display. Whether we were working on a skateboard or a hexagon, having this structure implemented early made it easier to make changes further down the line.
Outputs = board_math.board_math(rider_weight,riding_style)
# Call hexdraw.py to generate DXF
filename = hexdraw.hexdraw(Outputs[0],Outputs[1])
# Make filename access file at this location -- see below @app.route('/static/<filename>')
filename = 'http://127.0.0.1:5000/static/' + filename
return render_template('download.html', filename=filename)