Vous êtes sur la page 1sur 98

Hangers and Supports

Reference Data Guide

Version 2016 (11.0)


November 2016
Copyright
Copyright © 2002-2016 Intergraph® Corporation. All Rights Reserved. Intergraph is part of Hexagon.
Including software, file formats, and audiovisual displays; may be used pursuant to applicable software license agreement; contains
confidential and proprietary information of Intergraph and/or third parties which is protected by copyright law, trade secret law, and
international treaty, and may not be provided or otherwise made available without proper authorization from Intergraph Corporation.
Portions of this software are owned by Spatial Corp. © 1986-2016. All Rights Reserved.
Portions of the user interface are copyright © 2012-2016 Telerik AD.

U.S. Government Restricted Rights Legend


Use, duplication, or disclosure by the government is subject to restrictions as set forth below. For civilian agencies: This was developed
at private expense and is "restricted computer software" submitted with restricted rights in accordance with subparagraphs (a) through
(d) of the Commercial Computer Software - Restricted Rights clause at 52.227-19 of the Federal Acquisition Regulations ("FAR") and
its successors, and is unpublished and all rights are reserved under the copyright laws of the United States. For units of the Department
of Defense ("DoD"): This is "commercial computer software" as defined at DFARS 252.227-7014 and the rights of the Government are
as specified at DFARS 227.7202-3.
Unpublished - rights reserved under the copyright laws of the United States.
Intergraph Corporation
305 Intergraph Way
Madison, AL 35758

Documentation
Documentation shall mean, whether in electronic or printed form, User's Guides, Installation Guides, Reference Guides,
Administrator's Guides, Customization Guides, Programmer's Guides, Configuration Guides and Help Guides delivered with a
particular software product.

Other Documentation
Other Documentation shall mean, whether in electronic or printed form and delivered with software or on Intergraph Smart Support,
SharePoint, or box.net, any documentation related to work processes, workflows, and best practices that is provided by Intergraph as
guidance for using a software product.

Terms of Use
a. Use of a software product and Documentation is subject to the End User License Agreement ("EULA") delivered with the software
product unless the Licensee has a valid signed license for this software product with Intergraph Corporation. If the Licensee has a
valid signed license for this software product with Intergraph Corporation, the valid signed license shall take precedence and
govern the use of this software product and Documentation. Subject to the terms contained within the applicable license
agreement, Intergraph Corporation gives Licensee permission to print a reasonable number of copies of the Documentation as
defined in the applicable license agreement and delivered with the software product for Licensee's internal, non-commercial use.
The Documentation may not be printed for resale or redistribution.
b. For use of Documentation or Other Documentation where end user does not receive a EULA or does not have a valid license
agreement with Intergraph, Intergraph grants the Licensee a non-exclusive license to use the Documentation or Other
Documentation for Licensee’s internal non-commercial use. Intergraph Corporation gives Licensee permission to print a
reasonable number of copies of Other Documentation for Licensee’s internal, non-commercial use. The Other Documentation
may not be printed for resale or redistribution. This license contained in this subsection b) may be terminated at any time and for
any reason by Intergraph Corporation by giving written notice to Licensee.

Disclaimer of Warranties
Except for any express warranties as may be stated in the EULA or separate license or separate terms and conditions, Intergraph
Corporation disclaims any and all express or implied warranties including, but not limited to the implied warranties of merchantability
and fitness for a particular purpose and nothing stated in, or implied by, this document or its contents shall be considered or deemed a
modification or amendment of such disclaimer. Intergraph believes the information in this publication is accurate as of its publication
date.
The information and the software discussed in this document are subject to change without notice and are subject to applicable
technical product descriptions. Intergraph Corporation is not responsible for any error that may appear in this document.

Hangers and Supports Reference Data Guide 2


The software, Documentation and Other Documentation discussed in this document are furnished under a license and may be used or
copied only in accordance with the terms of this license. THE USER OF THE SOFTWARE IS EXPECTED TO MAKE THE FINAL
EVALUATION AS TO THE USEFULNESS OF THE SOFTWARE IN HIS OWN ENVIRONMENT.
Intergraph is not responsible for the accuracy of delivered data including, but not limited to, catalog, reference and symbol data. Users
should verify for themselves that the data is accurate and suitable for their project work.

Limitation of Damages
IN NO EVENT WILL INTERGRAPH CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL INCIDENTAL,
SPECIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO, LOSS OF USE OR PRODUCTION, LOSS OF REVENUE
OR PROFIT, LOSS OF DATA, OR CLAIMS OF THIRD PARTIES, EVEN IF INTERGRAPH CORPORATION HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
UNDER NO CIRCUMSTANCES SHALL INTERGRAPH CORPORATION’S LIABILITY EXCEED THE AMOUNT THAT INTERGRAPH
CORPORATION HAS BEEN PAID BY LICENSEE UNDER THIS AGREEMENT AT THE TIME THE CLAIM IS MADE. EXCEPT
WHERE PROHIBITED BY APPLICABLE LAW, NO CLAIM, REGARDLESS OF FORM, ARISING OUT OF OR IN CONNECTION
WITH THE SUBJECT MATTER OF THIS DOCUMENT MAY BE BROUGHT BY LICENSEE MORE THAN TWO (2) YEARS AFTER
THE EVENT GIVING RISE TO THE CAUSE OF ACTION HAS OCCURRED.
IF UNDER THE LAW RULED APPLICABLE ANY PART OF THIS SECTION IS INVALID, THEN INTERGRAPH LIMITS ITS LIABILITY
TO THE MAXIMUM EXTENT ALLOWED BY SAID LAW.

Export Controls
Intergraph Corporation’s software products and any third-party Software Products obtained from Intergraph Corporation, its
subsidiaries, or distributors (including any Documentation, Other Documentation or technical data related to these products) are
subject to the export control laws and regulations of the United States. Diversion contrary to U.S. law is prohibited. These Software
Products, and the direct product thereof, must not be exported or re-exported, directly or indirectly (including via remote access) under
the following circumstances:
a. To Cuba, Iran, North Korea, Sudan, or Syria, or any national of these countries.
b. To any person or entity listed on any U.S. government denial list, including but not limited to, the U.S. Department of Commerce
Denied Persons, Entities, and Unverified Lists, http://www.bis.doc.gov/complianceandenforcement/liststocheck.htm, the U.S.
Department of Treasury Specially Designated Nationals List, http://www.treas.gov/offices/enforcement/ofac/, and the U.S.
Department of State Debarred List, http://www.pmddtc.state.gov/compliance/debar.html.
c. To any entity when Licensee knows, or has reason to know, the end use of the Software Product is related to the design,
development, production, or use of missiles, chemical, biological, or nuclear weapons, or other un-safeguarded or sensitive
nuclear uses.
d. To any entity when Licensee knows, or has reason to know, that an illegal reshipment will take place.
Any questions regarding export or re-export of these Software Products should be addressed to Intergraph Corporation’s Export
Compliance Department, Huntsville, Alabama 35894, USA.

Trademarks
Intergraph, the Intergraph logo, PDS, SmartPlant, FrameWorks, I-Sketch, SmartMarine, IntelliShip, ISOGEN, SmartSketch,
SPOOLGEN, SupportManager, SupportModeler, Sapphire, and Intergraph Smart are trademarks or registered trademarks of
Intergraph Corporation or its subsidiaries in the United States and other countries. Hexagon and the Hexagon logo are registered
trademarks of Hexagon AB or its subsidiaries. Microsoft and Windows are registered trademarks of Microsoft Corporation. ACIS is a
registered trademark of SPATIAL TECHNOLOGY, INC. Infragistics, Presentation Layer Framework, ActiveTreeView Ctrl,
ProtoViewCtl, ActiveThreed Ctrl, ActiveListBar Ctrl, ActiveSplitter, ActiveToolbars Ctrl, ActiveToolbars Plus Ctrl, and ProtoView are
trademarks of Infragistics, Inc. Incorporates portions of 2D DCM, 3D DCM, and HLM by Siemens Product Lifecycle Management
Software III (GB) Ltd. All rights reserved. Gigasoft is a registered trademark, and ProEssentials a trademark of Gigasoft, Inc.
VideoSoft and VXFlexGrid are either registered trademarks or trademarks of ComponentOne LLC 1991-2013, All rights reserved.
Oracle, JD Edwards, PeopleSoft, and Retek are registered trademarks of Oracle Corporation and/or its affiliates. Tribon is a trademark
of AVEVA Group plc. Alma and act/cut are trademarks of the Alma company. Other brands and product names are trademarks of their
respective owners.

Hangers and Supports Reference Data Guide 3


Contents
Preface .......................................................................................................................................................... 6
What's New in Hangers and Supports Reference Data .......................................................................... 6

Symbols ........................................................................................................................................................ 7
2D Symbols ............................................................................................................................................. 8
3D Symbols ............................................................................................................................................. 8
Providing a Graphical Preview ................................................................................................................ 9
Add a Preview Graphic to Parts using Bulkload ............................................................................. 10

Programming Notes .................................................................................................................................. 12


Guidelines for Modifying a Symbol ....................................................................................................... 12
Delete references to symbol flavors and deleted objects in the database ........................................... 13

Troubleshooting Symbols ........................................................................................................................ 14


Debugging Symbols with .NET ............................................................................................................. 14
Testing Symbols.................................................................................................................................... 16
Update Symbol ............................................................................................................................... 16
Edit Symbol Occurrence ................................................................................................................. 17
Sources of Errors .................................................................................................................................. 18

Hangers and Supports Programming Concepts .................................................................................... 20


Assemblies and Parts ........................................................................................................................... 20
Reference Ports .................................................................................................................................... 22

Defining Parts ............................................................................................................................................ 24


Part Ports .............................................................................................................................................. 27
Defining Hanger and Support Part Ports .............................................................................................. 29
Port Compatibility and Size Checking ................................................................................................... 30
Port Checking ................................................................................................................................. 30
Port Compatibility ........................................................................................................................... 30
Port Size Checking ......................................................................................................................... 31
Part Selection Rules ............................................................................................................................. 31

Custom Symbol Definition........................................................................................................................ 33


Define Inputs ......................................................................................................................................... 33
Define Aspects ...................................................................................................................................... 34
Define Outputs ...................................................................................................................................... 34
Construct Outputs ................................................................................................................................. 35
Bill Of Material (BOM) Description ........................................................................................................ 37
Custom Weight and CG (Optional) ....................................................................................................... 38

Hangers and Supports Reference Data Guide 4


Contents

Defining Assemblies ................................................................................................................................. 39


Supports and Local Coordinate System (LCS) ..................................................................................... 42
Bounding Boxes .................................................................................................................................... 45
Standard Bounding Boxes .............................................................................................................. 45
Custom Bounding Boxes ................................................................................................................ 48
Constraints ............................................................................................................................................ 57
Joints ..................................................................................................................................................... 58
Changing the Support Discipline........................................................................................................... 61

Custom Support Definition (CSD) ............................................................................................................ 67


Custom Support Definition (CSD) Examples ........................................................................................ 67
Parts Method .................................................................................................................................. 68
ConfigureSupport Method .............................................................................................................. 70
SupportedConnections Method ...................................................................................................... 72
SupportingConnections Method ..................................................................................................... 74
ConfigurationCount Method ........................................................................................................... 74
GetFacePositionInfo Method .......................................................................................................... 75

Advanced Programming Concepts for Supports ................................................................................... 76


Add a Note to Key Points using CSD ................................................................................................... 76
Add a Dimension Port using CreateNote Function in CSD .................................................................. 78
Add control point using CreateNote function in CSD ............................................................................ 80
Delete an existing note on a support using CSD .................................................................................. 81
Raising Warnings and Errors from Symbols and Assemblies .............................................................. 81
Support Selection Rules ....................................................................................................................... 84
Determining Which SSR is used .................................................................................................... 85
Delivered Support Selection Rules ................................................................................................. 86
Converting Supports for Place by Reference ....................................................................................... 88
CSD Changes to Enable Place by Reference ................................................................................ 89
SSR Changes to Enable Place by Reference ................................................................................ 90

Lookup Tables ........................................................................................................................................... 91


Face Selection Sheet ............................................................................................................................ 91
Face Position Selection Sheet .............................................................................................................. 93
Hgr Rules Sheet .................................................................................................................................... 93
SupportJoints Sheet .............................................................................................................................. 94
HgrRefSupportingFilter Sheet ............................................................................................................... 95
HgrDisciplineFilter Sheet ...................................................................................................................... 96

Index ........................................................................................................................................................... 97

Hangers and Supports Reference Data Guide 5


Preface
TM
This document is a reference data guide for the Intergraph Smart 3D Hangers and Supports
task. The purpose of this document is to describe the reference data delivered with the software
for this task.
Reference data includes both catalog data and specification data. Catalog data includes the parts
that you place in the model, such as piping components and equipment. Specification data
includes the rules that govern how those parts are placed and connected.

