- aggiunta controlli per la gestione degli edge di un part.
This commit is contained in:
+81
-48
@@ -108,6 +108,10 @@ function TOOL.RenameNewPart()
|
||||
sNewName = sNewName..sCurrName
|
||||
end
|
||||
EgtSetName(TOOL.nId,sNewName)
|
||||
|
||||
-- aggiungo anche l'info Paired
|
||||
local sPaired = EgtGetInfo(TOOL.nId, "Paired")
|
||||
if not sPaired then EgtSetInfo(TOOL.nId, "Paired", EgtNumToString(TOOL.nId)) end
|
||||
end
|
||||
|
||||
local function FindEdges(nLay, tbInfo)
|
||||
@@ -115,14 +119,13 @@ local function FindEdges(nLay, tbInfo)
|
||||
-- trova l'indice del lato tbInfo.nEdgeId, 1 based, restituito in tbInfo.nEdge
|
||||
local tbId = {}
|
||||
local nId = EgtGetFirstInGroup(nLay)
|
||||
local c = 1
|
||||
while nId do
|
||||
if tbInfo and tbInfo.nEdgeId ~= GDB_ID.NULL and tbInfo.nEdgeId then
|
||||
if nId == tbInfo.nEdgeId then tbInfo.nEdge = c end
|
||||
if nId == tbInfo.nEdgeId then tbInfo.nEdge = EgtEvalNumExpr(string.sub(EgtGetName(tbInfo.nEdgeId), 2)) end
|
||||
end
|
||||
table.insert(tbId, nId)
|
||||
local sName = EgtGetName(nId) or ""
|
||||
if string.sub(sName,1,1) == "A" then table.insert(tbId, nId) end
|
||||
nId = EgtGetNext(nId)
|
||||
c = c + 1
|
||||
end
|
||||
return tbId
|
||||
end
|
||||
@@ -982,24 +985,35 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr)
|
||||
if #tbIdLoopTC == 0 and tbInfo then
|
||||
tbIdLoopTC = TOOL.tbIdLoop
|
||||
end
|
||||
if not nEdgeId then
|
||||
if tbInfo.nEdgeId then
|
||||
nEdgeId = tbInfo.nEdgeId
|
||||
elseif tbInfo.nLayLoopParent and tbInfo.nEdge then
|
||||
nEdgeId = EgtGetFirstNameInGroup(tbInfo.nLayLoopParent, "A"..tostring(tbInfo.nEdge))
|
||||
end
|
||||
end
|
||||
|
||||
if #tbIdLoopTC == 0 then return end
|
||||
local i = tbInfo.nEdge -- posizione del lato nel layer del loop
|
||||
if dPairAngCorr == nil then dPairAngCorr = 0 end
|
||||
local nPrev = i > 1 and i - 1 or #tbIdLoopTC
|
||||
local nNext = i < #tbIdLoopTC and i + 1 or 1
|
||||
local nLay = EgtGetParent(nEdgeId)
|
||||
local nPrevEdgeId = EgtGetFirstNameInGroup(nLay, "A"..EgtNumToString(i > 1 and (i - 1) or #tbIdLoopTC)) or GDB_ID.NULL
|
||||
if nPrevEdgeId ~= GDB_ID.NULL and not AreSamePointApprox( EgtEP(nPrevEdgeId, GDB_RT.GLOB), EgtSP(nEdgeId, GDB_RT.GLOB)) then nPrevEdgeId = GDB_ID.NULL end
|
||||
local nNextEdgeId = EgtGetFirstNameInGroup(nLay, "A"..EgtNumToString(i < #tbIdLoopTC and (i + 1) or 1)) or GDB_ID.NULL
|
||||
if nNextEdgeId ~= GDB_ID.NULL and not AreSamePointApprox( EgtSP(nNextEdgeId, GDB_RT.GLOB), EgtEP(nEdgeId, GDB_RT.GLOB)) then nNextEdgeId = GDB_ID.NULL end
|
||||
if not tbInfo.nPrevId then tbInfo.nPrevId = GDB_ID.NULL end
|
||||
local dPairAng = (tbInfo.dPairAng or 0)
|
||||
dPairAng = dPairAng + dPairAngCorr
|
||||
local dPairAngPrev = (EgtGetInfo(tbInfo.nPrevId, 'PairAng', 'd') or 0) + dPairAngCorr
|
||||
if not tbInfo.nNextId then tbInfo.nNextId = GDB_ID.NULL end
|
||||
local dPairAngNext = (EgtGetInfo(tbInfo.nNextId, 'PairAng', 'd') or 0) + dPairAngCorr
|
||||
local vtDirCurr = EgtSV( tbIdLoopTC[i], GDB_RT.GLOB)
|
||||
local vtDirNext = EgtSV( tbIdLoopTC[nNext], GDB_RT.GLOB)
|
||||
local vtDirPrev = EgtEV( tbIdLoopTC[nPrev], GDB_RT.GLOB)
|
||||
local dLen = EgtCurveLength(tbIdLoopTC[i])
|
||||
local dLenPrev = EgtCurveLength(tbIdLoopTC[nPrev])
|
||||
local dLenNext = EgtCurveLength(tbIdLoopTC[nNext])
|
||||
local PrevAng, NextAng = GetPrevNextAng(tbIdLoopTC[i])
|
||||
local vtDirCurr = EgtSV( nEdgeId, GDB_RT.GLOB)
|
||||
local vtDirNext = EgtSV( nNextEdgeId, GDB_RT.GLOB)
|
||||
local vtDirPrev = EgtEV( nPrevEdgeId, GDB_RT.GLOB)
|
||||
local dLen = EgtCurveLength(nEdgeId)
|
||||
local dLenPrev = EgtCurveLength(nPrevEdgeId)
|
||||
local dLenNext = EgtCurveLength(nNextEdgeId)
|
||||
local PrevAng, NextAng = GetPrevNextAng(nEdgeId)
|
||||
local dTh = tbInfo.dTh and tbInfo.dTh or EgtGetInfo(tbInfo.nId, 'Th','d')
|
||||
local dThPrev = EgtGetInfo(tbInfo.nPrevId, 'Th','d') or 0
|
||||
local dThNext = EgtGetInfo(tbInfo.nNextId, 'Th','d') or 0
|
||||
@@ -1429,56 +1443,75 @@ local function CountInLoops(nEdgeId)
|
||||
return c
|
||||
end
|
||||
|
||||
local function GetActualEdgeNum( nLay)
|
||||
local nId = EgtGetFirstInGroup(nLay)
|
||||
local nCount = 0
|
||||
while nId ~= nil and nId ~=GDB_ID.NULL do
|
||||
local sName = EgtGetName(nId) or ""
|
||||
if string.sub(sName,1,1) == "A" then nCount = nCount + 1 end
|
||||
nId = EgtGetNext(nId)
|
||||
end
|
||||
return nCount
|
||||
end
|
||||
|
||||
local function UpdateNeighInfo()
|
||||
if not TOOL.nLayLoopParent or TOOL.nLayLoopParent == GDB_ID.NULL then TOOL.nLayLoopParent = EgtGetParent(TOOL.nEdgeId) end
|
||||
local nEdges = EgtGetGroupObjs(TOOL.nLayLoopParent)
|
||||
local nEdges = GetActualEdgeNum(TOOL.nLayLoopParent)
|
||||
-- controllo il prev
|
||||
local nPrev = TOOL.tbInfo.nEdge > 1 and TOOL.tbInfo.nEdge - 1 or nEdges -- numero ordinale della paretina precedente alla corrente
|
||||
local sNamePrev = "A"..EgtNumToString(nPrev)
|
||||
-- correggo il nome in caso l'edge appartenga ad un inloop
|
||||
if not TOOL.tbInfo.bOutLoop then sNamePrev = sNamePrev.."_I"..EgtNumToString(TOOL.tbInfo.nIn) end
|
||||
-- in nPrevId salvo già la paretina dello stesso tipo della corrente(alzatina o frontalino)
|
||||
local tbPrev = EgtGetInfo(TOOL.tbInfo.nParent, sNamePrev, "vs")
|
||||
local bSameSide = false
|
||||
if tbPrev then
|
||||
for _, NamePrev in pairs(tbPrev) do
|
||||
sNamePrev = NamePrev
|
||||
TOOL.tbInfo.nPrevId = EgtGetFirstNameInGroup( GDB_ID.ROOT, NamePrev)
|
||||
local dPairAngPrev = EgtGetInfo(TOOL.tbInfo.nPrevId, "PairAng", "d")
|
||||
if dPairAngPrev then bSameSide = TOOL.tbInfo.dPairAng * dPairAngPrev > 0 end
|
||||
if bSameSide then break end
|
||||
-- controllo che l'edge col nome precedente sia effettivamente il segmento precedente al corrente
|
||||
local nEdgePrevId = EgtGetFirstNameInGroup(TOOL.nLayLoopParent, sNamePrev)
|
||||
if AreSamePointApprox(EgtSP(TOOL.nEdgeId, GDB_ID.ROOT), EgtEP(nEdgePrevId, GDB_ID.ROOT)) then
|
||||
-- in nPrevId salvo già la paretina dello stesso tipo della corrente(alzatina o frontalino)
|
||||
local tbPrev = EgtGetInfo(TOOL.tbInfo.nParent, sNamePrev, "vs")
|
||||
local bSameSide = false
|
||||
if tbPrev then
|
||||
for _, NamePrev in pairs(tbPrev) do
|
||||
sNamePrev = NamePrev
|
||||
TOOL.tbInfo.nPrevId = EgtGetFirstNameInGroup( GDB_ID.ROOT, NamePrev)
|
||||
local dPairAngPrev = EgtGetInfo(TOOL.tbInfo.nPrevId, "PairAng", "d")
|
||||
if dPairAngPrev then bSameSide = TOOL.tbInfo.dPairAng * dPairAngPrev > 0 end
|
||||
if bSameSide then break end
|
||||
end
|
||||
end
|
||||
if not bSameSide then TOOL.tbInfo.nPrevId = GDB_ID.NULL end
|
||||
-- al precedente setto il curr come Next
|
||||
-- al corrente setto il prev
|
||||
if TOOL.tbInfo.nPrevId and TOOL.tbInfo.nPrevId ~= GDB_ID.NULL then
|
||||
EgtSetInfo(TOOL.tbInfo.nPrevId, "Next", TOOL.tbInfo.sName)
|
||||
EgtSetInfo(TOOL.tbInfo.nId, "Prev", sNamePrev)
|
||||
end
|
||||
end
|
||||
if not bSameSide then TOOL.tbInfo.nPrevId = GDB_ID.NULL end
|
||||
-- al precedente setto il curr come Next
|
||||
-- al corrente setto il prev
|
||||
if TOOL.tbInfo.nPrevId and TOOL.tbInfo.nPrevId ~= GDB_ID.NULL then
|
||||
EgtSetInfo(TOOL.tbInfo.nPrevId, "Next", TOOL.tbInfo.sName)
|
||||
EgtSetInfo(TOOL.tbInfo.nId, "Prev", sNamePrev)
|
||||
end
|
||||
-- controllo il next
|
||||
local nNext = TOOL.tbInfo.nEdge == nEdges and 1 or (TOOL.tbInfo.nEdge + 1)
|
||||
local sNameNext = "A"..EgtNumToString(nNext)
|
||||
-- correggo il nome in caso l'edge appartenga ad un inloop
|
||||
if not TOOL.tbInfo.bOutLoop then sNameNext = sNameNext.."_I"..EgtNumToString(TOOL.tbInfo.nIn) end
|
||||
-- in nNextId salvo già la paretina dello stesso tipo della corrente(alzatina o frontalino)
|
||||
local tbNext = EgtGetInfo(TOOL.tbInfo.nParent, sNameNext, "vs")
|
||||
bSameSide = false
|
||||
if tbNext then
|
||||
for _, NameNext in pairs(tbNext) do
|
||||
sNameNext = NameNext
|
||||
TOOL.tbInfo.nNextId = EgtGetFirstNameInGroup( GDB_ID.ROOT, NameNext)
|
||||
local dPairAngNext = EgtGetInfo(TOOL.tbInfo.nNextId, "PairAng", "d")
|
||||
if dPairAngNext then bSameSide = TOOL.tbInfo.dPairAng * dPairAngNext > 0 end
|
||||
if bSameSide then break end
|
||||
-- controllo che l'edge col nome successivo sia effettivamente il segmento precedente al corrente
|
||||
local nEdgeNextId = EgtGetFirstNameInGroup(TOOL.nLayLoopParent, sNameNext)
|
||||
if AreSamePointApprox(EgtEP(TOOL.nEdgeId, GDB_ID.ROOT), EgtSP(nEdgeNextId, GDB_ID.ROOT)) then
|
||||
-- in nNextId salvo già la paretina dello stesso tipo della corrente(alzatina o frontalino)
|
||||
local tbNext = EgtGetInfo(TOOL.tbInfo.nParent, sNameNext, "vs")
|
||||
local bSameSide = false
|
||||
if tbNext then
|
||||
for _, NameNext in pairs(tbNext) do
|
||||
sNameNext = NameNext
|
||||
TOOL.tbInfo.nNextId = EgtGetFirstNameInGroup( GDB_ID.ROOT, NameNext)
|
||||
local dPairAngNext = EgtGetInfo(TOOL.tbInfo.nNextId, "PairAng", "d")
|
||||
if dPairAngNext then bSameSide = TOOL.tbInfo.dPairAng * dPairAngNext > 0 end
|
||||
if bSameSide then break end
|
||||
end
|
||||
end
|
||||
if not bSameSide then TOOL.tbInfo.nNextId = GDB_ID.NULL end
|
||||
-- al successivo setto il curr come Prev
|
||||
-- al corrente setto il next
|
||||
if TOOL.tbInfo.nNextId and TOOL.tbInfo.nNextId ~= GDB_ID.NULL then
|
||||
EgtSetInfo(TOOL.tbInfo.nNextId, "Prev", TOOL.tbInfo.sName)
|
||||
EgtSetInfo(TOOL.tbInfo.nId, "Next", sNameNext)
|
||||
end
|
||||
end
|
||||
if not bSameSide then TOOL.tbInfo.nNextId = GDB_ID.NULL end
|
||||
-- al successivo setto il curr come Prev
|
||||
-- al corrente setto il next
|
||||
if TOOL.tbInfo.nNextId and TOOL.tbInfo.nNextId ~= GDB_ID.NULL then
|
||||
EgtSetInfo(TOOL.tbInfo.nNextId, "Prev", TOOL.tbInfo.sName)
|
||||
EgtSetInfo(TOOL.tbInfo.nId, "Next", sNameNext)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user