Action Rule for Managing Impacted Objects

This action rule manages the objects impacted by the break panel/plate operation.

This page discusses:

General Information

This action rule is invoked when you click Break in the Break Panel/Plate dialog box. It is also invoked when you click Break Profile in the Impacted Object dialog box.

Arguments

Name Type Description
listImpactedObject List List of impacted objects.
listImpactType List List of types of impacted objects: panel, plate, stiffener, etc.
listUsage List List of usages of input objects in impacted objects: support or limit.
listIndex List List of limit indices of impacted objects.
listInputPlate List List of input plates or panels.
listNewPlate List List of newly generated plates or panels.

Sample

/*
Order of Input MUST be respected
listImpactedObject :	List,
listImpactType :	List,
listUsage :	 List,
listIndex :	 List,
listInputPlate :	List,
listNewPlate :	List
*/

let ImpactedPlate(Structure_Plate)
let ImpactedPanel(Structure_Panel)
let ImpactedStiffener(Structure_Stiffener)
let ImpactedSFE(Structure_StiffenerOnFreeEdge)
let ImpactedMember(Structure_Member)
let ImpactedSddPlate(SddPlate)
let ImpactedSddPanel(SddPanel)
let ImpactedSddStiffener(SddStiffener)
let ImpactedSddSFE(SddStiffenerOnFreeEdge)
let ImpactedSddMember(SddMember)

let ObjType(String)
let ObjUsage(String)
let ObjIndex(Integer)

let InputPanel(Structure_Panel)
let InputSddPanel(SddPanel)
let NewPanel(Structure_Panel)
let NewSddPanel(SddPanel)

let InputPlate(Structure_Plate)
let InputSddPlate(SddPlate)
let NewPlate(Structure_Plate)
let NewSddPlate(SddPlate)

let InputType(String)

let FirstCheck(Integer)
let SecondCheck(Integer)

let LimitingObject(Feature)
let LimitOrientation(Integer)
let LimitTyp(Integer)
let LimitKey(String)
let LimitDetailMode(Integer)

let OldSupport(Feature)
let ListSupport(List)
let ListSupportContext(List)

let OldWebSupport(Feature)
let ListWebSupport(List)
let NewWebSupport(Feature)

let i(Integer)

let NbInputObjects(Integer)
let NbImpactedObject(Integer)
let NbLimitingObjects(Integer)

set NbInputObjects=listInputPlate->Size()
set NbImpactedObject = listImpactedObject->Size()

set InputPanel = listInputPlate->GetItem(1)
set InputPlate = listInputPlate->GetItem(1)