Documentation Comments
For the latest support information for this product, comments or suggestions about this
documentation, and documentation updates for supported software versions, please visit
Intergraph Smart Support (https://smartsupport.intergraph.com).

What's New in Hangers and Supports Reference Data


The following changes have been made to the Hangers and Supports reference data.
Version 2016 (11.0)
 The SURFACE object type is now a supported value for the Supported Family property. For
more information, see Defining Assemblies (on page 39). (P2 CP:242867)
 A new method, DeleteNoteIfExists, has been added to delete an existing note on a support.
For more information, see Delete an existing note on a support using CSD (on page 81). (P2
CP:261211)
 You can now create a BOM description with labels. For more information, see Defining Parts
(on page 24). (P3 CP:226578)

Hangers and Supports Reference Data Guide 6


SECTION 1

Symbols
Whether using one of the delivered symbols, or a custom symbol that you define yourself, symbols
are a key building block used to create your model. There are two basic types of symbols that the
software uses: 2-D and 3-D.
The 2-D symbols are used to represent structural member cross-sections, slots, collars and clips,
brackets, and standard openings. You can use any of the defined cross sections or define your
own custom cross-sections. For more information about 2-D symbols, refer to the 2D Symbols
User's Guide.
The 3-D symbols are used to represent equipment, hangers, HVAC components, piping
components, and so forth in your model. There are hundreds of symbols that you can use as-is or
customize to fit your needs. You can also create your own symbols. This document describes how
to create symbols, incorporate them into your reference data, and describes the parameters of the
delivered symbols.
In addition to the symbols delivered with the software, Intergraph provides symbols and symbol
fixes on the Intergraph Smart Support (https://smartsupport.intergraph.com) web site. These
symbols are available on the product page under Downloads > Smart 3D > Content.
In order to fully understand symbols, you need to learn a few terms:
 Symbol - A symbol is a custom business object that provides a symbolic representation of a
set of graphics. It is possible for this set of graphics to look completely different in the different
display aspects.
 Flavor - A flavor is the persistent cache of all the graphic objects displayed by a symbol. Each
symbol visible in a session is just a symbolic representation (geometric transformation) of the
graphics stored in a flavor.
 Symbol Definition - A symbol definition is the persistent template for all symbols in a database.
It is the definition of the inputs, outputs, and options of all symbols created using this symbol
definition.
 Flavor Manager - When many symbols use the same flavor, a flavor manager object is created
to manage the relationships between the symbols, flavor, and symbol definition.
 Custom Component - A special symbol that has no flavor. Each custom component is a
unique symbol containing its graphic objects.
 Outputs - Persistent objects that are created by the symbol when it calculates. The most
common form of output is a graphic object, but output can be parameters.
 Inputs - Optional persistent objects used by a symbol to calculate its outputs.

Hangers and Supports Reference Data Guide 7


Symbols

2D Symbols
The 2D Symbols application is used to create 2-D symbols used to represent profile
cross-sections, detailed parts, features, and end cuts in the Molded Forms and Structural
Detailing tasks, and member cross-sections in the Structure task. The main purpose of 2D
Symbols is to graphically create a flexible symbol definition so that it can be used to place different
objects in a model. Two-dimensional symbols are delivered in the [Product
Folder]\SharedContent\CrossSections folder.
You use 2D Symbols to create:
 The graphic representation or inputs of the symbol.
 Named symbol geometry, such as edge names used to orient the symbol in the 3-D
environment and to constrain different types of symbols to each other.
 Parameters, such as driving dimensions.
 Geometric constraints (relationships) that specify which reference data parameters control
which part of the symbol.
 Multiple representations, which can be selected in the model to control how the symbol is
displayed.
 Additional auxiliary graphic objects to create and constrain symbols. These auxiliary objects
do not become a part of symbol output geometry.
The utility also provides a dialog box for you to write the cross-section or profile into an Excel
workbook, which you can bulk load into the catalog.
For more information, see the 2D Symbols User's Guide available from the Help > Printable
Guides command in the software.

3D Symbols
You can customize additional three-dimensional symbols for your company using .NET coding.
The following picture shows the types of symbols and corresponding file formats .NET symbols
are in .vb or .cs format and will be delivered in .dll. The .dll symbols are registered on the computer
used to host the SharedContent share.
The tabular data for the symbols resides in the excel workbooks. For example, you list the symbol
name for the part on the part class sheet. You can use the Bulkload utility to load the excel data
into the Catalog Database.

Each .NET 3-D symbol comprises source code (.csproj and .cs or vbproj and .vb) and a compiled
file (.dll). The .dll files for the delivered 3-D symbols are located on the server computer at [Product
Folder]\SharedContent\bin. This folder is shared to allow client computers to access the symbols.

Hangers and Supports Reference Data Guide 8


Symbols

You specify this folder when you bulk load reference data. If necessary, you can change the
location when you bulk load a new catalog.
The 3-D symbol source code (.csproj and .cs or .vbproj or .vb) files are delivered during the
Programming Resources Installation. For more information on installing the Programming
Resources, refer to the Smart 3D Installation Guide.
To change a symbol, you must edit and then build the .NET code for the symbol. The new .dll can
be added to the Custom Symbols folder in the SharedContent share. You also must edit the
applicable bulk load workbook for the symbol, and bulk load the modified reference data into the
Catalog database.
When you add a new custom DLL to the [Reference Data
Folder]\SharedContent\Custom Symbols folder, or when you edit an existing custom DLL, you
must run the Tools > Update Custom Symbol Configuration command in Project Management.
The overall workflow for creating a part is as follows:
 Create or modify a .NET project.
 Compile to create a .dll.
 Create or modify an Excel workbook to create the part information. As an alternative to the
workbooks, you can create part classes and part information in the Catalog task using the
Catalog > New > Class command. Refer to the Catalog User's Guide for more information.
 Bulk load the workbook. You do not need to bulk load anything if you create your part classes
in the Catalog task using the Catalog > New > Class command.
 Test the symbol in the software.
If you add new part classes after creating the Reports databases, you must re-create the
Reports databases in order to report on the new part classes.

Providing a Graphical Preview


To make selecting and placing parts from the catalog easier, you can provide a preview graphic of
the part. This graphic helps you to visually identify the correct part in the catalog for placement and
should include any symbol dimensions that can be edited by you.
In the Catalog task, the Preview command on the View menu displays the preview graphic for the
item. You can see preview graphics when you place items in the design tasks by clicking Preview
on the Catalog browser from design tasks such as Equipment and Furnishings. In addition, some
Properties dialog boxes in the design tasks have a button that allows you to see a preview of the
selected item.
To add a preview graphic to the reference data, you must create a graphic file and store it in a
shared symbol folder on a networked computer. For example, you can place the graphic file in
[Product Folder]\SharedContent\Data, the default location installed during the Smart 3D Server
setup.
You can define a preview graphic for a specific part, which overrides any preview graphics
assigned to the part class. Any graphics created for individual parts must be stored in the same
location as those defined for part classes.

Hangers and Supports Reference Data Guide 9


Symbols

To link the preview graphic to the part or part class:


1. Edit the Microsoft Excel workbook that contains the part class information.
2. In the SymbolIcon cell, type the path and preview graphic name.
3. Bulk load the workbook into the Catalog Database using the bulkload utility.

Graphic Recommendations
 The graphic must be a Windows Bitmap (.bmp) or a CompuServe Graphics Interchange (.gif)
file. We recommend the .gif format because of the smaller file size.
 The graphic resolution should be 37 pixels per centimeter (94 pixels per inch).
 Use the lowest color depth possible without loss of image quality. Generally, this is 256 Colors
(8 bit). However, some graphics can be dropped to 16 Colors (4 bit) or 2 Colors (1 bit) without
loss of image quality.
 Use Verdana font with a font point size of 10 or 12 to place text in the graphic. We recommend
the Verdana font because 1 (one), I (capital i), and l (lower case L) can be distinguished from
one another in that font.
 Graphic dimensions should be as small as possible to allow you to have the graphic open
while working with the software. The maximum graphic dimension that you should create is
974 X 718 (50 pixels less than the default screen resolution of 1024 X 768). The software does
not limit the size of the graphic, so larger graphics can be used if your default screen resolution
is higher.
See Also
Add a Preview Graphic to Parts using Bulkload (on page 10)

Add a Preview Graphic to Parts using Bulkload


1. Create a graphic file (.bmp or .gif) in a graphics package.

 The purpose of this graphic is to help you identify the correct part in the catalog. The
graphic also can assist in identifying dimensions on a part.
 You can create the graphic from a snapshot of a two-dimensional drawing or of the
three-dimensional model. You also can draw the graphic freehand in a graphics package.
 The graphic pixel limitation is about the size of your screen because the preview box in
the Catalog task will automatically re-size around the graphic.
2. Save the graphic file in a shared symbol folder on the server. For example, you can place the
graphic file in [Product Folder]\SharedContent\Data, the default location installed during the
Smart 3D server setup.
3. Open the Excel workbook with the part class or part to which you want to add the preview
graphic.
4. Select a part class sheet.
For example, if you want to add a preview graphic to the Pump class in the Equipment
workbook, open Equipment.xls and select the Pump sheet.
5. In the Definition section on the sheet, add a column.

Hangers and Supports Reference Data Guide 10


Symbols

6. Type SymbolIcon at the top of the new column.


7. Below the SymbolIcon heading, type the name of the graphic file for the part class, such as
Pump.bmp.
8. In the Head/Start/End section, type SymbolIcon for the column heading in the new column.
9. Type the name of a graphic file beneath the SymbolIcon heading in the Head/Start/End
section.
This graphic file defines the preview for the specific PART. The part graphic overrides the
preview graphic for the PART CLASS.

 If you want a part to have the same symbol file as the parent part class, type NULL
beneath the SymbolIcon heading in the Head/Start/End section. Or, you can leave the
cell blank.
 The following picture shows an Excel sheet that lists a symbol icon.

10. Mark all of the rows that you modified with the letter M.
11. Bulkload the workbook in the Add/Modify/Delete mode. For more information about
bulkloading, see Bulk Load Database with Data in the Reference Data Guide.

 If you do not want to specify a preview graphic for a part class or part, do not add the
SymbolIcon heading to the Definition or Head/Start/End sections. You do not have to
specify a preview graphic for a part class or part.
 You can check the preview by starting the Catalog task, selecting the part or part class, and
clicking View > Preview. You also can see the preview by selecting an item in the model and
displaying the Properties dialog box for the item. Some Properties dialog boxes have a
button that allows you to see a preview of the selected item.
 The software delivery includes preview symbols for several items. The delivery location for
many of the preview symbols is [Product Folder]\SharedContent\Data on the server computer.
If you want to add symbols, you must create the graphic and bulkload as described above.
See Also
Providing a Graphical Preview (on page 9)

Hangers and Supports Reference Data Guide 11


SECTION 2

Programming Notes
If you are using .NET to create or to customize part symbols, refer to the following programming
notes for issues and examples that apply to the Hangers symbol types.

Guidelines for Modifying a Symbol


The following guidelines should be used when a symbol is modified.

Inputs
 You cannot modify the name and index of an input.
 You cannot change an input type from parameter to object or vice-versa.
 When an input is a parameter, you cannot change its type from string to value or vice-versa.
 You cannot delete an input.
 A new input can be added, which means that the next available index is used for the new input.
 You cannot change the default value of an input.
 You cannot make an optional input a mandatory input.

Representation
 You cannot modify the name of a representation, else the existing relations with outputs of this
representation break.
 You cannot delete a representation, else the existing relations with outputs of this
representation break.
 You can add a new representation.

Outputs
 You cannot modify the name of an output of a static symbol, else the existing relations with the
output break.
 You cannot delete an output of a static symbol, else the existing relations with the output
break.

Hangers and Supports Reference Data Guide 12


Programming Notes

Delete references to symbol flavors and deleted


objects in the database
For consistent performance and to report accurate data over time, it is important to run some basic
maintenance operations on the project databases. Failure to do so results in performance
degradation over time.
1. Open Project Management.
2. Select a model database.
3. Click Database > Maintenance.
The Database Maintenance Dialog Box displays.
4. Select Delete temporary symbol variations (flavors) in database and Delete database
objects that users have deleted from model.
5. Click OK.
A progress bar displays the deletion process.
6. Click Analyze on the Database Maintenance dialog box.
The Analyze Database dialog box displays.
7. If the analysis reports that there are still existing flavors in the database, repeat steps 4-6.

Hangers and Supports Reference Data Guide 13


SECTION 3

Troubleshooting Symbols
While unlikely, symbols placed in a model can become corrupted or have problems. This section
describes how to test symbols, what can cause symbols to become corrupt, and what you can do
to fix corrupt symbols.
In addition to the symbols delivered with the software, Intergraph provides symbols and symbol
fixes on the Intergraph Smart Support (https://smartsupport.intergraph.com) web site. These
symbols are available on the product page under Downloads > Smart 3D > Content.

Debugging Symbols with .NET


Use Microsoft Visual Studio debugging tools to debug symbols. You must have the latest
Programming Resources software and Microsoft Visual Studio 2010 installed on the computer.
For information on how to install the Programming Resources, please refer to the Smart 3D
Installation Guide.

Setup
Add the following folders to your PATH environment variable:
 C:\Program Files\Smart3D\Core\Runtime
 C:\Program Files\Smart3D\GeometryTopology\Runtime

Preparing to Debug a Symbol


Before you can debug a symbol, you must ensure that there is an entry for that symbol in the
CustomSymbolConfig.xml or SystemSymbolConfig.xml file.
The Update Custom Symbol Configuration (UCSC) command looks at the symbols in the
SharedContent folder and makes entries in the SymbolConfig.xml files. Entries for symbols that
you have created in the SharedContent\Custom Symbols folder are added to the
SharedContent\Xml\CustomSymbolConfig.xml file. Entries for symbols supplied by Intergraph
are added to the SharedContent\Xml\SystemSymbolConfig.xml file.

Hangers and Supports Reference Data Guide 14


Troubleshooting Symbols

Debugging a Symbol .NET Project


1. In .NET, open the project to debug.
2. Click Project and select the project you want to debug. For example, in the following image
select HSSmartPart Properties (Alt+7).

3. Click Debug and select Start external program.


4. Click Browse and navigate to S3DHost.exe.
5. Open the code page for the symbol and add break points.

6. Press F5 to run the project.

Hangers and Supports Reference Data Guide 15


Troubleshooting Symbols

Smart 3D opens. Create a new session file or open an existing session file and place the symbol.
The control is passed to .NET at the break point and the normal .NET debug commands such as
Step Into and Step Over can be used.
When symbols are placed for the first time in the model, a cache is created in the
Model database and the actual symbol code will not run a second time or beyond. Please refer to
Edit Symbol Occurrence for information on how to force the execution of symbol code for
debugging purposes.

Testing Symbols
Two custom commands are delivered with the software to help symbol designers:
 Update a symbol definition from a list of symbol definitions in the active connection, or update
an object given an Object ID (Database ID) and an Interface ID. This issue can arise when the
symbol is cached and you want to test a change in the code. If there already is an existing
symbol available for the set of input parameters, then the changed symbol code will not run.
For more information, see Update Symbol.
 Locate an existing symbol and change the inputs. During the design phase of symbol creation,
it can be very time consuming trying to use the full application to test a symbol, especially if it
requires multiple bulkloading to the catalog. For more information, see Edit Symbol
Occurrence.
See Also
Troubleshooting Symbols (on page 14)

Update Symbol
This utility calls the update mechanism on a symbol definition or other object so that the software
will recalculate any symbols connected to the object.

 You must understand the consequences of trying to recalculate an object. Errors can occur
when the context is incomplete in allowing one or more related objects to recalculate. This
error can occur when one object is read-only or missing.
 A symbol definition may have thousands of symbols connected to it. Each symbol will
recalculate if an update is called on the definition. This utility is not designed to handle
recalculation of thousands of symbol instances and should only be used in small models while
developing new symbols.

Run Custom Command


1. Click Tools > Custom Commands.
2. Click Add.
3. In the Command ProgID box, type SymbolTestCmds.CUpdateSymbolDefinition
4. In the Command name box, type a name for the utility. We recommend you type Update
Symbol or Object Test Command for the command name.
5. Click OK.
6. Select Update Symbol or Object Test Command from the list of command names, and then
click Run.

Hangers and Supports Reference Data Guide 16


Troubleshooting Symbols

Symbols Tab
Key in - Select this option to key in the symbol definition name to update in the Symbol Definition
Name. Use this option if you have more than 10 to 15 symbols in the model.
Select from Combo Box - Select this option to select the symbol to update in the Symbol
Definition Name. Use this option only if your model is very small, 10 to 15 symbols.
Symbol Definition Name - Displays all the symbol definitions available in the model from which
you can select one to update. You can also type the symbol definition name to update, for
example: SP3DPumpAsm.CPumpSym.

From Catalog Database - Updates the Solid edge symbol definition and occurrences in the
Catalog database. You cannot use this option to update other symbol definitions in the Catalog
database.
Delete Unused Flavors - Deletes unused flavors for the Symbol Definition
Update Symbol Definition - Updates all the symbol definition objects corresponding to Symbol
Definition Name, for example SP3DPumpAsm.CPumpSym, and all its occurrences. You can
combine this with Delete Unused Flavors to delete the unused flavors for symbol definition.
Update Out-of-date Symbol Occurrences - Updates all the occurrences, such as
SP3DPumpAsm.CPumpSym, that have Symbol Occurrence Updates. Symbol definition object
will not be updated. You can combine this option with Delete Unused Flavors to delete the
unused flavors for symbol definition.
Dump Def - Dumps the symbol definition information into a text file.

Edit Symbol Occurrence


This utility edits an existing symbol occurrence in the model and works on Support Components
but does not work on Support Assemblies. You must select a Support Component before
executing this custom command.
This command assumes the person using it is the symbol designer who knows what the
valid inputs for the symbol are. This command does not check input parameter values that you
type as it cannot determine valid inputs for the symbol.

Hangers and Supports Reference Data Guide 17


Troubleshooting Symbols

Run Custom Command


1. Click Tools > Custom Commands.
2. Click Add.
3. In the Command ProgID box, type SymbolTestCmds.CEditSymbolOccurence.
4. In the Command name box, type a name for the utility. We recommend you type Edit
Symbol Occurrence for the command name.
5. Click OK.
6. Select Edit Symbol Occurrence from the list of command names, and then click Run.
7. Select the symbol in the model.
8. Test the input parameters as needed.

Options
Parameters - Displays all the input parameter of the selected symbol.
 Index - Displays the index number of the input parameter.
 Name - Displays the name of the input parameter.
 ByRef - Indicates if the parameter is passed by a reference.
 Value - Type a value for the parameter.
Graphics - Displays the graphic elements that are inputs for the selected symbol.
Representation - Displays the display aspects that the symbol supports.
See Also
Testing Symbols (on page 16)

Sources of Errors
Bulkloading
Symbols can be broken in the model because of an incorrect bulk load operation. The most
common bulkloading mistakes are:
 Deleting the symbol definition, flavor manager, or flavor in the catalog when the symbol still
exists in the model.
 Setting incorrect parameter values in the catalog. For example, setting a pipe diameter to be
zero.

Synchronize Model with Catalog


After bulkloading is complete or if symbol definitions have been changed and the major version
number of the definition increased, you must run the Tools > Synchronize Model with Catalog
command in the Project Management task for all models that use the catalog or changed
definitions.

Hangers and Supports Reference Data Guide 18


Troubleshooting Symbols

Synchronize with Catalog


Synchronize Model with Catalog takes more time as it has to update all the objects in the model.
Use Synchronize with Catalog to update only the selected items in the model database with all
changes from Catalog database. You can access this command from Tools > Utilities >
Synchronize with Catalog in TaskHost.
Synchronizing only selected objects in the model greatly reduces the time taken to
synchronize with the catalog. This command is different from the Synchronize Model with Catalog
command in Project Management.

Symbols Folder
The software expects to find the symbol DLL files in a single folder, usually located under the
SharedContent folder. This symbols folder is specified when the catalog database is created.
Doing any of the following can cause symbol problems:
 An incorrect symbols folder is specified when the catalog database is created.
 The symbols folder is moved after the catalog database is created.
 The catalog database is backed up and then restored to a different server, but the symbols
folder is not copied to the new server.
 Using different custom symbol folders for the different clients of the server.

Usage of Cached/Non-cached Symbols


The default method is to cache symbols whenever possible. A symbol definition that has a
non-parametric input (for example, a part) will not be cached even if all the other inputs are
parameters. However, if a custom method (CMcache) is written to convert the part into a
parameter, then the symbol will be cached.
To make this change from a non-cached to cached for the case where non-cached symbols have
already been placed in the model, the major version number of the symbol definition must be
increased and the Tools > Synchronize Model with Catalog command in the Project
Management task run. If this is not done, then the change in the way the part input is treated
results in an error as the symbols already placed in the model are expecting a part, and not a
parameter, and will fail to compute.

Multiple Outputs with Same Name


A .NET symbol with duplicate output names is not allowed. When such a symbol is placed in the
model, the transaction will be aborted. Check the Core error log file for errors. If there are existing
.NET symbol occurrences that have duplicate output names, they cannot be recomputed.

Software Updates
Errors can occur if the server and the client software are not the same software version. All the
symbols must be the same version to guarantee compatibility.

Hangers and Supports Reference Data Guide 19


SECTION 4

Hangers and Supports Programming


Concepts
Before working with hangers and supports reference data, you must be familiar with how
TM
Intergraph Smart 3D handles reference data in general. If you have not already done so, read
and understand the following important concepts and procedures described in the Smart 3D
Reference Data Guide:
 Custom attributes
 Symbol creation
 Codelists (also referred to as "select lists")
 Naming rules
 Bulkloading
For example, before you can define support parts, you must understand how part data relates to
data on the custom interfaces sheet, and how that information relates to parameters defined when
the part symbol is created.
If you are using .NET to create or to customize part symbols, refer to the following programming
notes for issues and examples that apply to the Hangers symbol types.

Assemblies and Parts


The hangers and supports that you place in your model are based on individual parts, such as a
beam clamp or a welded lug. A single support may be comprised of multiple parts. This grouping
of parts is named a support assembly. The following figure shows a typical support with an
assembly that contains five unique parts.

Hanger Assembly with Constituent Parts

Hangers and Supports Reference Data Guide 20


Hangers and Supports Programming Concepts

The assembly of a support's constituent parts is done using information defined in the reference
data. Each assembly defined in the reference data is assigned a Custom Support Definition
(CSD). The software uses the logic contained in the custom support definition to put together the
individual support parts to form an assembly. A custom support definition is a .NET software and
associated data in the catalog.
The code within the CSD properly positions the parts in relation to each other, the supported
object (such as a pipe), and the supporting object (such as a beam) by applying constraints
between ports. The custom support definition is responsible for identifying all constraints
necessary to position the parts correctly. Specifying individual constraints provides the most
flexibility and control over the assembly process. However, it is a tedious and repetitive process.
To simplify things, relationships between parts are described using joints instead of individual
constraints. Each joint represents a combination of one or more constraints that simulate the
mechanical connection between parts. The custom support definition provides a list of joints
between assembly parts. The software parses this list and applies the appropriate individual
constraints when creating the assembly.

Implied Parts
Placement of implied parts can only be done using a custom support definition. For more
information, see Parts Method (on page 68).
Although an implied part does not have a graphical representation in the model, it does appear in
the Workspace Explorer with its own associated icon as shown in the following illustration.

To select an implied part, you must select No Filter in the Locate Filter box. You can use copy
and paste to place the selected implied part under a design support.
All the implied parts can be reported on and shown in the MTO of support fabrication drawings.
See Also
Part Ports (on page 27)
Reference Ports (on page 22)
Constraints (on page 57)
Joints (on page 58)

Hangers and Supports Reference Data Guide 21


Hangers and Supports Programming Concepts

Reference Ports
While part ports define the connection relationship between parts in an assembly, reference ports
define how a support assembly attaches to the supporting object (such as a beam or a wall) and
the supported object (such as a pipe or cable tray). Unlike part symbol ports, reference ports are
provided by the software and cannot be moved.
The example support that we have been discussing needs two reference ports, one on the beam
and one on the pipe. The Z-axis of the port on the supported object (in this case, the pipe) always
points toward the supporting object (the beam). Conversely, the Z-axis of the port on the
supporting object (the beam) port always points toward the supported object (the pipe).

When you are defining a CSD, the reference port on the pipe is named ROUTE. The reference
port on the beam is named STRUCTURE. If you are connecting to more than one beam or
structure, those ports are named STRUCTURE; STRUCT_2; and so on.

Hangers and Supports Reference Data Guide 22


Hangers and Supports Programming Concepts

Other ports named STRUCTALT and ROUTEALT are available if you are creating supports on
sloping structure or the sloping pipe. While the STRUCTURE port gives you the port location with
the support perpendicular to the structure, the STRUCTALT port gives you the port location with
the support vertically connected (parallel to the global Z-axis) to the structure. For a Circular
Section structure member, the STRUCTURE ports are created on the surface at the closest
position to the route axis, and the STRUCTALT ports are created on the center axis line of the
member. If the structure is not sloping, the STRUCTURE port and the STRUCTALT port are in the
same location.

Sometimes, it might be useful to visualize the location and orientation of the Reference Ports. To
see the ports, use the Catalog Browser to navigate to HS Assembly > Diagnostic Supports >
Reference Port Diagnostic Support. Reference Port Diagnostic Support lets you visualize
where the default and alternate structure and route ports are located and oriented. You can modify
the values of the Show Reference Ports property to toggle the display between the default and
alternate ports.

See Also
Part Ports (on page 27)
Constraints (on page 57)
Joints (on page 58)

Hangers and Supports Reference Data Guide 23


SECTION 5

Defining Parts
Parts are used to create the hanger and support assemblies that are placed in the model. The
delivered reference data contains a number of workbooks and the main purpose of these
workbooks is to define parts. For example, consider the Utility_VARIABLE_CYL spreadsheet in
the HS_Utility.xls workbook. This workbook defines part classes that have the following common
properties:

 When you create a part symbol, based on the attributes that you define, you might have to
specify additional or different attributes than the ones listed below.
 Various custom attributes are often listed for the parts. For example,
IJOAHgrUtility_VARIABLE_CYL::RADIUS.
 For some of the properties listed below, (i) is an integer corresponding to a port. When you
type the port properties into the workbook, substitute a number for (i).
Part Class Type - Specifies the class type of the part.
Symbol Definition - Specifies the symbol used to represent the part. For more information on
creating part symbols, refer to the Smart 3D Symbols Reference Guide.
Symbol Icon - Specifies the graphic file that contains a picture of the part symbol. The graphic file
is used as a preview in the software. Specify the path to the graphic file relative to the
SharedContent folder that is shared on your software server.
Occurrence Attributes - Depending on the part symbol, there may be one or more occurrence
attributes to define.
Class Type - Type the class type code for the part. Valid codes are listed on the
HngSupPartClassType sheet in the AllCodeLists.xls workbook in the Codelist Number
column.
Part Selection Rule - Specifies the part selection rule. The Part Selection Rule automates the
selection of items from the catalog using certain criteria. For example, pipe size
(HgrPipePartSelRule.PartByPipeSize.cs), rod attachment size
(HgrPipePartSelRule.CPartByRodSize.cs), the beam profile rule
(HgrPipePartSelRule.CHgrBeamForVPad.cs), by load factor
(HgrPipePartSelRule.CPartByLoadFactor.xls), and so on.
Port Type - Type the port type. For example, type HgrSymbolPort to specify that the symbol port
is a hangers and supports port as opposed to a piping port.
User Class Name - Specify the user class name.
Part Number - Type a part number. This part number must be unique across the entire reference
data catalog.
Part Description - Type a description for the part.
Symbol Definition - Specifies the symbol used to represent the part. You can use this field to
override the symbol definition for the part class and to instead use a different symbol for an
individual part number.

Hangers and Supports Reference Data Guide 24


Defining Parts

ND From - Type the minimum nominal diameter for which the part can be used. This option is only
used for conduit and pipe assemblies.
ND To - Type the maximum nominal diameter for which the part can be used. This option is only
used for conduit and pipe assemblies.
ND Unit Type - Type the units for the ND From and ND To values.
For every port (i) in the symbol, several attributes must be defined as below.
HgrSymbolPort(i):Name - Type the name of this port. Any name is valid. This name must be
unique for each port name column. The name is used when defining joints in CSD.
HgrSymbolPort(i):Category - Type the code that represents the category for the port. This
attribute is no longer used but exists for backward compatibility. Valid codes are listed in the
AllCodeLists.xls workbook on the HngSupPortCategory sheet in the Codelist Number
column.
HgrSymbolPort(i):MatingType - Type the code that represents the mating type for the port. This
attribute is no longer used but exists for backward compatibility. Valid codes can be listed in the
HS_System.xls workbook on the SupportJoints sheet.
HgrSymbolPort(i):ConnectionInfo - Type the code that represents the connection information
for the port. This attribute is no longer used but exists for backward compatibility. Valid codes are
listed in the AllCodeLists.xls workbook on the HngSupPhysicalConnection sheet in the
Codelist Number column.
HgrSymbolPort(i):PortType - Type the code that represents the port type for the port. Valid
codes are listed in the AllCodeLists.xls workbook on the HngSupPortType sheet in the
Codelist Number column.
HgrSymbolPort(i):Size - Type the physical size of this port. For example, for a pin, type its
diameter.
HgrSymbolPort(n):MinSize - Type the minimum size of the part port that can connect to this port.
For example, for a pin port, the minimum size of the eye that can connect to it.
HgrSymbolPort(i):MaxSize - Type the maximum size of the part port that can connect to this
port. For example, for a pin port, type the maximum size of the eye that can connect to it.
HgrSymbolPort(n):UnitType - Type a string representing the units for the port Size, MinSize and
MaxSize attributes. Currently, only in and mm are valid strings for these sizes.
Dry Weight - Type the dry weight of the support component.
Water Weight - Type the wet weight of the support component.
DryCogX - Type the X-axis location of the dry center-of- gravity.
DryCogY - Type the Y-axis location of the dry center-of- gravity.
DryCogZ - Type the Z-axis location of the dry center-of- gravity.
Mirror Behavior Option - Type the code that represents the mirror behavior for the part. Valid
codes are listed in the AllCodeLists.xls workbook on the Mirror Behavior Option sheet in the
Codelist Number column.
IJHgrBOMDefinition::BOMType (Optional) - Type the code that defines how the
BOMDescription attribute for this part is set. Valid codes are listed in the AllCodeLists.xls
workbook on the HngSupBOMType sheet. If no value is entered, the BOM description for the part
is default to the PartDescription text.

Hangers and Supports Reference Data Guide 25


Defining Parts

IJHgrBOMDefinition::BOMDefinition (Optional) - Specifies the BOM description. If BOMType is


set to 4 (FromBOMDefProgID), type the ProgID to use for calculating the BOM description. If
BOMType is set to 5 (FromBOMDef), type the text to use for the BOM description. You do not
need to type anything in this column for other values of the BOMType attribute.

Creating BOM Description Using Labels


1. Set the BOMType to 5 in the HS_Assembly, HS_S3DParts, or any other bulkloaded
worksheets.
2. Create labels for attributes that are required to display the BOMDescription of the support or
the component such as length, width, and so on.
BOM labels must have unique label names.
3. Enter the label names in the BOMDefinition field.
Enclose the label names using square brackets ([]).
Example
The following illustration uses HS EndPlateTaper R, HS EndPlateTaper W, HS EndPlateTaper
H, HS EndPlateTaper T, HS EndPlateTaper Angle as label names.

The BOMDescription displays the processed label values. An example BOMDescription is as


follows:
Tapered End Plate, R=20. in, W=10. in, H=10. in, T=1. in, Angle=90. deg
This functionality is provided for both the supports and the support components.
Inverted T-Shaped Frame LS (part number: Assy_FR_IT_LS_9) assembly uses labels in BOM
description.
The following support components use labels in BOM description:
 Utility Tapered End Plate (part number: Utility_END_PLATE_TAPER_2)
 Anvil Continuous Threaded Rod (part number: Anvil_FIG146_11)
 Utility Base Plate with Two Holes (part number: Utility_TWO_HOLE_PLATE_13)

 If you do not enclose the label names in square brackets in the BOMDescription, the label
name is treated as normal text and is shown in the property pages, drawings, and reports.

Hangers and Supports Reference Data Guide 26


Defining Parts

 If the labels is not available in the database or if the label processing fails, then the label name
enclosed in the square brackets is displayed in the property page.
 Label names must be unique.
See Also
Hangers and Supports Programming Concepts (on page 20)

Part Ports
When creating part symbols that you intend to use in support assemblies, specify outputs named
ports to aid in the placement of the part symbol. The following figure shows the output ports for a
pipe clamp part symbol.

The geometric information associated with each port is, in essence, a coordinate system. The port
defines an origin, three axes, and three planes.

Ports convey information through their relative location with respect to the symbol graphics. In the
pipe clamp part symbol, one port is defined coincident with the centerline of the clamp's
associated pipe. The second port is positioned where the clamp is connected to the other

Hangers and Supports Reference Data Guide 27


Defining Parts

assembly part. Understand, however, that ports can be defined at any position in space and
therefore do not need to be attached to the part symbol's graphical representation. In addition, the
location of a port can be a function of the input of the part symbol. For example, you can define a
port position for a welded lug based upon the pipe radius.
The following figure shows the part symbols and their ports arranged in an exploded view of the
assembly. Each part has two ports defined; however, any number can be defined as required. The
orientation and location of each part symbol port is independent of the other ports. During
placement, however, a symbol's collection of ports is treated as rigid and always retains their
location with respect to the other ports and the geometry of the part symbol.

See Also
Constraints (on page 57)
Reference Ports (on page 22)
Joints (on page 58)

Hangers and Supports Reference Data Guide 28


Defining Parts

Defining Hanger and Support Part Ports


The part symbols used to represent a hanger and support assembly are expected to generate
ports as output. The ports in question are objects implementing the IJHgrPort interface. Use the
Port constructor that is provided for creating such objects. The creator of the port is responsible for
the naming and the orientation. An example showing the creation of ports and setting the
orientation is shown below.
public AspectDefinition m_Symbolic;

//Option1 – creating using single constructor
//Creating StructurePort port (Port1) using Port()
//It creates the port and also sets orientation to the port
Port port1 = new Port(OccurrenceConnection, part, "StructurePort", new
Position(B/2, (S+2*T)/2, 0), new Vector(1, 0, 0), new Vector(0, 0, 1));
//Add the port to output collection
m_Symbolic.Outputs["StructurePort"] = port1;
//Option2 – creating using constructor and then setting origin & orientation
//Creating Pin port (Port2) using Port()
Port port2 = new Port(OccurrenceConnection, part, "Pin");
//set origin to the port
port2.Origin = new Position(B/2, (S+2*T)/2, - E);
//set orientation to the port
port2.SetOrientation(new Vector(1, 0, 0), new Vector(0, 0, 1));
//Add the port to output collection
m_Symbolic.Outputs["PinPort"] = port2;
The port's name is set using the "name" property on the port object. The following conventions
should be used when naming ports.
 If a symbol is in contact with or is considered to interact with a routing object, it should output a
port named "Route". The port's location should represent the idealized point of contact
between the symbol and the route object.
 If a symbol is in contact with or is considered to interact with a structural object, it should output
a port named "Structure". The port's location should represent the idealized point of contact
between the symbol and the structural object.
This information is used in combination with the output from SupportingConnections( ) and
SupportedConnections( ) of the Custom Support Definition (see the Hangers and Supports
Reference Data Guide for more information about Custom Support Definition). For example, the
software uses this data to generate reports and ISOGEN drawings.

Hangers and Supports Reference Data Guide 29


Defining Parts

Port Compatibility and Size Checking


Port Checking
Port checking is performed during the Place Part command or when a Standard Support is
dropped using Drop Standard on the vertical tool bar.
Smart 3D uses port checking to ensure that the parts that connect together fit and are compatible.
The HngSupPortType sheet in AllCodeLists.xls and the SupportJoints sheet in
HS_System.xls control port checking. The following topics describes how port checking works.

Port Compatibility
Ports are compatible if their combination appears in the SupportJoints table. For example, see
the following row in the delivered table:

PIN-EYE is a combination of port type 1005 and 1007. For more information or for a description of
the two port types, see the HngSupPortType table in AllCodeLists.xls.

In the above example, if the port of a part with a Pin type is connected to a port from a part with an
Eye type, the ports are compatible.

The software skips port checking in case of exceptions that include the following port types:

Undefined = 1

OTHER = 1200

WELD = 1012

STEEL = 1011

Hangers and Supports Reference Data Guide 30


Defining Parts

Port Size Checking


In addition to port compatibility checking, the software performs a size check of the ports and
alerts you or returns an error if the port sizes vary. For example,

In the earlier example, the port Size, MaxSize, and MinSize values are 0.375 inches. The software
alerts you or returns an error if a part with a size that is not .375 inches is connected to a
compatible port. For more information about port size, see any of the HS assembly data files such
as HS_Anvil.xls, HS_S3DParts_Anvil PH-2010.xls.

Part Selection Rules


The part selection rule automatically returns an appropriate part based on the input selection
criteria. For example, when you place a design support on a 6 inch pipe and trigger Add Part
command to select a Pipe Clamp from the main node of the part class, the software uses the Part
Selection Rule to find an appropriate pipe clamp that can be placed on a 6 inch pipe.
To create a new part selection rule in .NET:
 use the SupportPartSelectionRule base class
 the class that you use must inherit from SupportPartSelectionRule
To create a new Part Selection Rule in Microsoft Visual Basic, implement
IJHgrPartSelectionRule.

SelectedPartFromPartClass
The SelectedPartFromPartClass method of the SupportPartSelectionRule class decides on a
part to return based on the input selection. The following method returns a part based on the input
selection.
public override Part SelectedPartFromPartClass(string sPartClass)
{ return selectedPart; }
The following code sample illustrates implementation of SelectedPartFromPartClass method:
//---------------------------------------------------------------------
-
//This Rule returns part when pipe size is equal.

Hangers and Supports Reference Data Guide 31


Defining Parts

//---------------------------------------------------------------------
-
public class PartByPipeSizeEqual : SupportPartSelectionRule
{

public override Part SelectedPartFromPartClass(string sPartClass)


{
Part selectedPart = null;
PipeObjectInfo pipe =
(PipeObjectInfo)SupportedHelper.SupportedObjectInfo(1);

// Method SupportPartBySize(), takes PartClass name as input


and compares the system defined attributes like NominalDiameter with the
Operator type mentioned in next input like NDFrom_EQUAL.
// the returned type is Part

selectedPart= SupportPartBySize(sPartClass, pipe.NominalDiameter,


NDComparisonOperatorType.NDFrom_EQUAL);

return selectedPart;
}

Hangers and Supports Reference Data Guide 32


SECTION 6

Custom Symbol Definition


CustomSymbolDefinition is the base class that is used to create a symbol in .NET. To create a
new symbol, the class that you use must inherit CustomSymbolDefinition. Define CacheOption,
SymbolVersion, and VariableOutputs when you define the class in .NET.
To create symbols in Microsoft Visual Basic, implement IJDUserSymbolServices.
// A symbol can be Cached, Non-Cached or of Automatic Type.
[CacheOption(CacheOptionType.NonCached)]

// A symbol can have SymbolVersion and it can be specified as shown below.


[SymbolVersion("1.0.0.0")]

// A symbol can have variable inputs and outputs i.e. its functionality can
be changed in future. So this can be specified by the attribute
VaribleOutputs
[VariableOutputs]

public class WBAParts : CustomSymbolDefinition


{
// Declare inputs

// Definitions of Aspects and their Outputs

// Implement ContructOutputs() to create the geometry and ports of symbol

Define Inputs
You must define the inputs and outputs for the symbols to work. The first input is reserved for the
catalog part and you must use InputCatalogPart to define the input. Define a variable to access
the attributes in ConstructOutput().
[InputCatalogPart(1)]
public InputCatalogPart m_PartInput;
Input declaration changes based on input data type.
The following parameters are used:
 Index
 Attribute Name - specifies the SymbolParameter attribute as defined in the
CustomInterface worksheet of the Reference Data workbook for symbols.
 Attribute Description - specifies the attribute description.
[InputDouble(2, "E", "E", 0.999999)]
public InputDouble m_E;
[InputDouble(3, "R", "R", 0.999999)]

Hangers and Supports Reference Data Guide 33


Custom Symbol Definition

public InputDouble m_R;


[InputDouble(4, "PinDiameter", "PinDiameter", 0.999999)]
public InputDouble m_PinDiameter;
[InputDouble(5, "PinLength", "PinLength", 0.999999)]
public InputDouble m_PinLength;
[InputDouble(6, "B", "B", 0.999999)]
public InputDouble m_B;
[InputDouble(7, "S", "S", 0.999999)]
public InputDouble m_S;
[InputDouble(8, "T", "T", 0.999999)]
public InputDouble m_T;
The following input types are used:
InputCatalogPart
InputDouble
InputObject
InputString

Define Aspects
Every symbol has an associated aspect and is defined as follows:
[Aspect("Symbolic", "Simple Physical Aspect", AspectID.SimplePhysical)]
A symbol uses the following aspects:
 AspectID.Centerline
 AspectID.DetailedPhysical
 AspectID.Insulation
 AspectID.Maintenance
 AspectID.Operation
 AspectID.ReferenceGeometry
 AspectID.SimplePhysical

Define Outputs
You must define the inputs and outputs for the symbol to work. You can define the Port and
Geometrical outputs as shown below:
[SymbolOutput("StrcuturePort", "StrcuturePort")] // Port Outputs
[SymbolOutput("PinPort", "PinPort")] // Port Outputs
[SymbolOutput("Body", "Body")] // Geometrical Outputs
[SymbolOutput("Pin", "Pin")] // Geometrical Outputs

Hangers and Supports Reference Data Guide 34


Custom Symbol Definition

Construct Outputs
The ConstructOutputs() method defines the geometrical outputs, port outputs, and their
locations and is used to construct the symbols. You can retrieve the inputs from the input variables
as defined in the inputs section. SymbolGeometryHelper class provides many helper methods
that can be used to construct the symbol geometry.
protected override void ConstructOutputs()
{
try
{
Part part = null;

Double E = 0;
Double R = 0;
Double B = 0;
Double S = 0;
Double T = 0;
Double pinDiameter = 0;
Double pinLength = 0;

SymbolGeometryHelper symbolGeometryHelper = new


SymbolGeometryHelper();

#region Adding Ports

//Setting StrcuturePort port (Port1)


Port port1 = new Port(OccurrenceConnection, part, "StrcuturePort",
new Position(B/2, (S+2*T)/2, 0), new Vector(1, 0, 0), new Vector(0, 0, 1));

m_Symbolic.Outputs["StrcuturePort"] = port1;

//Setting Pin port (Port2)


Port port2 = new Port(OccurrenceConnection, part, "Pin");
port2.Origin = new Position(B/2, (S+2*T)/2, - E);
port2.SetOrientation(new Vector(1, 0, 0), new Vector(0, 0, 1));
m_Symbolic.Outputs["PinPort"] = port2;

#endregion

Matrix4X4 matrix = new Matrix4X4();


symbolGeometryHelper = new SymbolGeometryHelper();

Collection<ICurve> curveCollection = new Collection<ICurve>();

curveCollection.Add(new Line3d(new Position(0, 0, 0), new


Position(0, S+2*T,0)));

curveCollection.Add(new Line3d(new Position(0, S+2*T, 0), new


Position(0, S+2*T, -(E+R))));

Hangers and Supports Reference Data Guide 35


Custom Symbol Definition

curveCollection.Add(new Line3d(new Position(0, S+2*T, -(E+R)), new


Position (0, S+T, -(E+R))));

curveCollection.Add(new Line3d(new Position (0, S+T, -(E+R)), new


Position(0, S+T, -T)));

curveCollection.Add(new Line3d(new Position(0, S+T, -T), new


Position (0,T,-T)));

curveCollection.Add(new Line3d(new Position (0,T,-T), new


Position(0,T,-(E+R))));

curveCollection.Add(new Line3d(new Position(0,T,-(E+R)), new


Position(0,0, -(E+R))));

curveCollection.Add(new Line3d(new Position(0,0, -(E+R)), new


Position(0,0,0)));

Projection3d body = new Projection3d(OccurrenceConnection, new


ComplexString3d(curveCollection), new Vector(1, 0, -0), B, true);

m_Symbolic.Outputs["Body"] = body;

symbolGeometryHelper = new SymbolGeometryHelper();

matrix.Rotate(2 * Math.PI, new Vector(0, 0, -1));


matrix.Rotate(-(Math.PI / 2), new Vector(1, 0, 0));
matrix.Translate(new Vector(-T, B/2, E)); //(B / 2, (S + 2 * T) /
2, E)
matrix.Rotate(3 * Math.PI / 2, new Vector(0, 0, 1), new Position(0,
0, 0));
matrix.Rotate(Math.PI, new Vector(1, 0, 0), new Position(0,0,0));

Projection3d pinProj =
symbolGeometryHelper.CreateCylinder(OccurrenceConnection, pinDiameter /
2, S + 4 * T);

pinProj.Transform(matrix);
m_Symbolic.Outputs["Pin"] = pinProj;

}
catch
{
if (base.ToDoListMessage == null)
{
ToDoListMessage = new
ToDoListMessage(ToDoMessageTypes.ToDoMessageError,"Error in
ConstructOutputs of .NET Training part WBA.");
return;
}
}
}

Hangers and Supports Reference Data Guide 36


Custom Symbol Definition

Bill Of Material (BOM) Description


To customize the Bill of Materials (BOM) for the symbol, implement
ICustomHgrBOMDescription. The customized BOM implementation is called only when the
BOMType is set to one of the following in the ReferenceData workbook:
 3 - the BOM method called from the symbol
 4 - BOM method called from a different ProgID
You must add the implementation in the BOMDescription() method. The BOMDescription()
method takes a symbol object and returns a BOMString.
public class WBAParts : CustomSymbolDefinition , ICustomHgrBOMDescription

{
// Declare inputs
// Definitions of Aspects and their Outputs
// Implement ContructOutputs() to create the geometry and ports of symbol
// Implement BOMDescription() to set BOM description for the symbol

public string BOMDescription(BusinessObject oSupportComponent)


{
string bomString = "";
try
{

Part wbaPart = (Part)


oSupportComponent.GetRelationship("madeFrom", "part").TargetObjects[0];

bomString = "Customized BOM from Symbol Code: " +


wbaPart.PartDescription;

return bomString;
}
catch (Exception ex)
{
throw ex;
}
}
}

Hangers and Supports Reference Data Guide 37


Custom Symbol Definition

Custom Weight and CG (Optional)


The weight of a part is an attribute in the catalog in most circumstances, however, you can
customize the calculation. You can customize the Weight and CG for a symbol by implementing
ICustomWeightCG in the EvaluateWeightCG() method.
public class WBAParts : CustomSymbolDefinition , ICustomWeightCG

{
// Declare inputs

// Definitions of Aspects and their Outputs

// Implement ContructOutputs() to create the geometry and ports of symbol

// Implement EvaluateWeightCG() to set weight and CG on the symbol

public void EvaluateWeightCG(BusinessObject supportComponentBO)


{
try
{
double weight = 0, cogX, cogY, cogZ;
//Implement code to calculate weight and CG
SupportComponent supportComponent =
(SupportComponent)supportComponentBO;
//Set weight CG on symbol by calling SetWeightandCOG()
supportComponent.SetWeightAndCOG(weight, cogX, cogY, cogZ);

}
catch
{ }
}

Hangers and Supports Reference Data Guide 38


SECTION 7

Defining Assemblies
Assemblies are a collection of parts that form the physical frame to provide the support. The
assembly of a support's constituent parts is done using information defined in the reference data.
Each assembly defined in the reference data is assigned custom support definition. The software
uses the logic contained in the CSD to put together the individual support parts to form an
assembly.

There are several assembly sheets already defined in the delivered hanger and support reference
data. You can find the delivered workbook at [Product
Folder]\CatalogData\Bulkload\DataFiles\HS_Assembly.xls.
When defining assemblies, the basic parameters are:
Part Class Type
Declare the type of supports. There are several types of supports:
PipeSupportDefinitionClass, DuctSupportDefinitionClass, CableTraySupportDefinitionClass,
ConduitSupportDefinitionClass, CombinedSupportDefinitionClass, and
ConnectionSupportComponentClass.
The part classes whose names begin with "Assy" are in the PipeSupportDefinitionClass.
Occurrence Attributes
Specify any optional occurrence attributes on the part class level for the support.
Part Number
Type a part number for the assembly. This name must be unique across the entire reference
data catalog.

Hangers and Supports Reference Data Guide 39


Defining Assemblies

Part Description
Type a description for the assembly.
Symbol Definition
Not used for assemblies. Leave empty.
Symbol Icon
Specify the path of the graphic file, relative to the SharedContent share, that contains the
image of the support. The graphic file is used as a preview in the software.
Discipline Type
Type the code that represents the type of object that this assembly can support. Valid codes
are listed on the HngSupDiscipline sheet in the AllCodeLists.xls workbook in the Codelist
Number column.
Command Type
Type the code that specifies which Hangers and Supports task command can use the
assembly. Valid codes are listed on the HngSupCommand sheet in the AllCodeLists.xls
workbook in the Codelist Number column.
Type Selection Rule
Type the code that specifies the location of the support with respect to the route being
supported. Valid codes are listed on the HngSupTypeSelectionRule sheet in the
AllCodeLists.xls workbook in the Codelist Number column.
Assembly Info Rule
Specifies the custom C# .NET CSD rule to use for constructing the assembly. For more
information about Custom Support Definition examples, see Custom Support Definition
examples.
Max Insulation
Not used. Set to -1.
Load Range Low
Type the minimum load for the assembly. This assembly is not used for loads lighter than this
value. Include the units of measurement, lbf for example, when specifying this value.
Load Range High
Type the maximum load for the assembly. This assembly is not used for loads heavier than
this value. Include the units of measurement, lbf for example, when specifying this value.
Minimum Assembly Length
Type the minimum length that this assembly can be. Include the units of measurement, in or
mm for example, when specifying this value.
Maximum Assembly Length
Type the maximum length that this assembly can be. Include the units of measurement, in or
mm for example, when specifying this value.
Supporting Count
Specify the maximum number of supporting objects, a beam for example, to which the
assembly can be attached. Type 1+ to indicate that the support can be attached to a variable

Hangers and Supports Reference Data Guide 40


Defining Assemblies

number of supporting objects.


Supported Count
Specify the maximum number of supported objects, a pipe for example, to which the
assembly can be attached. Type 1+ to indicate that the support can be attached to a variable
number of supported objects.
ND From
Type the minimum nominal diameter for the supported object. This option is only used for
conduit and pipe assemblies.
ND To
Type the maximum nominal diameter for the supported object. This option is only used for
conduit and pipe assemblies.
ND Unit Type
Type the units for the ND From and ND To values.
Nominal Width From
Type the minimum width of the supported object for the assembly. Include the units of
measurement, in or mm for example, when specifying this value. This value is only used for
square ducts and cable trays or cable ways.
Nominal Width To
Type the maximum width of the supported object for the assembly. Include the units of
measurement, in or mm for example, when specifying this value. This value is only used for
square ducts and cable trays or cable ways.
Nominal Depth From
Type the minimum depth of the supported object for the assembly. Include the units of
measurement, in or mm for example, when specifying this value. Type 0 if the supported
object is circular. This value is only used for square ducts and cable trays or cable ways.
Nominal Depth To
Type the maximum depth of the supported object for the assembly. Include the units of
measurement, in or mm for example, when specifying this value. Type 0 if the supported
object is circular. This value is only used for square ducts and cable trays or cable ways.
Supported Family
Type the supported object type. Valid types are STRAIGHT, TURN, END, SURFACE, and
PART. END and PART allow you to place hangers on in-line components. PART defines
objects such as valves, flanges, and tees. END defines end features (for example, reducers,
caps, blind flange, and so forth). SURFACE allows you to place hangers on pipe offline
features, such as pipe sleeves.
Face Selection Type
Type the face selection combination that you would like to use for the assembly. This column
specifies which faces on a structure member that the assembly attaches. These combinations
are defined on the Face Selection sheet. You type a number from the Selection Key column
on the Face Selection sheet in this column.

Hangers and Supports Reference Data Guide 41


Defining Assemblies

Insulation Purpose
Type the insulation purpose code for the supported object. Valid codes are listed on the
Insulation Purpose sheet in the AllCodeLists.xls workbook in the Codelist Number
column.
Support Type
Type the assembly type. Valid codes are listed on the HngSupSupportType sheet in the
AllCodeLists.xls workbook in the Codelist Number column.
Mirror Behavior Option
Type the code that represents the mirror behavior for the assembly. Valid codes are listed in
the AllCodeLists.xls workbook on the Mirror Behavior Option sheet in the Codelist
Number column.
See Also
Hangers and Supports Programming Concepts (on page 20)
Custom Support Definition Examples
Supports and Local Coordinate System (LCS) (on page 42)

Supports and Local Coordinate System (LCS)


Every support placed, whether it is a Designed Support (DS) or a Standard Support Assembly
(Assembly), has a local coordinate system associated with it.

By default, the local coordinate systems are always orientated with LCS North along the pipe, LCS
east to the side of the pipe, and LCS Elevation in the global Up direction. For standard supports on
sloped pipe, the LCS North is horizontal, not sloped with the pipe. There is one exception to this,
for assemblies on vertical pipe. The LCS Elevation axis is not global Up, but rather to the side of
the pipe.

These local coordinate systems are provided to facilitate creating drawings with consistent views.
When creating a drawing, you can use the Use object coordinate system check box when
creating a view so that the view is always looking at the same side of the route object. For

Hangers and Supports Reference Data Guide 42


Defining Assemblies

example, if you set the Orientation to Looking North, that view always looks at the end of the
route object.

Changing the Local Coordinate System of a Design Support


1. Right-click on the design support

2. Click Local Coordinate System

Hangers and Supports Reference Data Guide 43


Defining Assemblies

3. Click Properties to view the Coordinate System Properties dialog box.

The Properties dialog box for a Design Support contains a User override of LCS option. If you
change the local coordinate system for a design support, this property is set to True. If this
property is set to False, the software orients the local coordinate system to the default orientation.

 After a local coordinate system is selected, you can use Rotate Object command to
rotate it.
 You can modify the local coordinate system for design supports only. You cannot modify the
local coordinate system for standard supports interactively, but, you can change the support
code and implement OrientLocalCoordinateSystem() function to do so.

Changing the Local Coordinate System of a Standard Support


The CSD code for any Standard Support can be modified to change the orientation of the local
coordinate system for that particular assembly. To do so, you must override
OrientLocalCoordinateSystem(). For example:
'------------Define the local coordinate system configuration-------
'NOTE: The format is strictly defined 'Only X axis and XY plane of local
coordinate system needs to be defined
'The first pair is always the reference hanger port index/name
'It can be reference port ("Route", "Structure", "BBSR_Low") or existing
symbol port
'Local coordinate system will be referred as -1, and with port name "LocalCS"
public override void OrientLocalCoordinateSystem()
{
JointHelper.CreateRigidJoint("-1", "Route", "-1", "LocalCS", Plane.XY,
Plane.ZX, Axis.Y, Axis.Z, 0, 0, 0);
}
See Also
Defining Assemblies (on page 39)

Hangers and Supports Reference Data Guide 44


Defining Assemblies

Bounding Boxes
A bounding box (BBX) is a 2D plane that encompasses all of the supported route objects. The
bounding box has two ports that define the diagonally opposite corners of the box.

Bounding boxes are used by the CSD to determine the range (bounding box) of the items being
supported. When creating an assembly that is intended to support more than one object, it is
better practice to connect to the bounding box instead of the individual route objects. That way if
another route object is added, the support re-sizes because the bounding box re-sizes to
accommodate the new object.

Standard Bounding Boxes


The following ten types of standard bounding boxes are being created for the support.
 Supported (BBR) - This bounding box is aligned along the cross-section of the primary
supported port. In other words, the x-axis is identical to the route feature direction. This
definition is most widely used in the By Point command support joint definition.
 TangentialToSupported (TANGENT_BBR) - This bounding box calculates the tangent
bounding box when the number of pipes is more than one. This bounding box is aligned along
the tangent to the set of pipe cross sections.
 AlternateTangentialToSupported (TANGENT_ALT_BBR) - This bounding box calculates
the tangent bounding box when the number of pipes is more than one. The tangent used is of
the opposite side from the Tangent_BBR bounding box.
 SupportedVertical (BBRV) - This bounding box is aligned along one axis of the primary
reference port and also along the global Z-axis.
 Supporting (BBS) - This bounding box is aligned along the plane of the supporting port.
 SupportingVertical (BBSV) - This bounding box is aligned along the plane, which is vertical
and aligned along the structure direction.
 SupportedAndSupporting (BBSR) - This bounding box is aligned along the plane
perpendicular to the XY plane of the supporting reference port. This definition can be used in
the By Struct command to ensure that the support is perpendicular to the structure’s
supporting plane.

Hangers and Supports Reference Data Guide 45


Defining Assemblies

 GlobalSupportedX (GBBR_X) - This bounding box is created such that its normal is aligned
with the global X direction. That is, the bounding box is in the global YZ plane.
 GlobalSupportedY(GBBR_Y) - This bounding box is created such that its normal is aligned
with the global Y direction. That is, the bounding box is in the global XZ plane.
 GlobalSupportedZ (GBBR_Z) - This bounding box is created such that orientation of the box
is always aligned with the global Z-axis.
The following example illustrates the side and top views of the different standard bounding box
planes:

In the previous example, all reference planes show only orientation of the bounding box. The
different planes have the same root point, which is the origin of the route reference port. This point
is the origin of the route port. The point is the intersection point, which is generated by projecting
the structural axis toward the pipe and intersecting with the pipe axis.

Use Cases
Bounding boxes are useful when creating frame type assemblies. They provide you with reference
ports that you would otherwise need to create using connection objects or joint offsets.
Because you sometimes need more freedom than a rigid joint allows, joint offsets do not
always work.
The following examples illustrate different bounding box use cases:

Hangers and Supports Reference Data Guide 46


Defining Assemblies

Hangers and Supports Reference Data Guide 47


Defining Assemblies

Combination of Vertical and Horizontal Pipes


Bounding boxes for combinations of vertical and horizontal pipes depends on the first pipe
selected. If a horizontal pipe is selected first, then bounding box is created only around horizontal
pipes. In this case, all the vertical pipes are ignored, as shown in the following example. If,
however, a vertical pipe is selected first, then only vertical pipes are considered for bounding box
creation.

Custom Bounding Boxes


When supports are placed, bounding box reference ports are often used to locate and orient the
individual parts of the support. The bounding box reference ports are especially useful when
dealing with support assemblies that have multiple supported objects. Currently, many different
types of bounding boxes exist, each with different predefined orientations. For certain support
assemblies, however, none of the existing predefined bounding boxes provide the required
orientation. In these situations, you can use the bounding box Application Programming Interface
(API) to create any bounding box with any orientation.
The aim of the API is to redefine how the bounding boxes are described and created in order to
give the Custom Support Definition (CSD) developer more control over the bounding box behavior
while also supplying many more types of bounding boxes. The API allows the CSD developer to
define the required bounding box based on the requirements of the support being developed.

Custom Bounding Box API


Using the API to define a bounding box is a two-step process. First, you must define the
orientation of the bounding box by providing vectors along the X, Y, or Z-axis of the bounding box.
You can specify any vector; however, for ease of use, a function is provided that provides direct
access to many commonly used vectors. Second, you can create the bounding box using the
provided API.
The following sections explain, in detail, how to use the BBX API.
Define the vectors that define the BBX plane:

Hangers and Supports Reference Data Guide 48


Defining Assemblies

To begin, create two vectors that define the plane of the bounding box.
For more information about how vectors are used to define the bounding box plane, see
Bounding Box Planes (on page 52).
The GetVectorForBBXDirection function is provided to give you direct access to vectors
commonly used to define bounding boxes. You can either use this function, or you can define the
vectors directly. The GetVectorForBBXDirection function works as described below:
public Ingr.SP3D.Common.Middle.Vector
GetVectorForBBXDirection(Ingr.SP3D.Support.Middle.BoundingBoxDirection
eBBXDirection, Ingr.SP3D.Common.Middle.Vector vecNormal)
Parameters:
eBBXDirection: Direction along which the vector should lie.
vecNormal: Normal to the plane into which the vector should be projected.
The first input, eBBXDirection, specifies an enum that determines the direction of the vector. The
second input, vecNormal, is optional and defines a vector that is normal to the desired plane of
the bounding box. If the second input is given, then the resulting vector is projected into the plane
that is perpendicular to the vecNormal. This can also be used to ensure that the returned vector is
orthogonal to the second vector passed, and these two can then be used to define a bounding
box.
The enum eBBXDirection currently contains the following:
 AlongRoute - Returns a vector along the route’s primary axis.
 GlobalX - Returns the global X vector [1,0,0].
 GlobalY - Returns the global Y vector [0,1,0].
 GlobalZ - Returns the global Z vector [0,0,1].
 OrthogonalToRoute - Returns a vector perpendicular to the route’s primary axis.
 RouteToStruct - Returns a vector from the route to the structure.
 RouteX - Returns the route reference port's X-axis.
 RouteY - Returns the route reference port's Y-axis.
 RouteZ - Returns the route reference port's Z-axis.
 StructureX - Returns the structure reference port's X-axis.
 StructureY - Returns the structure reference port's Y-axis.
 StructureZ - Returns the structure reference port's Z-axis.
 Tangent - Returns a vector from the centerline of the first route to the centerline of the last.
For example, to create a bounding box similar to BBRV, you first call the API by passing the enum
only, as globalZ.
oVec_Z =
customSupportDefinition.BoundingBoxHelper.GetVectorForBBXDirection(Boun
dingBoxDirection.GlobalZ);
Where one of the vectors to be used for BBX creation is global Z.

Hangers and Supports Reference Data Guide 49


Defining Assemblies

oVec =
customSupportDefinition.BoundingBoxHelper.GetVectorForBBXDirection(Boun
dingBoxDirection.AlongRoute, oVec_Z);
Where the second vector should be along route, but is projected into the horizontal plane whose
normal is oVec_Z.
AlongRoute ensures that the oVec is first generated based on the direction of the route. When
the second vector is passed, it receives a horizontal projection (on global XY plane), so that the
vector is perpendicular to the oVec_Z.
Create BBX given two vectors:
Next, you use the specified vectors to create the bounding box. There are two different functions
that you can use, depending on whether you want to specify two vectors in the bounding box plane
(Y- and Z-axis) or you want to specify a vector normal to the bounding box plane (X-axis). The
signatures of the functions are:
public Ingr.SP3D.Support.Middle.BoundingBox
CreateBoundingBox(Ingr.SP3D.Common.Middle.Vector vecY,
Ingr.SP3D.Common.Middle.Vector vecZ, string sBBXName, bool
includeInsulation, bool bMirror, bool bIncludeSupportPort, bool
bUseSecondVectorAsNormal)
Parameters:
vecY: A vector representing the Y-axis of the bounding box.
vecZ: A vector representing the Z-axis of the bounding box.
sBBXName: The name of the bounding box.
includeInsulation: Whether or not insulation thickness should be included in the bounding box
dimensions.
bMirror: Whether or not the bounding box should be mirrored.
bIncludeSupportPort: Whether or not the location of the bounding box should be moved such
that the supporting port lies on the plane of the bounding box.
bUseSecondVectorAsNormal: Whether the second vector needs to be used as the normal of
the bounding box.

 The name to be given to the bounding box (sBBXName) is used to create the name of the
bounding box. For example, if the string is passed as MyBBX, then the bounding box ports are
created with the names MyBBX_High and MyBBX_Low). This allows the CSD developer to
define a bounding box with any orientation and any name.
 The two steps defined earlier must be used together to create a user-defined bounding box.
For more information, see Example Code for Custom Bounding Box API (on page 56).

Hangers and Supports Reference Data Guide 50


Defining Assemblies

Diagnostic Supports
A sample assembly that shows a custom bounding box in the model is provided: HS Assembly
> Diagnostic Supports > BBX Diagnostic Support. Two example bounding boxes are
available, one for horizontal pipes and one for vertical pipes.
The sample support is meant to graphically represent the plane of the bounding box using a plate
representation. Two cylinders are used to represent the Z-axis and the Y-axis of the high port. Two
boxes are used to represent the Z-axis and Y-axis of the low port.
When Mirror = False

When Mirror = True

The sample support has two occurrence properties that you can use to control the behavior of the
bounding box. The BBX Alignment property is used to specify how the Z-axis of the bounding
box should be aligned within the plane.

Hangers and Supports Reference Data Guide 51


Defining Assemblies

 Direct Towards Structure - The bounding box is parallel to the supporting structure.

 Orthogonal to Global CS - The bounding box is parallel to the global coordinate system.

The BBX Mirror property is used to mirror the bounding box.

Bounding Box Planes


Each bounding box can be defined as having an X-, Y-, and Z-axis. The plane of the bounding box
contains the Y- and Z-axis, while the X-axis is normal to the plane. The following illustration shows
a standard bounding box, in which the blue arrows represent the Y-axis, and the green arrows
represent the Z-axis.
Based on the right-handed coordinate system, the X-axis is normal to the plane and
pointing out of the page towards you.

Hangers and Supports Reference Data Guide 52


Defining Assemblies

By changing the orientation of the Y and Z vectors, you have complete control over the bounding
box. You can rotate the Y and Z vectors by some angle, effectively rotating the bounding box as
shown in the following illustration. This provides an easy mechanism for rotating supports that
attach to multiple supported objects.

Insulation Option
The insulation option allows you to specify whether or not the bounding box should include the
insulation. The flag makes use of the includeInsulation with allowable values shown in the
following examples:
 False - The insulation is not included in the range of the bounding box.

 True - The insulation is included in the range of the bounding box.

Hangers and Supports Reference Data Guide 53


Defining Assemblies

Mirror Bounding Boxes


The Mirror flag is used to specify whether the bounding box is mirrored. For mirroring, the
bounding box X-axis is reversed, forcing the Y-axis to flip in order to retain a right hand coordinate
system. The result is the ability to switch between the two cases as shown in the following
examples.
The following illustration (1) shows the bounding with the X-axis pointing out of the page.

The following illustration (2) shows the bounding box with the X-axis pointing into the page.

 Mirroring reverses the bounding box X-axis such that Bx = -Bx while the bounding box Z-axis
remains the same.
 This toggle allows you to mirror a support by simply mirroring the bounding box, as opposed to
switching the joints that connect the support to the bounding box.

Hangers and Supports Reference Data Guide 54


Defining Assemblies

Bounding Box Planes Containing Route and Structure


The bIncludeSupportPort flag is used to specify where the bounding box should be located
along the route(s). If true, the bounding box is located such that the reference port of the primary
route is on the plane of the bounding box, as shown in the following illustration.

If false, the bounding box is located such that the reference port of the primary structure is on the
plane of the bounding box.

Hangers and Supports Reference Data Guide 55


Defining Assemblies

Example Code for Custom Bounding Box API


The following examples show how to use the BBX API in C# .NET. This code is used by the
sample BBX supports defined on the
PipeHgrAssemblies,Ingr.SP3D.Content.Support.Rules.Assy_BBX sheet in the
HS_Assembly.xls workbook. You can find the delivered workbook at [Product
Folder}:\CatalogData\Bulkload\DataFiles\HS_Assembly.xls.
Example 1
//Vertical Plane Normal Along Route - Z Axis Towards Structure
globalZ =
BoundingBoxHelper.GetVectorForBBXDirection(BoundingBoxDirection.GlobalZ
);
GlobalZ = my_IJHgrBBXHlpr.GetVectorAlong(BBXVec_GlobalZ) //Get Global
Z
//Project Route X-Axis into Horizontal Plane
bbX =
BoundingBoxHelper.GetVectorForBBXDirection(BoundingBoxDirection.AlongRo
ute, globalZ);
//Project Vector Orthogonal to Route into the BBX Plane
bbZ =
BoundingBoxHelper.GetVectorForBBXDirection(BoundingBoxDirection.Orthogo
nalToRoute, bbX);
BoundingBoxHelper.CreateBoundingBox(bbZ, bbX, "TestBBX", false, mirror,
false, true);
Example 2
//Vertical Plane Normal Along Route - Z Axis Orthogonal to Global CS
BoundingBoxHelper.GetVectorForBBXDirection(BoundingBoxDirection.GlobalZ
); //Get Global Z
//Project Route into Horizontal Plane
bbX =
BoundingBoxHelper.GetVectorForBBXDirection(BoundingBoxDirection.AlongRo
ute, globalZ);
BoundingBoxHelper.GetVectorForBBXDirection(BoundingBoxDirection.Orthogo
nalToRoute, bbX);
//Get Horizontal Vector in the BBX Plane (For Orthogonal direction)
bbY = globalZ.Cross(bbX);
//Get Orthogonal Vector in the plane of the BBX (Gz, -Gz, By, -By) depending
on Angle
if (AngleBetweenVectors(globalZ, bbZ) < Math.Round(Math.PI, 2) / 4)
bbZ = globalZ;
else if (AngleBetweenVectors(bbY, bbZ) > 3 * (Math.Round(Math.PI, 2) / 4))
{
bbZ.X = -globalZ.X;
bbZ.Y = -globalZ.Y;
bbZ.Z = -globalZ.Z;
}
else if (AngleBetweenVectors(bbY, bbZ) < Math.Round(Math.PI, 2) / 4)

Hangers and Supports Reference Data Guide 56


Defining Assemblies

bbZ = bbY;
else
bbZ.X = -bbY.X; bbZ.Y = bbY.Y; bbZ.Z = bbY.Z;
BoundingBoxHelper.CreateBoundingBox(bbZ, bbX, "TestBBX", false, mirror,
false, true);

Constraints
The software uses constraints to control how part symbol ports relate to each other and to
reference ports. There are four constraints that can be defined by themselves or in conjunction
with another constraint.
Parallel - Restricts geometries so that they are parallel. The constraint can only be applied
between geometries with an associated direction. For ports, these geometries are axes and
planes. A plane's direction is defined by its normal vector.
Perpendicular - Restricts geometries so that they are perpendicular. The constraint can only be
applied between geometries with an associated direction. For ports, these geometries are axes
and planes. A plane's direction is defined by its normal vector.
Coincident - Makes two geometries identical. Coincident constraints are only valid if one
geometry can be made to touch everywhere with the other geometry.
Distance - Defines the minimum separation in three dimensions between two geometries. Unlike
the other three constraints, this constraint has an associated value. A distance constraint can
have different meanings depending on the geometry types and any other applied constraints.
As an example of constraints, consider this beam clamp and beam.

Two constraints allow the beam clamp to stay flush with the face of the beam while still allowing it
to slide along the axis of the beam. The first constraint is parallel between the Beam XY-plane and
the Beam Clamp XY-plane. The second constraint is coincident between the Beam X-axis and the
Beam Clamp X-axis.

Hangers and Supports Reference Data Guide 57


Defining Assemblies

See Also
Part Ports (on page 27)
Reference Ports (on page 22)
Joints (on page 58)

Joints
Constraints used between part symbols frequently model the mechanical attachment techniques
used to connect the parts. These parts interact in a limited number of ways. The interaction of
these part ports, the way in which each part can move with respect to the other part, is defined by
joints.
In three-dimensional space, there are six degrees of freedom: X, Y, Z, RX, RY, and RZ. A joint
restricts the motion of parts with respect to each other in one or more of these degrees of freedom.
By using joints, you do not have to specify individual constraints. However, you do need to specify
the joint type, the part ports to join, and the required port geometry. For example, for the revolute
joint shown, you need to specify the joint type (revolute), the pipe and turnbuckle ports to join, and
the port axis of rotation for the joint (X-axis).
You can define more than one joint per port connection as long as the joints do not conflict with
one another.
Some common joints are shown in the pictures below.

Revolute Joint Cylindrical Joint

Prismatic Joint Planar Slot Joint

Hangers and Supports Reference Data Guide 58


Defining Assemblies

Plane Joint Translation Joint

PointOnAxis Joint GlobalAxisAligned Joint

Rigid Joint PointOnPlane Joint

The next table lists joint and coupling types along with the associated degrees of freedom and a
description of each joint.

Joint or Coupling
Type Input Geometry Associated Translational Rotational Description
Offset DOF DOF

Revolute 1) Axis 1) No 0 1 Objects spin about provided axis


but do not translate.
2) Origin 2) No
(implied)

Planar Plane Yes 2 1 Objects free to rotate and


translate while provided planes
remain flush.

Translation 1) Plane 1) Yes 2 0 Objects may translate but NOT


