From f38f5df4bf42561bacf59092d252054786d17426 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 17 Dec 2024 17:12:17 +0100 Subject: [PATCH] aggiunto il fondo del lavello. --- TemplateTool.lua | 86 ++++++--------------------- TopChicken.lua | 151 ++++++++++++++++++++++++++++++++++------------- TopChicken.nge | Bin 223 -> 297 bytes 3 files changed, 128 insertions(+), 109 deletions(-) diff --git a/TemplateTool.lua b/TemplateTool.lua index 46d1d64..6293227 100644 --- a/TemplateTool.lua +++ b/TemplateTool.lua @@ -209,9 +209,9 @@ function TOOL.CreatePart(tbLayer, sName, tbIdEntCrv, dTh, bInLoop) return end -- definisco spessore pezzo - EgtSetInfo(IdPart, 'Th', dTh) - -- INFO NECESSARIA - EgtSetInfo(IdPart, 'Paired',tostring(IdPart)) + if dTh then EgtSetInfo(IdPart, 'Th', dTh) end + -- INFO NECESSARIA + EgtSetInfo(IdPart, 'Paired',tostring(IdPart)) -- inserisco le etichette del pezzo nel centro della superofocie local ptTop = EgtCP( IdReg, GDB_RT.GLOB) @@ -379,70 +379,21 @@ end -- end -- -- --- -- Crea un contorno chiuso rettangolare come OutLoop (con diagonale da origine a ptEND) --- function CreateWaterfall( tbLayer, sNameLayer, ptEND, PrevAng, NextAng, bIsPrevWaterfall, bIsNextWaterfall) --- local OffseAng = 3 --- local NAng = NextAng/2 + OffseAng --- local PAng = PrevAng/2 + OffseAng --- if not bIsNextWaterfall then --- if NAng >= 0 then --- NAng = -90 + NextAng --- else --- NAng = -90 - NextAng --- end --- end --- if not bIsPrevWaterfall then --- if PAng >= 0 then --- PAng = -90 + PrevAng --- else --- PAng = -90 - PrevAng --- end --- end --- local IdLoop = EgtRectangle2P(tbLayer[sNameLayer],{0,0,0}, ptEND,GDB_RT.GLOB) --- local tbIdLoop = ExplodeAndNameEdges( IdLoop) --- -- definizione SideAng --- -- bla bla bla--------------------------------------------------------------------------------------------------- --- EgtSetInfo( tbIdLoop[2], 'OrigSideAng', -NAng) --- EgtSetInfo( tbIdLoop[2], 'SideAng', -NAng) --- EgtSetInfo( tbIdLoop[4], 'OrigSideAng', -PAng) --- EgtSetInfo( tbIdLoop[4], 'SideAng', -PAng) --- -- bla bla bla--------------------------------------------------------------------------------------------------- --- return tbIdLoop --- end --- -- --- -- Crea un contorno chiuso rettangolare come OutLoop (con diagonale da origine a ptEND) --- function CreateSplashtop( tbLayer, sNameLayer, ptEND, PrevAng, NextAng, bIsPrevSplashtop, bIsNextSplashtop) --- local OffseAng = 3 --- local NAng = NextAng/2 + OffseAng --- local PAng = PrevAng/2 + OffseAng --- if not bIsNextWaterfall then --- if NAng >= 0 then --- NAng = 90 - NextAng --- else --- NAng = 90 + NextAng --- end --- end --- if not bIsPrevWaterfall then --- if PAng >= 0 then --- PAng = 90 - PrevAng --- else --- PAng = 90 + PrevAng --- end --- end --- EgtOutLog(PAng) --- EgtOutLog(NAng) --- local IdLoop = EgtRectangle2P(tbLayer[sNameLayer],{0,0,0}, ptEND,GDB_RT.GLOB) --- local tbIdLoop = ExplodeAndNameEdges( IdLoop) --- -- definizione SideAng --- -- bla bla bla--------------------------------------------------------------------------------------------------- --- EgtSetInfo( tbIdLoop[2], 'OrigSideAng', -NAng) --- EgtSetInfo( tbIdLoop[2], 'SideAng', -NAng) --- EgtSetInfo( tbIdLoop[4], 'OrigSideAng', -PAng) --- EgtSetInfo( tbIdLoop[4], 'SideAng', -PAng) --- -- bla bla bla--------------------------------------------------------------------------------------------------- --- return tbIdLoop, PAng, NAng --- end --- -- +function TOOL.AddLoopToLayer(nLay, tbIdLoop, dOffset, bInvert, bInLoop) + -- local tbLoop = {} + -- for i = 1, #tbIdLoop do + -- local nNewId = EgtCopyGlob(tbIdLoop[i], nLay) + -- if bInvert then EgtInvertCurve(nNewId) end + -- table.insert(tbLoop, nNewId) + -- end + -- TOOL.SetMachiningInfo(nLay, bInLoop) + --return tbLoop + local nNewLoop = EgtCurveCompoByChain(nLay, tbIdLoop, EgtSP(tbIdLoop[1], GDB_RT.GLOB), false) + if bInvert then EgtInvertCurve(nNewLoop) end + if dOffset > 0 then EgtOffsetCurve(nNewLoop, dOffset, GDB_OT.EXTEND) end + local tbNewLoop = TOOL.ExplodeAndNameEdges( nNewLoop, bInLoop) + return tbNewLoop +end -- ------------------------------------------------------------------------------------------------------------------------- -- -- CREAZIONE/IMPORTAZIONE Loop FINE @@ -608,6 +559,7 @@ function TOOL.CreateCircularHole(nPart, ptCenter, dDiam) EgtSetName(nInLoopLay, 'InLoop') local HoleId = EgtCircle( nInLoopLay, ptCenter, dDiam, GDB_RT.GLOB) TOOL.SetMachiningInfo(nInLoopLay, true) + TOOL.CreatePart(TOOL.FindLayers(nPart),nil,{HoleId},nil,true) end diff --git a/TopChicken.lua b/TopChicken.lua index 6c17a86..ecd4226 100644 --- a/TopChicken.lua +++ b/TopChicken.lua @@ -37,13 +37,16 @@ CMP.V7 = 5 CMP.N8 = 'Dimensione Foro' -- diametro del foro CMP.T8 = 3 CMP.V8 = 5 +CMP.N9 = 'Pendenza del fondo' -- angolo di pendenza del fondo +CMP.T9 = 3 +CMP.V9 = 0.15 CMP.ResetView = false CMP.DrawSolid = true CMP.IsCabinet = true -CMP.Npar = 8 +CMP.Npar = 9 CMP.Nome = 'TopChicken' _G.CMP = CMP @@ -67,13 +70,14 @@ local dAngFrontalino = -90 local tbOrigVal={} local function OrigData() tbOrigVal.v1 = CMP.V1 - tbOrigVal.v2 = CMP.V2 - tbOrigVal.v3 = CMP.V3 - tbOrigVal.v4 = CMP.V4 - tbOrigVal.v5 = CMP.V5 - tbOrigVal.v6 = CMP.V6 - tbOrigVal.v7 = CMP.V7 - tbOrigVal.v8 = CMP.V8 + tbOrigVal.v2 = CMP.V2 + tbOrigVal.v3 = CMP.V3 + tbOrigVal.v4 = CMP.V4 + tbOrigVal.v5 = CMP.V5 + tbOrigVal.v6 = CMP.V6 + tbOrigVal.v7 = CMP.V7 + tbOrigVal.v8 = CMP.V8 + tbOrigVal.v9 = CMP.V9 end --- @@ -156,13 +160,94 @@ end -- local function WriteDataToChildPart(nParent, nPart, nEdge, dLen, dAngDx, dAngSx, dH, dTh) - EgtSetInfo(nPart, 'Parent', nParent) - EgtSetInfo(nPart, 'ParentEdge', nEdge) - EgtSetInfo(nPart, 'Len', dLen) - EgtSetInfo(nPart, 'dAngDx', dAngDx) - EgtSetInfo(nPart, 'dAngSx', dAngSx) - EgtSetInfo(nPart, 'dH', dH) - EgtSetInfo(nPart, 'dTh', dTh) + if not nPart then do return end end + if nParent then EgtSetInfo(nPart, 'Parent', nParent) end + if nEdge then EgtSetInfo(nPart, 'ParentEdge', nEdge) end + if dLen then EgtSetInfo(nPart, 'Len', dLen) end + if dAngDx then EgtSetInfo(nPart, 'dAngDx', dAngDx) end + if dAgnSx then EgtSetInfo(nPart, 'dAngSx', dAngSx) end + if dH then EgtSetInfo(nPart, 'dH', dH) end + if dTh then EgtSetInfo(nPart, 'dTh', dTh) end +end + +-- sNamePartDest deve essere il pezzo al cui lato A1 si attacca il lato A4 del pezzo Bottom +local function CreateBottomPart( tbIdLoop, sNamePartDest, nParent) + -- creo il fondo del lavello + local tbPart = {} + local Pz_Bottom = TOOL.CreatePartLayer('Bottom', sUNICode) + tbPart.sName = 'Bottom' + tbPart.dTh = CMP.SB + tbPart.sDestRefOff = '0,0,-x' + tbPart.sRefOff = '0,0,0' + tbPart.dPairAng = 90 + local tbLayerBottom = TOOL.FindLayers(Pz_Bottom) + local bInvert = true + local bInLoop = false + local tbOutLoop = TOOL.AddLoopToLayer(tbLayerBottom['OutLoop'], tbIdLoop, CMP.SWater, bInvert, bInLoop) -- il loop viene aggiunto ma nella posizione da inloop del piano cucina, non come nuovo pezzo messo nell'origine + TOOL.CreatePart(tbLayerBottom,tbPart.sName,tbOutLoop,tbPart.dTh,bInLoop) + -- creo il foro + local ptCenter = EgtGP( EgtGetFirstInGroup(tbLayerBottom['Region']), GDB_RT.GLOB) + TOOL.CreateCircularHole( Pz_Bottom, ptCenter, CMP.DiamBore) + --TOOL.CreatePart(tbLayerBottom,tbPart.sName,{HoleId},tbPart.dTh,true) + -- creo i riferimenti e salvo i parametri del part + TOOL.CreateReference( sUNICode, sNamePartDest, 'OutLoop', 'A1', 'R1', tbPart.dTh, tbPart.sDestRefOff) + TOOL.CreateReference(sUNICode, tbPart.sName, 'OutLoop', 'A4', 'R4', 0, tbPart.sRefOff) + TOOL.SetPairInfo(sUNICode, tbPart.sName, 'R4', sNamePartDest, 'R1', -1, tbPart.dPairAng, 4) + WriteDataToChildPart(nParent, Pz_Bottom, nEdge,tbPart.dLen,tbPart.dAngBR, tbPart.dAngBL, tbPart.dH, tbPart.dTh) +end + +local function CreateSplitBottomPart( tbIdLoop, nParent) + -- creo il fondo diviso in un numero di pezzi pari ai lati del loop passato + local nLay = EgtGetParent(tbIdLoop[1]) + local nLoop = EgtCurveCompoByChain(nLay, tbIdLoop, EgtSP(tbIdLoop[1], GDB_RT.GLOB), false) + local ptCenter = EgtGP(nLoop, GDB_RT.GLOB) + EgtErase(nLoop) + local nPrev = 0 + local nFirst = 0 + local tbSplitBottom = {} + -- creo i part con tutte le info + for i = 1, #tbIdLoop do + local tbPart = {} + local Pz_Bottom = TOOL.CreatePartLayer('BottomA'..tostring(i), sUNICode) + if i == 1 then nFirst = Pz_Bottom end + tbPart.sName = 'BottomA'..tostring(i) + tbPart.nId = Pz_Bottom + tbPart.nEdge = i + tbPart.dTh = CMP.SB + EgtSetInfo(Pz_Bottom, 'dTh', CMP.SB) + tbPart.sDestRefOff = '0,0,-x' + tbPart.sRefOff = '0,0,0' + tbPart.dPairAng = 90 - CMP.dSlopeAng + EgtSetInfo(Pz_Bottom, 'PairAng', tbPart.dPairAng) + tbPart.nJunctionType = 3 + tbPart.dH = EgtPointCurveDist( ptCenter, tbIdLoop[i], GDB_RT.GLOB) + tbPart.nPrev = nPrev + if i > 1 then tbSplitBottom[nPrev].nNext = Pz_Bottom end + tbSplitBottom[Pz_Bottom] = tbPart + nPrev = Pz_Bottom + end + tbSplitBottom[nPrev].nNext = nFirst + tbSplitBottom[nFirst].nPrev = nPrev + + -- scorro i part e costruisco effettivamente i pezzi in funzione del precedente e del successivo + for nPart, tbPart in pairs(tbSplitBottom) do + local tbLayerBottom = TOOL.FindLayers(nPart) + local bInLoop = false + TOOL.CreateParetina( tbPart.nEdge, tbIdLoop, tbPart) + local tbPartLoop = TOOL.CreateAdjustedPart( tbLayerBottom['OutLoop'],tbPart.dLen, tbPart.dH, tbPart.dAngBL, tbPart.dAngBR) + TOOL.CreatePart(tbLayerBottom,tbPart.sName,tbPartLoop,tbPart.dTh,bInLoop) + TOOL.SetMachiningInfo(tbLayerBottom['OutLoop'], false) + if tbPart.dSideAngL then TOOL.SetSideAng(tbLayerBottom['OutLoop'], 'A2', tbPart.dSideAngL) end + if tbPart.dSideAngR then TOOL.SetSideAng(tbLayerBottom['OutLoop'], 'A4', tbPart.dSideAngR) end + -- creo i riferimenti e salvo i parametri del part + local sNamePartDest = 'InPartA'..tostring(tbPart.nEdge) + TOOL.CreateReference( sUNICode, sNamePartDest, 'OutLoop', 'A1', 'R1', tbPart.dTh, tbPart.sDestRefOff) + TOOL.CreateReference(sUNICode, tbPart.sName, 'OutLoop', 'A3', 'R3', 0, tbPart.sRefOff) + TOOL.SetPairInfo(sUNICode, tbPart.sName, 'R3', sNamePartDest, 'R1', -1, tbPart.dPairAng, 4) + WriteDataToChildPart(nParent, nPart, nEdge,tbPart.dLen,tbPart.dAngBR, tbPart.dAngBL, tbPart.dH, tbPart.dTh) + end + + return tbSplitBottom end -- Confronto i dati del file.dat con quelli letti da programma @@ -177,6 +262,7 @@ local function IsDataChanged() if math.abs(CMP.V6 - tbOrigVal.v6) > 0.5 then bOk = bOk or true end if math.abs(CMP.V7 - tbOrigVal.v7) > 0.5 then bOk = bOk or true end if math.abs(CMP.V8 - tbOrigVal.v8) > 0.5 then bOk = bOk or true end + if math.abs(CMP.V9 - tbOrigVal.v9) > 0.005 then bOk = bOk or true end return bOk end @@ -199,6 +285,7 @@ function CMP_Draw(bPreview) CMP.SSplash = CMP.V6 -- spessore alzatine CMP.SWater = CMP.V7 -- spessore frontalini CMP.DiamBore = CMP.V8 -- spessore back + CMP.dSlopeAng = CMP.V9 -- angolo di pendenza -- PIANO POLLO local Pz_Top = TOOL.CreatePartLayer( 'TopChicken', sUNICode) @@ -355,33 +442,13 @@ function CMP_Draw(bPreview) if tbPart.dSideAngT then TOOL.SetSideAng(tbLayer['OutLoop'], 'A3', tbPart.dSideAngT) end WriteDataToChildPart(Pz_Top, nPart, nEdge,tbPart.dLen,tbPart.dAngBR, tbPart.dAngBL, tbPart.dH, tbPart.dTh) end - -- TOOL.SaveMePlease() - -- creo il fondo del lavello - local tbPart = {} - local Pz_Bottom = TOOL.CreatePartLayer('Bottom', sUNICode) - tbPart.sName = 'Bottom' - tbPart.dLen = EgtCurveLength(tbIdInLoopTC[1]) + CMP.SWater * 2 - tbPart.dH = EgtCurveLength(tbIdInLoopTC[2]) + CMP.SWater * 2 - tbPart.dAngBL = 90 - tbPart.dAngBR = 90 - tbPart.dTh = CMP.SB - local dXOffset = - CMP.SWater * tan(45) -- side ang del InPart4 sul lato A1 - tbPart.sDestRefOff = tostring(dXOffset)..',0,-x' - tbPart.sRefOff = '0,0,0' - tbPart.dPairAng = 90 - local tbLayerBottom = TOOL.FindLayers(Pz_Bottom) - local tbIdLoop = TOOL.CreateAdjustedPart( tbLayerBottom['OutLoop'],tbPart.dLen, tbPart.dH, tbPart.dAngBL, tbPart.dAngBR) - TOOL.CreatePart(tbLayerBottom,tbPart.sName,tbIdLoop,tbPart.dTh,false) - -- creo il foro - local ptCenter = EgtGP( EgtGetFirstInGroup(tbLayerBottom['Region']), GDB_RT.GLOB) - TOOL.CreateCircularHole( Pz_Bottom, ptCenter, CMP.DiamBore) - TOOL.CreatePart(tbLayerBottom,tbPart.sName,{HoleId},tbPart.dTh,true) - -- creo i riferimenti e salvo i parametri del part - TOOL.CreateReference( sUNICode, 'InPartA4', 'OutLoop', 'A1', 'R1', tbPart.dTh, tbPart.sDestRefOff) - TOOL.CreateReference(sUNICode, tbPart.sName, 'OutLoop', 'A4', 'R4', 0, tbPart.sRefOff) - TOOL.SetPairInfo(sUNICode, tbPart.sName, 'R4', 'InPartA4', 'R1', -1, tbPart.dPairAng, 2) - WriteDataToChildPart(Pz_Top, Pz_Bottom, nEdge,tbPart.dLen,tbPart.dAngBR, tbPart.dAngBL, tbPart.dH, tbPart.dTh) + -- -- creo il fondo + CreateBottomPart( tbIdInLoopTC, 'InPartA4') + --CreateSplitBottomPart( tbIdInLoopTC, Pz_Top) + + --TOOL.SaveMePlease() + TOOL.CreateDimensionLayer() SetReference() @@ -401,7 +468,7 @@ function CMP_Draw(bPreview) OrigData() end --EgtSaveFile(EgtGetStringFromIni( "Vein3D", "Vein3D_Dir", "", EgtGetIniFile()) ..'\\'.. "FOO.nge") - EgtSaveFile("D:\\Temp\\marmo\\Vein3D\\piano_assemblato.nge") + --EgtSaveFile("D:\\Temp\\marmo\\Vein3D\\piano_assemblato.nge") end end diff --git a/TopChicken.nge b/TopChicken.nge index b83f2c0f9433acc815f443cdb5057cb974d0c065..9665110943769f1fd6b3a6339a544ba358d874bf 100644 GIT binary patch literal 297 zcmV+^0oMK>iwFP!000003WbtQZ-X!lhVPdAD|Ur8A$(0$B`7d9sqH3))FY>Ar-{q{ zzxF!N5)J4s#IYZLj|+wJkv?5n!1idSDLl|;tx-~0Mn zFrD(YE2|eKQ1Z)y)T!&JDFVXjj~NpdN{?pQAoSTtq}>lh?)@{h~yy~Vw5`|336L58!=6QSi?Mv zBg6wc5)V-*;edY&TFplxtbm~inB#?536_G;xEL%`W`VYNlcTMPqvH(39Az+%ryS$GIy0jC0zrcf`~)ZZ^C7XH3#m=aT6cWW@l>69WJMm=}+R literal 223 zcmV<503iP#iwFP!000003WbnO3&JoAhVOy=3a=Y$_9+ZuUv&zb${ctc9>kOE;{V6A z`$XoXw0+w=c@uK2{S}+~m~-fg*vxX(sWvp%&?Lc2BS!G4&Tto3vzSC$cphAf#OO zgs>TEgk%d{gsr<Ew(T)gKS(jTG0iTuk)7C?n0HwNq7F+N;wkK9m Zp2Q6NHqt4k006xdY61WN