// Input type is Panel
if InputPanel <> NULL
{
	for i = 1 while i <= NbImpactedObject
	{
		set FirstCheck=-1
		set SecondCheck=-1
		// Retrieve feature from Product
		set InputPanel = listInputPlate->GetItem(i)
		InputPanel->GetPanel(InputSddPanel)
		set NewPanel = listNewPlate->GetItem(i)
		NewPanel->GetPanel(NewSddPanel)
		set ObjType = listImpactType->GetItem(i)
		set ObjUsage = listUsage->GetItem(i)
		set ObjIndex = listIndex->GetItem(i)

		// Manage impacted object which input object is used as "Limit"
		if ObjUsage == "Limit"
		{
			// Manage impacted Plate
			set ImpactedPlate = listImpactedObject->GetItem(i)
			if ObjType == "Plate"
			{
				// Retrieve feature from Product
				ImpactedPlate->GetPlate(ImpactedSddPlate)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedPlate, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedPlate, SecondCheck)
					if(SecondCheck > 1)
					{
						if ImpactedSddPlate <> NULL
						{
							// Reroute limiting object on impacted plate
							ImpactedSddPlate->GetLimitOrientation(LimitOrientation, ObjIndex)
							ImpactedSddPlate->GetPanelLimitType(ObjIndex, LimitTyp)
							ImpactedSddPlate->GetLimitKey(ObjIndex, LimitKey)
							set LimitDetailMode = -1
							ImpactedSddPlate->GetLimitDetailMode(ObjIndex, LimitDetailMode)
							ImpactedSddPlate->SetLimitingObjectWithDetailMode(NewSddPanel, ObjIndex, LimitOrientation, LimitTyp, LimitKey, NewPanel, ImpactedPlate ,LimitDetailMode)
							ImpactedSddPlate->Update()
						}
					}
				}
			}

			// Manage impacted Panel
			set ImpactedPanel = listImpactedObject->GetItem(i)
			if ObjType == "Panel"
			{
				// Retrieve feature from Product
				ImpactedPanel->GetPanel(ImpactedSddPanel)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedPanel, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedPanel, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute limiting object on impacted Panel
						ImpactedSddPanel->GetLimitOrientation(LimitOrientation, ObjIndex)
						ImpactedSddPanel->GetPanelLimitType(ObjIndex, LimitTyp)
						ImpactedSddPanel->GetLimitKey(ObjIndex, LimitKey)
						set LimitDetailMode = -1
						ImpactedSddPanel->GetLimitDetailMode(ObjIndex, LimitDetailMode)
						ImpactedSddPanel->SetLimitingObjectWithDetailMode(NewSddPanel, ObjIndex, LimitOrientation, LimitTyp, LimitKey, NewPanel, ImpactedPanel,LimitDetailMode)
						ImpactedSddPanel->Update()
					}
				}
			}

			// Manage impacted Parametric Plate
			if ObjType == "Parametric Plate"
			{
				// Retrieve feature from Product
				ImpactedPlate->GetPlate(ImpactedSddPlate)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedPlate, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedPlate, SecondCheck)
					if(SecondCheck > 1)
					{
						if ImpactedSddPlate <> NULL
						{
							// Reroute limiting object on impacted plate
							ImpactedSddPlate->GetLimitOrientation(LimitOrientation, ObjIndex)
							ImpactedSddPlate->GetPanelLimitType(ObjIndex, LimitTyp)
							ImpactedSddPlate->GetLimitKey(ObjIndex, LimitKey)
							ImpactedSddPlate->SetLimitingObject(NewSddPanel, ObjIndex, LimitOrientation, LimitTyp, LimitKey, NewPanel, ImpactedPlate)
							ImpactedSddPlate->Update()
						}
					}
				}
			}

			// Manage impacted Stiffener
			set ImpactedStiffener = listImpactedObject->GetItem(i)
			if ObjType == "Stiffener"
			{
				// Retrieve feature from Product
				ImpactedStiffener->GetStiffener(ImpactedSddStiffener)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedStiffener, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedStiffener, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute limiting object on impacted Stiffener
						ImpactedSddStiffener->SetLimitingObject(ObjIndex,NewSddPanel,NewPanel,ImpactedStiffener)
						ImpactedSddStiffener->Update()
					}
				}
			}

			// Manage impacted SFE
			set ImpactedSFE = listImpactedObject->GetItem(i)
			if ObjType == "SFE"
			{
				// Retrieve feature from Product
				ImpactedSFE->GetStiffenerOnFreeEdge(ImpactedSddSFE)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedSFE, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedSFE, SecondCheck)
					if(SecondCheck > 1)
					{
						ImpactedSddSFE->SetLimitingObject(ObjIndex,NewSddPanel,NewPanel,ImpactedSFE)
						ImpactedSddSFE->Update()
					}
				}
			}
			// Manage impacted Member
			set ImpactedMember = listImpactedObject->GetItem(i)
			if ObjType == "Member"
			{
				// Retrieve feature from Product
				ImpactedMember->GetMember(ImpactedSddMember)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedMember, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedMember, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute limiting object on impacted Member
						ImpactedSddMember->SetLimitingObject(ObjIndex,NewSddPanel,NewPanel,ImpactedMember)
						ImpactedSddMember->Update()
					}
				}
			}
		}

		// Manage impacted object which input object is used as "Support"
		if(ObjUsage == "Support")
		{
			set ImpactedStiffener = listImpactedObject->GetItem(i)
			if ObjType == "Stiffener"
			{
				// Retrieve feature from Product
				ImpactedStiffener->GetStiffener(ImpactedSddStiffener)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedStiffener, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedStiffener, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute Panel support on impacted Stiffener
						ImpactedSddStiffener->SetFirstSurface(NewSddPanel,NewPanel, ImpactedStiffener)
						ImpactedSddStiffener->Update()
					}
				}
			}
			set ImpactedSFE = listImpactedObject->GetItem(i)
			if ObjType == "SFE"
			{
				// Retrieve feature from Product
				ImpactedSFE->GetStiffenerOnFreeEdge(ImpactedSddSFE)

				// Through intersection, check whether reroute is required or not
				InputPanel->GetIntersection(ImpactedSFE, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPanel->GetIntersection(ImpactedSFE, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute SFE support panel
						OldSupport = NULL
						ListSupport->RemoveAll()
						ListSupport->Append(NewSddPanel)
						ListSupportContext->RemoveAll()
						ListSupportContext->Append(NewPanel)
						ImpactedSddSFE->GetReferenceSupportPlate(OldSupport)
						ImpactedSddSFE->SetOtherSupportPlates(ListSupport,ListSupportContext, ImpactedSFE)
						ImpactedSddSFE->PromoteToReferencePlate(NewSddPanel)
						ImpactedSddSFE->RemoveOtherSupportPlate(OldSupport)
						ImpactedSddSFE->Update()
						// Reroute SFE web support
						OldWebSupport = NULL
						NewWebSupport = NULL
						ListWebSupport->RemoveAll()
						ImpactedSddSFE->GetLimits(ListWebSupport)
						OldWebSupport = ListWebSupport[1]
						InputSddPanel->GetCorrespondingLimit(NewSddPanel, OldWebSupport, NewWebSupport)
						ListWebSupport->RemoveAll()
						ListWebSupport->AddItem(NewWebSupport,1)
						ImpactedSddSFE->SetLimits(ListWebSupport, NewPanel, ImpactedSFE)
						ImpactedSddSFE->Update()
					}
				}
			}
		}
	}
}

