GtkCAD

Free modular CAD/CAM/CAE Software


Home

Requirements

Design

Screenshots

FAQ

Project Page

SVN

Bugs

Links

Design Philosophy

GtkCAD is an attempt to create a complete design environment based on a spiral or evolutionary design methodology. This design method can be best summed as follows.

  • Requirements - In this stage, you discuss the potential design with the client and develop a statement of purpose and a prioritised list of desired features.
  • Conceptual Design - In this phase you determine if it is even possible to meet the requirements, or if you will have to modify the requirements. Several different designs may be produced for preliminary evalulation. Preliminary 3D models are created and optimization programs are used during this phase. Usually a design proprosal is written at the end of this phase.
  • Preliminary Design - In this phase one of the proposed designs is chosen as being the best to meet the requirements and the design is finalized and evalulated more fully. For example CFD and FEA calculations would be preformed during this phase. The 3D model is completed during this phase.
  • Detailed Design - During this phase the 3D model is used to create 2D construction drawings for use by the builder. During this phase all CAM programs are written and verified.

Database

GtkCAD needs to maintain a complete database of all data created during all phases so reports may be written and data shared among designers, engineers, and clients. Each individual will have varying rights to modify and view the data. Multiple users must be anticipated. With these requirements in mind, a SQL database was chosen to store the data.

Modules

GtkCAD code is divided into different modules, each one only doing some concrete tasks. Each module has been written as an isolated part (this has two meanings: each module has its own directory in the source tree and besides its relationship with other modules is intended to be minimal, making as few dependencies as possible).

GtkCAD modules have a well defined directory structure. The core functions of the program reside in the toplevel directory. All components related to the UI are located in 'UI'. All components that allow the communication of data with the database is in 'DB'. Routines used to test the plug-in is in Testing. Also included are the directories 'Docs' and 'Examples'.

Only the needed functions and data of a module have to be accesible to others; this access has to be made via a well defined API. This API can be seen in the sources as a file named "module".h in that module directory. Other modules calling our module will need to include this header file defining these public entry-points and datastructures.

Also, all public functions (entrypoints that will be called by GtkCAD) should have names beginning with the name of the module. Same for public datastructures. Internal functions and datastructures can be named as coder wish.

Using this design, each module appears to others as an abstract layer and when it needs some service (data or actions) from other (or vice versa, when there is it who have to do that) only a few well defined functions and data should be used. Doing this way we avoid some inherent common problems huge projects always have.


Contact H. James Parker at developer at parkersailing dot com