rotate while provided planes
2) Axis (in 2) No remain flush.
specified plane)

Hangers and Supports Reference Data Guide 59


Defining Assemblies

Joint or Coupling
Type Input Geometry Associated Translational Rotational Description
Offset DOF DOF

Prismatic 1) Plane 1) Yes 1 0 Objects may slide along


provided axis but NOT rotate
2) Axis (in 2) Yes about the axis.
specified plane)

Rigid 1) Plane 1) Yes 0 0 Objects are rigidly fixed relative


to each other.
2) Axis (in 2) Yes
specified plane)
3) Yes
3) Origin
(implied)

Angular Rigid 1) Plane 1) Yes 0 0 Objects are rigidly fixed relative


to each other at a specified
2) Offset 2) Yes angle.
3) Rotation 3) Yes

Spherical Origin (implied) No 0 3 Object origins remain in contact


with each other while objects are
free to spin.

Cylindrical Axis Yes 1 1 Objects are free to spin about


and translate along provided
axis.

Planar Slot 1) Plane 1) Yes 1 1 While provided planes remain


flush, the first point is on an axis
2) Axis (one 2) Yes of the second port.
object only)

GlobalAxisAligned Axis/Plane (one No n/a n/a Axis is made parallel to vertical


object, world Y- axis; plane is forced to contain
axis implied for vertical axis.
other)

