From 34f90a1271cfd37e475dae62662e3c8681ddd89a Mon Sep 17 00:00:00 2001 From: SaraP Date: Thu, 15 Sep 2022 17:17:14 +0200 Subject: [PATCH] 3dPrinting : - utilizzo delle regioni con numero diverso di passate per forare pareti - correzioni varie. --- LuaLibs/AddManData.lua | 13 ++-- LuaLibs/CalcPaths.lua | 144 +++++++++++++++++++++++++----------- LuaLibs/CalcSlices.lua | 14 +++- LuaLibs/CalcSolids.lua | 2 +- LuaLibs/CalcToolPath.lua | 19 +++-- LuaLibs/RunSlicePalette.lua | 2 +- LuaLibs/RunViewManager.lua | 2 +- 7 files changed, 130 insertions(+), 66 deletions(-) diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index c50b80a..1d1454c 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -26,7 +26,6 @@ LEAD_IN_CRV = "LeadIn" LEAD_OUT_CRV = "LeadOut" FRAME_PART = "FramePart" START_GEOM = "Start" -SHELL_NBR_SURF = "ShellNbrSurf" TOT_SHELL_TRIM_SURF = "TotalShellSurfForTrim" MIN_LEN = 0.1 @@ -133,11 +132,12 @@ TYPE = { INNER_SHELL = 2, INFILL = 3, EXTRA_SHELL = 4, - LINK = 5, - COASTING = 6, - WIPE = 7, - RIB = 8, - AUX_SOLID = 9, + EXTRA_OUTER_SHELL = 5, + LINK = 6, + COASTING = 7, + WIPE = 8, + RIB = 9, + AUX_SOLID = 10, } PRINT_ORDER = { @@ -232,6 +232,7 @@ RIBS_CRV = "Rib" SHELL_NBR_GRP = "ShellNbrRegions" SHELL_NBR_CRV = "ShellNbrRegion" +SHELL_NBR_SURF = "ShellNbrSurf" AUX_SOLIDS_GRP = "AuxSolids" AUX_SOLIDS_CRV = "AuxSolid" diff --git a/LuaLibs/CalcPaths.lua b/LuaLibs/CalcPaths.lua index d34dbef..57a4491 100644 --- a/LuaLibs/CalcPaths.lua +++ b/LuaLibs/CalcPaths.lua @@ -183,7 +183,7 @@ local function VerifyPath( nCrvId, dStrand, vtSlicing, nGrp) end -- se non è fattibile con unica passata lo cancello if not bSingleStrand then - EgtErase( nCrvId) + EgtErase( nCrvId) return false end end @@ -211,6 +211,26 @@ end -------------------------------------------------------------------- --------------------- RIEMPIMENTI PIENI ---------------------------- +-------------------------------------------------------------------- +local function AdjustSurfForFloorCeil( nStrandDiff, nSrfTrim, nShellNbrSurfGrp) + + if EgtSurfFrChunkCount( nSrfTrim) == 0 then return end + + local nSurf = EgtCopyGlob( nSrfTrim, EgtGetParent( nSrfTrim)) + + if nShellNbrSurfGrp then + local nIdx = nStrandDiff + local nShellSurf = EgtGetFirstNameInGroup( nShellNbrSurfGrp, SHELL_NBR_SURF .. tostring( nIdx)) + while nShellSurf do + EgtSurfFrSubtract( nSurf, nShellSurf) + nIdx = nIdx + 1 + nShellSurf = EgtGetFirstNameInGroup( nShellNbrSurfGrp, SHELL_NBR_SURF .. tostring( nIdx)) + end + end + + return nSurf +end + -------------------------------------------------------------------- local function ReorderPath( vOldIds, vNewIds) @@ -262,7 +282,7 @@ local function ReorderPath( vOldIds, vNewIds) EgtSpInit() -- se racchiude più curve uso shortest path per ordinarle for j = 1, #vChildren do - local pt = EgtCP( vChildren[j]) + local pt = EgtGP( vChildren[j]) EgtSpAddPoint( pt:getX(), pt:getY(), pt:getZ(), 0, 0, pt:getX(), pt:getY(), pt:getZ(), 0, 0) end local ptS = EgtSP( nParentIdx) @@ -538,10 +558,6 @@ local function ReorderRibs( nGrp, bInvertOrder, dStrand, nMaxNbr) table.insert( vSPRibs, vIds[i]) end end - - local ptS = ORIG() - EgtSpSetOpenBound( true, SHP_OB.NEAR_PNT, ptS:getX(), ptS:getY(), ptS:getZ(), 0, 0) - local vOrd, dLen = EgtSpCalculate( SHP_TY.OPEN) EgtSpTerminate() @@ -892,22 +908,24 @@ local function CreateShellNbrSurfaces( nGrp, nShellsNbr) local nMaxShellNbrDiff = 0 local nCrvId = EgtGetFirstNameInGroup( nGrp, SHELL_NBR_CRV .. '*') while nCrvId do - -- recupero info sul gap - local nShellNbrDiff = EgtGetInfo( nCrvId, KEY_SHELL_NBR_DIFF, 'i') - -- aggiorno eventuale massimo - if nMaxShellNbrDiff < nShellNbrDiff then nMaxShellNbrDiff = nShellNbrDiff end - -- salvo gli id delle curve - if not tDiffCrvs[nShellNbrDiff] then - tDiffCrvs[nShellNbrDiff] = { nCrvId} - else - table.insert( tDiffCrvs[nShellNbrDiff], nCrvId) + if EgtCurveIsClosed( nCrvId) then + -- recupero info sul gap + local nShellNbrDiff = EgtGetInfo( nCrvId, KEY_SHELL_NBR_DIFF, 'i') + -- aggiorno eventuale massimo + if nMaxShellNbrDiff < nShellNbrDiff then nMaxShellNbrDiff = nShellNbrDiff end + -- salvo gli id delle curve + if not tDiffCrvs[nShellNbrDiff] then + tDiffCrvs[nShellNbrDiff] = { nCrvId} + else + table.insert( tDiffCrvs[nShellNbrDiff], nCrvId) + end end nCrvId = EgtGetNextName( nCrvId, SHELL_NBR_CRV .. '*') end - -- eventuale correzione del numero massimo in base al numero di pareti interne - nMaxShellNbrDiff = min( nMaxShellNbrDiff, nShellsNbr - 1) + -- eventuale correzione del numero massimo in base al numero di passate + nMaxShellNbrDiff = min( nMaxShellNbrDiff, nShellsNbr) -- costruisco per ogni valore la superficie complessiva local nSrfGrp = EgtGroup( nGrp) @@ -925,6 +943,7 @@ local function CreateShellNbrSurfaces( nGrp, nShellsNbr) local nSrfId, nCnt = EgtSurfFlatRegion( nSrfGrp, vCrvIds) for nIdSrf = nSrfId + 1, nSrfId + nCnt - 1 do EgtSurfFrAdd( nSrfId, nIdSrf) + EgtErase( nIdSrf) end EgtSetName( nSrfId, SHELL_NBR_SURF .. tostring( nDiff)) end @@ -955,7 +974,7 @@ end -------------------------------------------------------------------- local function UpdateTotalShellSurf( nSrf, nCrv, dStrand, nGrpId) - local nSrfExtraShell = EgtSurfFrFatCurve( nGrpId, nCrv, dStrand - s_dOffsCorr, false) + local nSrfExtraShell = EgtSurfFrFatCurve( nGrpId, nCrv, dStrand - s_dOffsCorr, false) if nSrfExtraShell then local vtSrfN = EgtSurfFrNormVersor( nSrf, GDB_ID.ROOT) local vtSrfExShN = EgtSurfFrNormVersor( nSrfExtraShell, GDB_ID.ROOT) @@ -971,6 +990,31 @@ end --------------------------------------------------------------------- local function ReorderExtraShells( nPathGrp, dStrand, vPtStart, bPrintInvert) + -- verifico se posso unire due tratti consecutivi della stessa shell + local nFirst = EgtGetFirstNameInGroup( nPathGrp, EXTRA_SHELL_CRV .. '*') + while nFirst do + -- recupero tratti appartenenti alla stessa shell + local vShells = EgtGetNameInGroup( nPathGrp, EgtGetName( nFirst)) + local nCurr = vShells[1] + for i = 2, #vShells do + if dist( EgtEP( nCurr), EgtSP( vShells[i])) < dStrand + GEO.EPS_SMALL then + -- unisco le curve + EgtAddCurveCompoLine( nCurr, EgtSP( vShells[i])) + EgtAddCurveCompoCurve( nCurr, vShells[i]) + else + nCurr = vShells[i] + end + end + -- check su prima e ultima curva + if nCurr ~= nFirst and dist( EgtEP( nCurr), EgtSP( nFirst)) < dStrand + GEO.EPS_SMALL then + -- unisco le curve + EgtAddCurveCompoLine( nCurr, EgtSP( nFirst)) + EgtAddCurveCompoCurve( nCurr, nFirst) + end + + nFirst = EgtGetNextName( nCurr, EXTRA_SHELL_CRV .. '*') + end + local vIds = EgtGetNameInGroup( nPathGrp, EXTRA_SHELL_CRV .. '*') if not vIds then return end @@ -1009,15 +1053,6 @@ local function ReorderExtraShells( nPathGrp, dStrand, vPtStart, bPrintInvert) if not EgtCurveIsClosed( vIds[j]) then local ptS = EgtSP( vIds[j]) local ptE = EgtEP( vIds[j]) - - if nCnt == 0 and dist( ptE, ptSCurr) < 1.5 * dStrand and EgtGetName( nCurrCrv) == EgtGetName( vIds[j]) then - nCnt = nCnt + 1 - EgtRelocateGlob( vIds[j], nCurrCrv, GDB_IN.BEFORE) - EgtSetName( vIds[j], EXTRA_SHELL_CRV .. tostring( k)) - table.remove( vIds, j) - bFound = true - break - end local bLink = dist( ptS, ptECurr) < 1.5 * dStrand @@ -1070,10 +1105,12 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d for nInd = nMaxShellNbrDiff, 1, -1 do dOffs = dOffs + LayerParams.dStrand + local nSrfDiff = EgtGetFirstNameInGroup( nShellNbrGrp, SHELL_NBR_SURF .. tostring( nInd)) local nOuterCrv = EgtGetFirstNameInGroup( nCrvGrpId, OUTER_CRV) while nOuterCrv do local nCopy = EgtCopyGlob( nOuterCrv, nGrpId) + ModifyStartPoint( nCopy, vPtStart) -- trim della curva con la regione con diverso numero di passate local nTrimCrv, nTrimCnt = EgtTrimCurveWithRegion( nCopy, nSrfDiff, false, false) @@ -1081,7 +1118,7 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d -- verifico se prima e ultima curva possono essere unite if nTrimCnt > 1 and AreSamePointApprox( EgtEP( nTrimCrv + nTrimCnt - 1), EgtSP( nTrimCrv)) then local nNewId = EgtCurveCompo( nGrpId, { nTrimCrv + nTrimCnt - 1, nTrimCrv}) - EgtChangeId( nNewId, nTrimCrv) + EgtChangeId( nNewId, nTrimCrv) nTrimCnt = nTrimCnt - 1 end @@ -1104,7 +1141,12 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d if dLen > MIN_LEN and bValid then EgtModifyCurveExtrusion( nId, LayerParams.vtSlicing) EgtSetName( nId, EXTRA_SHELL_CRV .. tostring( nMaxShellNbrDiff - nInd + 1)) - EgtSetInfo( nId, KEY_TYPE, TYPE.EXTRA_SHELL) + if nInd == LayerParams.nShellsNbr then + EgtSetInfo( nId, KEY_TYPE, TYPE.EXTRA_OUTER_SHELL) + else + EgtSetInfo( nId, KEY_TYPE, TYPE.EXTRA_SHELL) + end + -- aggiorno la superficie occupata dalle shell con quella appena calcolata UpdateTotalShellSurf( nSrfTrim, nId, LayerParams.dStrand, nGrpId) -- se la superficie si annulla non è possibile realizzare altro, quindi cancello tutte le curve rimaste @@ -1337,7 +1379,8 @@ function CalcPaths.Exec( nPartId) -- regioni con diverso numero di passate local nShellNbrGrp = EgtGetFirstNameInGroup( vLayIds[nIdx], SHELL_NBR_GRP) - CreateShellNbrSurfaces( nShellNbrGrp, LayerParams.nShellsNbr) + local nMaxShell = max( LayerParams.nShellsNbr, LayerParams.nFloorNbr, LayerParams.nCeilNbr) + CreateShellNbrSurfaces( nShellNbrGrp, nMaxShell) local nShellNbrSurfGrp = EgtGetFirstGroupInGroup( nShellNbrGrp or GDB_ID.NULL) -- recupero gli start point per il layer @@ -1365,26 +1408,33 @@ function CalcPaths.Exec( nPartId) local nSrf = EgtGetFirstNameInGroup( nCrvGrpId, LAYER_SRF) if nSrf then + local nMaxShellNbrDiff = ComputeMaxShellNbrDiff( nSrf, nShellNbrSurfGrp) + nMaxShellNbrDiff = min( nMaxShellNbrDiff, LayerParams.nShellsNbr) + -- parete esterna - local dOffs = 0.5 * LayerParams.dStrand - LayerParams.dOffs - local bOk, bExists, nSrfId = ComputeSurfOffset( nSrf, nCrvGrpId, - dOffs) - if not bOk then - EgtOutLog( 'Error on ExtOffset (layer '..tostring( nIdx)..') - CalcPaths') - elseif not bExists then - EgtOutLog( 'Warning : ExtOffset not possible (layer '..tostring( nIdx)..') - CalcPaths') - else - -- se offset riuscito, estraggo i contorni (pareti esterne) - GetPathsFromSurf( nSrfId, SHELL_CRV ..'0', TYPE.OUTER_SHELL, nGrpId, vPtStart) + local dOffs = - LayerParams.dOffs - 0.5 * LayerParams.dStrand + if nMaxShellNbrDiff < LayerParams.nShellsNbr then + dOffs = dOffs + LayerParams.dStrand + local bOk, bExists, nSrfId = ComputeSurfOffset( nSrf, nCrvGrpId, - dOffs) + if not bOk then + EgtOutLog( 'Error on ExtOffset (layer '..tostring( nIdx)..') - CalcPaths') + elseif not bExists then + EgtOutLog( 'Warning : ExtOffset not possible (layer '..tostring( nIdx)..') - CalcPaths') + else + -- se offset riuscito, estraggo i contorni (pareti esterne) + GetPathsFromSurf( nSrfId, SHELL_CRV ..'0', TYPE.OUTER_SHELL, nGrpId, vPtStart) + end + EgtErase( nSrfId) end - EgtErase( nSrfId) local vPtInnerStart = {} local vOuterShell = EgtGetNameInGroup( nGrpId, SHELL_CRV .. '0') or {} for i = 1, #vOuterShell do table.insert( vPtInnerStart, EgtSP( vOuterShell[i])) end + if #vPtInnerStart == 0 then vPtInnerStart = vPtStart end + -- pareti interne complete - local nMaxShellNbrDiff = ComputeMaxShellNbrDiff( nSrf, nShellNbrSurfGrp) for nInd = 1, LayerParams.nShellsNbr - 1 - nMaxShellNbrDiff do -- offset della superficie originale dOffs = dOffs + LayerParams.dStrand @@ -1416,17 +1466,21 @@ function CalcPaths.Exec( nPartId) -- gestione eventuale floor/ceil if nIdx <= LayerParams.nFloorNbr then + local nSurfInfill = AdjustSurfForFloorCeil( LayerParams.nFloorNbr - nIdx + 1, nSrfTrim, nShellNbrSurfGrp) or nSrfTrim if LayerParams.nFloorType == INFILL_TYPE.OFFSET then - ComputeOffsetInfill( nSrfTrim, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) + ComputeOffsetInfill( nSurfInfill, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) elseif LayerParams.nFloorType == INFILL_TYPE.ZIGZAG then - ComputeZigZagInfill( nSrfTrim, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) + ComputeZigZagInfill( nSurfInfill, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) end + EgtErase( nSurfInfill) elseif nIdx > #vLayIds - LayerParams.nCeilNbr then + local nSurfInfill = AdjustSurfForFloorCeil( LayerParams.nCeilNbr - ( #vLayIds - nIdx), nSrfTrim, nShellNbrSurfGrp) or nSrfTrim if LayerParams.nCeilType == INFILL_TYPE.OFFSET then - ComputeOffsetInfill( nSrfTrim, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) + ComputeOffsetInfill( nSurfInfill, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) elseif LayerParams.nCeilType == INFILL_TYPE.ZIGZAG then - ComputeZigZagInfill( nSrfTrim, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) + ComputeZigZagInfill( nSurfInfill, LayerParams.dStrand, LayerParams.vtSlicing, INFILL_CRV, TYPE.INFILL, vPtStart, nGrpId) end + EgtErase( nSurfInfill) end end diff --git a/LuaLibs/CalcSlices.lua b/LuaLibs/CalcSlices.lua index 326ae09..ece2511 100644 --- a/LuaLibs/CalcSlices.lua +++ b/LuaLibs/CalcSlices.lua @@ -230,9 +230,19 @@ local function SlicingExtraObjects( vtSlicing, nLay, nType, sNameGrp, sName) -- slicing oggetto local nNewId, nPntCnt, nCrvCnt, nSrfCnt = EgtPlaneSurfTmInters( ORIG() + ( dZ + dDeltaZ) * vtSlicing, vtSlicing, vIds[i], nGrp, GDB_RT.GLOB, TOLER) - -- verifico se necessario ricalcolo ( potrebbe servire per solidi ausiliari) + -- verifico se necessario ricalcolo local dCorr = 0 - if nSrfCnt > 0 then + local bOpen = false + if nType ~= TYPE.RIB and nNewId then + for nId = nNewId + nPntCnt, nNewId + nPntCnt + nCrvCnt - 1 do + if not EgtCurveIsClosed( nId) then + bOpen = true + break + end + end + end + + if nSrfCnt > 0 or bOpen then -- elimino vecchio risultato for j = nNewId, nNewId + nPntCnt + nCrvCnt + nSrfCnt - 1 do EgtErase( j) diff --git a/LuaLibs/CalcSolids.lua b/LuaLibs/CalcSolids.lua index b806d55..e1e2e46 100644 --- a/LuaLibs/CalcSolids.lua +++ b/LuaLibs/CalcSolids.lua @@ -122,7 +122,7 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams) if nType == TYPE.WIPE then return true end -- scelta del colore local Color = EgtStdColor( 'GRAY') - if nType == TYPE.OUTER_SHELL then + if nType == TYPE.OUTER_SHELL or nType == TYPE.EXTRA_OUTER_SHELL then Color = EgtStdColor( 'TEAL') elseif nType == TYPE.INNER_SHELL or nType == TYPE.EXTRA_SHELL then Color = EgtStdColor( 'ORANGE') diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index 7cadfc6..b4389df 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -94,14 +94,13 @@ local function AddLink( vCrv, nTpathGrpId, nLinkType, dLinkParam, dSPOffs, dStra -- altrimenti verifico se ha senso creare raccordo -- local dDist = dist( EgtEP( vCrv[i-1]), EgtSP( vCrv[i])) local dDist = EgtPointCurveDist( EgtEP( vCrv[i-1]), vCrv[i]) - if dDist < dStrand + 2 then + if dDist < dStrand + 10 * GEO.EPS_SMALL then local nLinkId - if k > 1 then - -- modifico lo start point - local dLen = EgtCurveLength( vCrv[i-1]) - abs( dSPOffs) - EgtTrimCurveEndAtLen( vCrv[i-1], dLen) - EgtChangeClosedCurveStartPoint( vCrv[i], EgtEP( vCrv[i-1])) - end + -- modifico lo start point + local dLen = EgtCurveLength( vCrv[i-1]) - EgtIf( k > 1, abs( dSPOffs), 0) + EgtTrimCurveEndAtLen( vCrv[i-1], dLen) + EgtChangeClosedCurveStartPoint( vCrv[i], EgtEP( vCrv[i-1])) + -- aggiungo il raccordo EgtTrimCurveEndAtLen( vCrv[i-1], EgtCurveLength( vCrv[i-1]) - dLinkParam / 2) EgtTrimCurveStartAtLen( vCrv[i], dLinkParam / 2) @@ -133,7 +132,7 @@ end local function AddLeadIn( nCrvId, LayerParams, nGrpId) local ptE = EgtSP( nCrvId) - local vtTang = EgtSV( nCrvId) + local vtTang = EgtSV( nCrvId) local vtOrtho = Vector3d( vtTang) local dAng = 90 if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INF_INT_EXT) or @@ -327,7 +326,7 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, dStrand, bForceLink) if dParS and dParE then local bInvert = false local bClosed = EgtCurveIsClosed( nCrvId) - if bClosed then + if bClosed then -- se la curva è chiusa verifico i due percorsi possibili dParS->dParE e dParE->dParS local nCopyId1 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) local nCopyId2 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) @@ -348,7 +347,7 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, dStrand, bForceLink) local nCopyId = EgtCopyGlob( nCrvId, nLoopGrp) local nLinkId = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) - if dParS > dParE and not bInvert then + if dParS > dParE and not bClosed then bInvert = true dParS, dParE = dParE, dParS end diff --git a/LuaLibs/RunSlicePalette.lua b/LuaLibs/RunSlicePalette.lua index d088bea..beb3af9 100644 --- a/LuaLibs/RunSlicePalette.lua +++ b/LuaLibs/RunSlicePalette.lua @@ -34,7 +34,7 @@ function RunSlicePalette.UpdateColors( nPaletteType) if not nType or nType < TYPE.OUTER_SHELL or nType > TYPE.AUX_SOLID then nType = nOldType end nOldType = nType -- scelta del colore - if nType == TYPE.OUTER_SHELL then + if nType == TYPE.OUTER_SHELL or nType == TYPE.EXTRA_OUTER_SHELL then Color = EgtStdColor( 'TEAL') elseif nType == TYPE.INNER_SHELL or nType == TYPE.EXTRA_SHELL then Color = EgtStdColor( 'ORANGE') diff --git a/LuaLibs/RunViewManager.lua b/LuaLibs/RunViewManager.lua index eb4a99a..fcb3110 100644 --- a/LuaLibs/RunViewManager.lua +++ b/LuaLibs/RunViewManager.lua @@ -15,7 +15,7 @@ local AMD = require( 'AddManData') --------------------------------------------------------------------- local function CalcShow( nShellView, nType) if nShellView == SHELL_VIEW_TYPE.OUTER then - return ( nType == TYPE.OUTER_SHELL) + return ( nType == TYPE.OUTER_SHELL or nType == TYPE.EXTRA_OUTER_SHELL) elseif nShellView == SHELL_VIEW_TYPE.INNER then return ( nType == TYPE.INNER_SHELL) elseif nShellView == SHELL_VIEW_TYPE.INFILL then