Tool for building a better world.

1. Introduction

PIComposer Basic Edition is a desktop application for managing Product Manufacturing Information (PMI), built upon the STEP ISO-10303 standard. It is designed around two core philosophies:

  • Local-First Data Storage: All project data is stored primarily on your local machine using an enterprise-grade data engine. This approach provides significant benefits, including high-performance data access, unbreachable data security, and robust project backup and restore capabilities, giving you complete control and safety over your valuable design data.

  • Compute/Procedural First: While offering a graphical interface, PIComposer emphasizes the power of automation and scripting. This allows you to define complex procedures, generate models, and manipulate data programmatically for efficiency and repeatability.

1.1. User Interface Overview

PIComposer employs a minimalist user interface centered around two primary tree views for interacting with STEP/BIM models:

  • The Project Tree: This panel manages the overall structure of your data models and their organizational hierarchy. Here, you organize your projects, models, and their relationships.

  • The Instance Tree: This panel is where you inspect and manipulate the details of individual instances, including all their attributes and properties.

The application supports advanced inter-model operations, allowing you to copy and paste instances between models with compatible contexts. This powerful capability facilitates key workflows like model merging and design reuse across projects.

1.2. Inter-Operability & Data Exchange

PIComposer provides comprehensive data exchange capabilities through multiple standardized and proprietary formats:

  • ISO 10303-21 (STEP Part 21): Full support for import and export using the industry-standard STEP Physical File format, enabling seamless data exchange with any CAD system that supports the ISO 10303 standard, including Revit, ArchiCAD, SolidWorks, and other IFC-compliant applications.

  • Proprietary JSON Format: A web-friendly JSON encoding designed for integration with web applications, REST APIs, and cloud services, providing structured data access for modern web-based workflows and interoperability with JavaScript applications.

  • Proprietary Binary Format (PIB): An optimized binary format for high-performance exchange within the PIComposer ecosystem, offering fast loading times, complete semantic preservation, and efficient storage for backup and internal model sharing between PIComposer instances.

1.3. Scripting Framework

PIComposer features a comprehensive scripting framework based on the Dart programming language and Blockly, a visual programming library. This framework extends basic UI operations to enable powerful automation, custom procedures, and complex data transformations.

You can create PIComposer scripts in two ways:

  • Textually: Write Dart code using any external text editor that supports the Dart language for the best coding experience, or use the application’s built-in text editor.

  • Visually: Use the intuitive, block-based Blockly editor to compose logic without writing code.

1.4. Supported Programming Styles

For textual scripting in Dart, PIComposer’s API supports two distinct programming styles, giving you flexibility in how you express your logic:

  • Imperative Style: Use step-by-step commands to create and manipulate objects. This style gives you explicit control over the process and is ideal for complex conditional logic or iterative operations.

// Create and configure a STEP cartesian point imperatively
final point = model.createInstance(typeName: 'cartesian_point');
point.setReals('coordinates', [1.0, 0.0, 0.0]);
point.setString('name', 'a point');
  • Declarative Style: Define the complete structure and data of STEP instances using JSON-like objects. This style allows you to specify what you want to create in a structured format, with the system handling the instantiation and configuration automatically. It’s particularly useful for configuration, and when working with complex nested instance hierarchies.

// Create the same point declaratively using JSON
final point = model.instanceFromJson(
  {
    "@type" : "cartesian_point",
    "name" : "a point",
    "coordinates" : [1.0, 0.0, 0.0]
  }
);

Both styles are fully supported and can be mixed within the same script, allowing you to choose the most appropriate approach for each task. The declarative instanceFromJson method handles the complete instantiation process including object creation, attribute setting, and can even create complex nested instance hierarchies in a single call.

1.5. PIComposer Templates

These scripts, known as PIComposer Templates, are a fundamental part of the user interface. They act as custom commands that extend the application’s functionality. A template can create or update a project, define a procedure to generate a model, or act as an executable action triggered from the UI (e.g., when adding a child instance).

Templates are broadly categorized into two types:

1.5.1. Dictionary (JSON) Templates

A dictionary template is a structured set of key-value pairs, primarily used for configuration and user-defined types. These templates include:

  • Spatial Template: A configuration that defines a model’s spatial hierarchy, which PIComposer uses to generate the corresponding model structure.

  • Enum Definition Template: Defines a custom list of enumerated values.

  • Entity Definition Template: Allows you to define a new entity type.

  • Property Set Definition Template: Used to create a custom set of properties.

  • Quantity Set Definition Template: Used to create a custom set of quantities.

1.5.2. Procedural Templates

The procedural template framework is powered by the Blockly visual editor for building logic and an embedded Dart interpreter for execution. These templates are integrated into PIComposer and run in specific contexts. The types of procedural templates are:

  • Instance Template: A pre-packaged instance with optional transformation code.

  • Procedural Instance Template: A script that generates a new instance.

  • Procedural Model Template: A script that generates an entire model.

  • Instance Transform Template: A procedure that modifies an existing instance.

  • Model Transform Template: A procedure that modifies an entire model.

  • Timer Event Procedure Template: A general-purpose procedure that executes at preset time intervals (for internal use only).

  • Generic Procedure Template: A general-purpose script for any task not covered by the other types.

1.6. Advanced Capabilities

PIComposer provides several advanced capabilities that enhance productivity and ensure data integrity:

  • Inter-Model Operations: Seamlessly copy and paste instances and data between models with compatible contexts, enabling efficient model merging and design reuse.

  • Enterprise-Grade Data Management: Benefit from robust backup and restore functionality built on an enterprise-grade data engine, ensuring your valuable design data remains safe and recoverable.

  • Flexible Programming Models: Choose between imperative and declarative programming styles to match your workflow, with full support for complex instance hierarchies and automated dependency resolution.

  • Comprehensive API: Access a rich set of programming interfaces for instance creation, manipulation, querying, and export, supporting both simple and complex data management scenarios.

Whether you’re working with simple geometric elements or complex building information models, PIComposer provides the tools and flexibility needed to manage your product manufacturing information effectively while maintaining full control over your data and processes. With its robust interoperability support, you can confidently exchange data across different systems and platforms while leveraging optimized formats for specific use cases within the PIComposer ecosystem.

2. Getting Started

PIComposer is an occasionally-connected desktop application. To use PIComposer, you must have a PIComposer user account. To create an account with the PIComposer cloud service, first install PIComposer on your desktop.

PIComposer Basic Edition is currently available only for Windows. Support for macOS and Linux will be added in future releases.

2.1. Installation

To install PIComposer:

  1. Download the installer from either:

  2. Run the installer and follow the setup wizard instructions

  3. Launch PIComposer after installation completes

2.2. Account Creation

After launching PIComposer for the first time:

  1. Click the Sign Up button to initiate the account creation workflow

  2. Enter your email address and choose a secure password

  3. Read and accept the license agreement

  4. Click the Sign Up button to submit your registration

signup
Signup Screen

2.3. Email Verification

Complete your registration by verifying your email address:

  1. Check your email inbox for a verification message from PIComposer

  2. Click the verification link in the email

  3. Once verified, PIComposer will be ready for use

verify email
Email Confirmation
  • The verification email may take a few minutes to arrive

  • Check your spam or junk folder if you don’t see the email in your main inbox

  • If you don’t receive the verification email within 10 minutes, verify that you entered your email address correctly during signup and check your spam folder

2.4. Next Steps

After successful verification:

  • PIComposer will automatically log you into the application

  • You can begin creating new projects or use the one-click sample project creation command to explore sample models

  • PIComposer is licensed software with a 21-day trial period

  • To manage your account and license, visit the account page within the application

If you encounter any issues during installation or account creation, please visit our support page at spatialcompute3d.com/support or contact our customer service team at: [email protected].

3. User Account

Users manage their account information and PIComposer subscription in the User Account pane. PIComposer partners with Stripe to handle subscription management and related transactions. To maximize privacy, PIComposer only stores two pieces of user information: email address and username. All account data is stored in PIComposer Cloud Service.

user account pane
User Account

3.1. Update Password

To update your password, click the Update Password button user account update password to begin the password reset process. You will see the confirmation message: "A password reset email has been sent to: user_email." appear briefly on the status bar.

To complete the process, check your email and locate the password reset message from PIComposer. The email should look similar to this:

user account reset password email
Reset Password email

Click the reset password button user account reset password email button to open the password entry page in your browser.

user account reset password
Reset Password browser input

Enter your new password and click the Set New Password button user account set new password button to finalize the password change.

3.2. Update Profile

Your username defaults to your email address. To change your username, edit the text in the username field and click the Update Profile button user account update profile.

Username is included in the header of exported models. If you don’t want your email address to appear in exported files, change your username from the default email address.

To update your avatar, click the Upload button user account upload avatar. Select an image file from your computer using the file selection dialog.

user account upload avatar file chooser
Upload avatar image

3.3. Manage PIComposer Subscription

After creating a PIComposer account, you begin a 14-day trial period. To start your subscription, click the Manage Subscription button user account manage subscription. You will be redirected to Stripe’s subscription page.

user account subscription
PIComposer subscription

Complete the subscription process with Stripe. Once payment is processed, the integration between Stripe and PIComposer will update your subscription status in PIComposer Cloud Services.

To cancel or modify your subscription, click the Manage Subscription button user account manage subscription. You will receive an email containing a secure link to the Stripe customer portal.

user account customer login link
Customer portal login link

In the email, click the "Login to your customer portal" button user account customer login link button. This will redirect you to the Stripe customer portal.

user account customer portal
PIComposer customer portal

Complete your subscription changes in the Stripe portal. The integration system will automatically sync the transaction results with PIComposer Cloud Service.

4. PIComposer Workspace

The PIComposer Workspace pane is the first window users see after logging into PIComposer. The Workspace serves as the entry point to all user data and provides access to other PIComposer features.

The Workspace pane includes the following interactive features:

  • The project menu bar hosting project-related commands

  • The project table listing all available user-composed projects

  • Navigation bar providing access to other pages, including:

    • The Blockly workspace pane

    • The account pane

    • The preference pane

    • The help page

picomposer workspace
The workspace pane

The two core pillars of PIComposer functionality are: data and compute. PIComposer’s dataset is organized in projects. A project is a collection of ISO-10303 STEP/IFC models and other related documents.

PIComposer’s template system is a computing framework that includes:

  • Embedded Dart compiler and interpreter

  • A Blockly application for template composition

Templates are fully integrated with the PIComposer user interface. For example, procedure instance templates may be executed in the instance creation workflow.

Users manage projects using the project menu bar. Project commands include:

  • Add a project

  • Delete a project

  • Restore a project from a backup

  • Edit project metadata such as name and description

  • Create the sample project

project commands
The Project Commands bar

4.1. Adding and Deleting Projects

To add a project, click the add button project commands add. Enter the project name and description in the "Create Project" dialog:

create project dialog
The Project create dialog

To delete a project, select it from the project list, then click the delete project button project commands delete. In the delete confirmation dialog box, select Delete.