PointOnPlane 1) Port Origin 1) No 1 DOF) if 3 DOF The Origin of geometry 1 is


2) Plane or axis 2) No Geometry located on geometry 2. It can
Type is an translate and rotate as long as
Axis. the origin remains on geometry
2 DOF) if 2. When using the
Geometry Configuration Index Calculator,
Type is a Geometry Type A refers to Input
Plane. Geometry 2.

See Also
Part Ports (on page 27)
Reference Ports (on page 22)
Constraints (on page 57)
SupportJoints Sheet (on page 94)

Hangers and Supports Reference Data Guide 60


Defining Assemblies

Changing the Support Discipline


Majority of the Hangers and Supports are designed to support only pipes. However, you can use
an existing Support to support any route object, such as a cable tray, conduit, duct or a
combination of route objects by changing the support discipline type. This section explains how to
use a support on different types of supported objects.

Part Class Type


Each support class has PartClassType property that defines the route discipline in which the
support is used. The following is a list of valid part class types:
 PipeSupportDefinitionClass - Pipes
 DuctSupportDefinitionClass - Ducts
 CableTraySupportDefinitionClass - Cable Trays
 ConduitSupportDefinitionClass - Conduit
 CombinedSupportDefinitionClass - A combination of two or more route types
A support works only on the type of route or routes that its PartClassType is designed for. For
example, you cannot place a Combined support on a single pipe. However, you can place a
Combined support on a combination of a pipe and a cable tray or any other route object as the
supported object.

 A support does not work, if you change the PartClassType of a support that has been loaded
