diff --git a/TopChicken.lua b/TopChicken.lua index b65098e..449c650 100644 --- a/TopChicken.lua +++ b/TopChicken.lua @@ -56,6 +56,10 @@ local sPath = "" sPath = EgtGetStringFromIni( "Vein3D", "Vein3D_Dir", "", EgtGetIniFile()) EgtOutLog(' → '..sPath) +-- definzione delle variabile per le classi di paretine +local dAngAlzatina = 90 +local dAngFrontalino = -90 + -- Carico i dati letti da file .dat local tbOrigVal={} local function OrigData() @@ -496,11 +500,11 @@ function ImportOutLoop( tbLayer, sNameFileNGE) local tbIdLoop = ExplodeAndNameEdges( IdLoop) EgtSetInfo(tbIdLoop[1],'AF',1) - EgtSetInfo(tbIdLoop[2],'AF',1) - EgtSetInfo(tbIdLoop[3],'AF',1) - EgtSetInfo(tbIdLoop[4],'AF',1) - EgtSetInfo(tbIdLoop[5],'AF',1) - EgtSetInfo(tbIdLoop[6],'AF',1) + EgtSetInfo(tbIdLoop[2],'AF',2) + EgtSetInfo(tbIdLoop[3],'AF',2) + EgtSetInfo(tbIdLoop[4],'AF',2) + EgtSetInfo(tbIdLoop[5],'AF',2) + EgtSetInfo(tbIdLoop[6],'AF',2) EgtSetInfo(tbIdLoop[7],'AF',1) --SaveMePlease() -- definizione SideAng @@ -805,76 +809,86 @@ function CMP_Draw(bPreview) -- PIANO POLLO local Pz_Top = CreatePartLayer( 'TopChicken') - -- Creo il contorno esterno + -- Creo il contorno esterno (id degli edge esterni) local tbIdLoopTC = ImportOutLoop( FindLayers( Pz_Top), sPath .. 'TopChicken.nge') -- Creo il pezzo dato il contorno local dTh_TC = CMP.ST CreatePart( FindLayers( Pz_Top), 'TopChicken', tbIdLoopTC, dTh_TC, false) + + --INIZIO CREAZIONE PARETINE + -- tabella che contiene le tabelle con le info dei vari part + local tbPartsInfo = {} + local dThCurr = 20 + local dHCurr = 100 + local nPrev = 0 + local nNext = 0 + local nFirst = 0 + for i=1, #tbIdLoopTC do + local tbInfo = {} + tbInfo.nPrev = nPrev + local sNamePz = 'PartA'.. tostring(i) + local Pz_A = CreatePartLayer(sNamePz) + if nPrev ~= 0 then tbPartsInfo[nPrev].nNext = Pz_A end + if i == 1 then nFirst = Pz_A end + tbInfo.nId = Pz_A + tbInfo.sName = sNamePz + local nType = EgtGetInfo(tbIdLoopTC[i], 'AF', 'i') or 0 + local dPairAng = 0 + if nType == 1 then + dPairAng = dAngAlzatina + elseif nType == 2 then + dPairAng = dAngFrontalino + end + EgtSetInfo(Pz_A, 'PairAng', dPairAng) + EgtSetInfo(Pz_A, 'dTh', dThCurr) + EgtSetInfo(Pz_A, 'dH', dHCurr) + nPrev = Pz_A + tbPartsInfo[tbInfo.nId] = tbInfo + end + tbPartsInfo[nFirst].nPrev = nPrev + tbPartsInfo[nPrev].nNext = nFirst + --local nJunctionType -- 1 TrimStart, 2 TrimEnd, 3Ang local vtDirCurr = EgtSV( tbIdLoopTC[1], GDB_RT.GLOB) - local nPrev = #tbIdLoopTC + nPrev = #tbIdLoopTC local vtDirPrev = EgtEV( tbIdLoopTC[nPrev], GDB_RT.GLOB) - local nNext = 2 + nNext = 2 local vtDirNext = EgtSV( tbIdLoopTC[nNext], GDB_RT.GLOB) - -- local nTypePrev = EgtGetInfo(tbIdLoopTC[nPrev], 'AF', 'i') or 0 - -- local nTypeNext = EgtGetInfo(tbIdLoopTC[nNext], 'AF', 'i') or 0 local dPairAngPrev = 0 local dPairAngNext = 0 local dPairAng = 0 local dLen = EgtCurveLength(tbIdLoopTC[1]) local dLenPrev = EgtCurveLength(tbIdLoopTC[#tbIdLoopTC]) local dLenNext = EgtCurveLength(tbIdLoopTC[nNext]) - local tbPartsInfo = {} - local bOnLoop = false + local bOnLoop = false -- bool che indica se la faccia buona del part sta sull'edge del piano cucina o no local nJunctionType = 1 - for i=1, #tbIdLoopTC do - local tbInfo = {} - local sNamePz = 'PartA'.. tostring(i) - local Pz_A = CreatePartLayer(sNamePz) - tbInfo.nId = Pz_A - tbInfo.sName = sNamePz - local nType = EgtGetInfo(tbIdLoopTC[i], 'AF', 'i') or 0 - local dPairAng = 0 - if nType == 1 then - dPairAng = 90 - elseif nType == 2 then - dPairAng = -90 - end - EgtSetInfo(Pz_A, 'PairAng', dPairAng) - tbPartsInfo[tbInfo.nId] = tbInfo - end - for i=1,#tbIdLoopTC do local sPartName = sUNICode..'PartA'..tostring(i) local nPart = EgtGetFirstNameInGroup(GDB_ID.ROOT,sPartName) local tbInfo = tbPartsInfo[nPart] - dPairAngPrev = EgtGetInfo(nPart, 'PairAng', 'd') or 0 - dPairAngNext = EgtGetInfo(nPart, 'PairAng', 'd') or 0 + dPairAngPrev = EgtGetInfo(tbInfo.nPrev, 'PairAng', 'd') or 0 + dPairAngNext = EgtGetInfo(tbInfo.nNext, 'PairAng', 'd') or 0 dPairAng = EgtGetInfo(nPart, 'PairAng', 'd') or 0 local nType = EgtGetInfo(tbIdLoopTC[i], 'AF', 'i') or 0 vtDirNext = EgtSV( tbIdLoopTC[nNext]) - local dH = 100 + local dH = EgtGetInfo(nPart, 'dH', 'd') tbInfo.dH = dH - local dTh = 20 + local dTh = EgtGetInfo(nPart, 'dTh', 'd') if nType == 1 then ----- caratteristiche alzatina - --dPairAng = 60 tbInfo.dPairAng = dPairAng tbInfo.dSideAngT = dPairAng - 90 - dTh = 20 tbInfo.dTh = dTh tbInfo.dYOffset = dTh * tan(tbInfo.dSideAngT) --nJunctionType = 2 -- trim end --nJunctionType = 1 -- trim start - nJunctionType = 3 -- angle junction + nJunctionType = 1 -- angle junction bOnLoop = false ----- caratteristiche alzatina elseif nType == 2 then ----- caratteristiche frontalino - --dPairAng = -90 tbInfo.dPairAng = dPairAng tbInfo.dSideAngT = -( -dPairAng - 90) - dTh = 20 tbInfo.dTh = dTh tbInfo.dYOffset = dTh * tan(tbInfo.dSideAngT) nJunctionType = 3 -- angle junction @@ -885,6 +899,7 @@ function CMP_Draw(bPreview) local PAng, NAng = GetPrevNextAng(tbIdLoopTC[i]) -- calcolo l'angolo di sformo con il pezzo precedente local dXOffset = 0 + -- se i due pezzi hanno angoli di accoppiamento discordi allora uno sta sotto e uno sta sopra local bSameSide = dPairAng * dPairAngPrev > 0 if bSameSide then if nJunctionType == 3 then @@ -961,6 +976,7 @@ function CMP_Draw(bPreview) tbInfo.sDestRefOff = '0,0,-x' tbInfo.sRefOff = '0,'..tostring(tbInfo.dYOffset)..',0' end + -- passo al prossimo curr dLenPrev = EgtCurveLength(tbIdLoopTC[i]) dLen = EgtCurveLength(tbIdLoopTC[nNext]) nPrev = i @@ -968,15 +984,10 @@ function CMP_Draw(bPreview) vtDirPrev = vtDirCurr vtDirCurr = vtDirNext vtDirNext = EgtSV(nNext, GDB_RT.GLOB) - --dLenPrev = dLen - --dLen = dLenNext dLenNext = EgtCurveLength(tbIdLoopTC[nNext]) - -- nTypePrev = nType - -- nType = nTypeNext - -- nTypeNext = EgtGetInfo(tbIdLoopTC[nNext], 'AF', 'i') or 0 - dPairAngPrev = dPairAng - dPairAng = dPairAngNext - dPairAngNext = EgtGetInfo( tbIdLoopTC[nNext], 'PairAng', 'd') or 0 + --dPairAngPrev = dPairAng + --dPairAng = dPairAngNext + --dPairAngNext = EgtGetInfo( tbIdLoopTC[nNext], 'PairAng', 'd') or 0 end for nPart, tbPart in pairs( tbPartsInfo) do