delete confirmation
The delete confirmation dialog
If project backups exist, deletion will fail with the status message: "You must delete all backups first to delete project"

4.2. Restoring Projects from Backup

To restore a project from one of its backups, select the project from the project list, then click the restore project from backup button project commands restore from backup. From the project backup chooser dialog, select the desired backup, then select OK to complete the restoration.

backup choser dialog
The backup chooser dialog
If no project backups exist in the system, restoration will fail with the message: "No backup available for project"

4.3. Editing Project Metadata

To change a project’s name and description, click the edit project info button image::project_commands_edit_info.png[]. In the Edit Project Info dialog box, enter the name and description you wish to use. Then click OK to complete the changes.

project edit info dialog
The edit project info dialog

4.4. Creating Sample Projects

The PIComposer installer includes a sample project that contains both general STEP and IFC models for users to explore and experiment with. The sample project is added to the user’s workspace by activating the create sample project command project commands create sample project.

The sample project is identified by a specially assigned ID. The create sample project command is invisible if the sample project already exists in PIComposer. When the system doesn’t have a sample project, this command can be hidden using user preferences.

The navigation sidebar allows users to navigate between different window panes in PIComposer, where each pane hosts a specific function. These window panes include:

  • PIComposer workspace pane

  • Project pane

  • Blockly workspace pane

  • User account pane

  • Preference pane

  • Help

The workspace button navigate work space is the PIComposer application home button. No matter where the user is, it returns them to the workspace pane.

The project button navigate project activates the project pane and displays the contents of the selected project or the most recently displayed project. No matter where the user currently is, activating this button returns them to the previous project. See the [Project and Models] section for more details about working with projects and models.

Double-clicking any project in the project table also navigates to the project pane.

The model button navigate blocklyworkspace activates the Blockly workspace pane. See the Blockly workspaces section for more details about working with Blockly templates and code generation.

The account button navigate user account activates the account page. See the User Account section for more details.

The preference button navigate user preferences activates the preference page. See the Preferences section for more details.

The help button navigate help activates the help popup menu, which has two commands 140:

  • Documentation - shows PIComposer documentation in a browser

  • About - shows PIComposer license information

PIComposer provides user feedback using the status bar. Depending on the nature of the command, the status shows:

  • A progress bar for long-running commands

  • Notification of successful command completion

  • Error messages for failed commands

5. Projects and Models

A project is a collection of ISO 10303 STEP models. Each project is stored in a separate database, allowing individual projects to be backed up and restored independently. Within each project database, models are equivalent to tables containing serialized ISO 10303 entity instances.

The supported model application protocols include:

  • IFC4x3

  • AP203e2

  • AP210e3

  • AP214e3

  • AP238e2

  • AP242

PIComposer does not support creating new IFC2x3 models, but existing IFC2x3 models can be imported.

PIComposer stores models in two different modes: native and reference.

Native models are those created directly in PIComposer or converted to PIComposer’s native format during import.

The difference between a native entity instance and a standard ISO 10303 entity instance is that a native instance may combine its referenced dependent instance attributes into a single unit through a process called composition.

A reference model is derived from an imported Part 21 file and consists of three parts:

  • The original immutable Part 21 file (always loaded in memory)

  • Metadata and indices of the original file (stored in the model database)

  • New updates (stored as native instances in the model database)

The view of a reference model merges data from the original model with new updates. Reference models are ideally used in later project stages such as manufacturing, construction, or maintenance.

Users interact with projects and their data in the project pane, where all project and model related functions are available.

There are two ways to activate the project pane:

  • Double-click a project item in the workspace project table

  • Select a project in the workspace project table and click the project button navigate project on the navigation bar

There is at most one active project in PIComposer at any time. The project button navigate project always returns the user to the current active project.

project pane
Project Pane

5.1. Project Commands

5.1.1. Add a Model

To add a model, click the project commands add button on the project command bar. This command navigates to the model creation page.

project model creation
Model Creation Page

Click on the desired model generator template from the template list. Fill in the required information for the selected model generator and click the OK button.

  • The Create Model project simple model create generator is a system model generator that creates a minimal valid skeleton model. For IFC, it creates a model with an IfcProject instance and other necessary context instances. For other Application Protocols such as AP203 or AP242, it creates a model with context instances only (application_context, product_context, and geometric_representation_context).

  • The default measurement system used in context instances is MKS with millimeters as the length unit.

All model generator templates appear in the model creation page, including:

  • Spatial template

  • Procedure model template

5.1.2. Delete a Model

To delete a model, select it in the model tree and click the minus project commands delete button. On the delete confirmation dialog, click the delete project commands confirmation delete button.

5.1.3. Run Model Transform Template

To transform a model using a model transform template, first select the model in the model tree. Click the run transform on model project commands run model transform button. From the template selection dialog, select the desired model transform and click the OK project commands run model transform dialog ok button.

project commands run model transform dialog
Template Selection Dialog

5.1.4. Import Model

PIComposer interoperates with other CAD systems via STEP or IFC file model import. The supported file formats are:

  • .pib - PIComposer native binary format

  • .json - PIComposer clear text based on JSON

  • .ifc/.stp - ISO 10303 Part 21 files

Files with .pib extension use PIComposer’s proprietary binary format designed for exchanging model information within PIComposer’s ecosystem. This format is fast and compact, and should be preferred when exchanging data between different PIComposer installations.

JSON encoding of EXPRESS datasets is intended for use with web products. For a discussion about the JSON format, see the blog post: An Efficient and Pragmatic Clear Text ISO 10303 EXPRESS Data Encoding in JSON

To import a file, click the import project commands import model button. From the import model dialog box, browse to the target file.

project commands import model dialog
Import Model Dialog

There are three model types for imported models:

  • PIComposer - Imported content converted to native model

  • Reference model - Model imported as a reference model

  • Memory reference model - In-memory reference model that exists only until the current PIComposer project session ends. A memory model is readonly.

Select the model type from the model type dropdown and click OK.

A memory reference model is always created during import. The metadata and indexing information exist only in memory. Memory models are more efficient for partial information extraction.

5.1.5. Export Model

To export a model, select it in the model tree and click the export model project commands export model button. In the model export dialog, choose the file type and destination folder, then click OK.

project commands export model dialog
Export Model Dialog

5.1.6. Render Model in 3D View

To display a model in the 3D View, select it in the model tree and click the render model project commands render model button. This launches the 3D Viewer application and displays the model content in 3D.

3dviewer
3D Viewer

5.1.7. Manage Project Backup

To manage project backups, click the manage backup project commands backup project button. This command navigates to the manage backup pane.

project manage backup
Manage Backup Pane

To delete a project backup, select it in the project backup table. On the project command bar, click the minus project commands delete button, then confirm deletion in the confirmation dialog.

To create a project backup, click the add project commands add button on the project command bar. In the backup creation dialog, enter a description for the backup and click OK.

project back create dialog
Project Backup Creation Dialog

To get back to the project pane, click on the project navigate project button.

5.1.8. Working with Models

Models are presented as trees in the PIComposer’s pointer and click user interface. All models in a project appear in the model trees. Each model tree has two presentation modes:

  • spatial tree mode—​present IFC model in its spatial structure as parent and child relationship starting from the root node IfcProject. Only IfcProduct instance reachable from the root IfcProject via parent and child relation will appear in the tree in this mode.

  • instance type grouping mode—​All instance appear in this tree under the instance type grouping node.

project model trees
Model trees

Each tree type support different kind for operations on the instance. These operations are detailed below.

Model nodes.

In the PIComposer user interface, a model node hosts commands and operations relevant to the model. To see all available commands, right click on a model node. The dropdown menu appears. The available commands include:

  • spatial tree mode—​set the model tree presentation mode to spatial tree mode.

  • type instance mode—​set the model tree presentation model to type instance grouping mode

  • transform model—​initiate the running of model transform workflow on the model

  • create instance—​create an entity instance in the model

  • add template instance—​add an entity instance in the model using a instance generator template

  • paste instance—​paste a copied instance to the model

  • paste instance with composed dependency—​paste a copied instance in the model, and composed the instance attribute in the copy.

  • clear reference instance update—​clear changes to a reference model and return it to its original content.

project model trees model commands
Model command menu

The default tree presentation mode for none IFC model is instance type mode, the spatial tree mode is only available to IFC models.

To run a model transform template, right click on the model and select transform model menu item from the model command menu. Select the desired template to execute on the template choser dialog, and click the OK button.

project commands run model transform dialog
Template choser dialog

If the template requires input, an input tree will appear. Fill in the information and click the OK button.

The create instance is active only in instance type presentation mode.

To create an instance in the model, right click on the model node, and choose create instance command. On the create instance dialog, type in the type of the instance (for example, IfcCartesianPoint) or choose the type from the dropdown list. Type in the number of instance to create. Then click OK.

project commands create instance dialog 1
Create instance dialog box
project commands create instance dialog 0
Create instance dialog box with dropdown type list

The dropdown list in the create instance dialog only lists the types that already appeared in the model. You could input any type that the schema of the model supports.

The add template instance command is active only in instance type presentation mode. The command execute a instance generator—​instance template or instance procedure—​to create an instance and add it to model.