// Input type is Plate
else if InputPlate <> NULL
{
	// Retrieve feature from Product
	for i = 1 while i <= NbImpactedObject
	{
		set FirstCheck=-1
		set SecondCheck=-1
		set InputPlate = listInputPlate->GetItem(i)
		InputPlate->GetPlate(InputSddPlate)
		set NewPlate = listNewPlate->GetItem(i)
		NewPlate->GetPlate(NewSddPlate)
		set ObjType = listImpactType->GetItem(i)
		set ObjUsage = listUsage->GetItem(i)
		set ObjIndex = listIndex->GetItem(i)

		// Manage impacted object which input object is used as "Limit"
		if ObjUsage == "Limit"
		{
			// Manage impacted Plate
			set ImpactedPlate = listImpactedObject->GetItem(i)
			if ObjType == "Plate"
			{
				// Retrieve feature from Product
				ImpactedPlate->GetPlate(ImpactedSddPlate)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedPlate, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedPlate, SecondCheck)
					if(SecondCheck > 1)
					{
						if ImpactedSddPlate <> NULL
						{
							// Reroute limiting object on impacted plate
							ImpactedSddPlate->GetLimitOrientation(LimitOrientation, ObjIndex)
							ImpactedSddPlate->GetPanelLimitType(ObjIndex, LimitTyp)
							ImpactedSddPlate->GetLimitKey(ObjIndex, LimitKey)
							set LimitDetailMode = -1
							ImpactedSddPlate->GetLimitDetailMode(ObjIndex, LimitDetailMode)
							ImpactedSddPlate->SetLimitingObjectWithDetailMode(NewSddPlate, ObjIndex, LimitOrientation, LimitTyp, LimitKey, NewPlate, ImpactedPlate,LimitDetailMode)
							ImpactedSddPlate->Update()
						}
					}
				}
			}

			// Manage impacted Panel
			set ImpactedPanel = listImpactedObject->GetItem(i)
			if ObjType == "Panel"
			{
				// Retrieve feature from Product
				ImpactedPanel->GetPanel(ImpactedSddPanel)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedPanel, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedPanel, SecondCheck)
					if(SecondCheck > 1)
					{
						if ImpactedSddPanel <> NULL
						{
							// Reroute limiting object on impacted Panel
							ImpactedSddPanel->GetLimitOrientation(LimitOrientation, ObjIndex)
							ImpactedSddPanel->GetPanelLimitType(ObjIndex, LimitTyp)
							ImpactedSddPanel->GetLimitKey(ObjIndex, LimitKey)
							set LimitDetailMode = -1
							ImpactedSddPanel->GetLimitDetailMode(ObjIndex, LimitDetailMode)
							ImpactedSddPanel->SetLimitingObjectWithDetailMode(NewSddPlate, ObjIndex, LimitOrientation, LimitTyp, LimitKey, NewPlate, ImpactedPanel,LimitDetailMode)
							ImpactedSddPanel->Update()
						}
					}
				}
			}

			// Manage impacted Parametric Plate
			if ObjType == "Parametric Plate"
			{
				// Retrieve feature from Product
				ImpactedPlate->GetPlate(ImpactedSddPlate)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedPlate, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedPlate, SecondCheck)
					if(SecondCheck > 1)
					{
						if ImpactedSddPlate <> NULL
						{
							// Reroute limiting object on impacted plate
							ImpactedSddPlate->GetLimitOrientation(LimitOrientation, ObjIndex)
							ImpactedSddPlate->GetPanelLimitType(ObjIndex, LimitTyp)
							ImpactedSddPlate->GetLimitKey(ObjIndex, LimitKey)
							ImpactedSddPlate->SetLimitingObject(NewSddPlate, ObjIndex, LimitOrientation, LimitTyp, LimitKey, NewPlate, ImpactedPlate)
							ImpactedSddPlate->Update()
						}
					}
				}
			}

			// Manage impacted Stiffener
			set ImpactedStiffener = listImpactedObject->GetItem(i)
			if ObjType == "Stiffener"
			{
				// Retrieve feature from Product
				ImpactedStiffener->GetStiffener(ImpactedSddStiffener)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedStiffener, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedStiffener, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute limiting object on impacted Stiffener
						ImpactedSddStiffener->SetLimitingObject(ObjIndex,NewSddPlate,NewPlate ,ImpactedStiffener)
						ImpactedSddStiffener->Update()
					}
				}
			}

			// Manage impacted SFE
			set ImpactedSFE = listImpactedObject->GetItem(i)
			if ObjType == "SFE"
			{
				// Retrieve feature from Product
				ImpactedSFE->GetStiffenerOnFreeEdge(ImpactedSddSFE)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedSFE, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedSFE, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute limiting object on impacted SFE
						ImpactedSddSFE->SetLimitingObject(ObjIndex,NewSddPlate,NewPlate,ImpactedSFE)
						ImpactedSddSFE->Update()
					}
				}
			}

			// Manage impacted Member
			set ImpactedMember = listImpactedObject->GetItem(i)
			if ObjType == "Member"
			{
				// Retrieve feature from Product
				ImpactedMember->GetMember(ImpactedSddMember)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedMember, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedMember, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute limiting object on impacted Member
						ImpactedSddMember->SetLimitingObject(ObjIndex,NewSddPlate, NewPlate, ImpactedMember)
						ImpactedSddMember->Update()
					}
				}
			}
		}

		// Manage impacted object which input object is used as "Support"
		if(ObjUsage == "Support")
		{
			set ImpactedStiffener = listImpactedObject->GetItem(i)
			if ObjType == "Stiffener"
			{
				// Retrieve feature from Product
				ImpactedStiffener->GetStiffener(ImpactedSddStiffener)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedStiffener, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedStiffener, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute impacted Stiffener support
						ImpactedSddStiffener->SetFirstSurface(NewSddPlate,NewPlate,ImpactedStiffener)
						ImpactedSddStiffener->Update()
					}
				}
			}
			set ImpactedSFE = listImpactedObject->GetItem(i)
			if ObjType == "SFE"
			{
				// Retrieve feature from Product
				ImpactedSFE->GetStiffenerOnFreeEdge(ImpactedSddSFE)

				// Through intersection, check whether reroute is required or not
				InputPlate->GetIntersection(ImpactedSFE, FirstCheck)
				if(FirstCheck< 2)
				{
					NewPlate->GetIntersection(ImpactedSFE, SecondCheck)
					if(SecondCheck > 1)
					{
						// Reroute SFE support
						OldSupport = NULL
						ListSupport->RemoveAll()
						ListSupport->Append(NewSddPlate)
						ListSupportContext->RemoveAll()
						ListSupportContext->Append(NewPlate)
						ImpactedSddSFE->GetReferenceSupportPlate(OldSupport)
						ImpactedSddSFE->SetOtherSupportPlates(ListSupport,ListSupportContext, ImpactedSFE)
						ImpactedSddSFE->PromoteToReferencePlate(NewSddPlate)
						ImpactedSddSFE->RemoveOtherSupportPlate(OldSupport)
						ImpactedSddSFE->Update()
						// Reroute SFE web support
						OldWebSupport = NULL
						NewWebSupport = NULL
						ListWebSupport->RemoveAll()
						ImpactedSddSFE->GetLimits(ListWebSupport)
						OldWebSupport=ListWebSupport->GetItem(1)
						InputSddPlate->GetCorrespondingLimit(NewSddPlate,OldWebSupport, NewWebSupport)
						ListWebSupport->RemoveAll()
						ListWebSupport->AddItem(NewWebSupport,1)
						ImpactedSddSFE->SetLimits(ListWebSupport, NewPlate, ImpactedSFE)
						ImpactedSddSFE->Update()
					}
				}
			}
		}
	}
}