Recent diary entries
Google Summer of Code is over, and the 3D model repository was successfully completed, with great results: all the requirements are accounted for, and there were a few extra features implemented.
In August, many crucial features were added: model uploading, map, nightlies, administration of the models, comments and users, and finishing both documenting and implementing the API. I’ve also done lots of polishing, namely in the documentation, caching the models, layout improvements and fixed lots of issues in general, from bugs to simple color changes. The extra features that were added are model editing and revising, letting users alter the submitted models.
The model uploading page, allowing users to add new models to the repository, and specify their metadata, including title, description, their coordinates (which they can pick on a Leaflet map), license and transformations.
The most noticeable feature here is the marker map, showing the position of the model, as well as the models around it. This is also available as a full page in the ‘Map’ page. The revising feature allows users to upload a new revision of a model they own, keeping its metadata, and the editing feature allows them to edit the model’s metadata. Admins can hide/unhide models. Hidden models are still viewable by other admins. Comments can be hidden in the same way as models. There is also a ‘3D View’ tab, which is displayed by default, which has been the subject of the previous diary entry.
An excerpt of the API docs, showing the live testing of the full search endpoint, so that anyone using the API can test the most complex features right in their browser, speeding up development time.
Stay tuned for the next diary entry for the upcoming launch!
With the front end design of the repository complete, I’ve been working on the backend. So far, most of the pages have been implemented, namely the homepage and the model information and search results pages.
The search page. Note that there's a single result per page, for testing.
The user page has also begun to be implemented.
The current state of the user page. Notice the presence of my avatar.
It was decided to use the PostgreSQL database, and the Django framework for quickly implementing all these pages. The database schema has also been agreed upon since the last diary entry.
The conceptual model that was decided on.
In terms of implementation of this schema into Django models, it was almost a direct conversion, except the tags: we used a HStore field for them, as suggested by pnorman on IRC. The banned_by and banned_date fields were also removed from the user, and a Ban Table was made instead.
Furthermore, since no major issues have come up, I’ve managed to add a commenting feature, so that users can comment on models, and model revisions, to serve as a beginning for editing models. Hopefully this feature will be present at the end of GSoC. I’ve also implemented the live preview, one of the most interesting parts of the project, using THREE.js so that users can see a preview of the model right in the repository, in their browsers, without explicitely downloading a file and opening it themselves. Starting off, it will just support the Wavefront OBJ format.
The current state of the model information page, showcasing the commenting feature and a model of the Eiffel Tower being displayed in the live preview.
The REST API is also progressing fairly well, most of the endpoints have been implemented, namely the info get and model get endpoints, search by latitude and longitude and the author, category and tag lookups. In the next couple weeks, I will be working on the upload model page, and the administration of the repository.
Copyright note: the Eiffel Tower model was taken from https://3dwarehouse.sketchup.com/model/98810fe9c4f57f1141ba0f9fe83c1fd/eiffel-tower, in OpenCOLLADA format, then converted with Blender to Wavefront OBJ.
The first coding period of the Google Summer of Code has begun! So far, I've worked on a draft for the REST API, which you can see here, so that we can iterate on it, and 3D visualizers for OSM can start planning their implementation. I've also designed all the web pages that will be used for the 3D Model Repository, using Bootstrap, as can be seen at the end of this entry.
I have also changed how the nightlies were generated from my original proposal, which defined them as a collection of the most important models, to having all the models in the nightlies, so that you can get all files from the repository by downloading all of them. They will be in separate size-limited chunks now, to make it easier to download versus a big file.
Now that my semester is over, the pace should pick up quite a bit, with the full design of the database schema, integration of the web designs into Django and OAuth authentication planned until the end of the month.
Finally, we now have a (possibly temporary) repository on GitLab!
New design of the homepage, with the new alternative model panel design.
User page design, notice the presence of the user's description, a list of their models, their latest changes to the repository, and their avatar. The pagination at the bottom was omitted.
API documentation page design.
Hi! I’m Pedro Amaro, an undergraduate student from Portugal. Currently, I’m studying Informatics and Computing Engineering at FEUP (Faculty of Engineering of the University of Porto). I will be working on a project for the OSM community for Google Summer of Code 2017. I took a special interest in OSM for my GSoC proposal, as I had used it before multiple times, mostly to know my bearings and also in the FlightGear flight simulator.
One of the most interesting suggested projects, that mixed some of my interests, including 3D graphics and web applications, was the implementation of a 3D Model Repository. This project consists of implementing a repository for 3D models, where users can upload freely licensed models and their metadata to it, so that 3D visualizers can use this data to render beautiful graphics for buildings (such as the Eiffel Tower) or smaller features such as trees. After a lot of back and forth with the project proposal with Tordanik, I submitted it, and around a month later, was accepted.
In my proposal, I had suggested using OpenLayers as the API for drawing maps in the repository, and having the live 3D preview of models be optional. Upon further discussion, we decided to change the API to Leaflet and start working on the preview early in the summer, by June.
To explore both ideas, I built a small demonstration of each, to get acquainted with the tools I will be using, namely Leaflet and Three.js.
Leaflet API demo
Three.js OpenCOLLADA demo
The Eiffel Tower model was made in Sketch Up by joe89v, and exported as an OpenCOLLADA model. The model can be found here.