EKL - Rename Piping 3D objects

Context 

Different exemples of EKL actions to rename 

  • 3D Piping Part instance
  • 3D Piping Product instances and references
  • ....

Rename Piping Spool

Exemple 1

EKL Action : Rename all spool Ref & inst 

  • default value : + "_" + "SPL-" +
  • if spool contains only one valve, value = 
    • REF : + "_" + "SPL-" +
    • INST : + "_"

EKL Action : rename also the Spool Member Instance name

  • value = Part Ref name + "-" + Spool Count" (2digit) + Part Count ( 2digit)

note : the EKL action can be improved for the spool containing a valve :

  • the current code doesn't check if the valve is with flanged connection.  --> if condition to be adjusted 
  • the current code checks that the spool contain only one Piping Valve but it can contains any other number of other type of piping components. --> if condition to be adjusted 
  • each time the action is launched the spools are rename even if they have the good syntax
    • checking the syntax before renaming is possible but code will be much more complex --> need to list all count numbers already used and build the list of available ones that can be used for the spool to be renamed

 

/*
Input: ThisObject (VPMInstance)
*/

Let PipeLineInst(VPMInstance)
Let PipeLineRef(VPMReference)

set PipeLineInst=ThisObject
set PipeLineRef=PipeLineInst.Reference

Let PipeLineSpoolMemberList(List)
let PipeLineSpoolMemberListSize(integer)
let PipeLineSpoolMember(Piping_Spool_Inst)
let PipeLineSpoolMemberRef(VPMReference)
let SeqNumber, PartSeqNumber(String)
let SeqNumberMax, PartSeqNumberMax (String)
let IDNumber,PartIDNumber (string)
let SpoolName(string)

// retreive Pipeline Instance Name as prefix for spool
let PipeLinePrefix(string)
PipeLinePrefix=PipeLineInst.PLM_ExternalID

//retreive all Piping Spool from selected Product
set PipeLineSpoolMemberList =PipeLineRef.Query("Piping_Spool_Inst","")
set PipeLineSpoolMemberListSize=PipeLineSpoolMemberList->Size()
set SeqNumberMax=ToString(PipeLineSpoolMemberListSize)
//Message("number of Spool: ",PipeLineSpoolMemberListSize)

let SpoolValveMemberList(List)
let SpoolValveMemberListSize(Integer)
let SpoolValveMemberInst (VPMInstance)
let SpoolValveMemberRef (VPMReference)


let i,j(integer)
i=1
IDNumber=""

j=1
PartIDNumber=""

// For Each Spool

For i While  i<=PipeLineSpoolMemberListSize
{
                // #### Rename Spool
                
                set PipeLineSpoolMember=PipeLineSpoolMemberList->GetItem(i)
                //Message ("Spool Inst curent Name: ", PipeLineSpoolMember.PLM_ExternalID)
                set PipeLineSpoolMemberRef=PipeLineSpoolMember.Reference
                //Message ("Spool Ref curent Name: ", PipeLineSpoolMemberRef.V_Name)
                
                
                // retreive each spool and name it "SPL-" + count on 3 digit
                // manage Count on 2 digit
                if(SeqNumberMax.Length()<3)
                {
                                set IDNumber=ToString(i)
                                // get unique next new number from the database counter
                                SeqNumber = "00" + IDNumber
                                //*get the unique sequence number with 2 digits and leading 0*/
                                SeqNumber = SeqNumber.Extract(SeqNumber.Length() -2, 2)
                }
                else
                {
                                SeqNumber = IDNumber
                }
                set SpoolName=PipeLinePrefix +"_" + "SPL-" + SeqNumber
                i=i+1
                
                // Valuate Spool Ref and Inst name with same value = SpoolName
                PipeLineSpoolMemberRef.V_Name=SpoolName
                PipeLineSpoolMember.PLM_ExternalID=SpoolName
                
                // #### Rename Spool Members
                
                //Rename each member of the spool
                let SpoolMemberList(list)
                let SpoolMemberInst(VPMInstance)
                let SpoolMemberRef(VPMReference)
                let SpoolMemberListSize(integer)
                let SpoolMemberNewInstName(String)
                
                set SpoolMemberList =PipeLineSpoolMemberRef.Query("VPMInstance","")
                set SpoolMemberListSize=SpoolMemberList->Size()
                set PartSeqNumberMax=ToString(PipeLineSpoolMemberListSize)
                
                For j While  j<=SpoolMemberListSize
                {
                                // retreive each spool member
                                set SpoolMemberInst=SpoolMemberList->GetItem(j)
                                set SpoolMemberRef=SpoolMemberInst.Reference
                                
                                // Manage count
                                if(PartSeqNumberMax.Length()<3)
                                {
                                                set PartIDNumber=ToString(j)
                                                // get unique next new number from the database counter
                                                PartSeqNumber ="00" + PartIDNumber
                                                //*get the unique sequence number with 2 digits and leading 0*/
                                                PartSeqNumber = PartSeqNumber.Extract(PartSeqNumber.Length() -2, 2)
                                }
                                else
                                {
                                                PartSeqNumber = PartIDNumber
                                }
                                
                                SpoolMemberNewInstName = SpoolMemberRef.V_Name + "-" + SeqNumber + PartSeqNumber
                                SpoolMemberInst.PLM_ExternalID=SpoolMemberNewInstName
                                j=j+1
                }
                // reinitialisation of spool member count for next spool
                j=1          

                // if the spool contains only one Piping Valve, spool name will be renamed = Valve instance name
                set SpoolValveMemberList =PipeLineSpoolMemberRef.Query("Piping_Valve_Inst","")
                set SpoolValveMemberListSize=SpoolValveMemberList->Size()
                Message ("Spool with only valve: ", SpoolValveMemberListSize)
                if (SpoolValveMemberListSize==1)
                {
                                set SpoolValveMemberInst=SpoolValveMemberList->GetItem(1)
                                set SpoolValveMemberRef=SpoolValveMemberInst.Reference
                                set SpoolName=PipeLinePrefix +"_"+ SpoolValveMemberInst.PLM_ExternalID
                                PipeLineSpoolMember.PLM_ExternalID=SpoolName
                }
}