in the catalog.
 Set the PartClassType when you bulkload the support into the catalog.

System Hierarchy
Every Hangers and Supports workbook has a R-Hierarchy worksheet that describes how the
support displays in the catalog browser. Each part class type has different root nodes. The support
must be in a predefined place in the hierarchy to display in the browser.
The root nodes are defined in the R-Hierarchy and ClassNodeType worksheets in the
HS_System workbook.

Hangers and Supports Reference Data Guide 61


Defining Assemblies

For a support to be usable for a certain discipline type, select the appropriate top node from the
heirarchy. For more information about the catalog hierarchy, see Smart 3D Reference Data
Guide. The following HS_Assembly workbook has the Support Assembly Information for the
discipline types, as shown in the following graphic:

Part Selection Rule


The parts and symbols that are used to create assemblies rely on part selection rules. The part
selection rules define the type of part to use at run time and is based on specific criteria. For
example, a shoe assembly selects the shoe symbol based on the nominal diameter of a pipe. The
part selection rules are written specifically for the part and are based on the way the part is
designed. The rule fails if you select an incorrect supported object. To fix this issue, you must
select a proper rule for the supported object, or select a part that does not require a selection rule.
If you have Programming Resources installed, all the part selection rules are available in the
PartSelection and PartSelectionRule folder in one of the following locations:
 SmartPlant\3D\Programming\ExampleCode\HangersAndSupports\Rules
 Smart3D\Programming\ExampleCode\HangersAndSupports\Rules

Code Changes
Part of the code that is used to create Hangers and Supports assemblies might not succeed when
used on a different supported object. For example, the application might display error when you:
 try to use a cable tray as a pipe object
 try to get a nominal diameter of a duct that does not exist
The code treats the supported object as a pipe and tries to get an object or information that does
not exist. You can resolve the issues by modifying the code. There are multiples solutions and
every scenario has a different solution. The following examples provide a basic idea of how to
resolve an error that occurs during conversion.

Changing the Support Discipline Type


Changing the support discipline type involves the following steps:
1. Set the PartClassType in the Hangers and Supports Assembly worksheet to the
appropriate discipline type.
2. Add the assembly class to the hierarchy in the hierarchy worksheet.
The top node of the assembly must be an appropriate support discipline node.
3. Use a part selection rule with the supported object type or a part that does not need a part
selection rule.
4. Bulkload the workbooks with changes or additions to the catalog.

Hangers and Supports Reference Data Guide 62


Defining Assemblies

5. Fix the code issues that occur due to changes in the support discipline.

Example - Changing a Pipe Support to a Duct Support


The following example uses the Assy_FR_UC_WS support from the HS_Assembly workbook
and creates a similar support that works on a Duct instead of a Pipe.
You must install Programming Resources.
Step 1 - Part Class
a. Create a copy of the Assy_FR_UC_WS worksheet and rename it as
Assy_FR_UC_WS_DUCT.
b. Change the UserClassName to Unbraced Cantilever for Duct - WS.
c. Add a to Definition column as shown in the following graphic:

d. Rename the part numbers as Assy_FR_UC_WS_DUCT<number>. For example,


Assy_FR_UC_WS_DUCT1.
e. Add a under Start for each part number.

Step 2 - Create Hierarchy


 Create nodes for the new support under the HVAC discipline.
ClassNodeType Sheet

R-Hierarchy Sheet

Hangers and Supports Reference Data Guide 63


Defining Assemblies

R-ClassNodeDescribes Sheet

The hierarchy for the new class is as follows:


CLASSNODE_ASSEMBLY_DUCT
CLASSNODE_ASSEMBLY_DUCT_SPASSEMBLY
CLASSNODE_ASSEMBLY_DUCT_SPASSEMBLY_CANTILEVERS
Assy_FR_UC_WS_DUCT
Step 3 - Bulkload
 Bulkload the modified workbook to the catalog in Add, Modify, or Delete records in
existing catalog mode using the Bulkload Reference Data tool.
The new Duct support displays in the Catalog Browser.

