ST-Developer and ROSE
ST-Developer is a set of software tools to build tools, translators and databases for STEP Product Models, Industry Foundation Classes (IFC), Cimsteel (CIS/2), or other EXPRESS-defined models. It contains programming bindings for C++, C, and Java, plus tools for testing data sets against verification rules and constraints, browsing through the contents of your data sets, building information models, and more.
The ROSE library is the ST-Developer C++ API for demanding CAD and data exchange applications. It works with C++ classes generated from EXPRESS schemas for fast access and strong compiler type checking, and provides advanced object search and traversal features such as USEDIN, access using classes or a data dictionary, and detailed control over STEP physical file handling.
ST-Developer also includes generated C++ classes for building ROSE applications with the STEP, IFC, and CIS/2 information models. There are also several extension libraries for ROSE applications, such as the Part 28 library for reading and writing XML, the filter library for working on very large STEP Part 21 files out of memory, and the Log Window library for status messages in GUI applications.
C++ Class Overview
The ROSE library contains C++ classes that hold EXPRESS-defined data and support classes that help index the data, read or write it to storage, or provide other useful functions.

ROSE Classes
Instances of the STEP object classes hold EXPRESS-defined data in memory. These classes are generated by an EXPRESS compiler for each of the data structures in an EXPRESS schema. For example, given a Point entity definition in EXPRESS, the compiler generates a C++ class Point as a subtype of a ROSE base class to hold instances of point data. The next chapter describes the EXPRESS to C++ mapping in more detail. Applications can be written with or without generated C++ classes.
The ROSE Support Classes traverse, manipulate, and hold housekeeping information for STEP data objects. For example, RoseManager objects store extra information about STEP data objects. The RoseDesign class holds a collection of STEP objects for reading and writing to secondary storage.
The RoseInterface class collects support functions into one place. Only one static instance exists, named ROSE.
The list below shows the hierarchy of classes documented in this manual. For example, the RoseList class is derived from the RoseAggregate and RoseObject classes.
- /* ROSE Library Interface */
- RoseInterface
- /* STEP Data Objects */
- RoseObject
- RoseStructure
- RoseUnion
- RoseAggregate
- RoseList
- RoseBag
- RoseSet
- RoseArray
- /* ROSE Support Classes */
- RoseBackptrCursor
- RoseBackptrs
- RoseBinaryObject
- RoseCursor
- RoseDesignSection
- RoseErrorContext
- RoseErrorReporter
- RoseManager
- RoseP21Lex
- RoseP21Parser
- RoseP21Writer
- RoseServer
- RoseType
ROSE Library Classes
Manual Organization
This manual describes programming techniques and use of ROSE C++ classes and functions, with examples and cross-references to other relevant topics. The manual is divided into two parts:
- Part One: Application Programming with the ROSE Class Library -- Techniques used to build STEP applications. Topics include environment setup, generating C++ classes, compiling and linking, reading and writing data sets, traversing objects in memory, data dictionary information, error handling and more.
- Part Two: Class and Function Reference -- Documentation for every ROSE C++ class and function. Each chapter describes the member functions of a single class. Only public functions are listed. Functions meant for internal use and functions inherited from a superclass are not listed. The reader should refer to the superclass for inherited functions.
Font Conventions
Within the body of a paragraph, functions, keywords, and filenames are shown in bold, such as librose.a or /usr/local/bin. Function names are shown with trailing parenthesis, such as findDomain() or name(). When referring to a C++ member function in another class, the C++ scope notation is used, such as RoseDesign::save() or RoseObject::domain().
Function prototypes are listed with each parameter on a separate line and the function name set off in bold as shown below. Optional parameters are listed in standard C++ notation showing the default value.
RoseAggregate * findObjects( RoseAggregate * list_to_fill, RoseDesign* design = <Current> );
Occasionally, functions must be described in a parameterized manner, with angle brackets indicating the parameterized portion of the function definition. For example, the following prototype is used for the RoseObject getInteger(), getString(), getObject(), etc. functions:
<type_ref> get<name>( RoseAttribute * att );
Finally, programming examples are shown in a separate paragraph, in a typewriter-style font:
/* Create a point using the default constructor
* and use the update methods to set its values.
*/
Point * point1 = pnew Point;
point1->x (1.0);
point1->y (0.0);
/* Create points using a different constructor,
* that fills in the values in one step. */
Point * point2 = pnew Point (2.5, 4.0);
Point * point3 = pnew Point (5.0, 0.0);
References
The following publications may be of interest to readers looking for additional information on the C++ language, the STEP standard, or the EXPRESS information modeling language:
The C++ Language
- S. Dewhurst and K. Stark, Programming in C++, Prentice Hall, 1989.
- M. Ellis and B. Stroustrup, The Annotated C++ Reference Manual, Addison-Wesley, 1990.
- S. Lippman, A C++ Primer, Addison-Wesley, 1989.
- B. Stroustrup, The C++ Programming Language, Addison-Wesley, 1986.
STEP and EXPRESS
- J. Owen, STEP: An Introduction, Information Geometers (47 Stockers Avenue, Winchester SO22 5LB, United Kingdom), 1993.
- D. Schenck and P. Wilson, Information Modeling the EXPRESS Way, Oxford University Press, New York, 1994.
In addition, readers may want to consult the STEP Tools web site for the most current information on the STEP standard, recent projects, products, and demonstrations.