Projects

Imagix 4D uses the term project for the repository of all the information it retains about the specific portion of software you're exploring. As you import data for viewing, Imagix 4D extracts information from the data source, and loads it for viewing. Most of this information is permanently stored in your current project.

All of the permanent information about a project is stored in a directory structure in your file system. As such, projects are a shared resource. Normal file read and write permissions apply to the project directories and files. Through your standard permission mechanisms, you're able to control who can access and who can update projects. Top level directories for Imagix 4D projects use a .4D suffix so that you can identify them as such.

Managing Project Scope

As your use of Imagix 4D increases, you'll find that managing what data exists in which projects is an important part of maximizing your benefit from using the tool. More data enables you to analyze a wider range of information without having to leave the project. However, it also causes you to filter through more information to find the particular information you're interested in. Larger databases also cause somewhat slower response times. So scope is something that you'll want to pay attention to in defining a project.

In addition to deciding which parts of your source code to include in a project, managing project size also involves deciding how to include the contents of header files. On a per-directory basis, you can control whether data about the header file contents is loaded into the project database. Header files included through a #include preprocessor directive will alway need to be analyzed in order to accurately process the source code relying on types, etc that are specified in the header. But you would not normally be interested in examining the internal contents of the standard system header files, such as stdio.h, that come with your compiler and some of your 3rd party libraries. The -I and -S options used to specify include directories control what gets loaded into the database and becomes viewable in the resulting project.

For Java projects, the -impXX options have a similar impact on the amount of supporting detail in the project database. You select whether .class files or .java files are analyzed for any specified class paths. More data is collected from .java files than from .class files.

Project Types

In addition to managing project scope, it is also possible to control project size and contents through the choice of project type. Regular projects are the default project type. They are the most extensive with respect to the type of information collected about the source files being analyzed. Regular projects include the full, comprehensive range of information about the source files being analyzed -- data about the use of data types, macro definitions, local variables, etc.

There may be times when this level of detail is more that you want to examine about your software. This is particularly true for large projects, where reducing the comprehensiveness of the data collected about each source file reduces overall project complexity and improves performance. For those situations, alternative project types can be specified at the time you initially create your project. Light projects collect information about functions and global variables, as well as their class, namespace, file and directory containers. Minimal projects omit even the information about global variables, and reduce the information collected about functions, such as the data for displaying flow charts.

By default, the project type selection is suppressed, and Regular projects are created. Through a setting in the Options dialog (File > Options... > Data Collection > Project Location and Resources), a step can be added during project creation to specify which project type alternative to use for the current project.

ComboProjects

Imagix 4D's ComboProject feature enables you to join individual projects together into combination projects, without duplicating the data being stored in the individual projects. Once you have created separate projects covering subsystems of your software, you can quickly combine them into projects that cover larger portions of your software.

Creating larger projects via ComboProject is different than adding multiple data sources within an individual project. In a given individual project, you're able to specify multiple separate portions of your software for inclusion, via the Data Sources dialog (Project > Data Sources). Imagix 4D then needs to analyze all of the specified software, and that project remains indivisible. In contrast, when comboprojects are defined, no new data is collected; the data from the existing individual projects is simply combined.

This comboproject definition is done through the Open Combination of Projects dialog (File > Open Project... > Combine>>). In the dialog, you first specify the set of projects to combine. At that point, you can chose to simply open it. Imagix 4D will combine the set of projects into a single temporary project, and open that. The result will be the same as if you had created and opened a single project that spanned all of the selected projects.

As an alternative, if the combination of projects is one that you might want to analyze again in the future, you can chose to save it rather than open it. The result is that a permanent new project is created, again spanning all of the selected projects. Although the new comboproject avoids duplicating the data held in the individual projects, it generally behaves just like a normal individual project. For example, the comboproject is available through the regular Open Project dialog (File > Open Project), just like a normal project. The one exception has to do with project updates. A comboproject represents the current state of each of the underlying projects from which it is built. So if you want to update the comboproject, to capture changes in the source code or to use different analyzer settings, you need to open and update the underlying projects and then reopen the comboproject.

You may find comboprojects to be a very useful tool for managing the scope of your projects. Because data is not duplicated when creating comboprojects, the comboprojects are created very quickly, and take up essentially no disk space. The comboprojects point to the data which is generated for each of the underlying individual projects, so updating the project data in the individual projects will keep the comboprojects current. You can create comboprojects of comboprojects.