Step 4 - Code Changes


.NET Code Changes
When you place a Duct support, the software might display the following error message:
No Joints obtained from Assembly Information Rule
 Turn-on Error Logging to see the following details in the error message.
Paths and line-numbers might differ.
System.InvalidCastException: Unable to cast object of type
'Ingr.SP3D.Support.Middle.DuctObjectInfo' to type
'Ingr.SP3D.Support.Middle.PipeObjectInfo'

.. at
Ingr.SP3D.Content.Support.Rules.Assy_FR_UC_WS.ConfigureSupport(Collecti
on`1 oSupCompColl) in
m:\SharedContent\Src\HangersAndSupports\Rules\CustomSupportDefini
tion\Pipe\PipeHgrAssemblies\PipeHgrAssemblies\Assy_FR_UC_WS.cs:line 149

 Open the PipeHgrAssemblies project and navigate to the file and the line of code
from the following error message to verify the issues:
PipeObjectInfo routeInfo =
(PipeObjectInfo)SupportedHelper.SupportedObjectInfo(1);
double pipeDiameter = routeInfo.OutsideDiameter;

Hangers and Supports Reference Data Guide 64


Defining Assemblies

In the above example code, the supported object is casted to a PipeObectInfo


object. The PipeObectInfo object returns an error because the supported object is a duct.
The application uses routeInfo variable to get the outside diameter of the pipe, and the
outside diameter is used to set various offsets and dimensions of the support.

The following is one of the many solutions to resolve this issue:


 Verify if the supported object is a pipe or a duct before casting. If the supported object
is a pipe, use the original code. If the supported object is a duct, cast the supported
object to DuctObjectInfo.
 Use the width to set the pipe diameter.
This solution might cause problems if the pipe diameter is used for the height of
the pipe and the if the duct is not square, but is an acceptable solution.
double pipeDiameter = 0;
if (SupportedHelper.SupportedObjectInfo(1).SupportedObjectType ==
SupportedObjectType.Pipe)
{
PipeObjectInfo routeInfo =
(PipeObjectInfo)SupportedHelper.SupportedObjectInfo(1);
pipeDiameter = routeInfo.OutsideDiameter;
}
else if
(SupportedHelper.SupportedObjectInfo(1).SupportedObjectType ==
SupportedObjectType.HVAC)
{
DuctObjectInfo routeInfo =
(DuctObjectInfo)SupportedHelper.SupportedObjectInfo(1);
pipeDiameter = routeInfo.Width;
}
 Rebuild the solution.
 Register the output dll file based on the system and the project setting by copying the
PipeHgrAssemblies.dll to the following location:
[Product Reference Data Folder]\SharedContent\Custom Symbols
 Start S3D Project Management and select an appropriate catalog.
 Go to Tools and select Update Symbol Configuration.
You must now be able to place the support.
VB 6 Code Changes
When you place a duct support, the software might display the following error message:
No Joints obtained from Assembly Information Rule - OID of Hanger is:
{00022305-0000-0000-0100-E6ED09551F04}
 Turn-on Error Logging to see the following details in the error message.
*** Info ***
Time : 03/18/15 15:28:55
Info : GetExternalPipeDiameter::
Help : AssemblyInformationRuleUtils;0

Hangers and Supports Reference Data Guide 65


Defining Assemblies

*** Info ***


Time : 03/18/15 15:28:55
Info : IJHgrAssmInfo_GetAssemblyJoints:
Help : Assy_FR_UC_WS;0
The error message points to the file and the function that causes the issue.
 Go to HS_Assembly project and select the Assy_FR_UC_WS class module.
 Search for GetExternalPipeDiameter.
The search result points to the following line of code:
PIPE_DIA = GetExternalPipeDiameter(my_IJHgrInputConfigHlpr, 1)
This code is designed for pipes and the application treats the supported object as
a pipe.
To solve this issue, check if the supported object is a pipe or a duct and then use different
functions to get the dimension, either width or the depth, of the supported object. The
following is one of the many solutions to resolve this issue:
 Declare a few variables required for the functions:
Dim inputObjColl As Object
Dim inputObj As Object
Dim dblRadius As Double
Dim csType As CrossSectionShapeTypes
Dim dRouteWidth As Double
Dim dRouteDepth As Double
Dim strUnit As String
 Use the route path feature to check if the supported object is a duct.
my_IJHgrInputConfigHlpr.GetSupportedCollection inputObjColl
Set inputObj = inputObjColl.Item(1)
Dim routePathFeat As IJRtePathFeat
Set routePathFeat = inputObj
If TypeOf routePathFeat Is IJRteDuctPathFeat Then
//A generic method od getting the pipe diameter
my_IJHgrInputConfigHlpr.GetRteCrossSectParams
inputObj, csType, strUnit, dblRadius, dRouteWidth, dRouteDepth
PIPE_DIA = dRouteWidth * 2#
PIPE_DIA = GetPipeODwithoutInsulation(PIPE_DIA,
oRoute)
Else
// Use the line of code that gets the pipe diameter
PIPE_DIA =
GetExternalPipeDiameter(my_IJHgrInputConfigHlpr, 1)
End If
You should now be able to place the support.

SECTION 8

Hangers and Supports Reference Data Guide 66


Custom Support Definition (CSD)

Custom Support Definition (CSD)


Custom Support Definition (CSD) is the base class to create an assembly in .NET. To create a
new assembly, inherit CustomSupportDefinition.

1. To create assembly in VB, the equivalent is to implement IJHgrAssmInfo.


2. The equivalent of CSD in VB was Assembly Information Rule (AIR).

Custom Support Definition (CSD) Examples


The Custom Support Definition (CSD) for each support type is defined in assembly reference data
using the AssmInfoRule attribute.
The Assembly Information Rule (AssmInfoRule) attribute contains the ProgId of .NET code that
inherits CustomSupportDefinition class. In most cases, the rule is a .NET class. The purpose of a
Custom Support Definition is to provide any required information about the assembly during the
evaluation of a support. Information is acquired by calling the methods defined on the
CustomSupportDefinition class.
There are five methods that must be overridden for the CustomSupportDefinition class:
 Parts() defines the part class and retrieves the parts. See Parts Method (on page 68).
 ConfigureSupport() defines the constraints between the parts. See ConfigureSupport Method
(on page 70).
 SupportedConnections() defines which part is connected to the route. See
SupportedConnections Method (on page 72).
 SupportingConnections() defines which part is connected to the structure. See
SupportingConnections Method (on page 74).
 ConfigurationCount() defines the route toggle configurations supported by the Custom
Support Definition.

What do you want to do?


 Add a note to key points using CSD (on page 76)
 Add a dimension port using CreateNote function in CSD (on page 78)
 Add control point using CreateNote function in CSD (on page 80)

Hangers and Supports Reference Data Guide 67


Custom Support Definition (CSD)

Parts Method
The Parts method of the CustomSupportDefinition class is responsible for specifying the catalog
parts constituting the assembly. The method is defined as:
public override Collection<PartInfo> Parts
{ get { } }
The method should return a collection of PartInfo. The following example shows a sample
implementation of this method for the hanger support assembly shown in Figure 1.
In the following example, the code that appears in italicized text is only included to illustrate
how to use the CSD to add implied parts.
public class RodHanger : CustomSupportDefinition
{
private bool includeTurnbuckle = false;
private string pipeClampClass = "";
private string PIPECLAMP = "PIPECLAMP";
private string BOTEYENUT = "BOTEYENUT";
private string TOPEYENUT = "TOPEYENUT";
private string BOTROD = "BOTROD";
private string TOPROD = "TOPROD";
private string TURNBUCKLE = "TURNBUCKLE";
private string WBA = "WBA";

public override Collection<PartInfo> Parts


{
get
{
try
{
Ingr.SP3D.Support.Middle.Support support =
SupportHelper.Support;
BusinessObject part =
support.GetRelationship("OccAssyHasPart",
"OccAssyHasPart_Part").TargetObjects[0];
includeTurnbuckle =
(bool)((Boolean)((PropertyValueBoolean)support.GetPropertyValue("IJUATR
_IncTurnbuckle", "IncludeTurbuckle")).PropValue);
pipeClampClass =
(string)((String)((PropertyValueString)part.GetPropertyValue("IJUATR_Cl
ampClass", "PipeClampClass")).PropValue);
Collection<PartInfo> parts = new Collection<PartInfo>();
parts.Add(new PartInfo(PIPECLAMP, pipeClampClass));
parts.Add(new PartInfo(BOTEYENUT, "BPCmp 5130-1"));
parts.Add(new PartInfo(BOTROD, "BPCmp 5000-1"));
if (includeTurnbuckle)
{
parts.Add(new PartInfo(TURNBUCKLE, "BPCmp 5100_6-1"));
parts.Add(new PartInfo(TOPROD, "BPCmp 5000-1"));

Hangers and Supports Reference Data Guide 68


Custom Support Definition (CSD)

}
parts.Add(new PartInfo(TOPEYENUT, "BPCmp 5130-1"));
parts.Add(new PartInfo(WBA, "BPCmp 1047Type2-1"));
return parts;
}
catch (Exception e)
{
Type myType = this.GetType();
CmnException e1 = new CmnException("Error in Get Assembly
Catalog Parts." + myType.Assembly.FullName + "," + myType.Namespace + "."
+ myType.Name + ". Error:" + e.Message, e);
throw e1;
}
}
}
}

Figure 1: Hanger Support with Associated Ports and Joints

Hangers and Supports Reference Data Guide 69


Custom Support Definition (CSD)

ConfigureSupport Method
The ConfigureSupport method of the CustomSupportDefinition class provides the joints required
to assemble the support. The method is defined as:
public override void ConfigureSupport(Collection<SupportComponent>
oSupCompColl)
{ }
The method should add a collection of joints using JointHelper. The following example code
shows a sample implementation of this method for the hanger support assembly shown in Figure
1.
public override void ConfigureSupport(Collection<SupportComponent>
oSupCompColl)
{
Dictionary<string, SupportComponent> componentDictionary =
SupportHelper.SupportComponentDictionary;
JointHelper.CreateRigidJoint(PIPECLAMP, "Route", "-1", "Route",
Plane.XY, Plane.XY, Axis.X, Axis.X, 0, 0, 0);
JointHelper.CreateRevoluteJoint(BOTEYENUT, "Eye", PIPECLAMP, "Wing",
Axis.Y, Axis.Y);
JointHelper.CreateRigidJoint(BOTROD, "RodEnd1", BOTEYENUT, "RodEnd",
Plane.XY, Plane.XY, Axis.X, Axis.X, 0, 0, 0);
JointHelper.CreateGlobalAxesAlignedJoint(BOTROD, "RodEnd1", Axis.Z,
Axis.Z);
JointHelper.CreatePrismaticJoint(BOTROD, "RodEnd1", BOTROD, "RodEnd2",
Plane.YZ, Plane.YZ, Axis.Z, Axis.NegativeZ,0,0);
if (includeTurnbuckle)
{
JointHelper.CreateRigidJoint(TURNBUCKLE, "RodEnd1", BOTROD,
"RodEnd2", Plane.XY, Plane.XY, Axis.X, Axis.X, 0, 0, 0);
JointHelper.CreateRigidJoint(TOPROD, "RodEnd1", TURNBUCKLE,
"RodEnd2", Plane.XY, Plane.XY, Axis.X, Axis.X, 0, 0, 0);
if (Configuration == 1)
JointHelper.CreateRigidJoint(TOPEYENUT, "RodEnd", TOPROD,
"RodEnd2", Plane.XY, Plane.XY, Axis.X, Axis.X, 0, 0, 0);
else
JointHelper.CreateRigidJoint(TOPEYENUT, "RodEnd", TOPROD,
"RodEnd2", Plane.XY, Plane.XY, Axis.X, Axis.NegativeY, 0, 0, 0);
componentDictionary[TOPROD].SetPropertyValue(0.324,
"IJOAHgrOccLength", "Length");
}
else
{
if (Configuration == 1)
JointHelper.CreateRigidJoint(TOPEYENUT, "RodEnd", BOTROD,
"RodEnd2", Plane.XY, Plane.XY, Axis.X, Axis.X, 0, 0, 0);
else

Hangers and Supports Reference Data Guide 70


Custom Support Definition (CSD)

JointHelper.CreateRigidJoint(TOPEYENUT, "RodEnd", BOTROD,


"RodEnd2", Plane.XY, Plane.XY, Axis.X, Axis.NegativeY, 0, 0, 0);
}
JointHelper.CreateRevoluteJoint(WBA, "Pin", TOPEYENUT, "Eye", Axis.Y,
Axis.Y);
JointHelper.CreatePlanarJoint(WBA, "Structure", "-1", "Structure",
Plane.XY, Plane.XY, 0);
}
A collection of SupportComponent is passed as input to the method. The part occurrences
(collection of SupportComponent) in this collection are listed in the same order as the catalog
parts returned by the Parts() method. Therefore, the first part occurrence corresponds to the first
catalog part, the second part occurrence corresponds to the second catalog part, and so on. The
part occurrences are provided to allow the CSD an opportunity to set inputs on the part
occurrences associated symbol. You can retrieve the Collection of SupportComponent using the
Dictionary of SupportComponent. In the above mentioned example, the Length input is set on the
rod using the component dictionary.
Add the joints using JointHelper class. Methods to create joint using JointHelper are given below:
public void CreateAngularRigidJoint (
string partKeyToBeRotated, string sPortNameToBeRotated, string
partKey_Fixed, string sPortName_Fixed,
Vector XYZOffset, Vector XYZRotate)
public void CreateCylindricalJoint( string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB,
Axis eAxisOfPartA, Axis eAxisOfPartB, double dAxisOffset)
public void CreateGlobalAxisAlignedJoint(string partKey, string
sPortName, Axis eAxis, Axis eGlobalAxisToAlignTo)
public void CreatePlanarJoint(string partKeyA, string sPortNameA, string
partKeyB, string sPortNameB,
Plane ePlaneOfPartA, Plane ePlaneOfPartB, double dPlaneOffset)
public void CreatePlanarSlotJoint(string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB,
Plane ePlaneOfPartA, Plane ePlaneOfPartB, Axis eAxisInPlaneA, double
dPlaneOffset, double dAxisOffset)
public void CreatePointOnAxisJoint(string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB, Axis eAxisOfPartA)
public void CreatePointOnPlaneJoint(string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB,
Plane ePlaneOfPartA)
public void CreatePrismaticJoint(string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB,
Plane ePlaneOfPartA, Plane ePlaneOfPartB, Axis eAxisInPlaneA, Axis
eAxisInPlaneB,
double dPlaneOffset, double dAxisOffset)
public void CreateRevoluteJoint(string partKeyA, string sPortNameA, string
partKeyB, string sPortNameB,

Hangers and Supports Reference Data Guide 71


Custom Support Definition (CSD)

Axis eAxisOfPartA, Axis eAxisOfPartB)


public void CreateRigidJoint(string partKeyA, string sPortNameA, string
partKeyB, string sPortNameB,
Plane ePlaneOfPartA, Plane ePlaneOfPartB, Axis eAxisInPlaneA, Axis
eAxisInPlaneB,
double dPlaneOffset, double dAxisOffset, double dOriginOffset)
public void CreateSphericalJoint(string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB)
public void CreateTranslationalJoint(string partKeyA, string sPortNameA,
string partKeyB, string sPortNameB,
Plane ePlaneOfPartA, Plane ePlaneOfPartB, Axis eAxisInPlaneA, Axis
eAxisInPlaneB,
double dPlaneOffset)
These methods create Joint objects. The joint object retains sufficient information to define the
constraints implementing any joint. Member data for the Joint object includes the following:
Joint Type (1): An enum that specifies the type of joint. CreateXXXJoint() method specifies the
enum stored.
Part Key (2): Specifies the symbols indicated as indices (Unique string) in the catalog part list and
are provided as output to Parts() method. These are the partKeyA and partKeyB arguments within
the CreateXXXJoint () method prototypes. The reference port index is -1.
Port Names (2): Specifies the output of the symbol to use when constructing the joint. These are
the PortNameA and PortNameB arguments within the CreateXXXJoint () method prototypes.
Plane(2): Specifies the joint type required to define a set of port geometries. For example, the
prismatic joint requires a plane and axis to be specified for each of the two participating ports.
Since the geometry associated with each port is limited (3 planes and 3 axes), the plane data has
to be specified in the Plane argument of CreateXXXJoint () method.
Axis(2): Specifies the joint type required to define a set of port geometries. For example, the
prismatic joint requires a plane and axis be specified for each of the two participating ports.
Because the geometry associated with each port is limited (3 planes and 3 axes), the Axis data
has to be specified in Axis argument of CreateXXXJoint () method.
Offsets (3): Specifies the joint types that permit the specification of offsets between their defining
geometries. For the most complex case, three offsets are allowed. Offsets are represented using
three doubles. These are the PlaneOffset, AxisOffset and OriginOffset arguments within the
CreateXXXJoint () method prototypes.

SupportedConnections Method
The SupportedConnections method of the CustomSupportDefinition class provides information
specifying those components of the assembly that physically connect to the supported input
objects. The method is defined as:
public override Collection<ConnectionInfo> SupportedConnections
{}
The method returns a collection of ConnectionInfo. The following example code shows a sample
implementation of this method for the structural support assembly shown in Figure 2.
public override Collection<ConnectionInfo> SupportedConnections
{

Hangers and Supports Reference Data Guide 72


Custom Support Definition (CSD)

get
{
try
{
//Create a collection to hold the ALL Route connection information
Collection<ConnectionInfo> routeConnections = new
Collection<ConnectionInfo>();
routeConnections.Add(new ConnectionInfo(PIPECLAMP, 1));
//partindex, routeindex
//Return the collection of Route connection information.
return routeConnections;
}
catch (Exception e)
{
Type myType = this.GetType();
CmnException e1 = new CmnException("Error in Get Route Connections."
+ myType.Assembly.FullName + "," + myType.Namespace + "." + myType.Name +
". Error:" + e.Message, e);
throw e1;
}
}
}

Figure 2: Trapeze Support with Associated Ports


In previous example, collections of six ConnectionInfo's are returned. These collections represent
the four assembly components physically touching three pipes, the cross bar, and three U-bolts.

Hangers and Supports Reference Data Guide 73


Custom Support Definition (CSD)

The first argument in ConnectionInfo is the partKey of the assembly part as referenced from the
list returned in the Parts() method.

SupportingConnections Method
The SupportingConnections method of CustomSupportDefinition class provides information
specifying the components of the assembly that physically connect to the supporting input objects.
The method is defined as shown below:
public override Collection<ConnectionInfo> SupportingConnections
{}
The method should return a collection of ConnectionInfo. The following example code shows a
sample implementation of this method for the structural support assembly shown in Figure 2.
public override Collection<ConnectionInfo> SupportingConnections
{
get
{
try
{
//Create a collection to hold ALL the Structure Connection
information
Collection<ConnectionInfo> structConnections = new
Collection<ConnectionInfo>();
structConnections.Add(new ConnectionInfo(WBA, 1));
//partindex, StructIndex
//Return the collection of Structure connection information.
return structConnections;
}
catch (Exception e)
{
Type myType = this.GetType();
CmnException e1 = new CmnException("Error in Get Struct Connections."
+ myType.Assembly.FullName + "," + myType.Namespace + "." + myType.Name +
". Error:" + e.Message, e);
throw e1;
}
}
}
The format of the returned collection of ConnectioInfo is identical to those returned in the
SupportedConnections method described earlier. For example, the two ConnectionInfo returned
in the earlier mentioned example correspond to the two parts physically touching the structural
inputs, the column clamp and the beam clamp.
See Also
Defining Assemblies (on page 39)

ConfigurationCount Method
The ConfigurationCount method of the CustomSupportDefinition class defines the number of
route toggle configurations that are supported by the assembly and is defined as follows:

Hangers and Supports Reference Data Guide 74


Custom Support Definition (CSD)

public override int ConfigurationCount


The method returns the number of configurations that are applicable for the assembly. The
following code provides a sample implementation of the ConfigurationCount method:
public override int ConfigurationCount
{
get
{
return 2;
}
}
ConfigureSupport() handles different toggles by checking the configuration value and altering
the joints accordingly for each toggle. For example, implementation in ConfigureSupport() would
be as follows:
if (Configuration ==1)
JointHelper.CreateRigidJoint(BOTROD, "RodEnd1", BOTEYENUT,
"RodEnd", Plane.XY, Plane.XY, Axis.X, Axis.X,0,0, 0);

else
JointHelper.CreateRigidJoint(BOTROD, "RodEnd1", BOTEYENUT,
"RodEnd", Plane.XY, Plane.XY, Axis.X, Axis.NegativeX,0,0, 0);

GetFacePositionInfo Method
The GetFacePositionInfo method of SupportingHelper provides access to FacePosition
information of the supporting port to which the support object is connected. This method takes
structure index as input and returns the following four outputs:
 CardinaPoint
 GroupKey
 Offset
 OffsetY
The FacePosition information is available in FacePositionSelection sheet of HS_System.xls
workbook. The following code shows a sample implementation of this method.
int lCardinalPnt;
int lGroupKey;
double Offset;
double OffsetY;
SupportingHelper.GetFacePositionInfo
(1,lCardinalPnt,lGroupKey,Offset,OffsetY);
For more information on the outputs returned by GetFacePositionInfo method, see Face Position
Selection Sheet (on page 93).

Hangers and Supports Reference Data Guide 75


SECTION 9

Advanced Programming Concepts for


Supports
This section covers some advanced programming concepts for supports using Custom Support
Definition (CSD).

What do you want to do?


 Add a Note to Key Points using CSD (on page 76)
 Add a Dimension Port using CreateNote Function in CSD (on page 78)
 Add control point using CreateNote function in CSD (on page 80)
 Delete an existing note on a support using CSD (on page 81)
 Raising Warnings and Errors from Symbols and Assemblies (on page 81)
 Support Selection Rules (on page 84)
 Converting Supports for Place by Reference (on page 88)

Add a Note to Key Points using CSD


1. For this example, notes (with Show dimension checked) are added to the key points using
CSD, so that the horizontal and vertical dimensions can be obtained as shown below.

Hangers and Supports Reference Data Guide 76


Advanced Programming Concepts for Supports

2. Open Assy_FR_IT_LS.cs in the PipeHgrAssemblies.csproj in [Product Folder]\3D\


Programming\ExampleCode\HangersAndSupports\Rules\CustomSupportDefinition\Pipe\Pip
eHgrAssemblies folder.
3. In the ConfigureSupport method, add the following code to set the note on the available key
points to obtain the needed dimensions.
Dictionary<string, SupportComponent> componentDictionary =
SupportHelper.SupportComponentDictionary;

Note note1 = CreateNote("Dim1", componentDictionary[HOR_SECTION],


"BeginCap");
note1.SetPropertyValue("", "IJGeneralNote", "Text");
CodelistItem codeList1 = note1.GetPropertyValue("IJGeneralNote",
"Purpose").PropertyInfo.CodeListInfo.GetCodelistItem(3);
note1.SetPropertyValue(codeList1, "IJGeneralNote", "Purpose");
note1.SetPropertyValue(true, "IJGeneralNote", "Dimensioned");

Note note2 = CreateNote("Dim2", componentDictionary[HOR_SECTION],


"EndCap");
note2.SetPropertyValue("", "IJGeneralNote", "Text");
CodelistItem codeList2 = note2.GetPropertyValue("IJGeneralNote",
"Purpose").PropertyInfo.CodeListInfo.GetCodelistItem(3);
note2.SetPropertyValue(codeList2, "IJGeneralNote", "Purpose");
note2.SetPropertyValue(true, "IJGeneralNote", "Dimensioned");

Note note3 = CreateNote("Dim3", componentDictionary[VERT_SECTION],


"BeginCap");
note3.SetPropertyValue("", "IJGeneralNote", "Text");
CodelistItem codeList3 = note3.GetPropertyValue("IJGeneralNote",
"Purpose").PropertyInfo.CodeListInfo.GetCodelistItem(3);
note3.SetPropertyValue(codeList3, "IJGeneralNote", "Purpose");
note3.SetPropertyValue(true, "IJGeneralNote", "Dimensioned");
4. Compile the dll and place it in the [Product
Folder]\3DRefData\SharedContent\Bin\HangersAndSupports\Rules\Release folder.
5. Place the support in the Hangers and Supports task by selecting Assy_FR_IT_LS as the
value for Type, and create the drawings. The dimensions are displayed between the key
points, and the notes are added.

Hangers and Supports Reference Data Guide 77


Advanced Programming Concepts for Supports

Add a Dimension Port using CreateNote Function in


CSD
Objects that are added using OSD can be converted to Dimension Ports by setting the
Dimensioned property on Note to True. When the dimension port is added, the dimensions are
displayed in the isometric drawings. In the following example, add the dimension ports in the CSD
to obtain the horizontal and vertical dimensions as shown below:
Every dimension requires two dimension ports.

1. Open Assy_RR_DR_LS.cls in the PipeHgrAssemblies.csproj available in the following


folder
[Product Folder]\3D\
Programming\ExampleCode\HangersAndSupports\Rules\CustomSupportDefinition\Pipe\Pip
eHgrAssemblies
2. Define the required dimension ports as global variable in the class file.
private string[] Dimensionkeys = new string[5];
3. Add the following code to retrieve dimensional data from the assembly part definition in the
Parts method
CatalogBaseHelper catalogBaseHelper = new CatalogBaseHelper();
PartClass hsDimensionPortPartClass =
(PartClass)catalogBaseHelper.GetPartClass("HSDimensionPort");

ReadOnlyCollection<BusinessObject> Parts =
hsDimensionPortPartClass.Parts;

Hangers and Supports Reference Data Guide 78


Advanced Programming Concepts for Supports

if (Parts.Count > 0)
isDimensionPort = true;
4. Add the following code to specify the part class constituting the assembly:
if (isDimensionPort == true)
{
for (index = 1; index <= 5; index++)
{
Dimensionkeys[index - 1] = "DimensionPort" + index.ToString();
parts.Add(new PartInfo(Dimensionkeys[index - 1],
"HSDimensionPort" + "_1"));
}
}
5. Add the following code to place the dimension ports in the required location and obtain the
dimensions in the ConfigureSupport method:
JointHelper.CreateRigidJoint(HOR_SECTION, "BeginCap",
Dimensionkeys[0], "Dimension", Plane.XY, Plane.XY, Axis.X, Axis.X, 0,
0, 0);//9444
JointHelper.CreateRigidJoint(Dimensionkeys[1], "Dimension",
Dimensionkeys[0], "Dimension", Plane.XY, Plane.XY, Axis.X, Axis.X,
-overhang, 0, 0);//9444
if (SupportHelper.PlacementType == PlacementType.PlaceByStruct)
JointHelper.CreateRigidJoint(Dimensionkeys[0], "Dimension",
Dimensionkeys[2], "Dimension", Plane.XY, Plane.XY, Axis.X, Axis.X, W1
+ W2 + overhang + overhang, 0, 0);
else
JointHelper.CreateRigidJoint(Dimensionkeys[0], "Dimension",
Dimensionkeys[2], "Dimension", Plane.XY, Plane.XY, Axis.X, Axis.X,
lengthHor1 + lengthHor2 + overhang + overhang, 0, 0);

JointHelper.CreateRigidJoint(Dimensionkeys[3], "Dimension",
Dimensionkeys[0], "Dimension", Plane.XY, Plane.XY, Axis.X, Axis.X, 0,
lengthVert1, 0);

JointHelper.CreateRigidJoint(Dimensionkeys[0], "Dimension",
Dimensionkeys[4], "Dimension", Plane.XY, Plane.XY, Axis.X, Axis.X, 0,
-lengthVert2, 0);
6. Add the following code to set the note on the support dimension ports.
CodelistItem fabrication;
string[] noteName = new string[] { "L_Start", "L_Mid", "L_End", "L_1",
"L_2" };

for (index = 0; index < 5; index++)


{
Note noteLStart = CreateNote(noteName[index],
componentDictionary[Dimensionkeys[index]], "Dimension");
noteLStart.SetPropertyValue(noteName[index], "IJGeneralNote",
"Text");
fabrication = noteLStart.GetPropertyValue("IJGeneralNote",
"Purpose").PropertyInfo.CodeListInfo.GetCodelistItem(3);

Hangers and Supports Reference Data Guide 79


Advanced Programming Concepts for Supports

noteLStart.SetPropertyValue(fabrication, "IJGeneralNote",
"Purpose"); //value 3 means fabrication
noteLStart.SetPropertyValue(true, "IJGeneralNote", "Dimensioned");
}
7. Compile the PipeHgrAssemblies.dll and place it in the following folder:
[Product Folder]\3DRefData\SharedContent\Bin\HangersAndSupports\Rules\Release
8. Place the support in the Hangers and Supports task by selecting Assy_RR_DR_LS as the
value for Type box.
The nodes are added and the dimensions are displayed between the dimension ports.

Add control point using CreateNote function in CSD


A control point indicates a specific location on a component. You can associate a note text with the
control point and is displayed in the support drawings. You can convert a control point to a
dimension point by setting the Dimensioned property to True. Use the following example to add
the control ports in the CSD:
1. Add the control point to the top of the vertical section to obtain the length of the vertical
section.

2. Open Assy_FR_IT_LS.cs in the PipeHgrAssemblies.csproj in [Product Folder]\3D\


Programming\ExampleCode\HangersAndSupports\Rules\CustomSupportDefinition\Pipe\Pip
eHgrAssemblies folder.
3. In the ConfigureSupport method, add the following code to place the control point at the top
of the vertical section, to get the dimensions.

Hangers and Supports Reference Data Guide 80


Advanced Programming Concepts for Supports

Note note4 = CreateNote("Dim4", componentDictionary[VERT_SECTION],


"EndCap");

Note4.SetPropertyValue("Fourth Dimension", "IJGeneralNote",


"Text");

CodelistItem codeList4 = note4.GetPropertyValue("IJGeneralNote",


"Purpose").PropertyInfo.CodeListInfo.GetCodelistItem(4);

Note4.SetPropertyValue(codeList4, "IJGeneralNote", "Purpose");


Note4.SetPropertyValue(true, "IJGeneralNote", "Dimensioned");
4. Compile the PipeHgrAssemblies.dll and place it in the [Product
Folder]\3DRefData\SharedContent\Bin\HangersAndSupports\Rules\Release folder.
5. Place the support in the Hangers and Supports task by selecting Assy_FR_IT_LS as the
value for Type box. Dimensions are displayed between the control point and the dimension
ports.

Delete an existing note on a support using CSD


The DeleteNoteIfExists method on the CustomSupportDefinition (CSD) class deletes an existing
note on a support. This method takes the note name as an input argument. This method is used in
AIR to delete the required notes if the ExcludeNotes option on the support is set to TRUE.
For example,
//Get the ExcludeNotes Property from DataBase.
bool excludeNote;
if (support.SupportsInterface("IJUAhsExcludeNotes"))
excludeNote =
(bool)((PropertyValueBoolean)support.GetPropertyValue("IJUAhsExclude
Notes", "ExcludeNotes")).PropValue;
else
excludeNote = false;
//Create Note if ExcludeNotes is False and Delete note if ExcludeNotes is True
if (excludeNote == false)
note = CreateNote("Elevation Callout", HOR_SECTION,
horSecPort, new Position(0.0, 0.0, 0.0), "EL", false, 2, 51, out
controlPoint);
else
DeleteNoteIfExists("Elevation Callout");
//DeleteNoteIfExists deletes the note if it is already created.

Raising Warnings and Errors from Symbols and


Assemblies
In order to display a message box during placement of a support or part, you must not use the
C#.NET MessageBox function. Instead, use the ToDoMessageTypes() constructor.

Hangers and Supports Reference Data Guide 81


Advanced Programming Concepts for Supports

The ToDoMessageTypes() constructor can be used from Custom Support Definition C# .NET
code and from Symbols C# .NET code of Hangers and Supports content.
The following methods in CSD can use the ToDoMessageTypes() function:
 Parts
 ConfigureSupport
 SupportedConnection
 SupportingConnection
 BOMDescription
The following symbol methods can use the ToDoMessageTypes() function:
 BOMDescription
 EvaluateWeightCG
 ConstructOutputs

Functional Behavior of ToDoMessageTypes()


Signature:
public
ToDoListMessage(Ingr.SP3D.Common.Middle.Services.ToDoMessageTypes type,
string moduleName, int number, string text)
Parameters:
type: The type of the To Do List message. This could be either ToDoMessageError or
ToDoMessageWarning.
moduleName: Name of the message module.
number: Message ID inside this message module. This could be the unique identifier in the
resource file.
text: The text of the To Do List message. This could be localized message text from a resource
file.
Calling ToDoMessageTypes() from Symbol Code
During placement or modification of Hanger Components (with the Hangers and Supports client
command) hanger symbols can call ToDoMessageTypes() to raise errors or warnings. If there
are warnings raised by ToDoMessageTypes(), all warning messages should be concatenated
before committing the component and displaying a message box. If there is any error raised by
ToDoMessageTypes(), the error is be displayed by a message box and placement aborted.

Hangers and Supports Reference Data Guide 82


Advanced Programming Concepts for Supports

Computing the Support components (design support) from outside Hangers and Supports
environment
The behavior of re-computing the symbol is dependent on what function the
ToDoMessageTypes() calls. If the methods of the Symbol (that is ConstructOutputs(),
BOMDescription()) raises warnings, then it runs successfully with no log information. If there is
an error raised, the computation fails and the symbol occurrence is added to the To Do List.

Calling ToDoMessageTypes() from CSD


You can call this function from Hanger Rules (CSD methods) to raise an error or warning.
Similarly, any rule ProgID that implements EvaluateWeightCG or BOMDescription methods can
also call ToDoMessageTypes() to raise errors and warnings.
If the BOM or WCG methods raise warnings, no information is logged and the computation runs
successfully. If there are any errors, the Support is added to the To Do List.
Behavior While Placing the Standard Supports Interactively
While placing assemblies, ToDoMessageTypes() calls can be expected from the CSD as well as
Support Component Symbols. During the interactive placement of an assembly, if there are
warnings raised by ToDoMessageTypes() all warning messages must be concatenated and
displayed by a message box before committing the assembly. If there is an error raised by
ToDoMessageTypes(), the error displays a message box and placement is aborted.
Computation of the Standard Supports from Outside Hanger Environment
 If the error is raised by ToDoMessageTypes(), the information is logged to the error log and
the support is added to the To Do List. If there any warnings from the ToDoMessageTypes(),
they are ignored and no log information is generated.
 If the methods on the Symbol of the support component (belonging to a standard support)
symbol raises an error, the support is added to the To Do List. If warnings are raised, they are
ignored.
 If the BOM or WCG methods raise warnings, no log information is generated and the
computation runs successfully. If there are any errors, the support component is added to the
To Do List.
Placement of the New Symbol Occurrences
If any error or warning is raised from the symbol during placement of the symbol, then the part
occurrence is not created and the placement is aborted.
If the symbol is computed successfully during placement with one set of units, but receives invalid
input from the property page, a To Do List entry is added for the support component and the
symbol occurrence is placed with the last set of successful computed values.
During Modification of the Placed Occurrences
Setting an invalid attribute on the occurrence for a symbol that raises an error or warning results in
a To Do List entry for the support component.
During Synchronization
The placed symbol occurrence source code is modified such that in the re-computation the
symbol raises an error or warning. Running the synchronization by increasing the version number
creates a warning To Do List entry if the symbol raises a warning. If the symbol raises an error
during synchronization, the graphics for the occurrence are cleared and an error To Do List entry
is created.

Hangers and Supports Reference Data Guide 83


Advanced Programming Concepts for Supports

Support Selection Rules


The Support Selection Rule (SSR) helps you place appropriate supports in a model by providing a
sorted list of possible supports in the Type box. You must check the Rule box on the ribbon to
enable this command.
For example, you can define the sort order in IJUAHgrRulePriority ::Rule Priority of the
Assy_RR_DR_LS page of the HS_Assembly.xls spreadsheet. If you do not specify a sort order,
then the list of assemblies is sorted alphabetically based on PartDescription.

Creating an Assembly
You create an assembly from a feature (pipe, HVAC duct, or cable tray) and a structure in the
model. Then, the software compares the support properties stored in the catalog with your
assembly and returns a set of appropriate supports in the Type box on the ribbon.

See Also
Determining Which SSR is Used (on page 85)
Delivered Support Selection Rules (on page 86)

Hangers and Supports Reference Data Guide 84


Advanced Programming Concepts for Supports

Determining Which SSR is used


The Support Selection Rule (SSR) that the software uses to select the list of appropriate supports
is determined by the HgrDisciplineFilter worksheet, from HS_System.xls. The filter relates the
interfaces, on which you are attempting to place a support, to the SSR to be used for those
interfaces. For example, if you place a support on a straight pipe feature, then the SSR is
SupportSelRule,Ingr.SP3D.Support.Content.Rules.StandardSupportSelRule.

The HgrDisciplineFilter sheet also determines the valid DisciplineType. In the case above,
DisciplineType is set to 1 (Piping Supports Discipline). Therefore, the SSR can use this discipline
type to filter out supports that are not meant to be placed on pipe and return only supports with a
DisciplineType of 1.

Hangers and Supports Reference Data Guide 85


Advanced Programming Concepts for Supports

The DisciplineType for a given support is set on the support's Excel spreadsheet using the
DisciplineType attribute.

The DisciplineType attribute is a codelist defined in the AllCodelist.xls workbook. The codelist
has several valid values, as shown below.

Only supports whose DisciplineType matches the DisciplineType determined by the


HgrDisciplineFilter worksheet are eligible for use.
See Also
Support Selection Rules (on page 84)
Delivered Support Selection Rules (on page 86)

Delivered Support Selection Rules


Delivered SSRs
The following Support Selection Rules are delivered with the product:
 StandardSupportSelRule
 DesignSupportSelRule

Hangers and Supports Reference Data Guide 86


Advanced Programming Concepts for Supports

Worksheet Column Headings


The following column headings can be found in an assembly, Assy_xxx, worksheet. The
information provided is used by the various Support Selection Rules to determine whether
supports should be returned.

Worksheet Column Definitions


CommandType - The code that specifies which Hangers and Supports task command can use
the assembly. Valid codes are listed on the HngSupCommand worksheet in the
AllCodeLists.xls workbook in the column, Codelist Number. The SSR only returns supports that
use By Structure or By Point.

DisciplineType - The code that represents the type of object that the assembly can support. Valid
codes are listed on the HngSupDiscipline worksheet in the AllCodeLists.xls workbook in the
Codelist Number column. For example, if the support is to be placed on pipe, only those supports
whose discipline type is 1 (Piping) is returned by the SSR.
TypeSelectionRule - The code that specifies the location of the supporting structure with respect
to the route being supported. Valid codes are listed on the HngSupTypeSelectionRule
worksheet in the AllCodeLists.xls workbook in the Codelist Number column. For example, this
attribute can be used to ensure that the support is only returned by the SSR if the route is below
the supporting structure.

Hangers and Supports Reference Data Guide 87


Advanced Programming Concepts for Supports

MinAssemblyLength / MaxAssemblyLength - The minimum and maximum length from the


supporting structure to the route. Include the units of measure when specifying this value (for
example, 1500 mm). A support is returned by the SSR if the distance from the supporting structure
to the first selected route is within this limit.
SupportingCount - The maximum number of supporting objects (for example, beams) to which
the assembly can be attached. Type 1+ to indicate that the support can be attached to a variable
number of supported objects. A support with SupportingCount=1 is not returned by the SSR if
you select two structures.
SupportedCount - The maximum number of supported objects (for example, pipes) to which the
assembly can be attached. Type 1+ to indicate that the support can be attached to a variable
number of supported objects. A support with SupportedCount = 1 is not returned by the SSR if
you select multiple pipes.
NDFrom / NDTo - The minimum and maximum nominal diameter for the supported object. This
option is only used for conduit and pipe assemblies. A support is only be returned by the SSR if the
pipe nominal diameter is within the limits set.
NominalWidthFrom / NominalWidthTo - The minimum and maximum width of the supported
object for the assembly. Include the units of measurement (in or mm, for example) when
specifying this value. This value is used for rectangular supported objects such as ducts.
NominalDepthFrom / NominalDepthTo - The minimum and maximum depth of the supported
object for the assembly. Include the units of measurement (in or mm, for example) when
specifying this value. Type 0 if the supported object is circular.
SupportedFamily - The type of supported object. Valid types are STRAIGHT, TURN, END,
ALONG, BRANCH, ENTRYEXIT, SEGMENT, SURFACE, TRANSITION, and PART. Using END
and PART allow you to place hangers on in-line components. PART defines objects such as
valves, flanges, and tees. END defines end features (for example, reducers). Supports with
SupportedFamily = TURN is only returned by the SSR if the support is placed on a turn.
RulePriority - Defines the sort order of a list of assemblies from the Type box. You can assign a
numerical value randomly in this column. Assemblies are sorted in an ascending order based on
RulePriority value. If two or more assemblies are assigned the same RulePriority value, then the
assemblies with the same value are sorted alphabetically.
See Also
Determining Which SSR is Used (on page 85)

Converting Supports for Place by Reference


To place a support without selecting any supporting object, use the Place by Reference
command. To support the Place by Reference command, you need to modify some of the
methods of the CustomSupportDefinition class, and the CommandType property in the
assembly part class .xls file.
See Also
CSD Changes to Enable Place by Reference (on page 89)
SSR Changes to Enable Place by Reference (on page 90)

Hangers and Supports Reference Data Guide 88


Advanced Programming Concepts for Supports

CSD Changes to Enable Place by Reference


Changes to Methods of the CustomSupportDefinition class
To place a support using the Place by Reference command, you need to modify some of the
methods of CustomSupportDefinition.
Parts - No changes required in this method.
ConfigurationCount - No changes required in this method.
SupportedConnections - No changes required in this method.
SupportingConnections - Changes to this method:
//Check to see if this is the Place by Ref cmd
int numStruct = 0;
if (SupportHelper.PlacementType == PlacementType.PlaceByReference)
numStruct = 1;
else
numStruct = SupportHelper.SupportedObjects.Count;
ConfigureSupport - When you retrieve FlangeThickness from structure, for instance, if you are
using Place by Reference command, you must assign a valid default value for FlangeThickness.
//Code to get the Command type
if (SupportHelper.PlacementType == PlacementType.PlaceByReference)
connection = "Slab";
else
{
//Code for Place By Point” or “Place by Struct” command
}
//Code to set the flangeThickness value in ConfigureSupport
double flangeThickness = 0.0;
if (SupportHelper.PlacementType == PlacementType.PlaceByReference)
flangeThickness = 0;
else
flangeThickness =
SupportingHelper.SupportingObjectInfo(1).FlangeThickness;

Reference Ports
Following are the reference ports available for the Place by Reference command:
 Route
 Struct
 RouteAlt
 World
 BBR_Low
 BBR_High
 Tangent_BBR_Low

Hangers and Supports Reference Data Guide 89


Advanced Programming Concepts for Supports

 Tangent_BBR_High
 Tangent_Alt_BBR_Low
 Tangent_Alt_BBR_High
 BBRV_Low
 BBRV_High
 GBBR_Z_Low
 GBBR_Z_High
 GBBR_X_Low
 GBBR_Z_High
Following are the reference ports that are not available for Place by Reference command:
 BBSR_Low
 BBSR_High
 BBSV_Low
 BBSV_High
 StructAlt

SSR Changes to Enable Place by Reference


Modify the command type of your assemblies depending upon the codelist value given below:

For example,

Hangers and Supports Reference Data Guide 90


SECTION 10

Lookup Tables
Lookup tables are used by the software to place supports in the model. The lookup tables are in
the HS_System.xls workbook.
See Also
Face Position Selection Sheet (on page 93)
Face Selection Sheet (on page 91)
Hgr Rules Sheet (on page 93)
SupportJoints Sheet (on page 94)

Face Selection Sheet


The Face Selection sheet in the HS_System.xls workbook defines the faces of a structural
member to which a part can attach itself.
Face Name - Type a unique name for the face selection option. This name must be unique across
the entire catalog.
Description - Type a description for the face selection option.
Cross Section - Type the cross section shape to which the face selection option applies. For
example, W or L.
Selection Key - Type a code to link this face selection option to parts. All face selection options
with the same selection key code, 1 for example, is made available to the part that has this code
defined. The default key is 1000.
Face 1 - Type the member face with the highest priority. This face is default when the assembly is
placed.
Group 1 - Type the group key code. Valid codes are listed on the Face Position Selection sheet
in the Group Key column. For more information about this code, see Face Position Selection
Sheet (on page 93).
Face 2 - Type the member face with the next highest priority. This face is the second choice when
the assembly is placed. Type 0 if you do not want to define another choice.
Group 2 - Type the group key code. Valid codes are listed on the Face Position Selection sheet
in the Group Key column.
Face 3 - Type the member face with the second highest priority. This face is the third choice when
the assembly is placed. Type 0 if you do not want to define another choice.
Group 3 - Type the group key code. Valid codes are listed on the Face Position Selection sheet
in the Group Key column.
Face 4 - Type the member face with the third highest priority. This face is the fourth choice when
the assembly is placed. Type 0 if you do not want to define another choice.
Group 4 - Type the group key code. Valid codes are listed on the Face Position Selection sheet
in the Group Key column.

Hangers and Supports Reference Data Guide 91


Lookup Tables

Face 5 - Type the member face with the lowest priority. This face is the last choice when the
assembly is placed. Type 0 if you do not want to define another choice.
Group 5 - Type the group key code. Valid codes are listed on the Face Position Selection sheet
in the Group Key column.

Available Face Numbers


These figures show the available face numbers for common section shapes that you can type in
the Face 1-5 boxes.

See Also
Lookup Tables (on page 91)

Hangers and Supports Reference Data Guide 92


Lookup Tables

Face Position Selection Sheet


The Face Position Selection sheet in the HS_System.xls workbook defines the position on a
face of a structure member where the part can locate itself. An example of when to use this sheet
would be a U-bolt connected to the bottom of an I-shaped member. You would want the U-bolt to
be placed on the out edges of the bottom flange so that the U-bolt did not interfere with the web of
the member.
Point Sel Name - Type a unique name for the face position selection option. This name must be
unique across the entire catalog.
Description - Type a description for the face position selection option.
Group Key - Type the group key for the face position selection option. This key is used to group
face positions selection options together from which you can select one of the face positions. This
group key is also entered on the Face Selection sheet in the Group 1-5 columns.
Cardinal Point - Type the member cardinal point from which to base the face position. There are
15 cardinal positions available. The location of cardinal points 10 (center-of- gravity) and 15 (shear
center) depend on the section shape. The local z-axis of the member and the center-of-gravity
point of the section define cardinal points 11 and 14. The local y- axis of the member and the
center-of-gravity point of the section define cardinal points 12 and 13.

Offset - Type the offset rule to use for the face position selection option (X-direction). The offset is
measured from the cardinal point that you specified. Offset and OffsetY do not require a defined
ProgID. The column can contain a numeric value.
OffSetY - Type the offset rule to use for the Y-direction (perpendicular to face). Offset and OffsetY
do not require a defined ProgID. The column can contain a numeric value.
See Also
Lookup Tables (on page 91)

Hgr Rules Sheet


The Hgr Rules sheet in the HS_System.xls workbook is a lookup table for rules.
Rule Name - Type a unique name for the rule. This name must be unique across the entire
catalog.
Rule Description - Type a description for the rule.
Rule Type - Type the code for the rule type. Valid codes are listed on the HngSupRuleType
sheet in the AllCodeLists.xls workbook in the Codelist Number column.
Rule Value - Type a value for the rule. For example, if you entered 5 in the Rule Type column,
you type the program ID in this column.

Hangers and Supports Reference Data Guide 93


Lookup Tables

See Also
Lookup Tables (on page 91)

SupportJoints Sheet
The SupportJoints sheet in the HS_System.xls workbook defines the joints that you can use to
connect two parts. The sheet is used when you are defining supports by adding parts using the
Place Part command.
Joint Key - Specifies the name of the joint key. This name must be unique within the column.
Mating Type 1 - Type the first mating type code for the joint. Valid codes are listed on the
HngSupPortType sheet in the AllCodeLists.xls workbook in the Codelist Number column.
Mating Type 2 - Type the second mating type code for the joint. Valid codes are listed on the
HngSupPortType sheet in the AllCodeLists.xls workbook in the Codelist Number column.
Mating Option - Specifies the mating option. This value is not currently used in the software.
Command Type - Type the code that specifies which Hangers and Supports task command can
use the mating type combination. Valid codes are listed on the HngSupCommand sheet in the
AllCodeLists.xls workbook in the Codelist Number column. This value is not currently used in
the software.
Joint Type - Specifies the joint type by the joint code. Valid codes are listed on the
HngSupJointType sheet in the AllCodeLists.xls workbook in the Codelist Number column. For
more information about joints, see Joints (on page 58). This value is not currently used in the
software.
A short description of each joint type is listed below:

Code Joint Description

1 Revolute Objects can spin about the provided axis but


do not translate.

2 Planar Objects are free to rotate and translate while


provided planes remain flush.

3 Translation Objects can translate but not rotate while


provided planes remain flush.

4 Prismatic Objects can slide along provided axis but


cannot rotate about the axis.

5 Rigid Objects are rigidly fixed relative to each other.

6 Spherical Object origins remain connected while objects


are free to spin.

7 Cylindrical Objects are free to spin about and translate


along provided axis.

Hangers and Supports Reference Data Guide 94


Lookup Tables

Code Joint Description

8 Planar Slot While provided planes remain flush, objects


can rotate about their normal and slide along
the axis.

9 Vertical Object axis is made parallel to vertical axis,


and the plane is forced to contain the vertical
axis.

10 Horizontal X Object becomes coincident with or lies in the


horizontal plane.

11 Horizontal Y Object becomes coincident with or lies in the


horizontal plane.

12 Point On Objects can rotate as long as the origin


remains on geometry 2. When using the
Configuration Index Calculator, Geometry
Type A refers to Input Geometry 2.

Configuration Index - Type the configuration index number to use for the joint. This value is
currently not used in the software.
Offset 1 - Specifies the plane offset between the parts at the joint. This value is not currently used
in the software.
Offset 2 - Specifies the axis offset between the parts at the joint. This value is not currently used in
the software.
Offset 3 - Specifies the origin offset between the parts at the joint. This value is not currently used
in the software.
See Also
Lookup Tables (on page 91)
Joints (on page 58)

HgrRefSupportingFilter Sheet
The HgrRefSupportingFilter sheet in the HS_System.xls workbook is a lookup table for
selecting the supporting object filter.
Filter Name - Type a unique name for the supporting filter. This name must be unique across the
entire catalog.
Description - Type a description for the filter.
Connectable Type - Type the code that specifies if the supporting or supported filter is used to
find out the port information for the supporting objects. Valid codes are listed on the
HngSupConnectObj sheet in the AllCodeLists.xls workbook in the Codelist Number column.
Discipline Type - Type the code that represents the type of object that can be supported. Valid
codes are listed on the HngSupDiscipline sheet in the AllCodeLists.xls workbook in the
Codelist Number column.

Hangers and Supports Reference Data Guide 95


Lookup Tables

Command Type - Type the code that specifies which Hangers and Supports task command can
use the filter. Valid codes are listed on the HngSupCommand sheet in the AllCodeLists.xls
workbook in the Codelist Number column.
Defining Interface - Specifies the interface that the filter is to use.
Port Service - Specifies the port service that the software is to use to locate the reference port on
the supporting object.
See Also
Lookup Tables (on page 91)

HgrDisciplineFilter Sheet
The HgrDisciplineFilter sheet in the HS_System.xls workbook is a lookup table for selecting the
supported object filter.
Filter Name - Type a unique name for the supported filter. This name must be unique across the
entire catalog.
Description - Type a description for the filter.
Symbol Definition - Not used.
Discipline Type - Type the code that represents the type of object that can be supported. Valid
codes are listed on the HngSupDiscipline sheet in the AllCodeLists.xls workbook in the
Codelist Number column.
Defining Interface - Specifies the interface that the filter is to use.
Port Service - Specifies the port service that the software is to use to locate the reference port on
the supporting object.
SSR - Specifies the support selection rule to use when the Rule option on the ribbon is active.
Support Prog ID - Specifies the support services software.
Assembly Path - Defines the path in the catalog to the assembly definitions.
Parts Path - Defines the path in the catalog to the hanger and support parts.
See Also
Lookup Tables (on page 91)

Hangers and Supports Reference Data Guide 96


Index
Define Aspects • 34
2 Define Inputs • 33
Define Outputs • 34
2D Symbols • 8 Defining Assemblies • 39
Defining Hanger and Support Part Ports • 29
3 Defining Parts • 24
3D Symbols • 8 Delete an existing note on a support using
CSD • 81
Delete references to symbol flavors and
A deleted objects in the database • 13
Add a Dimension Port using CreateNote Delivered Support Selection Rules • 86
Function in CSD • 78 Determining Which SSR is used • 85
Add a Note to Key Points using CSD • 76 Diagnostic Supports • 51
Add a Preview Graphic to Parts using
Bulkload • 10
Add control point using CreateNote function
E
in CSD • 80 Edit Symbol Occurrence • 17
Advanced Programming Concepts for Example Code for Custom Bounding Box
Supports • 76 API • 56
Assemblies and Parts • 20
F
B Face Position Selection Sheet • 93
Bill Of Material (BOM) Description • 37 Face Selection Sheet • 91
Bounding Box Planes • 52
Bounding Box Planes Containing Route and G
Structure • 55 GetFacePositionInfo Method • 75
Bounding Boxes • 45 Guidelines for Modifying a Symbol • 12

C H
Changing the Support Discipline • 61 Hangers and Supports Programming
ConfigurationCount Method • 74 Concepts • 20
ConfigureSupport Method • 70 Hgr Rules Sheet • 93
Constraints • 57 HgrDisciplineFilter Sheet • 96
Construct Outputs • 35 HgrRefSupportingFilter Sheet • 95
Converting Supports for Place by Reference
• 88
CSD Changes to Enable Place by I
Reference • 89 Insulation Option • 53
Custom Bounding Boxes • 48
Custom Support Definition (CSD) • 67 J
Custom Support Definition (CSD) Examples
• 67 Joints • 58
Custom Symbol Definition • 33
Custom Weight and CG (Optional) • 38 L
Lookup Tables • 91
D
Debugging Symbols with .NET • 14

Hangers and Supports Reference Data Guide 97


Index

M
Mirror Bounding Boxes • 54

P
Part Ports • 27
Part Selection Rules • 31
Parts Method • 68
Port Compatibility and Size Checking • 30
Preface • 6
Programming Notes • 12
Providing a Graphical Preview • 9

R
Raising Warnings and Errors from Symbols
and Assemblies • 81
Reference Ports • 22

S
Sources of Errors • 18
SSR Changes to Enable Place by Reference
• 90
Standard Bounding Boxes • 45
Support Selection Rules • 84
SupportedConnections Method • 72
SupportingConnections Method • 74
SupportJoints Sheet • 94
Supports and Local Coordinate System
(LCS) • 42
Symbols • 7

T
Testing Symbols • 16
Troubleshooting Symbols • 14

U
Update Symbol • 16

W
What's New in Hangers and Supports
Reference Data • 6

Hangers and Supports Reference Data Guide 98

Vous aimerez peut-être aussi