; AUTHOR : Wim VERMEULEN ; LOCATION : VAN HOECKE N.V. ; LAST MODIFIED : 27/06/2001 ; ; THIS ROUTINE EXTENDS THE PROPERTIES FROM GIVEN OBJECT WITH THE SPECIFIED TEMPLATE OBJECT ; ; --> CALL ExtendFT(KadObj,Templ,...) ; IT EXTENDS THE OBJECT's (KadObj) FIXED PROPERTIES WITH THE TEMPLATE's (Templ) DYNAMIC PROPERTIES. ; GENERAL CODE TO CALCULATE FIXED VALUES FROM THE DYNAMIC VALUES IS PROVIDED HERE. ; ExtendFT(KadObj,Templ,Param1,Param2,Param3,Param4,Param5) ; ExtendF(rom)T(emplate) :Extends the KadObj with the dynamic properties from the template ; Parameter declaration: ; --------------------- ; KadObj As Prod.GADef.KaderDeur ; Templ As Prod.GADef.KaderDeur ; Param1-5 are not used in this routine Quit:('Templ) New Key ; Extend properties Do KDExtendPropts(.KadObj,Templ) ; Extend Beslag Set Key="" For Do Templ.Beslag.GetNext(.Key) Quit:Key="" Do .Do KDExtendBeslag(.KadObj, Templ.Beslag.GetAt(Key),Key) ; Extend list of Boringen Set Key="" For Do Templ.Boringen.GetNext(.Key) Quit:Key="" Do .Do KDExtendBoring(.KadObj, Templ.Boringen.GetAt(Key),Key) Quit KDExtendPropts(KadObj,Templ) New ToepasID,OphangPID,ProfielTypeID,Hoogte,Breedte,VullingID,VullingExtras,Gemonteerd,Verpakking Set:(KadObj.ToepassingGetObjectId()="") ToepasID=$P(Templ.ToepassingGetObjectId(),"||",2) Set:(KadObj.OphangPlaatsGetObjectId()="") OphangPID=$P(Templ.OphangPlaatsGetObjectId(),"||",2) Set:(KadObj.ProfTypeGetObjectId()="") ProfielTypeID=$P(Templ.ProfTypeGetObjectId(),"||",2) Set:(KadObj.ProfAfwGetObjectId()="") ProfielTypeID=$P(Templ.ProfAfwGetObjectId(),"||",2) Set:(KadObj.Hoogte="") Hoogte=Templ.Hoogte Set:(KadObj.Breedte="") Breedte=Templ.Breedte Set:(KadObj.Gemonteerd="") Gemonteerd=Templ.Gemonteerd Set:(KadObj.Verpakking="") Verpakking=Templ.Verpakking ;;Set:(KadObj.Vulling.Vulling="") VullingID=$P(Templ.Vulling.VullingGetObjectId(),"||",2) ;;Set:(KadObj.Vulling.VullingExtras="") VullingExtras=$$ConvertToIDString(Templ.Vulling.VullingExtras) ;If (KadObj.Vulling.Vulling=""),(Templ.Vulling.VullingGetObjectId()'="") Set KadObj.Vulling=Templ.Vulling Do FillKDPropts^Prod.GADef.KaderDeur.Templates(.KadObj,$G(ToepasID),$G(OphangPID),$G(ProfielTypeID),$G(Hoogte),$G(Breedte),,,$G(Gemonteerd),$G(Verpakking),"") ;Do FillKDPropts^Prod.GADef.KaderDeur.Templates(.KadObj,$G(ToepasID),$G(OphangPID),$G(ProfielTypeID),$G(Hoogte),$G(Breedte),$G(VullingID),$G(VullingExtras),$G(Gemonteerd),$G(Verpakking),"") Set KadObj.TemplateUsed=Templ.TemplateUsed Quit KDExtendBeslag(KadObj,TemplBSL,BeslagKey) New emBeslag,BeslagTypeID,emTemplPos,emNewPos,PosKey,PrevLPos Do KadObj.Beslag.RemoveAt(BeslagKey) Set emBeslag=##class(Prod.GADef.emKadBeslag).%New() Do:(emBeslag.BeslagGetObjectId()="") emBeslag.BeslagSetObjectId(TemplBSL.BeslagGetObjectId()) ;Quit:(TemplBSL.Positie.Count()'>0) Set PrevLPos=0 Set PosKey="" Do emBeslag.Positie.Clear() For Do TemplBSL.Positie.GetNext(.PosKey) Quit:PosKey="" Do . Set emTemplPos=TemplBSL.Positie.GetAt(PosKey) . Quit:(emTemplPos.LengtePos_emTemplPos.RelLengtePos="") . Set emNewPos=##class(Prod.GADef.emKadBeslagPos).%New() . Set emNewPos.LengtePos=$$FixedPosBeslag(emTemplPos,KadObj,BeslagKey,PosKey,emBeslag,PrevLPos) ; ,TemplBSL) . ;Set emNewPos.RelLengtePos="" . ;Set emNewPos.LengtePos=emTemplPos.AbsPosGet("L",KadObj) . Set:(emTemplPos.RelLengtePos'>0) emNewPos.RelLengtePos=emTemplPos.RelLengtePos . Set:(emTemplPos.AfstandRand'="") emNewPos.AfstandRand=emTemplPos.AfstandRand . Set PrevLPos=emNewPos.LengtePos . Do emBeslag.Positie.SetAt(emNewPos,PosKey) . Do emNewPos.%Close() . ; Next Positie Do KadObj.Beslag.SetAt(emBeslag,BeslagKey) Do emBeslag.%Close() ; Reference is now held by the KadObj (=KadObj) Quit KDExtendBoring(KadObj,TemplBoor,BKey) Quit:('$L(TemplBoor.XPos_TemplBoor.RelXPos)!'$L(TemplBoor.YPos_TemplBoor.RelYPos)!'$L(TemplBoor.BoorDiameter)!'$L(TemplBoor.BoringType)!'$L(TemplBoor.BoorDiepte)) New emBoring Set emBoring=##class(Prod.GADef.emKadBoring).%New() Set emBoring.XPos=$$FixedPosBoring("X",TemplBoor,KadObj) Set emBoring.YPos=$$FixedPosBoring("Y",TemplBoor,KadObj) ;Set emBoring.XPos=templBoor.AbsPosGet("X",KadObj) ;Set emBoring.YPos=templBoor.AbsPosGet("X",KadObj) Set:(TemplBoor.RelXPos'>0) emBoring.RelXPos=TemplBoor.RelXPos Set:(TemplBoor.RelYPos'>0) emBoring.RelYPos=TemplBoor.RelYPos Set emBoring.BoorDiameter=TemplBoor.BoorDiameter Set:(TemplBoor.AfschuinDiameter) emBoring.AfschuinDiameter=TemplBoor.AfschuinDiameter Set emBoring.BoringType=TemplBoor.BoringType Set emBoring.BoorDiepte=TemplBoor.BoorDiepte Set:(TemplBoor.BoorGlasDiameter) emBoring.BoorGlasDiameter=TemplBoor.BoorGlasDiameter Set:($L(TemplBoor.ZPos_TemplBoor.RelZPos)) emBoring.ZPos=$$FixedPosBoring("Z",TemplBoor,KadObj) ;If TemplBoor.ZPos_TemplBoor.RelZPos'="" Do ;. Set emBoring.ZPos=templBoor.AbsPosGet("Z",KadObj) ;. Set:(TemplBoor.RelZPos'>0) emBoring.RelZPos=TemplBoor.RelZPos Set:(TemplBoor.RelZPos'>0) emBoring.RelZPos=TemplBoor.RelZPos Set emBoring.CncID=TemplBoor.CncID ; Controle Boring Do KadObj.ControleBoring(emBoring) Set:($E(emBoring.TxtOpmerking,1,3)'="OK:") emBoring.Opmerking=emBoring.TxtOpmerking ;Set:(emBoring.BoringPlaats?1"P"1A1";VUL") emBoring.BoorGlasDiameter=8 ; Add emBoring to Array Set BKey=$E($G(BKey)_"X",1) Do KadObj.Boringen.SetAt(emBoring,$S(BKey?.A:BKey, 1:"X")_$TR($J(KadObj.Boringen.Count()+1, 2), " ", "0")) ;Do KadObj.Boringen.SetAt(emBoring,KadObj.Boringen.Count()+1) Do emBoring.%Close() Quit FixedPosBeslag(emTemplPos,KadObj,BeslagKey,PosKey,emBeslag,PrevLPos) ; ,TemplBSL) ; Special Relative Postitions: following codes can be used: ; "ctr" : position from the center ; "ops" : position from opposite side; i.e. keep or make number negative Quit:(emTemplPos.LengtePos'<0)&($L(emTemplPos.RelLengtePos)=0) emTemplPos.LengtePos ; Return value immediatly New FixV,FixV2,MaxSize,Plaats ; Determine MaxSize Set Plaats=KadObj.ProfielPlaatsGet(emBeslag, BeslagKey, PosKey) Set MaxSize=$S((Plaats="PL")!(Plaats="PR"):KadObj.Hoogte, (Plaats="PB")!(Plaats="PO"):KadObj.Breedte, 1:0) ; Calculate Fixed Value for LengtePos Set FixV=emTemplPos.LengtePos If $L(emTemplPos.RelLengtePos) Do ; Calculate Special Relative Position . If emTemplPos.RelLengtePos["ctr" Do .. ; From center .. Set FixV=(MaxSize/2)+FixV . Else If emTemplPos.RelLengtePos["ops" Do .. ; From opposite side .. Set:(FixV>0) FixV=-FixV . Else Do .. ; Other codes for Beslag Special Relative Postitions .. Set FixV2=KadObj.AbsPosCalc("S",emTemplPos.RelLengtePos,.PrevLPos) .. Set:(FixV2'=emTemplPos.RelLengtePos)!(FixV2'<0) FixV=FixV2 .. Quit . Set:($E(emTemplPos.RelLengtePos,1)="-")&($G(FixV2)'=FixV) FixV=-FixV ; dynamic value from opposite site .; End If $L(RelPos) Quit:($G(FixV2)=FixV) FixV Set:(FixV<0)&&(emTemplPos.RelLengtePos'["ops")&&(BeslagKey'="LB") FixV=MaxSize+FixV ; Substract = add Negative Number Quit FixV FixedPosBoring(sPropt,TemplBoor,KadObj) ; The parameter sPropt can be: "X", "Y", "Z" ; Special Relative Postitions: following codes can be used: ; "ctr" : position from the center ; "pIN" : Position from the . Only for "X" and "Y" !!! Quit:'((sPropt="X")!(sPropt="Y")!(sPropt="Z")) "Error" New FixV,FixV2,MaxSize,TemplPos,TemplRelPos ;,Plaats Xecute "Set TemplPos=TemplBoor."_sPropt_"Pos" ; =TemplBoor.XPos or YPos or ZPos Xecute "Set TemplRelPos=TemplBoor.Rel"_sPropt_"Pos" Quit:(TemplPos'<0)&($L(TemplRelPos)=0) TemplPos ; Return value immediatly Set MaxSize=$S(sPropt="X":KadObj.Breedte, sPropt="Y":KadObj.Hoogte, sPropt="Z":KadObj.ProfType.Dikte, 1:0) Set FixV=TemplPos If $L(TemplRelPos) Do ; Calculate Special Relative Position . If TemplRelPos["ctr" Do .. ; From center .. Set FixV=(MaxSize/2)+FixV . Else If (TemplRelPos["pIN")&((sPropt="X")!(sPropt="Y")) Do .. ; From Interne Kant van het Profiel .. Set FixV=KadObj.ProfType.Breedte+FixV . Else Do .. ; Other codes for Beslag Special Relative Postitions .. Set FixV2=KadObj.AbsPosCalc(sPropt,TemplRelPos) .. Set:(FixV2'=TemplRelPos)!(FixV2'<0) FixV=FixV2 .. Quit . Set:($E(TemplRelPos,1)="-")&($G(FixV2)'=FixV) FixV=(-1)*FixV ; dynamic value from opposite site . Quit ; If $L(RelPos) Quit:($G(FixV2)=FixV) FixV Set:(FixV<0) FixV=MaxSize+FixV ; Substract = add Negative Number Quit FixV