From 4fa9e9fce4c3ffe787cf544509ed6061d54c3dc3 Mon Sep 17 00:00:00 2001 From: SaraP Date: Fri, 20 Sep 2024 12:27:58 +0200 Subject: [PATCH] - correzioni cambio profilo. --- Profiles/Profilo78 - Offset - Copy (51).nge | Bin 0 -> 342148 bytes Profiles/Profilo78 - Offset.nge | Bin 342148 -> 339193 bytes Profiles/WinConst.lua | 3 +- Profiles/WinLib/WinCalculate.lua | 463 ++++++++------------ 4 files changed, 187 insertions(+), 279 deletions(-) create mode 100644 Profiles/Profilo78 - Offset - Copy (51).nge diff --git a/Profiles/Profilo78 - Offset - Copy (51).nge b/Profiles/Profilo78 - Offset - Copy (51).nge new file mode 100644 index 0000000000000000000000000000000000000000..aa6055e4d29bc0e4958afbd9e6b8fc5560a9f604 GIT binary patch literal 342148 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 literal 0 HcmV?d00001 diff --git a/Profiles/Profilo78 - Offset.nge b/Profiles/Profilo78 - Offset.nge index aa6055e4d29bc0e4958afbd9e6b8fc5560a9f604..2c8f86bfb18d3dd7f2171f336f41265c44753793 100644 GIT binary patch delta 1159 zcmb7ESxi$|81DJ6U7%1vE2tv{X?OuW;Jpr9yMWr>1YlVKHHftW~Upki=b zD0mJ3I1kEk(036NMf@3G)-_bqEMpk~Fl>fd8DcE1 zsASmb^mkj@HN^xqC9sx4!2wfn5<{in69-I;QHYwtVxFI0#L`0RjwEz{CQ+#Q6Pj@0 zC!)mH>7c-}I`GK9`U5K;*C&%iT$M;tgjM5X$lTz5|5-|bW(F+S(+F~mF9!oItRhR1 zdq!mVjsYHf=0FUVbU+en>P63%dawus1{vO53R44IJuYvB44}lwq}e^0J-bvDJYFqo%Sl8+8+9CzqtBZR%{i#xf9ZZk@#%Hu%)$3D&g{9XEwKf z@p<~L*$Yc@_j<%^hZZDN9Cql+G2s)KkV^%*?j8jzYo(ld5x=AReBHSaPvX{;`cFm~ zIrZJWz0EAz9mJyKCQdt}ks3JZWh?eLh)(EFmZ9@6Qmj4b*pssLMS7re;^O1g5tlH2 ztJsU=Z_tVnMq_^(6|GEF;W8&MT&SYM`t77l&&#fEac`qJ_26^f^-oR2#}Ieid;QBS z?$W*+FP&d8`#xCoBeCiTcXsLWLrwQ{xT%+Cueb!iVKy{J+5^LUw}*c>>A^Sp+L9HMNnm2F>SjL2|g+yr3zM|F)AfJeNgO_;43l z5OOI9Rfk=IEeirJ$afHHgcxi${5!T?(A_y8DGC!!f|-ww%M7E9r$+1T4~Ciw&l?+D ziC3UJ71z1RC_L>GCq4>q`rua_LsO%H&O+M&n2dozo>Q}_;&<_;vvk&XbIq_c6D?K) d4~1ByS&OS~00z0_A9C8;XiEG>9crVc@^53!m74$n delta 1914 zcmZWq2~ZPP7~XwB0!hpv3K2vJlAtJ%kl=XXJ`2MXLVsqqN0flVm!EVQY1HDaj!zdP8c^k^q!t1WxGTVxZvjXkKh$PHIfb zH_c(bKo<{g0n}6k7NF?0KvrEUL{t%w%5Z>T0$LQ8VHmx|=Bp^?%a4VYH4NPt0a9fF z&7!|y!h>BgXjz7dHdf4h)^f(ME>=4MotVq5i=1! zRJ3Gh{LarSr8mQKm z&E>~Utp?re{%7VXBX8YG0={TRvM}6(gpoqBs>fa!+L&fYC|AM+P0buTWC@GEqOYVr z>J>5Gx#3X9wJWB1Cpk_b;Z{3A;|EgfTinr&O}JX1FDrMAoA8ImvGzXnrW8bql!2?a zMqZ>`VR4~vYl|4k4%>NpHwMej-I*(eqd%nAt=QIW`d#qW!)xs6ly4awL-z;DUXggC zMp$t-p!>^c7Z~Y=U6rcHEPGGyBK@AqgO>zwv_>gyQU7D=QdQjktd6_9&y~-XH zDshdY7n?^Z+=XD^M=z~pnPT{zdrz*f;9t|PcY~E%F{>pOUxb!*$?+&pFE(!?pzr8%}kvXF*PS?6X%Cuk3ez7$JcfMM<51^+dJ37i>Rz z-Zk#B1eRvcm~-bgiTnGI{;fQPE!isWw#;i89x?+~9}~v)-e<){{XB&&*(#oWbd3A$ z*%`1Uf7Y(<2dsG1LZ0CNWHdVtgphUHc_>-~q{6}83Uj@)5>6bbY0|zy`_#aPq^9u{ zwsh^3|9|e7F85R^VYVDPkG!?Wn;}nOOSj5jLJ7$Z5lWa#dOdchkg61D937a)pbLx3 z6qdIl@*VTGh@guo=d6VF*1$Y(P&YK!U11l%djfo zY!(AxeG=_(okc-(2Jl6;3@uWn(=cZG8q%Hti%^ytxS*Zcmaex5RRLOs0Vh@v3tuzA z=dbyosTMF)iXtF;qj(Z$!;|>KutHXwZK^Ejk=R5x)}b=sh6|8`5$u$GGzplV9;@4y z5|WZ;NDK;4qxu2b$yy_j*i42&BiJj)-AVt{xhDe?+w7a;Pl2zv!m%C1mIrMVF+{~* zt|=jVLtOnVE}DrKqb}5mClujv^Lf>RcXZxLa~DZZADHSC8%G{XhyWz>*P$B>wjltR<^42>Rrme@7uCpkTf@&x$w<`)BC5Xu}U k`SfTE(l7?t85*ifOG_~Xsg-_#WfO7^{oDOAA)m(m51aO>tN;K2 diff --git a/Profiles/WinConst.lua b/Profiles/WinConst.lua index 3bf0811..13ebb4f 100644 --- a/Profiles/WinConst.lua +++ b/Profiles/WinConst.lua @@ -234,8 +234,7 @@ WIN_GAPDELTAIN = 'GapDeltaIn' WIN_GAPDELTAOUT = 'GapDeltaOut' WIN_FIXED_REF = 'FixedRef' WIN_SASH_REF = 'SashRef' -WIN_MIXED_DEPTH = 'MixedDepth' -WIN_MIXED_FILLET = 'MixedFillet' +WIN_SASH_DEPTH = 'SashDepth' WIN_PRC_PHASE = 'PHASE' WIN_PRC_PROFILE_TYPE = 'PROFILE_TYPE' WIN_PRC_NTOOLS = 'NTOOLS' diff --git a/Profiles/WinLib/WinCalculate.lua b/Profiles/WinLib/WinCalculate.lua index d97723b..30c9d33 100644 --- a/Profiles/WinLib/WinCalculate.lua +++ b/Profiles/WinLib/WinCalculate.lua @@ -991,7 +991,7 @@ local function GetProfileCtrIn( nPrevOutlineId, nOutlineId, nPrevProfileId) else -- 2) pezzo del telaio con cambio profilo -- il profilo da usare dipende dal pezzo corrente: se ha figli di tipo fill allora è legato alla parte fill del cambio profilo, se ha figli di tipo sash è legato alla parte sash, - -- se ha entrambe le tipologie di figli allora è mixed split e conviene considerare parte sash perchè ha DeltaCP minore + -- se ha entrambe le tipologie di figli allora è mixed split e va considerata la parte sash ( perchè è quella utilizzata per tagliare il pezzo) local vSashChildren = EgtGetInfo( nOutlineId, WIN_SASH_CHILDREN, 'vi') if vSashChildren then sPrevCtrIn = WIN_SASH .. WIN_CTRIN @@ -1205,7 +1205,7 @@ local function CreateFrameGeo( nOutlineId, vPrevOutlineId, vNextOutlineId, nStar EgtSetInfo( nNextCurveId, WIN_SEMI_PROFILE, nNextSemiProfile) EgtSetInfo( nNextCurveId, WIN_REF_OUTLINE, vNextOutlineId[i]) EgtRelocateGlob( nNextCurveId, nCurrOffsetId, GDB_IN.BEFORE) - end + end -- trim delle curve TrimAndOrientOrderedCurveLayer( nGeoLayerId, false) @@ -1387,7 +1387,7 @@ local function CalcMixedOutlines( nPartId, nOutlineId) end --------------------------------------------------------------------- --- funzione che crea la curva di lavorazione sulla giunzione tra il pezzo di split e il pezzo di telaio con cambio profilo +-- funzione che crea la curva di riferimento sulla giunzione tra il pezzo di split e il pezzo di telaio con cambio profilo local function CalcMixedIntersections( nPartId, nOutline, vOutlines) local nGrp = EgtGroup( nPartId) @@ -1423,48 +1423,18 @@ local function CalcMixedIntersections( nPartId, nOutline, vOutlines) vtDir45:rotate( Z_AX(), EgtIf( bSashFill, 225, -45)) local nCrv3 = EgtLinePVL( nGrp, ptRef1, vtDir45, 100) local nCrv4 = EgtCopyGlob( nOutline, nGrp) - local dDeltaSashFrame = EgtGetInfo( nMainProfileId, WIN_SASH_REF, 'd') + local dDeltaSashFrame = EgtGetInfo( nMainProfileId, WIN_SASH_REF .. '1', 'd') EgtOffsetCurve( nCrv4, - dDeltaSashFrame) local ptRef2 = EgtIP( nCrv3, nCrv4, ORIG()) - -- ricavo il punto finale del tratto del telaio contro anta - local nCrv5 = EgtCopyGlob( nSplitId, nGrp) - local dSizeSplit = EgtGetInfo( nSplitProfileId, WIN_SASH_REF, 'd') - EgtOffsetCurve( nCrv5, - dSizeSplit) - local ptRef3 = EgtIP( nCrv4, nCrv5, ORIG()) - - -- creo la curva di intersezione : - -- a) taglio a 45° + -- curva di intersezione da usare come riferimento per i conti successivi local nCrv = EgtCurveCompoFromPoints( nGrp, { ptRef1, ptRef2}) - -- b) tratto lungo il telaio - if bSashFill then - EgtInvertCurve( nCrv4) - end - local dParS = EgtCurveParamAtPoint( nCrv4, ptRef2) - local dParE = EgtCurveParamAtPoint( nCrv4, ptRef3) - EgtTrimCurveStartEndAtParam( nCrv4, dParS, dParE) - - -- c) fillet - local dFillet = 0 -- EgtGetInfo( nSplitProfileId, WIN_MIXED_FILLET, 'd') - local nFillet = EgtCurveFillet( nGrp, nCrv, EgtMP( nCrv), nCrv4, EgtMP( nCrv4), dFillet, true) or GDB_ID.NULL - EgtAddCurveCompoCurve( nCrv, nFillet) - EgtAddCurveCompoCurve( nCrv, nCrv4) - - -- d) tratto lungo split - if not EgtCurveParamAtPoint( nOutline, EgtSP( nSplitId)) then - EgtInvertCurve( nCrv5) - end - local dPar = EgtCurveParamAtPoint( nCrv5, ptRef3) - EgtTrimCurveStartAtParam( nCrv5, dPar) - EgtTrimCurveEndAtLen( nCrv5, 100) - EgtAddCurveCompoCurve( nCrv, nCrv5) - + -- cancello curve di costruzione - EgtErase( { nCrv1, nCrv2, nCrv3, nCrv4, nCrv5}) - + EgtErase( { nCrv1, nCrv2, nCrv3, nCrv4}) + -- assegno riferimento EgtSetInfo( vOutlines[i], WIN_MIXED_INTERS_REF, nCrv) - end end @@ -1505,11 +1475,52 @@ local function GetProcessingInfoFromSemiProfile( nCrv, nSemiProfile) end end +--------------------------------------------------------------------- +-- funzione che calcola la lavorazione per l'innesto dello split sul telaio nel caso di cambio profilo +local function CalcMixedFrameMillingProcessings( nIntersCrv, nOutlineId, dOffs, dDepth, nSplitRef, bSashFill, nProcLayerId, nSurfGeoId) + + local nMilling = EgtCopyGlob( nIntersCrv, nProcLayerId) + EgtExtendCurveStartByLen( nMilling, 100) + + -- calcolo il tratto di outline + local nOutlineCrv = EgtCopyGlob( nOutlineId, nProcLayerId) + EgtOffsetCurve( nOutlineCrv, - dOffs) + if bSashFill then + EgtInvertCurve( nOutlineCrv) + end + local pt1 = EgtIP( nMilling, nOutlineCrv, ORIG()) + local pt2 = EgtIP( nOutlineCrv, nSplitRef, ORIG()) + local dParS = EgtCurveParamAtPoint( nOutlineCrv, pt1) + local dParE = EgtCurveParamAtPoint( nOutlineCrv, pt2) + EgtTrimCurveStartEndAtParam( nOutlineCrv, dParS, dParE) + + -- aggiungo il tratto derivante dall'outline + if not AreSamePointApprox( pt1, EgtEP( nMilling)) then + local dParTrim = EgtCurveParamAtPoint( nMilling, pt1) + EgtTrimCurveEndAtParam( nMilling, dParTrim) + end + EgtAddCurveCompoCurve( nMilling, nOutlineCrv) + + -- aggiungo tratto di uscita a 45° + local vtDir2 = EgtEV( nMilling) + vtDir2:rotate( Z_AX(), EgtIf( bSashFill, - 45, 45)) + EgtAddCurveCompoLine( nMilling, EgtEP( nMilling) + vtDir2 * 100) + + if bSashFill then + EgtInvertCurve( nMilling) + end + EgtModifyCurveThickness( nMilling, - dDepth) + EgtSetInfo( nMilling, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) + EgtTrimCurveWithRegion( nMilling, nSurfGeoId, true, false) + +end + --------------------------------------------------------------------- -- funzione che calcola le lavorazioni di profiling per un pezzo di telaio con cambio profilo local function CalcMixedFrameProfilingProcessings( nPartId, nProcLayerId, nGeoLayerId, nMainProfileId, nSurfGeoId) - -- per le lavorazioni dei profili out, left, right e in comune uso le corrispondenti curve del geo + -- a) lavorazioni profili + -- per le lavorazioni dei profili out, left, right e in comune si usano le corrispondenti curve del geo local vGeoCrvs = EgtGetAllInGroup( nGeoLayerId) for i = 1, #vGeoCrvs do -- copio curva @@ -1519,7 +1530,7 @@ local function CalcMixedFrameProfilingProcessings( nPartId, nProcLayerId, nGeoLa GetProcessingInfoFromSemiProfile( nCrv, nSemiProfile) end - -- lavorazione dei sottotratti in di sash e fill + -- lavorazioni dei sottotratti in di sash e fill local nOutlinesGrp = EgtGetFirstNameInGroup( nPartId, WIN_MIXED_OUTLINES) local vCrvs = EgtGetAllInGroup( nOutlinesGrp) local b3Profile = GetProfileLocalBox( nMainProfileId) @@ -1527,7 +1538,6 @@ local function CalcMixedFrameProfilingProcessings( nPartId, nProcLayerId, nGeoLa for i = #vCrvs, 1, -1 do -- calcolo la curva di lavorazione local nCrv = EgtCopyGlob( vCrvs[i], nProcLayerId) - EgtSetName( nCrv, WIN_GEO_IN) EgtOffsetCurve( nCrv, dOffs) EgtInvertCurve( nCrv) nCrv = EgtTrimCurveWithRegion( nCrv, nSurfGeoId, true, true) @@ -1536,87 +1546,72 @@ local function CalcMixedFrameProfilingProcessings( nPartId, nProcLayerId, nGeoLa GetProcessingInfoFromSemiProfile( nCrv, nSemiProfile) end - -- lavorazioni sulle intersezioni con gli split + -- b) lavorazioni sulle intersezioni con gli split local nIntersGrp = EgtGetFirstNameInGroup( nPartId, WIN_MIXED_INTERSECTIONS) local vInters = EgtGetAllInGroup( nIntersGrp) - local dDepth = EgtGetInfo( nMainProfileId, WIN_MIXED_DEPTH, 'd') + local nOutlineId = EgtGetInfo( nPartId, WIN_REF_OUTLINE, 'i') for i = 1, #vInters do - local nCrv = EgtCopyGlob( vInters[i], nProcLayerId) - EgtSetName( nCrv, WIN_GEO_IN) - nCrv = EgtTrimCurveWithRegion( nCrv, nSurfGeoId, true, true) - EgtSetInfo( nCrv, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) + + local bSashFill = ( EgtGetName( vCrvs[i]) == WIN_SASH) + -- recupero lo split associato e creo la curva di riferimento per le fresature + local nSplitId = EgtGetInfo( vCrvs[i], WIN_MIXED_SPLIT_REF, 'i') + local nSplitProfileId = GetOutlineProfileId( nSplitId, false) + local dRefSplit = EgtGetInfo( nSplitProfileId, WIN_SASH_REF .. '2', 'd') + local nSplitRef = EgtCopyGlob( nSplitId, nProcLayerId) + EgtOffsetCurve( nSplitRef, - dRefSplit) + + -- Fresatura 1 + local dOffs1 = EgtGetInfo( nMainProfileId, WIN_SASH_REF .. '1', 'd') + local dDepth1 = EgtGetInfo( nMainProfileId, WIN_SASH_DEPTH .. '1', 'd') + CalcMixedFrameMillingProcessings( vInters[i], nOutlineId, dOffs1, dDepth1, nSplitRef, bSashFill, nProcLayerId, nSurfGeoId) + -- Fresatura 2 + local dOffs2 = EgtGetInfo( nMainProfileId, WIN_SASH_REF .. '2', 'd') + local dDepth2 = EgtGetInfo( nMainProfileId, WIN_SASH_DEPTH .. '2', 'd') + CalcMixedFrameMillingProcessings( vInters[i], nOutlineId, dOffs2, dDepth2, nSplitRef, bSashFill, nProcLayerId, nSurfGeoId) + + EgtErase( nSplitRef) end end ---------------------------------------------------------------------- -local function CalcMixedSplitLeftRightProcessing( nOutlineId, nProfileId, sSemiProfileName, nSurfGeoId, nProcLayerId, sName) - - local nCrv = EgtCopyGlob( nOutlineId, nProcLayerId) - EgtSetName( nCrv, sName) - -- posiziono correttamente - local dDelta = GetDeltaProfile( nProfileId, sSemiProfileName) - EgtOffsetCurve( nCrv, - dDelta) - -- taglio con geo - nCrv = EgtTrimCurveWithRegion( nCrv, nSurfGeoId, true, true) - -- setto info di lavorazione - local nSemiProfile = EgtGetFirstNameInGroup( nProfileId, sSemiProfileName) - GetProcessingInfoFromSemiProfile( nCrv, nSemiProfile) - -end - --------------------------------------------------------------------- -- funzione che calcola le lavorazioni di profiling nel caso di uno split coinvolto da cambio profilo -local function CalcMixedSplitProfilingProcessings( nSplitId, nProcLayerId, nGeoLayerId, nProfileLayerId, nSurfGeoId) +local function CalcMixedSplitProfilingProcessings( nSplitId, nProcLayerId, nGeoLayerId) - -- 1) lavorazione profilo out - local nGeoOutId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_OUT) - local nCrvOutId = EgtCopyGlob( nGeoOutId, nProcLayerId) - local nSemiProfileOutId = EgtGetInfo( nCrvOutId, WIN_SEMI_PROFILE, 'i') - GetProcessingInfoFromSemiProfile( nCrvOutId, nSemiProfileOutId) - - -- 2) lavorazione profilo in - local nGeoInId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) - local nCrvInId = EgtCopyGlob( nGeoInId, nProcLayerId) - local nSemiProfileInId = EgtGetInfo( nCrvInId, WIN_SEMI_PROFILE, 'i') - GetProcessingInfoFromSemiProfile( nCrvInId, nSemiProfileInId) + -- a) lavorazione dei profili + local vGeoCrvs = EgtGetAllInGroup( nGeoLayerId) + for i = 1, #vGeoCrvs do + -- copio la curva + local nCrvId = EgtCopyGlob( vGeoCrvs[i], nProcLayerId) + -- recupero il semiprofilo associato ( per left e right è stato salvato il profilo di tipo sash) + local nSemiProfileId = EgtGetInfo( nCrvId, WIN_SEMI_PROFILE, 'i') + -- setto le info dal semiprofilo + GetProcessingInfoFromSemiProfile( nCrvId, nSemiProfileId) + end + + -- b) tagli a 45° + -- left + local nMixedLeft = EgtGetInfo( nSplitId, WIN_MIXED_REF_START, 'i') + local nIntersLeft = EgtGetInfo( nMixedLeft, WIN_MIXED_INTERS_REF, 'i') + local nMillingLeft = EgtCopyGlob( nIntersLeft, nProcLayerId) + EgtSetName( nMillingLeft, WIN_LEFT) + EgtSetInfo( nMillingLeft, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) + -- recupero profondità + local vOutlineLeft = EgtGetInfo( nSplitId, WIN_PREV_OUTLINES, 'vi') + local nProfileLeft = GetOutlineProfileId( vOutlineLeft[1], false) + local dDepthLeft = EgtGetInfo( nProfileLeft, WIN_SASH_DEPTH .. '2', 'd') + EgtModifyCurveThickness( nMillingLeft, - dDepthLeft) - -- 3) lavorazioni profili left - local nStartProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_START) - -- a) parte comune dell'outline del telaio - local nOutlineLId = EgtGetInfo( nSplitId, WIN_PREV_OUTLINES, 'i') - CalcMixedSplitLeftRightProcessing( nOutlineLId, nStartProfileId, WIN_MIXED_COMMON .. WIN_CTRIN, nSurfGeoId, nProcLayerId, WIN_LEFT) - -- b) sottotratti sash e fill - local nOutlineL1Id = EgtGetInfo( nSplitId, WIN_MIXED_REF_START, 'i') - CalcMixedSplitLeftRightProcessing( nOutlineL1Id, nStartProfileId, EgtGetName( nOutlineL1Id) .. WIN_CTRIN, nSurfGeoId, nProcLayerId, WIN_LEFT) - local nOutlineL2Id = EgtGetNext( nOutlineL1Id) - CalcMixedSplitLeftRightProcessing( nOutlineL2Id, nStartProfileId, EgtGetName( nOutlineL2Id) .. WIN_CTRIN, nSurfGeoId, nProcLayerId, WIN_LEFT) - -- c) curva di intersezione - local nOutlineL3Id = EgtGetInfo( nOutlineL1Id, WIN_MIXED_INTERS_REF, 'i') - local nLeftId = EgtCopyGlob( nOutlineL3Id, nProcLayerId) - EgtSetName( nLeftId, WIN_LEFT) - local _, dParEL = EgtCurveDomain( nOutlineL3Id) - EgtTrimCurveEndAtParam( nLeftId, dParEL - 1) - -- setto info di lavorazione - EgtSetInfo( nLeftId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) - - -- 4) lavorazioni profili right - local nEndProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_END) - -- a) parte comune dell'outline del telaio - local nOutlineRId = EgtGetInfo( nSplitId, WIN_NEXT_OUTLINES, 'i') - CalcMixedSplitLeftRightProcessing( nOutlineRId, nEndProfileId, WIN_MIXED_COMMON .. WIN_CTRIN, nSurfGeoId, nProcLayerId, WIN_RIGHT) - -- b) sottotratti sash e fill - local nOutlineR1Id = EgtGetInfo( nSplitId, WIN_MIXED_REF_END, 'i') - CalcMixedSplitLeftRightProcessing( nOutlineR1Id, nEndProfileId, EgtGetName( nOutlineR1Id) .. WIN_CTRIN, nSurfGeoId, nProcLayerId, WIN_RIGHT) - local nOutlineR2Id = EgtGetNext( nOutlineR1Id) - CalcMixedSplitLeftRightProcessing( nOutlineR2Id, nEndProfileId, EgtGetName( nOutlineR2Id) .. WIN_CTRIN, nSurfGeoId, nProcLayerId, WIN_RIGHT) - -- b) curva di intersezione - local nOutlineR3Id = EgtGetInfo( nOutlineR1Id, WIN_MIXED_INTERS_REF, 'i') - local nRightId = EgtCopyGlob( nOutlineR3Id, nProcLayerId) - EgtSetName( nRightId, WIN_RIGHT) - local _, dParER = EgtCurveDomain( nOutlineR3Id) - EgtTrimCurveEndAtParam( nRightId, dParER - 1) - -- setto info di lavorazione - EgtSetInfo( nRightId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) + -- right + local nMixedRight = EgtGetInfo( nSplitId, WIN_MIXED_REF_END, 'i') + local nIntersRight = EgtGetInfo( nMixedRight, WIN_MIXED_INTERS_REF, 'i') + local nMillingRight = EgtCopyGlob( nIntersRight, nProcLayerId) + EgtSetName( nMillingRight, WIN_RIGHT) + EgtSetInfo( nMillingRight, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) + local vOutlineRight = EgtGetInfo( nSplitId, WIN_NEXT_OUTLINES, 'vi') + local nProfileRight = GetOutlineProfileId( vOutlineRight[1], false) + local dDepthRight = EgtGetInfo( nProfileRight, WIN_SASH_DEPTH .. '2', 'd') + EgtModifyCurveThickness( nMillingRight, - dDepthRight) + EgtInvertCurve( nMillingRight) end @@ -1643,7 +1638,7 @@ local function CalcProfilingProcessings( nPartId, nOutlineId) if bChangeProfile then -- 1) caso cambio profilo : telaio o split if EgtGetName( nOutlineId) == WIN_SPLIT then - CalcMixedSplitProfilingProcessings( nOutlineId, nProcLayerId, nGeoLayerId, nProfileLayerId, nSurfGeo) + CalcMixedSplitProfilingProcessings( nOutlineId, nProcLayerId, nGeoLayerId) else CalcMixedFrameProfilingProcessings( nPartId, nProcLayerId, nGeoLayerId, nMainProfileId, nSurfGeo) end @@ -1774,87 +1769,33 @@ local function CreateTrimSurf( nGeoId, nProfileId, dGeoWidth, nLayerId) end --------------------------------------------------------------------- --- funzione che crea la superficie di trim per uno split coinvolto da cambio profilo -local function CreateMixedSplitTrimSurf( nOutlineId1, nProfileId, dExtraLen, nLayerId) +-- funzione che crea le superfici di trim per uno split coinvolto da cambio profilo ( controprofilo della parte sash del telaio e taglio a 45°) +local function CreateMixedSplitTrimSurf( nMixedOutlineId, nProfileId, dExtraLen, nLayerId) - -- recupero il frame del profilo - local nFrameId = EgtGetFirstNameInGroup( nProfileId, WIN_SECTIONFRAME) - local frProfile = EgtFR( nFrameId, GDB_ID.ROOT) - local vtDirX = frProfile:getVersX() - frProfile:invert() - - -- punto di riferimento per le estensioni degli outlines del telaio - local nIntersCrvId = EgtGetInfo( nOutlineId1, WIN_MIXED_INTERS_REF, 'i') - local nPartId = EgtGetParent( EgtGetParent( nOutlineId1)) + -- estrudo il controprofilo di tipo sash + local nPartId = EgtGetParent( EgtGetParent( nMixedOutlineId)) local nOutlineId = EgtGetInfo( nPartId, WIN_REF_OUTLINE, 'i') - local _, dParE = EgtCurveDomain( nIntersCrvId) - local _, ptOutline = EgtPointCurveDist( EgtUP( nIntersCrvId, dParE - 2), nOutlineId) - - -- primo tratto - local nGuideId1 = EgtCopy( nOutlineId1, nLayerId) - EgtExtendCurveStartByLen( nGuideId1, 2 * dExtraLen) - EgtModifyCurveEndPoint( nGuideId1, ptOutline) - -- recupero il controprofilo corrispondente - local sProfileName1 = WIN_OFST .. EgtGetName( nGuideId1) .. WIN_CTRIN - local nOrigProfileId1 = EgtGetFirstNameInGroup( nProfileId, sProfileName1) - -- aggiungo un tratto di chiusura superiore per le operazioni booleane - local nProfileId1 = EgtCopyGlob( nOrigProfileId1, nLayerId) - EgtAddCurveCompoLine( nProfileId1, EgtEP( nProfileId1) + dExtraLen * vtDirX) - -- posiziono il controprofilo grazie ai riferimenti - EgtTransform( nProfileId1, frProfile, GDB_RT.GLOB) - EgtTransform( nProfileId1, Frame3d( EgtSP( nGuideId1), - EgtSV( nGuideId1))) - -- creo la superficie di estrusione - local nStmId1 = EgtSurfTmSwept( nLayerId, nProfileId1, nGuideId1, false, WIN_SURF_APPROX) - - -- secondo tratto - local nOutlineId2 = EgtGetNext( nOutlineId1) - local nGuideId2 = EgtCopy( nOutlineId2, nLayerId) - EgtExtendCurveEndByLen( nGuideId2, 2 * dExtraLen) - EgtModifyCurveStartPoint( nGuideId2, ptOutline) - -- recupero il controprofilo corrispondente - local sProfileName2 = WIN_OFST .. EgtGetName( nGuideId2) .. WIN_CTRIN - local nOrigProfileId2 = EgtGetFirstNameInGroup( nProfileId, sProfileName2) - -- aggiungo un tratto di chiusura superiore per le operazioni booleane - local nProfileId2 = EgtCopyGlob( nOrigProfileId2, nLayerId) - EgtAddCurveCompoLine( nProfileId2, EgtEP( nProfileId2) + dExtraLen * vtDirX) - -- posiziono grazie ai riferimenti - EgtTransform( nProfileId2, frProfile, GDB_RT.GLOB) - EgtTransform( nProfileId2, Frame3d( EgtSP( nGuideId2), - EgtSV( nGuideId2))) - -- creo la superficie di estrusione - local nStmId2 = EgtSurfTmSwept( nLayerId, nProfileId2, nGuideId2, false, WIN_SURF_APPROX) - - -- creo un solido chiuso per la regione di intersezione - local nGuideId3 = EgtCopy( nIntersCrvId, nLayerId) - EgtExtendCurveEndByLen( nGuideId3, 2 * dExtraLen) - EgtExtendCurveStartByLen( nGuideId3, 2 * dExtraLen) - EgtCloseCurveCompo( nGuideId3) - EgtMove( nGuideId3, Z_AX()) - local dDepth = EgtGetInfo( nProfileId, WIN_MIXED_DEPTH, 'd') - local nStmCutId = EgtSurfTmByRegionExtrusion( nLayerId, nGuideId3, - ( dDepth + 1) * Z_AX()) + local nTrimStmId = CreateProfileSurf( nOutlineId, nProfileId, WIN_OFST .. WIN_SASH .. WIN_CTRIN, dExtraLen, nLayerId) - -- creo superficie complessiva - local nTrimStmId = EgtSurfTmByTriangles( nLayerId, { nStmId1, nStmId2}) - -- operazione booleana di add e non di subtract perchè nTrimStmId è invertita rispetto al solido del telaio, essendo stata costruita a partire dai controprofili - EgtSurfTmAdd( nTrimStmId, nStmCutId) - - -- chiudo eventuali buchi - local nLoop, nCnt = EgtExtractSurfTmLoops( nTrimStmId, nLayerId) - if nCnt == 2 then - local nStmHoleId = EgtSurfTmByFlatContour( nLayerId, nLoop + 1) - EgtInvertSurf( nStmHoleId) - nTrimStmId = EgtSurfTmByTriangles( nLayerId, { nTrimStmId, nStmHoleId}) - EgtErase( nLoop + 1) + -- creo la superficie per il taglio a 45° + local nIntersCrvId = EgtGetInfo( nMixedOutlineId, WIN_MIXED_INTERS_REF, 'i') + local nGuideId = EgtCopyGlob( nIntersCrvId, nLayerId) + EgtExtendCurveStartByLen( nGuideId, 10) + EgtExtendCurveEndByLen( nGuideId, 10) + EgtMove( nGuideId, Z_AX()) + if EgtGetName( nMixedOutlineId) ~= WIN_SASH then + EgtInvertCurve( nGuideId) end - - -- cancello curve di costruzione - EgtErase( { nProfileId1, nProfileId2, nGuideId1, nGuideId2, nGuideId3, nStmCutId, nLoop}) - - return nTrimStmId + local dDepth = EgtGetInfo( nProfileId, WIN_SASH_DEPTH .. '2', 'd') + local nCutStmId = EgtSurfTmByRegionExtrusion( nLayerId, nGuideId, - ( dDepth + 2) * Z_AX()) + EgtErase( nGuideId) + + return nTrimStmId, nCutStmId end --------------------------------------------------------------------- -- funzione che crea il solido di estrusione principale -local function CreateMainSurf( nOutlineId, dExtraLen, nProfileId, nLayerId) +local function CreateMainSurf( nOutlineId, dExtraLen, nProfileId, sSectionName, nLayerId) -- curva guida local nGuideId = EgtCopy( nOutlineId, nLayerId) @@ -1874,10 +1815,10 @@ local function CreateMainSurf( nOutlineId, dExtraLen, nProfileId, nLayerId) EgtChangeGroupFrame( nProfileId, Frame3d( EgtSP( nGuideId), - EgtSV( nGuideId))) -- recupero outline del profilo Main e lo estrudo - local nSectionId = EgtGetFirstNameInGroup( nProfileId, WIN_SECTION) + local nSectionId = EgtGetFirstNameInGroup( nProfileId, sSectionName) local nMainExtrusionId = EgtSurfTmSwept( nLayerId, nSectionId, nGuideId, false, WIN_SURF_APPROX) EgtSetName( nMainExtrusionId, WIN_SRF_MAIN) - + return nMainExtrusionId end @@ -1887,93 +1828,57 @@ local function CalcMixedFrameSolid( nOutlineId, nSolidLayerId, nProfileLayerId, -- a) SOLIDO PRINCIPALE local nMainProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) - -- recupero i vari sottotratti uniformi del pezzo + -- creo i solidi corrispondenti ai diversi sottotratti uniformi del pezzo local nMixedOutlinesGrp = EgtGetFirstNameInGroup( EgtGetParent( nSolidLayerId), WIN_MIXED_OUTLINES) local vMixedOutlines = EgtGetAllInGroup( nMixedOutlinesGrp) - -- recupero le curve di intersezione con gli split - local nMixedIntersectionsGrp = EgtGetFirstNameInGroup( EgtGetParent( nSolidLayerId), WIN_MIXED_INTERSECTIONS) - local vIntersections = EgtGetAllInGroup( nMixedIntersectionsGrp) - - -- creo i solidi corrispondenti ai diversi sottotratti local vMainExtrusions = {} for i = 1, #vMixedOutlines do - - -- creo curva guida con estensione opportuna agli estremi per facilitare il calcolo del solido : se all'estremo del pezzo estensione - -- arbitraria, altrimenti estendo fino ad incontrare il pezzo precedente/successivo nella regione dove si innesta lo split - local nGuideId = EgtCopyGlob( vMixedOutlines[i], nSolidLayerId) - if i == 1 then - EgtExtendCurveStartByLen( nGuideId, 2 * dGeoWidth) - else - local _, dParE = EgtCurveDomain( vIntersections[i-1]) - local _, ptOutline = EgtPointCurveDist( EgtUP( vIntersections[i-1], dParE - 2), nOutlineId) - EgtModifyCurveStartPoint( nGuideId, ptOutline) - end - if i == #vMixedOutlines then - EgtExtendCurveEndByLen( nGuideId, 2 * dGeoWidth) - else - local _, dParE = EgtCurveDomain( vIntersections[i]) - local _, ptOutline = EgtPointCurveDist( EgtUP( vIntersections[i], dParE - 2), nOutlineId) - EgtModifyCurveEndPoint( nGuideId, ptOutline) - end - - -- posiziono il profilo sulla guida - local nMainProfileFrameId = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME) - local frInvertMainProfile = EgtFR( nMainProfileFrameId) - frInvertMainProfile:invert() - EgtTransform( EgtGetAllInGroup( nMainProfileId), frInvertMainProfile) - EgtChangeGroupFrame( nMainProfileId, Frame3d( EgtSP( nGuideId), - EgtSV( nGuideId))) - - -- recupero la sezione e la estrudo - local nSectionId = EgtGetFirstNameInGroup( nMainProfileId, EgtGetName( vMixedOutlines[i]) .. WIN_SECTION) - local nMainExtrusionId = EgtSurfTmSwept( nSolidLayerId, nSectionId, nGuideId, false, WIN_SURF_APPROX) + local nMainExtrusionId = CreateMainSurf( vMixedOutlines[i], 2 * dGeoWidth, nMainProfileId, EgtGetName( vMixedOutlines[i]) .. WIN_SECTION, nSolidLayerId) table.insert( vMainExtrusions, nMainExtrusionId) - EgtErase( nGuideId) + end + + -- taglio i sottopezzi nei punti di intersezione per unirli + local nMixedIntersectionsGrp = EgtGetFirstNameInGroup( EgtGetParent( nSolidLayerId), WIN_MIXED_INTERSECTIONS) + local vIntersections = EgtGetAllInGroup( nMixedIntersectionsGrp) + for i = 1, #vIntersections do + -- creo la superficie di separazione tra i due sottopezzi + local bSashFill = ( EgtGetName( vMixedOutlines[i]) == WIN_SASH) + local vtDirS = EgtSV( vIntersections[i]) + vtDirS:rotate( Z_AX(), EgtIf( bSashFill, -135, 135)) + local vtDirE = EgtSV( vIntersections[i]) + vtDirE:rotate( Z_AX(), EgtIf( bSashFill, 45, -45)) + local nCrvTrim = EgtCurveCompo( nSolidLayerId, vIntersections[i], false) + EgtAddCurveCompoLine( nCrvTrim, EgtSP( nCrvTrim) + dGeoWidth * vtDirS, false) + EgtAddCurveCompoLine( nCrvTrim, EgtEP( nCrvTrim) + dGeoWidth * vtDirE) + EgtMove( nCrvTrim, Z_AX()) + local nStmTrim = EgtSurfTmByExtrusion( nSolidLayerId, nCrvTrim, - 2 * dGeoWidth * Z_AX()) + + -- taglio i due sottopezzi + EgtSurfTmSubtract( vMainExtrusions[i+1], nStmTrim) + EgtInvertSurf( nStmTrim) + EgtSurfTmSubtract( vMainExtrusions[i], nStmTrim) + + EgtErase( nCrvTrim) + EgtErase( nStmTrim) + end + + -- unisco i sottopezzi in una sola superficie + for i = 2, #vMainExtrusions do + EgtSurfTmAdd( vMainExtrusions[1], vMainExtrusions[i]) + EgtErase( vMainExtrusions[i]) end + -- creo una copia dell'estrusione principale ( usata per ferramenta) + local nOrigMainExtrusionId = EgtCopy( vMainExtrusions[1], nSolidLayerId) + EgtSetName( nOrigMainExtrusionId, WIN_SRF_ORIGMAIN) + EgtSetStatus( nOrigMainExtrusionId, GDB_ST.OFF) + -- come guida tengo solo una copia della curva di outline + local vMainGuideIds = EgtGetNameInGroup( nSolidLayerId, WIN_MAINGUIDE) + EgtErase( vMainGuideIds) local nMainGuideId = EgtCopyGlob( nOutlineId, nSolidLayerId) EgtSetName( nMainGuideId, WIN_MAINGUIDE) EgtSetStatus( nMainGuideId, GDB_ST.OFF) - - -- unifico i diversi tratti di superficie calcolati - local nMainExtrusionId = EgtSurfTmByTriangles( nSolidLayerId, vMainExtrusions) - EgtSetName( nMainExtrusionId, WIN_SRF_MAIN) - - -- taglio il solido con gli innesti degli split - for i = 1, #vIntersections do - -- creo una curva chiusa a partire dalla curva di intersezione - local nCompo = EgtCopyGlob( vIntersections[i], nSolidLayerId) - EgtExtendCurveEndByLen( nCompo, 2 * dGeoWidth) - EgtExtendCurveStartByLen( nCompo, 2 * dGeoWidth) - EgtCloseCurveCompo( nCompo) - -- creo il solido - EgtMove( nCompo, Z_AX()) - local dDepth = EgtGetInfo( nMainProfileId, WIN_MIXED_DEPTH, 'i') - local nSrfCut = EgtSurfTmByRegionExtrusion( nSolidLayerId, nCompo, - ( dDepth + 1) * Z_AX()) - -- sottraggo - EgtSurfTmSubtract( nMainExtrusionId, nSrfCut) - EgtErase( nCompo) - EgtErase( nSrfCut) - end - - -- chiudo i buchi ( caps ed eventuali parti on del solido di intersezione sul pezzo) - local nLoop, nCnt = EgtExtractSurfTmLoops( nMainExtrusionId, nSolidLayerId) - if nLoop then - local vSurfs = { nMainExtrusionId} - for nId = nLoop, nLoop + nCnt - 1 do - local nHoleStmId = EgtSurfTmByFlatContour( nSolidLayerId, nId) - EgtInvertSurf( nHoleStmId) - table.insert( vSurfs, nHoleStmId) - EgtErase( nId) - end - nMainExtrusionId = EgtSurfTmByTriangles( nSolidLayerId, vSurfs) - EgtSetName( nMainExtrusionId, WIN_SRF_MAIN) - end - - -- creo una copia dell'estrusione principale ( usata per ferramenta) - local nOrigMainExtrusionId = EgtCopy( nMainExtrusionId, nSolidLayerId) - EgtSetName( nOrigMainExtrusionId, WIN_SRF_ORIGMAIN) - EgtSetStatus( nOrigMainExtrusionId, GDB_ST.OFF) -- b) TRIM START local nPrevGeoId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_LEFT) @@ -1981,7 +1886,7 @@ local function CalcMixedFrameSolid( nOutlineId, nSolidLayerId, nProfileLayerId, local nTrimSurfStart = CreateTrimSurf( nPrevGeoId, nStartProfileId, dGeoWidth, nSolidLayerId) EgtSetName( nTrimSurfStart, WIN_SRF_START) EgtSetStatus( nTrimSurfStart, GDB_ST.OFF) - EgtSurfTmIntersect( nMainExtrusionId, nTrimSurfStart) + EgtSurfTmIntersect( vMainExtrusions[1], nTrimSurfStart) -- c) TRIM END local nNextGeoId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_RIGHT) @@ -1989,7 +1894,7 @@ local function CalcMixedFrameSolid( nOutlineId, nSolidLayerId, nProfileLayerId, local nTrimSurfEnd = CreateTrimSurf( nNextGeoId, nEndProfileId, dGeoWidth, nSolidLayerId) EgtSetName( nTrimSurfEnd, WIN_SRF_END) EgtSetStatus( nTrimSurfEnd, GDB_ST.OFF) - EgtSurfTmIntersect( nMainExtrusionId, nTrimSurfEnd) + EgtSurfTmIntersect( vMainExtrusions[1], nTrimSurfEnd) end @@ -1999,7 +1904,7 @@ local function CalcMixedSplitSolid( nOutlineId, nSolidLayerId, nProfileLayerId, -- a) creo il solido di estrusione principale local nMainProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) - local nMainExtrusionId = CreateMainSurf( nOutlineId, 2 * dGeoWidth, nMainProfileId, nSolidLayerId) + local nMainExtrusionId = CreateMainSurf( nOutlineId, 2 * dGeoWidth, nMainProfileId, WIN_SECTION, nSolidLayerId) -- creo una copia local nOrigMainExtrusionId = EgtCopy( nMainExtrusionId, nSolidLayerId) EgtSetName( nOrigMainExtrusionId, WIN_SRF_ORIGMAIN) @@ -2007,19 +1912,23 @@ local function CalcMixedSplitSolid( nOutlineId, nSolidLayerId, nProfileLayerId, -- b) trim start local nPrevProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_START) - local nPrevOutlineRef = EgtGetInfo( nOutlineId, WIN_MIXED_REF_START, 'i') - local nStmTrimStart = CreateMixedSplitTrimSurf( nPrevOutlineRef, nPrevProfileId, dGeoWidth, nSolidLayerId) + local nPrevMixedOutline = EgtGetInfo( nOutlineId, WIN_MIXED_REF_START, 'i') + local nStmTrimStart, nAuxStart = CreateMixedSplitTrimSurf( nPrevMixedOutline, nPrevProfileId, dGeoWidth, nSolidLayerId) EgtSetName( nStmTrimStart, WIN_SRF_START) EgtSetStatus( nStmTrimStart, GDB_ST.OFF) EgtSurfTmIntersect( nMainExtrusionId, nStmTrimStart) + EgtSurfTmIntersect( nMainExtrusionId, nAuxStart) + EgtErase( nAuxStart) -- c) trim end local nNextProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_END) - local nNextOutlineRef = EgtGetInfo( nOutlineId, WIN_MIXED_REF_END, 'i') - local nStmTrimEnd = CreateMixedSplitTrimSurf( nNextOutlineRef, nNextProfileId, dGeoWidth, nSolidLayerId) + local nNextMixedOutline = EgtGetInfo( nOutlineId, WIN_MIXED_REF_END, 'i') + local nStmTrimEnd, nAuxEnd = CreateMixedSplitTrimSurf( nNextMixedOutline, nNextProfileId, dGeoWidth, nSolidLayerId) EgtSetName( nStmTrimEnd, WIN_SRF_END) EgtSetStatus( nStmTrimEnd, GDB_ST.OFF) EgtSurfTmIntersect( nMainExtrusionId, nStmTrimEnd) + EgtSurfTmIntersect( nMainExtrusionId, nAuxEnd) + EgtErase( nAuxEnd) end --------------------------------------------------------------------- @@ -2049,7 +1958,7 @@ local function CalcSolid( nPartId, nOutlineId) -- a) creo il solido di estrusione principale local nMainProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) - local nMainExtrusionId = CreateMainSurf( nOutlineId, 2 * dGeoWidth, nMainProfileId, nSolidLayerId) + local nMainExtrusionId = CreateMainSurf( nOutlineId, 2 * dGeoWidth, nMainProfileId, WIN_SECTION, nSolidLayerId) -- creo una copia ( usata per calcolo ferramenta) local nOrigMainExtrusionId = EgtCopy( nMainExtrusionId, nSolidLayerId) EgtSetName( nOrigMainExtrusionId, WIN_SRF_ORIGMAIN) @@ -2551,14 +2460,14 @@ local function CalcSplitDowels( nSplitId, vOutlines, bStartOrEnd) -- è la stessa superficie utilizzata per il trim del solido nTestSurf = EgtCopyGlob( vTestSurf[i], nSplitLayerId) else + local sCtr local bChangeProfile = EgtGetInfo( nSplitId, WIN_PRF_CHANGE, 'b') or false - if not bChangeProfile then - local sCtr = WIN_OFST .. GetProfileCtrIn( nOutlineId, nSplitId, nProfileId) - nTestSurf = CreateProfileSurf( nOutlineId, nProfileId, sCtr, 100, nSplitLayerId) + if bChangeProfile then + sCtr = WIN_OFST .. WIN_SASH .. WIN_CTRIN else - local nMixedOutlineRef = EgtGetInfo( nSplitId, EgtIf( bStartOrEnd, WIN_MIXED_REF_START, WIN_MIXED_REF_END), 'i') - nTestSurf = CreateMixedSplitTrimSurf( nMixedOutlineRef, nProfileId, 100, nSplitLayerId) + sCtr = WIN_OFST .. GetProfileCtrIn( nOutlineId, nSplitId, nProfileId) end + nTestSurf = CreateProfileSurf( nOutlineId, nProfileId, sCtr, 100, nLayerId) end local nTestSurfInverted = EgtCopyGlob( nTestSurf, nSplitLayerId) EgtInvertSurf( nTestSurfInverted)