Beruflich Dokumente
Kultur Dokumente
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.
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.
Symbols ........................................................................................................................................................ 7
2D Symbols ............................................................................................................................................. 8
3D Symbols ............................................................................................................................................. 8
Providing a Graphical Preview ................................................................................................................ 9
Add a Preview Graphic to Parts using Bulkload ............................................................................. 10
Index ........................................................................................................................................................... 97
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).
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.
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.
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.
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)
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.
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)
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.
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.
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.
Setup
Add the following folders to your PATH environment variable:
C:\Program Files\Smart3D\Core\Runtime
C:\Program Files\Smart3D\GeometryTopology\Runtime
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.
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.
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.
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.
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.
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)
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.
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)
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.
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.
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.
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
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)
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
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.
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.
//---------------------------------------------------------------------
-
public class PartByPipeSizeEqual : SupportPartSelectionRule
{
return selectedPart;
}
// 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]
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)]
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
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;
m_Symbolic.Outputs["StrcuturePort"] = port1;
#endregion
m_Symbolic.Outputs["Body"] = body;
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;
}
}
}
{
// 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
return bomString;
}
catch (Exception ex)
{
throw ex;
}
}
}
{
// Declare inputs
}
catch
{ }
}
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.
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
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)
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
example, if you set the Orientation to Looking North, that view always looks at the end of the
route object.
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.
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.
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:
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.
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).
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
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.
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.
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.
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.
If false, the bounding box is located such that the reference port of the primary structure is on the
plane of the bounding box.
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.
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.
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
Joint or Coupling
Type Input Geometry Associated Translational Rotational Description
Offset DOF DOF
See Also
Part Ports (on page 27)
Reference Ports (on page 22)
Constraints (on page 57)
SupportJoints Sheet (on page 94)
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.
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:
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.
5. Fix the code issues that occur due to changes in the support discipline.
R-Hierarchy Sheet
R-ClassNodeDescribes Sheet
.. 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;
SECTION 8
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";
}
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;
}
}
}
}
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
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
{
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;
}
}
}
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:
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).
ReadOnlyCollection<BusinessObject> Parts =
hsDimensionPortPartClass.Parts;
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" };
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.
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
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.
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)
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.
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.
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.
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
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
For example,
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 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.
See Also
Lookup Tables (on page 91)
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)
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:
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.
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)
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
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