To enter the [add template instance workflow, right click on the model node, and choose add template instance command. On the template chooser dialog, choose the template from the dropdown.

project commands add template instance dialog
Template choser dialog

Then enter the tempate input information as required by the template. .Template choser dialog with template input image::project_commands_add_template_instance_dialog_template_input.png[400,500]

Complete the process by click the OK button on the diaog.

To paste a copied instance (see Instance Nodes for instance copy), just right click on model node and choose the paste instance command.

  • the pasted instance will be assigned an instance id that is valid in the context of the pasted target model.

  • copy-paste could be within a model or between two models with the same schema.

  • Instance attribute references of the pasted instance will be set to null since the references might not exist in the new model context.

  • Aggregate instance attribute of the pasted instance will be set to empty.

In PIComposer, certain instance types are considered reference type. These types always exist indenpently and are not composed in other types attributes. In a IFC model, reference types include:

  • IfcApplication

  • IfcGeometricRepresentationContext

  • IfcGrid

  • IfcGridAxis

  • IfcGridPlacement

  • IfcGroup

  • IfcLocalPlacement

  • IfcObjectPlacement

  • IfcOrganization

  • IfcOwnerHistory

  • IfcPerson

  • IfcPersonAndOrganization

  • IfcPresentationLayerAssignment

  • IfcProduct

  • IfcProject

  • IfcRelationship

  • IfcShapeRepresentation

  • IfcStyledItem

  • IfcTask

  • IfcUnitAssignment

  • IfcWorkCalendar

  • IfcWorkPlan

If a type is a reference type, its subtypes are also reference type.

There is no reference type for non-IFC models.

For reference types, its dependent instance attribute could be composed during the copy-paste operation. To paste a copied instance with dependency, right click on the model node and select the paste instance with composed dependency comand.

Since reference type could not be composed, instance attribute referencing instance of reference type will be set to null.

5.1.9. Instance Type Grouping Node

In typed instance presentation mode, model elements are grouped into types and instance of a type is a child of the grouping node of that type. Instance type related operations are hosted by the grouping node. These operations include:

  • add instance—​create an instance of type corresponds to the node

  • add many—​create may instance of type corresponds to the node

  • add template instance—​add instance of corresponds to the node using instance generator template

  • paste instance—​paste a copied instance of type

  • paste instance with composed dependency—​paste a copied isntance of type with composed dependency.

  • show document—​show BuildingSmart documentation about the type

project model trees grouping node commands
Grouping node commands

To add an instance of the type in the type grouping node, right click on the node. Select the add instance menu item. An instance is added and selected. The content will displayed in the instance detail tree (for detail see Working With Instances.

To add multiple instances of the grouping node type, right click on the node, then select the add many menu item to start the add many instances workflow.

project model trees grouping node commands add many
Add many dialog

The add template instance menu item will be active if there is a instance genererator that output the type. To initiate the add template instance workflow, right click on the grouping node and select the add template instance menu item, see [add-template-instance] for details.

The paste instance, paste instance with composed dependency and show documentation are the same as those appearing in the model tree node in instance type mode see [Model nodes] section for details.

5.1.10. Instance Nodes

Instance node in a model tree represent an element of a model. Operations on the instance within a model or across models are available as menu item commands on the instance node. These commands include:

  • add child—​create an IfcProduct and added to the instance as child.

  • add child from template—​create an IfcProject from an instance generating template and added to the instance as child.

  • copy—​copy the instance, this marks the instance as an operand for the paste operation.

  • copy children—​copy the children of a IfcBuildingStorey

  • paste children—​paste the children of one IfcBuildingStorey to another.

  • paste children of types—​paste the childrn of one IfcBuildingStorey to another of the specific types.

  • paste properties—​paste properties such as: IfcRelDefinedByType, IfcRelDefinedByProperties and IfcRelAssociatesMaterial from one instance to another.

  • create wrapping mapped shape—​Create a IfcShapeRepresentation that references a IfcMappedItem that references the IfcShapeRepresentation instance node.

  • show documentation—​Show BuildingSmart documentation on the instance.

  • delete node—​delete the instance.

project model trees instance node commands
Instance node commands
  • To manage the spatial structure of a IFC model, use the spatial tree mode.

  • To work on any element of the model, access it using the typed instance mode

add child

The most basic operation on the spatail tree is to add an child node to a parent. To start the add child node to spatial tree workflow, right click on the target node and select the add child menu item. This activates the Create product dialog.

There are three tabs:

  • product

  • placement

  • shape

project model trees instance node commands add child product
Product create, product tab
Product Tab

On the product tab, input the following information:

  • the child IfcElement type, the types appear on the dropdown list are all available valid types as of IFC schema Ifc4x3_add2. User may manually input the type in the custom text field without looking throught the dropdownlist.

  • the spatial child relationshipe type. The relationship type are those most commonly appear in architecture and structural domains. User may manually input the desired type.

  • optional instance tag. The tag value enable instance query by tag.

  • The miminal information to create a child is IfcElement type and the spatial relation type. If type chosen relation type is auto PIComposer will decide the spatial relation type based on the parent and child types.

Placement Tab

The placement tab provides interface to specify the IfcProduct’s local placement information, the values the consitute the instance IfcAxis2Placement3D. The default values are:

  • location—​the origin

  • axis—​standard z-axis

  • refDirection—​standard x-axis

project model trees instance node commands add child placement
Product create, placement tab

Change the placement by updating the default values.

Shape tab

The shape tab is the interface for specifying a product’s IfcShapeRepresentation.

project model trees instance node commands add child shape
Product create, shape tab

First select the type or source of the shape by selecting the shape type on the toggle buttons. The choices are:

  • from template—​shape created by a instance generator that outputs a IfcShapeRepresentation.

  • solids—​3d solids such as faceted breps or extruded area solid, etc

  • surfaces—​2d surfaces such as planes or spherical surface, etc

  • shapes—​any IfcRepresentationItem

project model trees instance node commands add child shape toggle buttons
Shape type toggle buttons

When from template is chosen, the template type dropdown list will be populated with instance generator template that outputs instance of type IfcShapeRepresentation.

To specify the shape, select the template from the dropdown list.

project model trees instance node commands add child shape template
Product create, shape by template

Activate the solids toggle button to create a solid model shape. The solid dropdown list is popuplated with all available solid model shapes. If the solid requires a profile in its definition, a profile dropdown list will be populated with all available profile definitions. To style the shape, toggle the color button to on, and use the color chooser to specify the RGBA property of the IfcStyledItem that associated with the shape.

project model trees instance node commands add child shape solid
Product create, solid shape

Creating surfacic shape workflow is similarly to creating a solid shape.

project model trees instance node commands add child shape surface
Product create, surface shape

To create any other shape that is not a solid or surface, activate the add shapes toggle button. In the IfcRepresetation text field manually enter the type, for example, IfcPolyLine.

project model trees instance node commands add child shape any
Product create, general shape
Add child from template

To add child to the spatial tree, start the workflow by right click on the parent node and select the add child from template menu item. The template chooser will be populated with instance generator template that outputs IfcProducts. Select the desired template and click OK to complete the process.

project model tree instance node commands add child template
Add child by template
copy and copy children

To copy a node in a spatial tree, right click on the node and select the copy menu item. This puts the node in a virtaul clipboard.

Copy operation is only allow on instance of type IfcEement

To copy the children of a node in a spatial tree, right click on the node and select the copy chidren menu item. This puts the node in a virtaul clipboard.

Copy children operation is only allow on instance of type IfcBuildingStorey

Paste Children

Paste children is the process of transferring children of one IfcBuildingStorey to another. And this process could be executed between models with compatible context. The following data are transferred.

  • All children

  • All shape referenced by a child

  • child’s placement,

  • optional, the following child properties:

    • IfcRelDefinedByType

    • IfcRelDefinedByProperties

    • IfcRelAssociatesMaterials

To paste copied children from one IfcBuildingStorey to another, right click on the target parent IfcBuildigStorey node, and select the paste children menu item. On the instance properties dialog, select the optional properties you want to transfer and click OK.

project model tree instance node commands paste children
Paste children
Paste Children of Types

Paste children of types operation offers finer control then the command paste children, it allows a user to select the types of child instance to transfer. Paste children and paste children of types together allow the user to combine and merge models.

To initiate the Paste children of types workflow, right click on the receiving node and select the Paste Children of Types menu item. Select the properties, and the instance types to transfer in the paste children of types dialog and click OK.

project model tree instance node commands paste children of types
Paste children of types
Paste Properties

The operation paste properties transfers the following properties from one Instance to another:

  • IfcRelDefinedByType

  • IfcRelDefinedByProperties

  • IfcRelAssociatesMaterials

To start the paste properties workflow, first copy the source instance. Then right click on the receiving instance node and activate the paste properties menu item. On the Instance Properties dialog, select the properties to transfer then click OK.

project model tree instance node commands paste children
Paste Properties
Delete Instance

To delete an instance, right click on the instance node, and select the delete instance menu item.

5.1.11. Working With Instances

User manages model instance’s attributes on the instance detail tree. PIComposer’s point and click user interface provides attribute filters, file upload/download for binary data, dropdown selection, and direct access to BuildingSmart documentation and many user interface components. Each instance attribute is presented in a tree node with a tailor user interface and appropriate set of commands.

project instance pane
Instance tree pane
Instance Command Bar

Instance Command Bar contains the high level operation on an instance. These include:

  • save instance—​batch commit all instance attributes changes to database.

  • reload instance—​reload instance content from database, this clear any unsaved changes.

  • show/hide instance detail—​show or hide optional attributes.

project instance commands
Instance commands

Each attribute node on the instance tree keep track of changes. Both save and reload does nothing if no changes have been made to the tree.

For most instances in a model, the instance tree only show and instance’s attributes. For IfcProduct however, the instance tree offers a more comprehensive view of the instance; it optionally merges nearly all related instances that define the instance’s property, including:

  • object placement

  • shapes

  • related type product—​IfcRelDefinedByType

  • related property sets—​IfcRelDefinedByProperties

  • related materials—​IfcRelAssociatesMaterials

Allowing user to modify and manipulated all related properties all at once. Options to show these additional properties are controlled by user Preferences.

All operations on instances and instance attributes are accessing throw the tree node.

Instance node

The instance node is at the root of the instance tree. To access its accessing its operations, right click on the node, the instance menu appears. The commands available are:

  • add shape—​create and add IfcShapeRepresentation

  • add existing shape—​create and add an IfcMappedItem and mapped an existing IfcShapeRepresentation

  • add property set—​create and add IfcRelDefinedByProperties

  • add existing property set—​relate instance to an existing IfcReldefinedByProperties

  • add type product—​create and add IfcRelDefinedByType

  • add existing type product—​relate instance to an existing IfcRelDefinedByType

  • add material—​create and add IfcRelAssociatesMaterial

  • add existing material—​relate instance to an existing IfcRelAssociatesMaterial

  • add item—​add IfcRepresentationId to a IfcShapeRepresentation instance

  • add shape as mapped item—​add an existing shape to IFcShapeRepresentation by wrapping the shape in an IfcMappedItem

  • wrap shape with mapped representation—​create mapped representation from IFcShapeRepresentation.

  • add layer—​create a IfcPresentationLayerAssignment (or its subtype) and add IFcShapeRepresentation instance to it.

  • add to layer—​add IFcShapeRepresentation instance to an existing IfcPresentationLayerAssignment

  • create template—​create an instance template from instance

  • render 3d—​render the instance in 3d view

  • apply transform—​apply an instance transform to the instance

  • show documentation—​show BuildingSmart documentation on the instance entity type

  • delete—​delete instance from model

project instance instance menu
Instance menu

Most of instance commands are avialable to IFC models only, and availiability depends on instance’s type.

Add Shape

To initiate the add shape workflow, select the add shape menu item. Fill in the information on the create shape dialog which is similar to add child Shape tab.

project instance instance create shape dialog
Instance create shape
Add Existing Shape

To start the add existing shape, select the add existing shape menu item. On the add existing shape dialog, select the instance reference from the dropdown list and click the OK button.

project instance instance add existing shape dialog
Add existing shape
Add PropertySet

To create a IfcRelDefinedByProperties and its relating propertyset, right click on the root instance node and select the add property set menu item.

project instance instance create pset dialog
create propertyset

On the create propertyset dialog, from the dropdown list, select a predefined propertyset or select IfcPropertySet or IfcElementQuantity. Then click the OK button. A IfcRelDefinedProperties instance is created and set to related to the instance. Fill in the remaining detail for each property on the property as appropraite for the your use case.

IfcRelDefinedByProperties' RelatingPropertyDefinition propertyset definition structure could be predefined using propertyset template or quantityset template. All propertyset and quantityset templates appears on the create propertyset dropdown list.

When creating IfcRelDefinedByProperties using IfcPropertySet or IfcQuantitySet, user must create and add each property or quantity individually. It is recommended to use template to predefine the IfcPropertySet.

Add Existing Propertyset

To relate and existing IfcRelDefinedByProperties to instance, right click on the instance node and select the add existing propertyset menu item.

project instance instance add existing pset dialog
add existing property set

From the add existing propertyset dialog, select a IfcRelDefinedByProperties reference and click the OK button.

Add Type Product

To create a IfcRelDefinedByType and its relating IfcTypeProduct, right click on the root node, the popup menu, select the add type product menu item. On the create type product dialog, input the IfcTypeProduct type name or choose it fro the dropdown list. Click the OK button to complete the process.

A IfcRelDefinedByType is created relating to the chosen type product and related to the instance.

project model trees instance node commands add type product
add type product
Add material

To add materail to a instance, right click on instance node. On the popup menu select the add material menu item. A IfcRelAssociatesMaterial related to instance will be created.

Add existing material

To add an existing IfcRelAssociatesMaterial to instance, right click on instance node. On the popup menu, select the add existing material menu item. On the add existing material dialog material dropdown list, select the the material. The instance is related to the selected IfcRelAssociatesMaterial.

Add representation item

To add a representation item to a IfcShapeRepresentation instance, right click on instance node. On the popup menu, select the add item menu item. On the create representation item dialog, enter the required information similar to the section Add Shape.

The newly create representation item and styled item are composed in the IfcShapeRepresentation instance.

Add shape as mapped item

For a IfcShapeRepresentation instance whose attribute RepresentationType is MappedRepresentation, shape can be add as a mapped item to its items attribute list. To do this, right click on instance node. From the dropdown menu, select the add shape as mapped item menu item. From the add existing shape* dialog, choose the IfcShapeRepresentation reference to add. Then click the OK button.

Wrap shape with mapped representation

This operation creates a new MappedRepresentation that wrap the instance in a IfcMappedItem. To execute this operation, right click on the IfcShapeRepresentation instance node. On the popup menu, select the menu item wrap shape with mapped representation. An a new shape is create.

The IfcShapeRepresentation instance must not be a MappedRepresentation already.

add layer

To add IfcPresentationLayerAssignment/IfcPresentationLayerWithStyle to a IfcShapeRepresentation instance, right click on the instance node. On the popup menu, select the add layer menu item. On the Create Layer dialog select the layer type and click the OK button. A layer instance created and instance is assigned to it.

project model trees instance node commands add layer
create layer
add to layer

To add a IfcShapeRepresentation instance to a layer, right click on the instance node. On the popup menu, select the add to layer menu item. On the add to layer dialog, select layer reference and click the OK button.

project instance instance add to layer dialog
add to layer
create template

Instance template is a instance generator comprise of two parts:

  • the instance and its dependency

  • procedure that transforms the instance during the instantiation of the template. The procedure is optional.

Instance template could be derived from two IFC types:

  • IfcShapeRepresentation

  • subtype of IfcElement

For each Instance Template, the following information are included in template:

  • context information: instances of type IfcGeometricRepresentationContext and its subtypes in the model

  • unit measure informaiton: the IfcUnitAssignment instance

  • all dependency instances, that is all instances that are reachable from instance’s attributes.

In addition, IfcEement instance template will include:

  • object placement

  • shapes

  • children related by IfcRelVoidsElement and IfcRelFillsEement

To create a instance template, right click on the instance node. On the dropdown menu, select the create template menu item. On the Create Template dialog enter the necessary information then click the OK button.

project model trees instance node commands create template
create template

Now the template is ready for use. To customize instance template output further, see Blockly workspaces for detail about how to use Blockly to add scripting user visual programming.

render 3d

IfcShapeRepresentation and IfcProduct with IfcShapeRepresentation could be rendered to the 3d view. To render the instance to 3d view, right click on theinstance node and select the render 3d menu item on the dropdown menu. The instnce will be shown on the 3d view.

Attribute nodes

Each instance attribute value is stored in a attribute node in the instance tree. Each node has it own set of operations depending on its type. These operations are listing in it dropdown menu.

There two kinds of attribute nodes:

  • attribute grouping node for attribute of collection type

  • attribute nodes.

Behavior of each node depends on the attribute value type. The following is a comprehensive list of attribute types (based on ISO 10303 AP schema that PIComposer currently support):

  • BOOLEAN-- bool value

  • INTEGER-- int value

  • UINTEGER-- PIComposer type, uint32_t value

  • INT64-- PIComposer type, int64_t value

  • FLOAT-- PIComposer type, float (32-bit) value

  • REAL-- 64-bit double

  • BINARY-- binary data

  • STRING-- string value

  • LOGICAL-- logical a special type of ENUM.

  • ENUM-- enum type value

  • ENTITY-- instance value

  • SELECT-- select value, a union type

  • BOOLS-- a 1-dimensional collection of bool values

  • INTEGERS-- a 1-dimensional collection of int values

  • UINTEGERS-- PIComposer type, a 1-dimensional collection of uint32_t value

  • INT64S-- PIComposer type, a 1-dimensional collection of int64_t value

  • FLOATS-- PIComposer type, a 1-dimensional collection of float

  • REALS-- a 1-dimensional collection of doubles

  • BINARYS-- a 1-dimensional collection of binary values

  • STRINGS-- a 1-dimensional collection of string values

  • LOGICALS-- a 1-dimensional collection of logical values

  • ENUMS-- a 1-dimensional collection of enum values

  • ENTITYS-- a 1-dimensional collection of instance values

  • SELECTS-- a 1-dimensional collection of select values

  • INTEGERS2-- a 2-dimensional collection of int values

  • UINTEGERS2-- a 2-dimensional collection of uint32_t values

  • FLOATS2-- a 2-dimensional collection of float values

  • REALS2-- a 2-dimensional collection of double values

  • STRINGS2-- a 2-dimensional collection of string values

  • ENTITYS2-- a 2-dimensional collection of instance values

  • SELECTS2-- a 2-dimensional collection of select values

  • REALS3-- a 3-dimensional collection of double values

  • ENTITYS3-- a 3-dimensional collection of instance values

list value node

Node that stores a fixed list of values allows PIComposer user to select attribute value using a dropdown list. List value types are:

  • BOOLEAN

  • LOGICAL or its derived defined type such as IfcLogical

  • ENUM

To set the attribute value of list value type, simply use the dropdown list. PIComposer use the list value PI_NULL to indicate a list value as null, this apply to optional instance list value attribute.

project instance instance attribute list value
optional bool node

List value operations include:

  • save-- save modified attribute to database

  • nullify-- set optional attribute value to null

  • remove-- remove attribute node and its value from a attribute collection

  • insert-- insert a attribute into the grouping node of a attribute collection

primitive value node

Primitive value node are node hosting instance attribute of single value. These include:

  • all number types: INTEGER, UINTEGER, INT64, FLOAT, REAL.

  • string type STRING

  • binary type BINARY

With the exception of binary attribute, user input and update primitive value using a text field.

project instance instance attribute string value
primitive value node

In addition to operations avialable to a list value node, primitive also have:

  • set guid-- generate a guid string and the value to it for string attribute of type IfcGloballyUniqueId

  • upload binary-- upload a binary file as value for instance binary attribute

  • download binary-- download instance binary attribute content and save to a file

  • clear binary-- clear the content of a instance binary attribute

project instance instance attribute command primitive value
primitive value menu

When upload a binary file to a instance binary attribute, the file content is set as value to the attribute and the instance is immediately saved to database.

instance value node

The central elements in a model are its instances. Instances inter-relates to each other through instance attributes; and the instance value node store the instance value.

For example, in ISO 10303 part 21 serialized form, an IFCPERSONANDORGANIZATION instance looks like the following:

#6= IFCPERSON($,'redacted','redacted',$,$,$,$,$);
#8= IFCORGANIZATION($,'redacted',$,$,$);
#12= IFCPERSONANDORGANIZATION(#6,#8,$);

The IFCPERSONANDORGANIZATION references the IFCPERSON and IFCORGANIZATION instance. In this way, all instance in the model could be referenced by other instances.

In PIComposer, there are two types of instance containers: the model and instances, that is, one instance can contain another instance. Instance could composed other instance in two ways:

  • composed instance attribute

  • as a composite and shared within another instance.

When instance node store an instance attribute as a composed instance, the attribute instance definition lives inside the parent instance. Semantically, a composed IFCORGANIZATION attribute instance in IFCPERSONANDORGANIZATION instance is similar to:

#6= IFCPERSON($,'redacted','redacted',$,$,$,$,$);
#12= IFCPERSONANDORGANIZATION(#6,#8(IFCORGANIZATION($,'redacted',$,$,$)),$);

The definition of IFCORGANIZATION is internal to the defination of IFCPERSONANDORGANIZATION. But the IFCPERSON will live inside the model and is referenced from the IFCPERSONANDORGANIZATION instance.

Another way that an instance could be internal of another instance is as an composite. In this case, an instance is added to the hosting instance as a composite, and the hosting instance reference it from its instance attributes (see [composite node] for details.

project instance instance composite
Composites

In the figure above, the Ifcextrudedsolid instance is stored in a IfcShapeRepresentation instance as a composite. It is referenced from the attribute items and from the composite instance IfcStyledItem’s item attribute.

The are three types value for an instance value node:

  • null—​no value stored

  • composed instance—​instance definition directly stored in the attribute

  • reference instance—​a reference that refers to a instance definition that is in the model or the host instance’s composite list.

The instance value nodes has the following operations:

  • nullify—​set the optional instance attribute value to null

  • compose instance—​create a composed instance as attribute value

  • set reference—​set the instance attribute valuse to reference an instance in the model or instance’s composite

  • save—​commit changes to database

  • show documenation—​show the BuildingSmart documentation for the attribute instance type.

project instance instance attribute instance value
Instance attribute node

To set an option instance attribute value to null, right click on the instance attribute node. On the dropdown menu, select the nullify menu item.

To store a composed instance in a attribute value node, right click on the instance attribute node. On the dropdown menu, select the compose xxx menu item where xxx is the instance type, to start instance composition workflow. On the create instance dialog, enter the instance type in the text field or select the instance type from the dropdown list. Complete the composed instance creation by clicking the OK button.

project instance instance attribute instance composition
Instance attribute composition

To store a instance reference in a instance value node, right clieck on the instance attribute node. On the dropdown menu, select the set reference menu item to start the create instance reference workflow. On the create reference dialog, select the reference instance type eighter from the model type or the composite type. After selecting the instance type, select the reference instance from model instance or composite instance dropdown list. Complete the process by clicking the OK button.

project instance instance attribute instance reference
Instance attribute reference
select value node

In PIComposer, a select type is modeled as a union type. A union type is a type that can be one of several possible types. It primarily contains two pieces of information:

  • the selected type—​the type of values it is stored

  • the stored value

For example in EXPRESS, the IfcLayeredItem select type have the following definition.

TYPE IfcLayeredItem = SELECT
	(IfcRepresentation
	,IfcRepresentationItem);
END_TYPE;

A IfcLayeredItem select value could have the value of type IfcRepresentation or IfcRepresentationItem.

In PIComposer, select type is model like an entity instance with a single attribute where the attribute name is the selected value type which is set at run-time. And if an instance has a select attribute, the select object is always created during instance creation with the select type unset.

To set a select attribute’s value, right click on the select value node to start the set select value workflow. On the Select Value Type dialog, select the selected value type from the dropdown list and click on the OK button.

project instance instance attribute select type
Select value type

Once a selected type is finalized, the select value node tree branch will be extended to include a child attribute node corresponding to the selected type. Now select value could be set on the newly created subtree as other attribute value.

aggregate attribute node and grouping node

In PIComposer, all EXPRESS collection types—​LIST, BAG, SET, or ARRAY—​are stored internally as a ordered list. The primary function of a aggregate attribute node and grouping node is to manage the size of the list. The operation of a aggregate attribute node are:

  • add—​for multi-dimension collection add a row and an element, for one-dimension collection add a element

  • add many—​add multiple elements to the collection

  • add reference—​for instance collection, add a instance reference

  • clear collection—​clear the content of the collection

  • save—​save collection changes to database

project instance instance attribute 1 dimension
Aggregate attribute commands

The most basic operation on a collection is to add a row, including multi-dimensional collection; and to ensure that the row is not empty, add an element in the row. To add a row to a aggregate attribute node, right click on the node and select the add menu item. The add operation has the following effect:

  • for 1-dimension collection, a element is added.

  • if the collection is two-dimensional, a row with a single column is added and an element is added to the added column.

  • if the collection is three-dimension, a row with a column and a layer (the third dimenension of the collection) is added and an element is added to the layer.

  • adding instance attribute value will compose the instance in the collection and invoke the create instance workflow.

  • adding binary value will start the file upload workflow.

To add many elements to aggregate attribute, select the add many menu item from the dropdown menu. Enter the number of elements on the Object create dialog and click the OK button.

project instance instance attribute add many
Add many

The command add reference is similar to the add operation but for instance attribute collection. To add a instance reference, select the add reference menu item from the attribute node dropdown. From the create reference dialog select the target instance and click the OK button.

project instance instance attribute instance reference
add reference

To clear the content of a attribute collection, use the clear collection command on the dropdown menu.

To save changes to the attribute node, user the save command on the dropdown menu.

aggregate attribute element node

Each aggregate attribute element node is a attribute node, so it inherits the attribute node standard operations. In addition, since an collection element node is also part of collection, it also provides collection management related commands, these include

  • remove—​remove the element node for the list

  • insert—​insert another element node at the node location

project instance instance attribute aggregate command
element node command

When working with the instance tree, the tree has its own copy of the instance data. To persist changes, user must either use the save command on the attribute node or the save button project instance commands save on the Instance Command Bar.

6. PIComposer BIM Model and Entity Instance

A PIComposer model is a collection of entity instances, some of which can be grouped as a collection of related instances, forming a mini-model with an implicit context. Each BIM model in PIComposer has its own database, and each instance is persisted as a document.

In PIComposer, there are two essential organizational concepts that are emphasized for each model: spatial structure and object placement. The spatial structure enriches a BIM model with a logical organizational structure, while object placement defines the physical location of an instance within the model. These concepts are presented as trees in PIComposer.

The spatial tree and the placement tree are managed in parallel, meaning that creating a node in the spatial tree will trigger the corresponding creation of a node in the placement tree.

It’s important to note that the structure of the placement tree is immutable, its structure is by product of the spatial tree structure.

Placement tree display could be turned of by preference

Each instance in the model is visualized as a tree (sometimes you may encounter an acyclic graph) called the instance detail tree. In this tree, each tree node represents either a logical grouping of instances or an attributed node of an instance. The instance detail tree is responsible for managing all additions, modifications, and deletions of instance attributes.

Several components of an instance can be displayed on the instance detail tree, including:

  1. propertyset/quantityset

  2. object placement

  3. placement absolute coordinate

  4. typeproduct

  5. shapes

Each component type display in the detail tree could be turned on/off using user preference.

PIComposer Community Edition is a single document application. To load a model, select a model in the Project pane model listing and click the navigationbar model button model button or simply double click on the item on the model list.

model spatial tab
Model pane, spatial tree

User can return to the last active model by clicking the navigationbar model button model button from any other page of PIComposer.

PIComposer splits model presentation into two areas:

  • the model structure

  • model instance detail

The model structure area comprises of three tabs

  • spatial—​displays the logical spatial tree

  • placement—​displays the phyical placement tree

  • filters—​random instance access using filter and searches, also free form instance creation

6.1. Selection Set

A selection set is an essential component of the PIComposer user interface. Each of the three model panel tabs—spatial, placement, and filter—has its own selection set. Many commands in PIComposer are executed in the context of the current selection set. It allows users to create inter-node links, insert templates into the spatial tree, insert selected nodes into other nodes, and perform various other actions.

6.2. Working with the Spatial Tree

The spatial tree is where the model spatial structure is managed. The commands to manipulate the tree are directly available on the tree node as popup menu items. To see the context-sensitive commands on a tree node, simply right-click on it.

model spatial node command
typical spatial command

All tree commands are context-sensitive, i.e. their availability and actions depend on the node type and the content of the node.

The commands available to the spatial tree nodes are:

  • add child—​add a IfcSpatialStructural element or IfcProduct to the spatial structure.

  • add template child—​instantiate the selected IfcProduct template in the filter tab to the spatial structure.

  • delete child—​delete the select node

  • show propertyset—​show the current node’s propertyset/quantityset in the instance detail tab.

  • show shape—​show the IfcShapeRepresentation of the node

  • show typed—​show the IfcTypeProduct of the node in the detail tab.

  • copy—​copy the current to clipboard

  • paste—​paste the clipboard content as child.

Only leaf nodes can be deleted, except nodes where their children are logically part of the node’s content, such as a wall with child openings or fills.

6.2.1. Add Child

To add a child to the spatial tree, select the parent node, right click on it to activate the node menu, and select the model add child menu item add child menu item. This command creates three sets of information:

  • the IfcProduct instance

  • the shape component and the material for the shape

  • local object placement component

model add product dialog
product creation dialog.

The options on the product tab include:

  1. To specify the IfcProduct type, type it in the custom text box or select it from the dropdown.

  2. To specify the relation of the product to the parent object, select the IfcRelRelation type from the dropdown or leave it at auto to automatically select it.

  3. Tag the instance for search.

model add product shape dialog
prodcut creation dialog IfcProductRepresentation tab

The shape tab adds a IfcShapeRepresentation to the product. The options are:

  1. create shape via a template

  2. create 3 dimensional shape

  3. create 2 dimensional shape

  4. create 1 or 0 dimensional shape

  5. create IfcStyledItem for the shape

Fill in the necessary information on each tab and click OK when done.

If you wish to skip adding IfcShapeRepresentation, leave the type dropdown to 'null'.

If a template is not used when creating IfcShapeRepresenation, only a skeleton of a IfcRepresentationItem is created. Details must be fill out in the Instance Detail Tree.

Adding children using the spatial tree node menu always adds a corresponding placement node to the placement tree. The child is placed relative to the parent.

Adding a child using tree node menu commands creates the desired child, as well as other related nodes such as a child’s placement node, and additionally, multiple inverse links in the database to manage the various relationships between the nodes in different trees. To ensure that the correct model content appears in the trees, it is best to use the available commands.

6.2.2. Add Template As Child

This command uses the filter selection set. To instantiate an IfcProduct template as a child of a spatial node, follow these steps:

  1. activate the template tab

  2. check the template radio button

  3. use the type or tag filter to find the desired template, see the section [Working with Instance Template].

  4. select the template

To add a template as child to the spatial structure, select the parent node, right click on it to activate the node menu, and select the model add child template menu item add child template menu item. Enter the necessary information in the template creation dialog if the template is interactive.

6.2.3. Other Spatial Tree Node Commands

The delete child command model delete child menu item deletes the selected node and the corresponding placement node in the placement. If the inverse link count to the shared IfcShapeRepresentation is 0, the IfcShapeRepresentation will be deleted from the model.

The copy command model copy child menu item copies the node to clipboard. Only leaf node can be copy.

Copy command exception: nodes that could be templates are copyable. For exmple an IfcWall with openings and doors/windows are copyable although it has openings as children

The paste command model paste child menu item pastes the content of the clip to the tree.

Unlike template packaging, which do not package IfcTypeProduct, IfcPropertyset components into the template, the copy/paste command copy does since we are pasted into same model context.

The show type command model goto typeproduct menu item shows the IfcTypeProduct componet of an entity in the detail tree.

All the 'show' commands, such as 'show shape', apply the instance ID filter to the targeted component to display the component in the detail tree.

6.3. Working with the Placement Tree

To highlight its importance in the BIM model, PIComposer user interface includes the placement tree.

To access the placement tree, simply activate the placement tab.

model placement tab
The placement tree

TThe placement tree structure is immutable, meaning its structure is created during the creation of the spatial tree. When a spatial node corresponding to a placement is deleted, the placement will be automatically deleted as well.

The only available command for the placement tree is model add goto placed instance menu item, which navigates to the placed instance associated with the IfcLocalPlacement.

While the placement tree itself is immutable, the placement node is mutable. Like all instances, its attributes can be modified using the instance detail tree.

The 'show placed instance' command uses an inverse link to find the placed product instance in the model, selects it in the instance filter, and then shows its content in the detail tree.

The placement tree can be hidden/shown by setting the hide flag in user preference.

6.4. Working with Filters

Filters allow users to quickly search and retrieve items within the model or project. The filter tab serves as the workbench for dealing with free form instances and working with instances outside of the spatial structure framework. There are two types of filters in the model pane: instance filters and template filters.

For details about template filters, refer to the section on [Working with Instance Template]. In the following section, we will focus on instance filters.

model instance filter
Instance Filter

6.4.1. Instance Type Filter

The basic functionality of the instance type filter is similar to the template [Type Filter]. However, the instance filter has two additional features:

  • Filter by subtypes: The subtype filter operates in the same way as the [Type Filter], but it considers all subtypes of the user-specified type.

  • Create entity instance of the filter type: The instance filter allows users to directly create an entity instance of the selected filter type.

The user input type could be abstract for the subtype filter.

Instance type filter is limited to return 1000 result instances.

6.4.2. Instance Creation

To create instance of the desired type, select the type from the dropdown list and click the create model instance filter add entity button.

To create an instance of type not on the dropdown list, enter the type using the 'custom type' text box. The type user wants to create must not be abstract.

instance type filter create
type filter dropdown

Instances created using the 'create' command via the filter panel will not create any inverse links, unlike when using the spatial tree commands. Users are responsible for managing instance lifecycle and data consistency.

The instance tag filter functions exactly like the tempate tag filter, see [Tag Filter].

6.4.3. Instance Id Filter

Instance type filter is based on a list of specific instance id laterals and a list of ranges.

model instance filter instance id example
Instance id Filter

To use the id filter, first enter the search string in the instance id text box. The syntax is a comma separated list of positive integers and a list of integer ranges. A range is a pair of positive integer separated by a dash.

In the example above, we are looking in the ranges 90 to 100, 200 to 210 and the instance ids 2, 45, 10 and 15.

Next click model instance filter instance id the instance id filter button.

Each range is limited to 1000.

6.5. Working with Instance Detail Tree

The STEP ISO-10303 standard is a group of standards including an object model specification using the EXPRESS language.

An object is a collection of attributes. In PIComposer, a representation of an object is referred to as an instance—an instantiation of an entity type.

6.5.1. Instance Detail Tree

According to ISO-10303-11, "EXPRESS data types are classified according to their nature as: simple data types, aggregation data types, constructed data types, named data types, and generalized data types."

The instance detail tree is where PIComposer users interact with instances and their attributes, which are referred to as "entity data types."

model instance detail
Instance detail tree

The instance detail tree is a federated view that displays the instance along with its components. The visibility of components is optional and can be controlled by user preference. The optional nodes in the instance detail tree include:

  • placement

    • absolute coordinates

  • type—​IfcTypeProduct

  • propertyset/quantityset

  • shape—​IfcShapeRepresentation

The model instance show detail topple optional attribute filter, part of SchemaSense system (see SchemaSense and working with Attributes below), hides optional attribute of an instance. This filter is also part of user preference

Like the spatial tree, user modify tree content by operating directly on the tree nodes.

6.5.2. Instance Root Node

Operations that directly affect the basic structure of the node or entity’s components are anchored at the root node. The operations on the root node include:

  • show 3d—​show the instance in 3d. Available if a instance has shape

  • add to layer—​add instance to a layer, available if there is layer in the model and the instance is of type IfcShapeRepresentation

  • clear layer—​remove instance from all layer it is assigned to

  • create template—​create a private template from the instance.

  • add shape—​add a IfcShapeRepresentation component to instance

  • clear shape—​remove all shape. Also, if the reference count of any shape reach zero, it will be removed from model

  • Add RepItem—​add a IfcRepresenationItem to a IfcShapeRepresentation component.

  • add shape to selected—​add selected IfcShapeRepresentation instance to the spatial tree selected node.

  • add type to selected—​add IfcTypeProduct subtype to the selected spatial tree node. The current instance is the selected IfcRelDefinedByType component in the instance filter.

  • add type—​add IfcTyedProduct to instance

  • remove type—​remove instance from IfcRelDefinedByType component

  • add pset—​add IfcRelDefinedByProperties to instance

  • clear pset—​remove all IfcRelDefinedByProperties from instance

  • add pset to selected—​add filter selected IfcRelDefinedByProperties component to the spatial selected node.

  • add template shape to selected—​add template shape to the spatial selected node.

  • delete—​remove the instance

model instance detail root node commands
Typical IfcProduct root node menu items

6.5.3. SchemaSense and working with Attributes

An instance is a collection of attributes. Each attribute has a data type. The basic attribute data types are:

  • number

  • real

  • integer

  • string

  • boolean

  • logical

  • binary

  • aggregation—​collection

  • defined type

  • entity

  • enum

  • select

A defined type is an alias for some already existing underlying type. For example, IfcLogical is a LOGICAL type.

SchemaSense is PIComposer’s context-aware schema guidance and informational system that speeds up instance creation and editing. It consists of three functional components:

  • Filtering of optional attributes: The optional attribute filter model instance show detail topple hides the optional attributes of an instance. This allows users to create a valid instance while omitting optional attributes.

  • Attribute description during mouse hover: When hovering over a tree node, SchemaSense displays the EXPRESS type of the node in the form of a tooltip. If an attribute is null, SchemaSense indicates this to the user.

  • Context-aware schema-based tree node attribute menu: SchemaSense provides a context-aware menu for modifying or adding attributes. This is particularly useful when dealing with complex attribute types (see below) such as entities, collections, selects, and enums. SchemaSense provides dropdown lists or menu items for modifying or adding values to nodes, allowing users to create multiple values for collections, select entity types or enums. It ensures a sensible workflow when creating select attribute types and helps prevent instances with syntactical errors.

PIComposer categorizes attributes into two groups:

  • simple attributes, which consist of single values and require only a single node for user interaction,

  • complex attributes, which consist of multiple values and require a subtree to store their values.

6.5.4. Simple Attributes

The simple type include:

  • number

  • real

  • integer

  • string

  • boolean

  • logical

  • binary

  • defined type, with simple underlining type

  • enum

Numeric types, string and binary are stored in a text box. Boolean, logical, and enums are presented in a dropdown list. In all cases, user interaction is straight forward.

model simple attribute commands
typcal attribute node command

When an attribute has been modified, there are two ways to commit the updates to the data store in PIComposer. You can either right-click on the label of the attribute to access the tree node menu and select the 'save' menu item, or click the 'save' button located at the top-right corner of the detail instance tree interface.

The 'save' button located in the upper right corner of the interface is a batch save button. It allows you to commit all changes made to the detail instance tree to the data store all at once. The attribute node save command is a targeted command; it will only save its change and clear changes to other nodes.

The defined type IfcGloballyUniqueId uses string as its underlying type. Since users may not have access to a UUID generator, PIComposer provides the 'set guid' command. To set a guid attribute, right-click on the label of the attribute and select the 'set guid' command model instance detail set guid.

6.5.5. Complex Attributes

The complex attribute types are:

  • entity

  • select

  • collection

A complex attribute typically requires multiple nodes to represent its value. In particular, when an entity instance is composed in situ, it will occupy a full subtree.

Attribute node commands include:

  • create—​create an entity instance in place

  • set reference—​set attribute value as entity instance reference

  • set reference selected—​set spatial tree entity instance attriubte value to reference the selected instance in instance filter.

  • remove—​remove instance or instance reference from a instance collection attribute

  • show instance—​show attribute instance in detail using instance filter.

  • nullify—​set optional attriubte to null

model instance detail entity attribute commands
typical entity attribute command

Just as there are two ways—​aggregation and composition--to associate one object to another, there are two ways to associate an entity attribute to an entity instance.

6.5.6. A Brief Introduction to Object modeling

As mentioned at the beginning of this chapter, a PIComposer model is a collection of objects. This section introduces some object concepts useful in the use of PIComposer.

According to ChatGTP of OpenAI:

Objects and Object Association

In object-oriented programming, objects are the fundamental building blocks that represent entities in the real world or abstract concepts. They are instances of classes that encapsulate data and behavior. Object association is the concept of connecting objects together to represent relationships between them.

Object association can be implemented using two approaches: composition and aggregation. Both approaches are used to represent different types of relationships between objects.

Object Composition

Object composition is a form of object association where one object contains another object as a part of its state. The contained object cannot exist independently of the container object, and its lifecycle is tied to the container object. This is known as a "has-a" relationship.

For example, a car object may contain an engine object. The engine is a part of the car and cannot exist without it. The car object controls the lifecycle of the engine object, and the engine object cannot exist outside of the car object.

Object Aggregation

Object aggregation is a form of object association where one object uses another object as a part of its functionality. The contained object can exist independently of the container object, and its lifecycle is not tied to the container object. This is known as a "uses-a" relationship.

For example, a car object may use a navigation system object to provide directions to the driver. The navigation system is not a part of the car, and it can exist independently of the car object. The car object does not control the lifecycle of the navigation system object, and the navigation system object can exist outside of the car object.

Difference between Object Composition and Object Aggregation

The key difference between object composition and object aggregation is the lifecycle of the contained object. In object composition, the contained object cannot exist independently of the container object, and its lifecycle is tied to the container object. In object aggregation, the contained object can exist independently of the container object, and its lifecycle is not tied to the container object.

Another difference is the relationship between the container object and the contained object. In object composition, the contained object is a part of the container object, and it is owned by the container object. In object aggregation, the contained object is used by the container object, and it is not owned by the container object.

Conclusion

Object association is a powerful concept in object-oriented programming that allows developers to model relationships between objects. Object composition and object aggregation are two approaches used to represent different types of relationships between objects. It is important to understand the difference between these two approaches to choose the appropriate approach for a given situation.

6.5.7. Object Aggregation and Composition in PIComposer

Aggregation is the default instance-to-instance association in the STEP standard, and it is the only option in the ISO 10303 Part 21 standard. The most important difference between object composition and aggregation is that an aggregated object is potentially shared among many objects, while a composed object is embedded in the parent object.

model object aggregation composition
Anatomy of Aggregation and Composer

In the figure above:

  1. The composite node groups all the shared children within a container object to be referenced.

  2. The IfcCartesianPoint object is an aggregated object referenced by 7 inside the composed IfcPolyloop object.

  3. The composed IfcClosedShell inside an IfcFacetedBrep object.

  4. The cfsfaces attribute of the IfcClosedShell object contains a composed collection of IfcFaces.

  5. Composed IfcFaces.

  6. The polygon attribute of IfcPolyloop, which comprises a collection of aggregated IfcCartesianPoint.

  7. An aggregated IfcCartesianPoint.

  8. The contextofitems attribute of an IfcShapeRepresentation object. It references an IfcGeometricRepresentationContext object in the model.

  • To share an object within a model, create it in the model using the filter panel and share it by aggregation.

  • To share an object within a container object, create it under the composites node and share it by aggregation.

  • To compose an object, use a create/add object command and compose the object in situ. For details, see below.

  • Prefer composition over aggregation whenever possible.

  • To share across model boundaries, create a template.

One way to create an aggregation is use the reference selected instance command. To use the reference selected instance command, follow the steps below:

  1. select the desired reference target in instance filter

  2. right click on the entity attribute node label to activate popup menu

  3. choose model set reference selected command set reference selected menu item

"Reference selected" command will only be available if the selected instance is compatible to the Entity attribute. If attribute is optional, it must be null. To reset to a different reference, nullify first

To set reference without using instance filter, select the model set reference command set reference menu item and enter the target instance id on the dialog.

model set reference dialog
set reference

For a component, as a rule for non-shared attribute instance, the create command is the prefered method when populating entity attribute values. In the case of shared instance in a component, use the add composite command to create the shared instance, see [Component and Composite].

To create attribute instance in place, right click on the attribute label, then select model instance detail create attribute instance command command. If necessary fill in the detail in object creation dialog.

If the type to create has no subtype, the attribute instance is directly created without soliciting input from the user.

6.5.8. Working With Select

A select entity attribute is a single value polymorphic container; it could hold value of any defined type within its specification.

There are three commands for select attributes:

  • nullify—​set optional select attribute to null value

  • create—​create the select object in place.

  • remove—​remove select from a collection of select

model select attribute menu
select attriubte menu

The PIComposer create select user interface is based on two key concepts:

  • the selected type

  • the value of the selected type

To create a select attribute value, select the model create select attribute menu item create select menu item. Fill in the detail in the create select dialog by first specifying the selected type, then value type.

model select create dialog
example of select of a select attribute

6.5.9. Working with Collection

STEP aggregation data types are collections of defined types. Aggregations could contain order or unordered, unique or none-unique values. Aggregation containers include:

  • array—​indexed ordered collection

  • list—​ordered collection

  • bag—​unordered collection

  • set—​unordered and unique valued collection

A collection such as a list could be restricted to unique values by using the keyword UNIQUE. For example, the EXPRESS expression LIST [3:?] OF UNIQUE IfcCartesianPoint; means a list of unique Cartesian points.

PIComposer has a simplified collection data model where aggregation data types are modeled as vectors of defined types. PIComposer also supports multi-dimensional aggregation.

PIComposer users use the following commands to work with collections:

  • add—​add an instance

  • add many—​add multiple instances

  • add reference—​available for entity container only

  • clear list—​empty the collection

When dealing with aggregation types, it is up to the user to manage the attributes' constraints, including uniqueness.

In PIComposer, a collection attribute has its own grouping node where collection commands are anchored.

model collection attribute
Entity collect commands

Each add command activates a dialog box. To add mulitple instances into a collection, right click on the collection, and select the model collection attribute add many command add many command. .Entity collection, add many image::model-collection-attribute-add-many.png[]

Complete the add many command by choosing the desired type and entering instance count.

6.6. Working with Propertyset, QuantitySet and Their Templates

Propertyset and quantityset are packaged in a IfcRelDefinesProperties component. The preferred way to work with IfcRelDefinesProperties is using the following command on the root detail node:

  • add propertyset—​model add properties command add propertyset command

  • add selected propertyset—​model add selected propertyset add selected propertyset.

  • add propertyset to selected—​model add propertyset to selected add propertyset to selected instance (from instance filter).

Excecuting the model add properties command add propertyset command activates the create propertyset dialog. Choose the desired propertyset or quantityset and click OK to complete propertyset creation.

model add propertyset dialog
Create Property dialog

The dropdown in the above dialog lists all property sets and quantity sets known to PIComposer, including those defined in the standard schema as well as those defined by templates.

Ifc4x3 documentation defines a large number (more than 600) of property sets and quantity sets outside of the published schema. PIComposer needs to know their content in order to instantiate them. To configure PIComposer to create these and other user-defined property sets, PIComposer uses templates.

A template is defined using a JSON file.

6.6.1. Propertset Template

A property set is a collection of properties. Each property is an entity type that may have multiple attributes. Let’s dive into the property set template by looking at an abridged example:

{
    "__schema": "ifc4x3",
    "__type": "Pset_SlabCommon",
    "Reference" : {
        "property_type" : "P_SINGLEVALUE",
        "value_type" : "IfcIdentifier"
    },
    "Status" : {
        "property_type" : "P_ENUMERATEDVALUE",
        "value_type": "PEnum_ElementStatus"
    },
	"AcousticRating" : {
        "property_type" : "P_SINGLEVALUE",
        "value_type": "IfcLabel"
    },
	"PitchAngle" : {
        "property_type" : "P_SINGLEVALUE",
        "value_type": "IfcPlaneAngleMeasure"
    },
}

The first two template json properties provide header information:

  • __schema—​it must be ifc4x3

  • __type—​the propertyset type, it must be prefix with Pset_xxx

The remaining properties are property definition for the prepertyset.

Each property has a name, a property_type, and a value_type. In the example above for the first property we have:

  • name—​Reference

  • property_type—​P_SINGLEVALUE

  • value_type—​IfcIdentifier

name is the name of the proerpty.

The value of property_type comes for the standard enum IfcSimplePropertyTemplateTypeEnum. The possible property_type values and their corresponding IfcProperty are:

  • P_SINGLEVALUE—​IfcPropertySingleValue

  • P_ENUMERATEDVALUE—​IfcPropertyEnumeratedValue

  • P_BOUNDEDVALUE—​IfcPropertyBoundedValue

  • P_LISTVALUE—​IfcPropertyListValue

  • P_TABLEVALUE—​IfcPropertyListValue

  • P_REFERENCEVALUE—​IfcPropertyListValue

Every value_type is a ifc defined type.

propertyset templates are stored in the folder /picomposer_data/propertyset_template

To create user-defined property sets at runtime without using templates, use the "Add Property Set" command to create an IfcPropertySet, and then add any desired IfcProperty to the model.

6.6.2. Quantityset Template

A quantityset is a collection of quantity. A quantity is a subtype of IfcPhysicalSimpleQuantity that has a numeric attribute. Like other templates, quantityset template specification are json files. Below is a full example:

{
    "__schema": "ifc4x3",
    "__type": "Qto_BeamBaseQuantities",
    "Length":  "Q_LENGTH",
    "CrossSectionArea":  "Q_AREA",
	"OuterSurfaceArea":  "Q_AREA",
	"GrossSurfaceArea":  "Q_AREA",
	"NetSurfaceArea":  "Q_AREA",
	"GrossVolume" : "Q_VOLUME",
	"NetVolume" : "Q_VOLUME",
	"GrossWeight" : "Q_WEIGHT",
	"NetWeight" : "Q_WEIGHT"
}

In the json file, first comes the header, which include the properties:

  • __schema—​must be ifc4x3

  • _type—​the quantityset name, must be prefixed with Qto

The remaining json properties are a list of quantities which has name and type. The possible types and their corresponding entity type are:

  • Q_LENGTH—​IfcQuantityLength

  • Q_AREA—​IfcQuantityArea

  • Q_VOLUME—​IfcQuantityVolume

  • Q_COUNT—​IfcQuantityCount

  • Q_WEIGHT—​IfcQuantityWeight

  • Q_TIME—​IfcQuantityTime

Quantityset templates are stored in the folder /picomposer_data/quantityset_template

To create user defined quantitysets at runtime without using templates, use the add propertyset command to create IfcElementQuantity and manually add any IfcPhysicalSimpleQuantity subtype.

6.7. Working with layers

Layers are commonly used in CAD systems for grouping instances and controlling their visibility. In the IFC standard, the corresponding concept is embodied in the IfcPresentationLayerAssignment entity.

Only component of type IfcShapeRepresentation can be assigned to a layer in PIComposer. However, instances could be filtered by layer indirectly by its association to a shape, see Layer Filter

To setup a layer, first create a IfcPresentationLayerAssignment instance using the instance filter create command.

model instance filter create command
create command

To add layers to an IfcShapeRepresentation component, use the model add to layer command add to layer command.

add layer dialog

image::model-add-to-layer-dialog.png

In the add layer dialog, select the desired layer from the dropdown list.

6.7.1. Layer Filter

A layer provides a grouping of IfcShapeRepresentation components. A layer filter allows for quick access to this grouping. Optionally, instead of listing the shape components, users may choose to list the instances associated with the grouped shapes.

model layer filter
layer filter

To use the layer filter, select the layer from the dropdown list, and press the model filter by layer command filter by layer command.

The filtered result type is controlled by preference.

PIComposer does not show the layer filter if the model does not has any IfcPresentationLayerAssignment instance.

6.8. Ifc Exporting and 3d Viewer

To export models to ifc, click the navigationbar export model button button on the navigation bar. The exported model is saved to user’s download folder with the the file name "modelId.ifc".

To view a model in 3d view, click show the show 3d navigationbar show3d button button on the navigation bar. This will kick start the export of the model to part21. When the export is completed, the web 3d viewer will be launched.

Both commands—​export and view model—​are background tasks. User may continue working in parallel while the command is running.

7. Blockly workspaces

7.1. Introduction

Most PMI/BIM systems are static application comprise of two components: geometry and data. PIComposer adds another dimension: compute. The computation facility is provided by the PIComposer template system. PIComposer templates are compute instructions; they are integrated into the PIComposer interactive workflow according to their execution context.

User manages PIComposer templates in the Blockly workspace page.

Blockly workspace provides a computer language netural visual programming environment.

Blockly currently generates dart language output. So a familarity with the dart language would be helpful. Generator for Python may be added in later releases.

Templates are divided into two major groups:

  • dictionary—​static instruction or configuration.

  • procedure—​code that operates on PIComposer geometry and data.

Dictionary are configuration templates. They are allowed users dynamically add types to existing AP schema. In particular, some types, such as IFC propertysets, are spefecified in the documentation but not included in the standard schema (not in the ifc4x3.exp file).

A dictionary template may be a instance or model generator. A spatial template is a model generator, and a propertyset or quantityset template is a instance generator. Dictionary templates include:

  • enum template — defines an enumeration (PIEnum) not specified in a model schema schema.

  • user defined entity — user defined entity.

  • spatial template — IFC only, a model generator specification that defines a spatial structure.

  • propertyset template — IFC only, configurs a propertyset (IfcRelDefinedByProperties) definition.

  • quantityset template — IFC only, defines a quantityset.

Dictionary templates are encoded into JSON strings then decoded during execution. No compute expression is allowed. With complex properterset, use a procedure entity template with output type—​IfcRelDefinedByProperties—​when property involve using IfcPropertyEnumeration or similar complex property.

All procedure template defines a compute procedure that operates on PIComposer data. Procedure templates include:

  • instance template—​store a snapshot of an instance and re-instantiate it when activate while using the user defined procedure to customize the output. Only available to IFC and limited to types: subtype of IfcElement, and IfcShapeRepresentation.

  • procedure entity—​a instance generator.

  • procedure model—​a model generator.

  • instance transform—​a procedure use to transform a model instance.

  • model transform—​a procedure that transform the content of a model

  • generic procedure—​a general propose procedure.

Every procedure template may accept user as the initialzation step of its execution. The content of user input is using a dictionary and is a integral part of the template’s design.

Instance template is a very powerful design reuse tool. For example, a IfcWall instance template could include all its opening, doors, and windows. When instantiate the template, the executing procedure could customize the new wall by:

  • resize the wall

  • remove or add doors or windows.

  • …​

Procedure entity template is a instance generator. This template may be run by PIComposer in the context of instance creation. For example, when adding a node into the IFC spatial tree, a wall entity template will be on the list of executable templates.

Procedure model template is a model generator; it is the embodyment of our philosophy that code is the model. Procedure model template is run from the create model command in the project page.

Instance transform template is a instance modifier. It is integrate with any PIComposer create instance command.

Model transform template is general procedure that operates on a model. Ideal place to implement any model update logic. It could be executed in the PIComposer’s model tree.

Generic procedure template is a general purpose template. A generic procedure is run from blockly workspace page.

The template system is a library. Template could reuse other templates. The basic rule of thumbs is:

  • generic procedure may call any template, including another generic procedure.

  • model procedure and model transform may call all other template but not generic procedure.

  • instance procedure and instance transform may call each other but not another other kind of templates.

Each procedure template could be in two modes:

  • connected

  • disconnected

When it is connected, the default mode, the template is connected to the visual coding system Blockly. User construct the procedure by drag and dropping block. For detail about Blockly programming system see the blockly programming reference manual.

In disconnected mode, code generation by Blockly is turned off. User will modify the procedure’s dart file directly either manually or use other code generation tool.

Template may be shared with all users of PIComposer via PIComposer cloud services. Templates could be in the following ownership state:

  • private—​completely own by the local PIComposer user.

  • shared—​uploaded and stored in PIComposer cloud server.

  • certified—​reviewed shared template available for download to all PIComposer users.

  • downloaded—​downloaded local copy of a certified template from another user.

For detail about the PIComposer api, see the PIComposer api reference documentation. For detail about blockly programming interface, see the Blockly programming reference documentation.

blockly workspace pane
blockly_workspace_pane

7.2. Blockly workspace commands

7.2.1. create a template

To add a tempate, click the add image:blockly_workspace_add_template_command.png button and enter the add template workflow. Choose the template type from the create template dialog and enter the template related information.

spatial template

To complete the creation of a spatial template, enter the required name of the template. End the creation process by clicking the OK button. .create_template_dialog_spatial_template image::create_template_dialog_spatial_template.png[]

7.2.2. user defined enum

To complete the creation of an user defined enum, select the schema from the schema dropdown. Then enter the required name of the template. End the creation process by clicking the OK button. .create_template_dialog_user_enum_template image::create_template_dialog_user_enum_template.png[]

7.2.3. propertyset template

To complete the creation of a propertyset template, enter the required name of the template. End the creation process by clicking the OK button. .create_template_dialog_propertyset_template image::create_template_dialog_propertyset_template.png[]

7.2.4. quantityset template

To complete the creation of a propertyset template, enter the required name of the template. End the creation process by clicking the OK button. .create_template_dialog_quantityset_template image::create_template_dialog_quantityset_template.png[]

7.2.5. user defined entity

To complete the creation of an user defined entity, select the schema from the schema dropdown. Then enter the required name of the template. End the creation process by clicking the OK button. .create_template_dialog_user_entity_template image::create_template_dialog_user_entity_template.png[]

7.2.6. procedure entity

To complete the creation of a procedure entity, select the schema from the schema dropdown. Enter the required output type (the instance type) that the procedure would create. Enter the required name. End the creation process by clicking the OK button. .create_template_dialog_procedure_entity_template image::create_template_dialog_procedure_entity_template.png[]

7.2.7. procedure model

To complete the creation of a procedure model, select the schema from the schema dropdown. Enter the required name. End the creation process by clicking the OK button. .create_template_dialog_procedure_model_template image::create_template_dialog_procedure_model_template.png[]

7.2.8. instance transform

To complete the creation of an instance tranform, select the schema from the schema dropdown. Enter the required target type and required name. End the creation process by clicking the OK button. .create_template_dialog_instance_transform_template image::create_template_dialog_instance_transform_template.png[]

7.2.9. model transform

To complete the creation of a model tranform, select the schema from the schema dropdown. Enter the required name. End the creation process by clicking the OK button. .create_template_dialog_model_transform_template image::create_template_dialog_model_transform_template.png[]

7.2.10. generic procedure

To complete the creation of a generic procedure, select the schema from the schema dropdown. Enter the required name. End the creation process by clicking the OK button. .create_template_dialog_generic_template image::create_template_dialog_generic_template.png[]

7.3. delete a template

To delete a template, select it from the template table. Click the delete blockly workspace delete template command button. Click the Delete button on the confirmation delete dialog. .template_delete_confirmation_dialog image::template_delete_confirmation_dialog.png[]

7.4. edit template information

To update a template information, select it from the template table. Click the update template info image::blockly_workspace_edit_template_info_command.png[] button. Enter the information to be changed in the update template dialog. .template_info_update_dialog image::template_info_update_dialog.png[]

7.5. publish procedure template to dart project

Before a procedure template could be executed, it must be published and make available to the picomposer procedures dart project. To publish a procedure, select it from the template table. Click the publish to dart project blockly workspace publish template command button. The dart code stored in the procedure template is inserted into the picomposer procedures dart project and exported as part of the project to be used by the PIComposer scripting engine.

Steps to create and execute a tempates are:

  • create it

  • add and edite code using blockly editor

  • publish to dart project

  • restart

  • use the template

7.6. disconnect template

A template may be disconnect from the blockly code authoring framework. This is particular useful for export dart developer or user who wish to use other code generating tools such as LLMs. To disconnect a procedure template from Blockly, select the template from the template table, then click on the disconnect template blockly workspace disconnect template command button. After disconnect, Blockly would stop updating the code content of the template.

Before you disconnect a template, the template should had been published to the picomposer procedures dart project.

7.7. connect template

To reconnect a template to Blockly, select the template from the template table. Click on the connect template button. Once a template is connected, Blockly could be use to edit the code content of a procedure template.

7.8. running generic template

To run a generic template, select the template from the template table. Click on the execute procedure blockly workspace execute template command button; this will start execution of a generic template.

While a generic procedure template is running, navigation to the project workbench is disable.

7.9. share template

A template may be shared with all PIComposer users. To share a template, select it from the tempate table. Click on the share template blockly workspace execute template command button. This uploads the template to PIComposer cloud service and marks template ownership to shared. The shared template would be visible and ready to download once it is certified by PIComposer development staff.

The certified ownership flag is used only in the PIComposer cloud server to indicate that a shared template is available for other user to download.

7.10. download share template

To download a shared template, select the template from the template table. Click on the download share blockly workspace download share template command button.

7.11. export template

Private templates may be save to a file and share privately among collegues. To export all private templates in your Blockly workspace, click on on export to file blockly workspace export to file command button. On the file chooser dialog box, select the export folder the click the save button.

7.12. import template

To import templates from a file, click on the import from file blockly workspace inport from file command button.

During template import, each template version will be checked. Only new version of a template will be imported if it exist locally already.

7.13. working with procedure template in Blockly editor

Blockly is a language neutural visual programming system first developed by google now develop and maintain by the Raspberry Pi Foundation.

Blockly allows users to create programs by dragging and dropping blocks, which represent code, onto a workspace. This intuitive interface makes it easy for beginners to learn programming concepts without needing to worry about syntax errors.

Like all Blockly base applications, the PIComposer Blockly editor is a web application. The Blockly web application run as local host on a user web broswer. It communicates with PIComposer via http.

To launch PIComposer Blockly editor and edit the content of a procedure template, double click the template on the template table. This will open the content of the template on a browser. .blockly_workspace_blockly_editor image::blockly_workspace_blockly_editor.png[]

Blockly programming follows a vertical descending structure where blocks are connected into a chain, creating a sequence of actions for the procedure to execute.

Each basic block represents a logical operation.

To connect blocks, follow these steps :

  • Selecting Blocks: Begin by selecting the blocks you want to use from the Blockly toolbox. Blocks are organized into categories based on their functionality, making it easy to find the ones you need.

  • Drag and Drop: Once you’ve selected a block, simply drag it from the toolbox and drop it onto the workspace. You can position the blocks anywhere on the workspace and rearrange them as needed.

  • Connecting Blocks: To connect blocks together, look for connection points on the sides or bottom of each block. These connection points allow you to attach blocks to one another to form a sequence of actions or procedures.

7.13.1. Blockly toolbox

The blockly toolbox is organized into categories. These includes

  • workspace commands

    • save—​save the content of workspace

    • hide/show code—​hide or show the generated code panel

  • Logic—​standard blockly logic category

  • Loop—​standard blockly loop category, handles loops and repeatation

  • Math—​standard blockly math category, handles number, and math functions

  • Text—​standard blockly text category, handles strings.

  • List—​standard blockly list category, handles lists

  • Variable—​standard blockly variable category, handles variables. Since each template is exported from pricomposer_procedures in dart, variable names are recommanded to start with a underscore char: _ to avoid name collision.

  • Typed Variable—​standard blockly typed variable category. Use by PIComposer but user should avoid create new typed variables.

  • Function—​standard blockly function category, handles functions

  • PIComposer Store—​provides logic to use the IStore interface, which manages projects.

  • PIComposer Template—​provides logic to access the ITemplateManager interface which manages templates.

  • PIComposer Schema—​provide logic to acccess to intefaces: ISchemaFactory, ISchema and various descriptor interfaces.

  • PIComposer Project—​provide logic to access the IProject interface

  • PIComposer Model—​provides logic to access the IModel interface

  • PIComposer IFC Model Extension—​provides logic to access the IIfcModel interface

  • PIComposer STP model Extension—​provides logic to access the ISTPModel interface

  • PIComposer Reference Model Extension—​provides logic to access the IReferenceModel interface

  • PIComposer Instance—​provides logic to access the IInstance interface

  • PIComposer Select—​provides logic to access the ISelect interface

  • PIComposer Dictionary—​provides logic to work with dictionary (or json). In dart, it is represented by Map<String,dynamic>.

  • PIComposer File IO—​provides logic to work with files and model import and export.

  • PIComposer Utility—​provides miscellaneous function such as logging, comments, inline raw code etc.

For detail about Blockly programming in PIComposer, see the blockly reference. For detail about PIComposer API see the picomposer programming reference.

8. Preferences

Users manage user interface display options in the preference pane. The preference settings are grouped into major sections, including:

  • Status display options

  • Instance detail options

  • Login options

Activate the preference pane by clicking the navigate preference button.

preference pane
Preference Pane

8.1. Status Display

Status display options allow users to control the status display at the bottom left of the application window. There are two types of status: success/failure command status and long-running command progress.

  • Show notification - Shows notifications when user commands are completed or displays error messages if commands fail when this option is active.

  • Show progress bar - Shows a progress bar for long-running commands such as model import/export, rendering models, etc., when this option is checked.

picomposer workspace status bar
Command status

8.2. Instance Detail Options

Users interact with model instances via the instance detail tree. In addition to instance attributes, the instance tree may optionally show instance-related components—shapes, placement, property sets, product type, material, and layer—allowing users to manipulate an instance and its related components centrally for IFC models. The options are:

  • Show optional attributes - Shows all attributes (including optional ones) in the instance tree. Turn this off when you want to create valid instances quickly and ensure only required attributes are valid.

  • Show placement - Option to show IfcProduct placement information in the instance tree. Placement information includes the computed absolute placement and the placement object.

  • Show shapes - Shows IfcProduct’s IfcShapeRepresentation components in the instance tree.

  • Show property sets - Shows IfcRelDefinesByProperties instances related to the instance in the instance tree.

  • Show material - Shows IfcRelAssociatesMaterial that is related to the instance in the instance tree.

  • Show type - Shows IfcRelDefinesByType that is related to the instance in the instance tree.

  • Show layer--Show IfcPresentationLayerAssignment/IfcPresentationLayerWithStyle that references the instance in the instance tree.

  • Show layer detail--Show the detail of IfcPresentationLayerAssignment/IfcPresentationLayerWithStyle that references the instance in the instance tree.

IfcPresentationLayerAssignment instance could reference very large number of instances, therefore, sometimes it is advantageous to turn Show layer detail off.

preference instance detail options
Instance Detail

8.3. Login Options

Login options control the persistence of user login information and application startup behavior.

  • Remember email - Saves the user’s email and uses it for the next login attempt.

  • Remember password - Saves the user’s password and uses it for the next login attempt.

  • Show login dialog - When this option is deactivated, if the user has an active subscription, the application starts directly at the workspace pane.