Automatic Creation of Tabbed Opening with Required Parameters Using a Business Rule
You can define a business rule in data setup to define the tabbed opening parameters. During Update IPM, this rule is run and based on the output of the business rule defined by you, the tabbed openings automatically create.
Define the below parameters of the tabbed opening as per requirements:
- Number of Tabs
- Tab width
- Tab Length
- Burn Direction (Clockwise/Anti-Clockwise)
- Lead In Lead Out geometry type (Line/Arc)
- Lead In Lead Out Lengths (For Line type geometry)
- Lead In Lead Out Radius (For arc type geometry)
- Lead In Lead Out Angle

You can define the output parameters as per required requirements in the business rule:
- LeadInGeometryType - The geometry type of the LeadI in (Line/Arc).
- LeadOutGeometryType - The geometry type of the Lead Out (Line/Arc).
- NoOfTabs - Minimum number of tabs
- TabWidth - Tab width.
- TabLength - Maximum Length of tab.
- LeadInLegth - Length of Lead In for Line type geometry.
- LeadOutLength - Length of Lead Out for Line type geometry.
- LeadInRadius - Radius of Lead In for Arc type geometry.
- LeadOutRadius - Radius of Lead Out for Arc’ type geometry.
- LeadInAngle - Angle of Lead In.
- LeadOutAngle - Angle of Lead Out.
- BurnDirection - Direction of burn curve (0 for counterclockwise and 1 for clockwise).
Here is an example business rule for the tabbed opening.
let Process(ElementaryEndItem)
let SDD_Opening(SddOpening)
set Process = Parameters.GetAttributeObject("ProcessItem")
set SDD_Opening = Parameters.GetAttributeObject("SddOpening")
Let ProcessOutput(VPMReference)
Let SDDObject(VPMReference)
Let SDD_ProdMember(Structure_Member)
Let SDD_ProdStiffener(Structure_Stiffener)
Let SDD_ProdPlate(Structure_Plate)
Let SDD_ProdStiffenerOnFreeEdge(Structure_StiffenerOnFreeEdge)
Let SDD_ProdPanel(Structure_Panel)
let SDD_OpeningFeat(MechanicalFeature)
let SDD_OpeningPanel(SddOpeningPanel)
let lThickness(LENGTH)
let LeadInGeometryType(string)
let LeadOutGeometryType(string)
let NoOfTabs(Integer)
let TabWidth(LENGTH)
let TabLength(LENGTH)
let LeadInLength(LENGTH)
let LeadOutLength(LENGTH)
let LeadInRadius(LENGTH)
let LeadOutRadius(LENGTH)
let LeadInAngle(ANGLE)
let LeadOutAngle(ANGLE)
let BurnCurveDirection(Integer)
Set ProcessOutput = Process.GetProcessOutput()
Set SDDObject = ProcessOutput.GetStructureDesignObject()
Set SDD_ProdMember = SDDObject
Set SDD_ProdStiffener = SDDObject
Set SDD_ProdPlate = SDDObject
Set SDD_ProdStiffenerOnFreeEdge = SDDObject
Set SDD_ProdPanel = SDDObject
set SDD_OpeningPanel = Parameters.GetAttributeObject("SddOpening")
/* output value : Set default to NONE*/
let OpeningPrepType(String)
OpeningPrepType = "NONE"
if (NULL <> SDD_ProdMember)
{
let strMemberCategory(String)
set strMemberCategory = SDD_ProdMember.V_StrCategory
let StrMemberMaterial(String)
set StrMemberMaterial = SDD_ProdMember.V_StrMaterial
if (strMemberCategory == "Member" OR strMemberCategory == "Beam" OR strMemberCategory == "Column")
{
let StrCutOutType(String)
set StrCutOutType = SDD_Opening.CutOutType
let StrOpeningCategory(String)
set StrOpeningCategory = SDD_Opening.Category
if ((StrMemberMaterial.SearchPattern("Steel") == "Steel") OR(StrMemberMaterial.SearchPattern("STEEL") == "STEEL"))
{
if (StrCutOutType == "catStrOpeningOutputProfile" and StrOpeningCategory == "SddOpening")
{
OpeningPrepType = "MARKED"
}
else if (StrCutOutType == "catStrOpeningStandard" and StrOpeningCategory == "LighteningHole")
{
let StrContourType(String)
set StrContourType = SDD_Opening.ContourType
if (StrContourType == "Str_Rect")
{
OpeningPrepType = "CUT"
}
else if (StrContourType == "Str_Round")
{
OpeningPrepType = "MARKED"
}
}
}
}
}
else if (NULL <> SDD_ProdStiffener)
{
let strStiffenerCategory(String)
set strStiffenerCategory = SDD_ProdStiffener.V_StrCategory
let StrStiffenerMaterial(String)
set StrStiffenerMaterial = SDD_ProdStiffener.V_StrMaterial
if (strStiffenerCategory == "Stiffener" OR strStiffenerCategory == "Deck Stiffener"
OR strStiffenerCategory == "Deck Longitudinal Stiffener" OR strStiffenerCategory == "Deck Transverse Stiffener")
{
let StrCutOutType(String)
set StrCutOutType = SDD_Opening.CutOutType
let StrOpeningCategory(String)
set StrOpeningCategory = SDD_Opening.Category
if ((StrStiffenerMaterial.SearchPattern("Steel") == "Steel") OR(StrStiffenerMaterial.SearchPattern("STEEL") == "STEEL"))
{
if (StrCutOutType == "catStrOpeningOutputProfile" and StrOpeningCategory == "SddOpening")
{
OpeningPrepType = "MARKED"
}
else if (StrCutOutType == "catStrOpeningStandard" and StrOpeningCategory == "LighteningHole")
{
let StrContourType(String)
set StrContourType = SDD_Opening.ContourType
if (StrContourType == "Str_Rect")
{
OpeningPrepType = "CUT"
}
else if (StrContourType == "Str_Round")
{
OpeningPrepType = "MARKED"
}
}
}
}
}
else if (NULL <> SDD_ProdPlate)
{
let StrPlateMaterial(String)
set StrPlateMaterial = SDD_ProdPlate.V_StrMaterial
set lThickness = SDD_ProdPlate.V_StrThickness
if ((StrPlateMaterial.SearchPattern("Steel") == "Steel") OR(StrPlateMaterial.SearchPattern("STEEL") == "STEEL"))
{
if (lThickness <0.4in and lThickness > 0.1in)
{
OpeningPrepType = "TABBED"
set LeadInGeometryType = "Line"
set LeadOutGeometryType = "Line"
set NoOfTabs = 6
set TabWidth = 25in
set TabLength = 400in
set LeadInLength = 80in
set LeadOutLength = 40in
set LeadInRadius = 80in
set LeadOutRadius = 40in
set LeadInAngle = 45deg
set LeadOutAngle = 90deg
set BurnCurveDirection = 1
Parameters.SetAttributeString("LeadInGeometryType", LeadInGeometryType)
Parameters.SetAttributeString("LeadOutGeometryType", LeadOutGeometryType)
Parameters.SetAttributeInteger("NoOfTabs", NoOfTabs)
Parameters.SetAttributeDimension("TabWidth", TabWidth, "LENGTH")
Parameters.SetAttributeDimension("TabLength", TabLength, "LENGTH")
Parameters.SetAttributeDimension("LeadInLength", LeadInLength, "LENGTH")
Parameters.SetAttributeDimension("LeadOutLength", LeadOutLength, "LENGTH")
Parameters.SetAttributeDimension("LeadInRadius", LeadInRadius, "LENGTH")
Parameters.SetAttributeDimension("LeadOutRadius", LeadOutRadius, "LENGTH")
Parameters.SetAttributeDimension("LeadInAngle", LeadInAngle, "ANGLE")
Parameters.SetAttributeDimension("LeadOutAngle", LeadOutAngle, "ANGLE")
Parameters.SetAttributeInteger("BurnDirection", BurnCurveDirection)
}
else
OpeningPrepType = "MARKED"
}
}
else if (NULL <> SDD_ProdStiffenerOnFreeEdge)
{
let StrSFEMaterial(String)
set StrSFEMaterial = SDD_ProdStiffenerOnFreeEdge.V_StrMaterial
if ((StrSFEMaterial.SearchPattern("Steel") == "Steel") OR(StrSFEMaterial.SearchPattern("STEEL") == "STEEL"))
{
OpeningPrepType = "MARKED"
}
}
else if (NULL <> SDD_ProdPanel)
{
let StrPanelMaterial(String)
set StrPanelMaterial = SDD_ProdPanel.V_StrMaterial
set lThickness = SDD_ProdPanel.V_StrThickness
let OpeningCutPerimeter(LENGTH)
let OpeningProfile(feature)
let OpeningProfileCrv(Curve)
SDD_OpeningPanel->GetIntersectingElement(OpeningProfile)
set OpeningProfileCrv = OpeningProfile
set OpeningCutPerimeter = length(OpeningProfileCrv)
if ((StrPanelMaterial.SearchPattern("Steel") == "Steel") OR(StrPanelMaterial.SearchPattern("STEEL") == "STEEL"))
{
if (OpeningCutPerimeter <250in and lThickness < 1in)
{
OpeningPrepType = "TABBED"
set LeadInGeometryType = "Line"
set LeadOutGeometryType = "Line"
set NoOfTabs = 6
set TabWidth = 5in
set TabLength = 40in
set LeadInLength = 10in
set LeadOutLength = 5in
set LeadInRadius = 10in
set LeadOutRadius = 5in
set LeadInAngle = 90deg
set LeadOutAngle = 75deg
set BurnCurveDirection = 1
Parameters.SetAttributeString("LeadInGeometryType", LeadInGeometryType)
Parameters.SetAttributeString("LeadOutGeometryType", LeadOutGeometryType)
Parameters.SetAttributeInteger("NoOfTabs", NoOfTabs)
Parameters.SetAttributeDimension("TabWidth", TabWidth, "LENGTH")
Parameters.SetAttributeDimension("TabLength", TabLength, "LENGTH")
Parameters.SetAttributeDimension("LeadInLength", LeadInLength, "LENGTH")
Parameters.SetAttributeDimension("LeadOutLength", LeadOutLength, "LENGTH")
Parameters.SetAttributeDimension("LeadInRadius", LeadInRadius, "LENGTH")
Parameters.SetAttributeDimension("LeadOutRadius", LeadOutRadius, "LENGTH")
Parameters.SetAttributeDimension("LeadInAngle", LeadInAngle, "ANGLE")
Parameters.SetAttributeDimension("LeadOutAngle", LeadOutAngle, "ANGLE")
Parameters.SetAttributeInteger("BurnDirection", BurnCurveDirection)
}
else
OpeningPrepType = "MARKED"
}
}
Parameters.SetAttributeString("oOpeningPrepType", OpeningPrepType)
During Update IPM and Synchronization, the above business rule runs and based on the output parameters of the rule, the tabbed openings create accordingly.
Not defining any of the attributes in the rule then the values defined in the power copy considers for tabbed opening creation.
Using Edit Features of the tabbed opening, you can edit;
- Start point of the first tab of the tabbed opening.
- The Burn curve direction of the tabbed opening (Clockwise/anticlockwise).



