Afspraken i.v.m. Posities van Beslag en Boringen:
  • Standaard zijn posities STEEDS gemeten van Links (X), van Boven (Y) en vanaf de Rug (Z)
  • AfstandRand is steeds relatief (t.o.v. de buitenrand van het profiel)
  • Negatieve posities zijn gemeten van de tegenovergestelde kant:
    | PosX < 0 ==> X = KD.Breedte - PosX
    | PosY < 0 ==> Y = KD.Hoogte - PosY
    | PosZ < 0 ==> Z = KD.ProfType.Dikte - PosZ
  • De negatieve posities zijn
    - te tonen als positieve waarden in de User Interface
    - op te slaan in Caché als negatieve waarden
    - in XML eveneens als negatieve waarden op te slaan met ev. een Attribute "omschrijving", bvb. "OMS=Van onderkant"
]]>
serial vhLib.Macro 0 %Library.SerialObject %String AVHKXS:OffsetY:D+K %String AVHKXS:OffsetY:OndiepeCorpus Res.PI.Beslag %Library.String Positie van het scharnier ligt op de Y-as waarbij de deur geplaatst is in het vierde kwadrant "L" : Links, postie tov van linkse rand "R" : Rechts, positie tov van rechtse rand numeriek : volgnummer van de positie, alle posties vanuit één bepaald punt Prod.GADef.emKadBeslagPos array WandDitke van de corpus. Bij klapscharen moet deze mee in rekening gebracht worden voor de posities van de boringen. [Maatwerk Framework : GUI kenmerk] %Library.Float %ArrayOfDataTypes 1 Facade-method voor oproepen vanuit VBA of VB6 OffsetDK:%Numeric,OndiepeCorpusInMM:%Numeric Extra Offset D+K in mm bij AVENTOS HK-XS. %String Extra Offset (5mm) indien ondiepe corpus bij AVENTOS HK-XS. Deze bevat de offset-waarde, en dus niet de diepte van de corpus! %String %Numeric ParamNaam:%String,Waarde:%CacheString 1 ParamNaam:%String 1 %CacheString Berekent de positie van het beslag aan de hand van de opdek en de waarde van OffsOpdek. Indien berekening via VOEG, dan Opdek=0 en WandDikte=Voeg meegeven 1 Opdek:%Float,OffsOpdek:%Float,WandDikte:%Float=0 %Library.Float Berekent de opdek aan de hand van de positie van het beslag en de waarde van OffsOpdek. Indien berekening via VOEG, dan Wanddikte=0 geeft als result 1 Pos:%Float,OffsOpdek:%Float,WandDikte:%Float=0 %Library.Float Enkel voor beslag waarbij de positie berekend wordt a.d.h. van VOEG Berekent de voeg aan de hand van de positie van het beslag en de waarde van OffsOpdek. Indien berekening via VOEG, dan Wanddikte=0 geeft als result 1 Pos:%Float,OffsOpdek:%Float 1 %Library.Float Copy maken van het beslag in een nieuw object. Verschillende CopyModes: "FullCopy" (=Default), "NoPos", "Empty", "PosOnly" CopyMode:%Library.String="FullCopy" Prod.GADef.emKadBeslag s kopiëren (=emKadBeslagPos) --> overnemen posities bij Aventos HF (boven) . Set CopyProptList="PX" Else If CopyMode="NoPos" Do . ; Alle properties behalve s (=emKadBeslagPos). . Set CopyProptList="BW" Else If CopyMode="Empty" Do . ; Leeg, alleen lege s aanmaken. . Set CopyProptList="P" Else Do . ; CopyMode is onbekend of leeg. . Set CopyProptList="" . Quit ; Do Do:(CopyProptList["B") caNewObj.BeslagSetObjectId(%this.Beslag.%Id()) Set:(CopyProptList["W") caNewObj.WandDikte=..WandDikte If CopyProptList["P" Do . ; Copy List of s . Set PKey="" . For Do %this.Positie.GetNext(.PKey) Quit:PKey="" Do .. Set emBeslagPos=%this.Positie.GetAt(PKey) .. If CopyProptList["PX" Set caoNewPos=emBeslagPos.CopyObject("FullCopy") .. Else Set caoNewPos=emBeslagPos.CopyObject("Empty") .. Do caNewObj.Positie.SetAt(caoNewPos,PKey) Quit caNewObj ]]> QtyStaffel:%Library.Integer,MuntPar:%Library.Float,DtlObj:Res.PI.emKostDetail,Opties:%Library.String,Omtrek:%Library.Float,Opp:%Library.Float,Volume:%Library.Float %Library.Float Genereert VML-code voor elk object (emKadPosBeslag) in de array. BeslagKey en GADefProd moeten mee doorgegeven worden. DevObj:%Library.String,BeslagKey:%Library.String,GADefProd:Prod.GADef.KaderDeur,Opties:%Library.String KeyBeslagType:%String KeyBeslagType:%String,KadVertaler:Prod.GADef.KadVertaler 0," | ondiepe corpus(!)","") . Else If (BType?1(1"HZ",1"HL",1"HKT")) Do .. ; Opdek Bovenkant Aventos HS, HL en HK-TOP .. Do TAGWRITE^XMLWRITE(DevObj,"OPDEKY",$$$CalcOpdekY,"UNIT=""mm""",KadVertaler.VertaalXmlLabelAttribute("lblBeslag_Opdek")) . Else If (BType="HK") Do .. ; Voeg Bovenkant Aventos HK .. Do TAGWRITE^XMLWRITE(DevObj,"VOEGY",$$$CalcVoegY,"UNIT=""mm""",KadVertaler.VertaalXmlLabelAttribute("lblBeslag_Voeg")) .. Do:(..WandDikte>0) TAGWRITE^XMLWRITE(DevObj,"OPDEKY",$$$CalcOpdekY,"UNIT=""mm""",KadVertaler.VertaalXmlLabelAttribute("lblBeslag_Opdek")) . Set TekstAlignering=$S((Taal="F")&&(Key="R"):" . ", (Taal'="F")&&(Key="L"):" . ", 1:"") . Set param1="OMS="""_$S("S;VV;VC;VS;VB;VO;HFC;HFM;HFV"[BType:KadVertaler.Vertaal("lblBeslag_Boormaat"), (BType?1(1"LB",1"KC",1"KH")):KadVertaler.Vertaal("lblBeslag_Pos_VanZijkant")_$S(Taal?1(1"N",1"E"):" . . .",1:""), (BType?1(1"HFA",1"HK",1"HKX",1"HKT",1"HZ",1"HL")):TekstAlignering_KadVertaler.Vertaal("lblBeslag_Pos_VanZijkant"), (BType?1(1"GA",1"GB")):KadVertaler.Vertaal("lblBeslag_Pos_VanBovenkant"), (BType?1(1"GC",1"GD")):KadVertaler.Vertaal("lblBeslag_Pos_VanOnderkant"), 1:"")_"""" . Do:(emBeslagPos.AfstandRand'<0) TAGWRITE^XMLWRITE(DevObj,"AFSTANDRAND",+emBeslagPos.AfstandRand,"UNIT=""mm""", param1, KadVertaler.VertaalXmlLabelAttribute("lblBeslag_AfstandRand") ) . If (BType?1(1"KC",1"KH",1"HFA",1"HK",1"HKX",1"HKT",1"HZ",1"HL"))&&(..Beslag.ConstructAfm.IsDefined("OFFSOPDEKX")) Do .. ; Opdek Zijkant; .. Do TAGWRITE^XMLWRITE(DevObj,"OPDEKX",$$$CalcOpdekX,"UNIT=""mm""",KadVertaler.VertaalXmlLabelAttribute("lblBeslag_Opdek")) . Do ENDTAG^XMLWRITE(DevObj,"BESLAGPOS") Do xmwTussenMaten(DevObj,GADefProd,BeslagKey) If $$$HasLength(OpmerkingHKXS) { Do TAGWRITE^XMLWRITE(DevObj,"OPMERKING",OpmerkingHKXS,$$PARAMFILL^XMLWRITE("label",("HK-XS"))) } Do:($L(%this.Opmerking)) TAGWRITE^XMLWRITE(DevObj,"OPMERKING",%this.Opmerking,KadVertaler.VertaalXmlLabelAttribute("Opmerking_CAPS")) Do ENDTAG^XMLWRITE(DevObj,"BESLAG") Quit xmwBeslagCodesSD(BType) Quit:(BType'?1(1"GA",1"GB",1"GC",1"GD")) "" Quit " ("_%this.Beslag.ItemID_")" xmwBeslagBoringen(BType) Quit:("LB;KC;KH"'[BType) "" New emboor1,emboor2,boorDist,len,Key Set Key="" Set emBoor1=%this.Beslag.Boringen.GetNext(.Key) Quit:(Key="") "" Set boorDist=" (" Set len=$L(boorDist) For Set emBoor2=%this.Beslag.Boringen.GetNext(.Key) Quit:Key="" Do . ;Set:($E(boorDist,$L(boorDist))'="(") boorDist=boorDist_" - " . Set:($L(boorDist)>len) boorDist=boorDist_" - " ; Skip first time . Set boorDist=boorDist_$ZABS(emBoor2.YPos-emBoor1.YPos)_" mm" . Set emBoor1=emBoor2 Set boorDist=$S($L(boorDist)=len:"", 1:boorDist_")") ; $S(boorDist has not been changed since initialised, ...) Quit boorDist xmwTussenMaten(DevObj,GADefProd,BeslagKey) Quit:(GADefProd.Toepassing.ItemID'="KD")||(BeslagKey'="S") Quit:(%this.Positie.Count()'>0) New C,E,D1,D2,F,T,TussenM,OppositeL,N,i Set OppositeL=GADefProd.Hoogte Set N=%this.Positie.Count() Set TussenM="(#="_N_") " Set:(N>1) C=%this.Positie.GetAt(1).LengtePos Set:(N>1) E=OppositeL-%this.Positie.GetAt(N).LengtePos If N=2 Do . Set TussenM="C:"_C_", E:"_E Else If N=3 Do . Set D1=%this.Positie.GetAt(2).LengtePos-%this.Positie.GetAt(1).LengtePos . Set D2=%this.Positie.GetAt(3).LengtePos-%this.Positie.GetAt(2).LengtePos . Set TussenM="C:"_C_$S(D1=D2:", D:"_D1, 1:", D1:"_D1_", D2:"_D2)_", E:"_E Else If N=4 Do . Set D1=%this.Positie.GetAt(2).LengtePos-%this.Positie.GetAt(1).LengtePos . Set F=%this.Positie.GetAt(3).LengtePos-%this.Positie.GetAt(2).LengtePos . Set D2=%this.Positie.GetAt(4).LengtePos-%this.Positie.GetAt(3).LengtePos . Set TussenM="C:"_C_$S(D1=D2:", D:", 1:", D1:")_D1_", F:"_F_$S(D1=D2:"", 1:", D2:"_D2)_", E:"_E Else If N>4 Do . ; Calculate sequential interdistances . Set TussenM="C:"_C . For i=1:1:N-1 Do .. Set T(i)=%this.Positie.GetAt(i+1).LengtePos-%this.Positie.GetAt(i).LengtePos .. Set TussenM=TussenM_", T"_i_":"_T(i) . Set TussenM=TussenM_", E:"_E Else Do . Set TussenM="" . Quit Do:(TussenM'="") TAGWRITE^XMLWRITE(DevObj,"TUSSENMATEN",TussenM,KadVertaler.VertaalXmlLabelAttribute("lblBeslag_Tussenafstanden")) Quit ]]> %String PositieVector:TECH.Vector 1 KadObj:Prod.GADef.KaderDeur 1 %Library.String VrijeZoneMax) { Set ValidatieBericht = $$$IfLength(ValidatieBericht,"",$$$CRLF) _ "Beslagpositie "_BeslagPos.LengtePos_" in vrijezone verbinder (max="_VrijeZoneMax_")." } } Quit ValidatieBericht ]]> %Library.CacheSerialState emPSScharnierState ^Prod.GAD.emKadBeslagS AfstandBoorMaat Beslag Positie Opmerking WandDikte PositieParameters