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()
}
}
}
}
}
}