Brief summary of Project
The project aims to design a FreeCAD models library management tool that can fetches the content online from different repositories, without the need to download the whole library. The library management tool to be developed should be able to :-
- browse the existing dataset of all the models
- download individual models
- manage user models
- insert components into FreeCAD document
- structured online repository storage system
- local storage structure
Project Description (Detailed)
Introduction
A library management add-on for managing Different online-offline FreeCAD components is a utility application for FreeCAD which allows an easy and structured management of components/models available online or offline and to easily be inserted into the FreeCAD document.
Its basic functionalities is to facilitate individual component from the online repository to be able to browsed, downloaded, and extended by already available local components.
For a Library management system, a robust repository of data and an local storage structure is must. This is important as user need to brows through the all the existing models which are the part of the repository and download only selective models. A structured local storage will not only also allow users to easily add their own models to the local library management system, but also to the online repository open to public. For maintaining the metadata of these, a well defined storage structure is required.
All this need to have an proper interface to be operable. The interface for the above will be developed as both a Graphical Interface and module for python scripting.
Information and current state
At current state, the online repository is hosted on GITHUB and is available to be download through a add-on of FreeCAD which downloads the whole repository which is of very big size 1.5GB+ .
Functional Requirements
Browsable online repository
All the components present in the open-source online repository will be made browsable to the user. The components will be loaded in chunks as the user scrolls through the models. The models can be previewed in a grid view and its GUI is discussed in further sections.
Following functionalities will be developed for easy browsable library of parts :-
- Sorting
- Filtering
- Searching
The information required for thumbnails, sorting, filtering, etc. will be fetched in chunks from the metadata of the components in the repository.
Loading data in chunks will make the user experience smooth as fetching time will be less.

Individual Downloadable components
The components being browsed will be downloadable individually. These components can be reviewed before through thumbnail and meta data before being downloaded.
Once downloaded, the component will be stored along with the other components in the Local Storage Structure which is discussed in further sections.

Adding user components to the library management system
All the downloaded components will be visible in the My Models section of the GUI which will be discussed in the further sections. But the user will be able to add their own components to the management system.
This will be made possible by adding the user components to the Local Storage Structure along with the metadata for a unified and structured storage and management of components.
This will make it easy for the user to maintain their own local repository of the components which can be accessed, browsed and used from a single unified interface.
Metadata management
Metadata is the data about data(in out case components). It helps understand the data behind and provides information about the components. This are supporting data which need to be independent of the the components itself and helps users and system by providing with additional information which are mandatory.
The metadata of the Components Library Management system is important for browsing through a large amount of components present in repository as the component itself is not needed to be fetched for browsing before it is downloaded. For this reason the metadata is to be available an downloadable irrespective of the component itself. This will be done by maintaining a separate database of all the components with unique component-ID. This metadata will facilitate searching, sorting and filtering
List of Metadata :-
Required:
- name
- version
- maintainer (email)
- license (file)
- URL (component)
- created on
- modified on
- type (type of file)
- size (component size)
Optional: - author (can be multiple, emails)
- thumbnail
- description
- rating (out of 5)
- tags (can be multiple)
Insertion of available local/downloaded components to the document
The already available components that is needed to be added can be done through the interface. The user need to specify the component path and add some mandatory metadata before the component can be made available thought the Library Management Tool. The addition of this new component will follow the structure of the Local Storage.
Uploading of user models to online repository
The user can submit their own models to the online repository can contribute to the open-source. There will be compatibility between the online Repository of components and the Local Storage structure which is discussed below.
Interface
Graphical User Interface
Below is the structure and parts of the GUI of Library Management tool.

Wireframe :-

Python Module
A python module will be developed for facilitating the scripting of various parts the library management system. It will include all the functionalities of functional requirement and insertion of components into script.
Below design of the modules and the sub-modules.

Database of open-source models (online Repository)
A new structured way of storing components is proposed which will separate the maintenance component from management of components for online repository. The basic schema of the proposed solution is shown below.

_Complete schema of metadata and tags is discussed below_In this structure, maintenance of components can be done independently from the management of repository. This is possible as the components can be from different locations or repositories, but there data can be maintained and tracked from the management section.
Every component will have a URL which can be used to track it and as the source to download it. All the additional and meta data can be stored and maintained in a database with the above specified schema.
Local Storage Structure
Local storage structure needs to be compatible and maintainable with the online repository. Its structure is similar to the structure of the online database of the components so that components can be easily downloaded and uploaded without and conflicts.
Database schema of the local storage structure is shown below.

_Complete schema of metadata and tags is discussed below_The storage to components on the filesystem of the local user machine will be as shown below.

Metadata Storage Structure

Tools and Technology
• Python
• PyQt/PySide (as required)
• Qt Designer
• Qt Creator
• git (for maintainance)
• sqllite
Documentation
All the python modules will be will documented following PEP 8 – Style Guide for Python Code.
Additionally, markdown files will supplement the user guidelines and additional data or documentation required.
Working Schedule
Till May 28 (Analysis and Design Period)
• Requirement Analysis
◦ Going trough code base
◦ Coding norms and standards
◦ Discussion with mentor
◦ exploring FreeCAD software
• Creating Software Requirement Specifications Document
◦ introduction
◦ Overall Description
◦ Interface requirements
◦ System Features(Functional requirements)
◦ Non functional requirement
• Creating Design document
◦ Creating modules structure
◦ Class Object Diagrams
◦ Use-case diagrams
◦ Data-flow Diagrams
• Discussion of Final Development Planning, strategies and structures with mentor
May 28 to July 14 (Development Phase) – 7 weeks
May 28 – June 10 (2 weeks)
• Designing of online repository structure
• Designing of local storage structure
• Synchronising/porting existing data to the new system
• Testing
June 11 – July 1 (3 weeks)
• Designing of modules
◦ making a module to insert component in the FreeCAD document
◦ designing processes for specified functional requirements
• Designing of API
• Running unit tests
• Running integration tests
July 2 – July 14 (2 weeks)
• Designing GUI interfaces
◦ making UI files
◦ gathering UI resources
◦ testing the UX and integrity/ responsibility
• Implementing and integrating python modules with the GUI
◦ making threads for different concurrent services
◦ making a pagination/ chunk loading of components
◦ interfacing the modules with their respective UI components
July 14 to August 21 (Clean-up and wrap-up)
• Code Clean-up
• Write a blog for public visual
• System Testing
• Integration Testing
• Documentation
◦ revising the module documentation-strings
◦ making the user manual
◦ making a documentation of the library from module doc-string and additional data
• Packaging the application
• Final Code submission
Time Availability
• I can devote 40-50 hours per week
• I will spend more time if needed also will carry on extensive experiments
Why FreeCAD?
I am motivated to do open source contribution as I really admire the open-source community and try to use as much open-source software as I can. I have also used FreeCAD before while just tinkering around and found it the best open-source alternative to other proprietary software out there. I am eager to develop solutions and add value to the community and my resume. By participating in GSOC I intend to strengthen my technical skill but more than anything else I want to make Linux operating system more appropriate to day to day use and want more and more people to use it. Through FreeCAD, I want professionals of the relevant fields to give Linux a try and be a part of open-source community.