Introduction:

The Windmill application framework is designed to create robust and structured applications which are both modular and maintainable. The framework is made in c#, and based on .net. Examples of typical applications include technical and scientific applications, finite elements, simulators, and CAD or CAE like operations. The framework is built upon well known design patterns, which are combined in a consistent API. One of the concepts used is the isolation of object dependencies; This forces developers to build their modules in such a way that inappropriate object dependencies are reduced, while appropriate dependencies are handled in a uniform, understandable, and manageable fashion. The result is an application that is well organized and easy to extend.   

Project based approach:

Projects play a central role in the framework, and an application can have one or more of these, which are dealt with by a 'project manager'. Each project has collection of 'project-items', which are 'domain' objects containing domain specific knowledge and data. Project items can either be created by the user or by the application itself. The organization of project-items within a project is revealed in the 'project explorer', and they can have one or more views representing the state of the object and reflecting changes to it. If a project-item is selected, its properties are shown in the properties editor. 'Snapshots' of project-items can be saved and then restored at a later time, which allows the user to keep track of the history of changes. Project-items can also be copied and pasted (dragged/dropped) to documents, and an event based mechanism is used to note and respond to changes and choices made by the user.

 

Data storage:

A customized 'compound file' mechanism is designed to save and load data in a structured way. The framework uses this complete file-system within a single file for storing and retrieving data. Data is loaded on demand (lazy loading) which means that big project-files "load" quickly and only receive the data that is actually needed.

 

Plug-ins:

The framework uses a plug-in mechanism to add functionality to the application. The following objects are loaded from plug-ins: 

 The framework comes with a series of useful 'default' and demo plug-ins. Examples are: plug-ins for the visualization of the parent-child relationship, a "dependency plug-in" which reveals the dependencies between objects, and others for attachments and snapshots. Furthermore, there are many other useful plug-ins which can either be used directly or serve as a basis for developing domain specific applications.

 

Key features:

   

Screenshots: