Skip to the content.

This document describes thoughts as of approximately 2009. A restatement of our plans is presented in the CTK Roadmap Document

  1. Overview This is open for discussion!

The purpose of this whitepaper is to provide a general framework for the development of CTK. It gives an overview of

  1. Goals (to be discussed)

The goals of the CommonTK are to:

  1. Development strategy (to be discussed)

The development of the CommonTK has to face several challenges:

The CommonTK effort faces these challenges by defining a development strategy.

  1. Modular design with small core and loose coupling The CommonTK will be highly modular and very loose coupling between the modules whenever possible. This will make it possible to use only small parts of it within existing developments or complement CTK code with proprietary code.

  2. Use parts of CTK within the developments of the CTK founders soon To demonstrate (and verify) the possibility to integrate CTK code and their commitment to CTK, the founders should use parts of CTK within their software and toolkit developments soon.

In case that some functionality of an existing toolkit of a founder (e.g. the logging mechanism of toolkit Y) is provided to the CommonTK, it should be use from the CTK from then on (i.e., toolkit Y should use the logging mechanism from CTK and remove its own - which will be (almost) identical to CTKs).

  1. Interface design / review /decision process Open question: how can we effectively agree on interfaces without getting into a cumbersome process of reviewing everything by everyone?

  2. Design (based on Architecture and workshop results)

  3. BSD style license The Common Toolkit shall have a BSD-style license to put no restrictions on the user and allow commercial use. Therefore contributed and used libraries must have a compatible license.

  4. C++ The main language of the Common Toolkit will be C++.

  5. Qt Since all of the main contributors to the Common Toolkit already use Qt or plan to use Qt it was agreed on using it as a GUI Toolkit and also for non-GUI tasks like cross-platform database access.

  6. CMake CMake will be used as build automation tool.

**Proposal: Package system **

CTK should be organized in packages, like in a Linux distribution package system. This would make it possible to check out only parts of the source code: faster checkout, less code, proabably resulting in higher acceptance of the toolkit.

The packages should have well defined dependencies. The process of getting source code for the packages that are needed could be automated.

Possibly the package system can be implemented with CMake.

  1. Toolkit parts
  2. Common data structures The Common Toolkit will provide some basic data structures to allow interface design and data exchange between modules. One goal will be to use a common scene representation (see [wiki:ctkScene]).

Comments: (to be discussed)

The data structures have to be carefully designed to allow integration with existing toolkits. Duplication of memory should be avoided.

It may even be possible to refrain from defining actual data classes (as a class for storing images like vtkImageData) for the DICOM-IO part: The IO module could stream the data to adaptor classes that create the actual data objects. These adaptor classes can be written by the CTK users.

In a later step CTK might define its own data classes using the same mechanism. Possible types for that could be:

The focus will be on Qt-based widgets (see WidgetPlans).

A Qt-based GUI will not be mandatory for applications based on CTK. Support for other GUI toolkits might be added in a later phase.

  1. Integrated Development Environments (IDEs) The scope of CTK will include IDEs (e.g. a visual programming environment) and tools for IDEs. Usage of these will not be required for using other CTK modules.

  2. Technical infrastructure
  3. Wiki / repository / testing / cdash? Who will be responsible for / who will pay for maintaining the basic development infrastructure?

  4. Package system Is CMake as-it-is the adequate solution for this? Maybe some moderate extensions will be necessary, e.g. more than one level of grouping in the GUI.

  5. Implementation Roadmap To be defined: modules and packages to be started in the next 6 months.