DataBeam :
- correzione a lato di lavorazione su tagli lunghi - modifiche a visualizzazione solidi per regolarizzazione mesh.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- ProcessCut.lua by Egaltech s.r.l. 2019/11/26
|
||||
-- ProcessCut.lua by Egaltech s.r.l. 2020/01/07
|
||||
-- Gestione calcolo singoli tagli di lama per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -167,9 +167,9 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom)
|
||||
vtOrthoO = -Z_AX()
|
||||
elseif bHorizCut then
|
||||
vtOrthoO = Z_AX()
|
||||
elseif abs( vtN:getY()) > 0.02 and Proc.Head then
|
||||
elseif Proc.Head and b3Solid:getDimX() < BD.LEN_SHORT_PART and abs( vtN:getY()) > 0.02 and dCutV < dMaxDepth + 10 * GEO.EPS_SMALL then
|
||||
vtOrthoO = X_AX()
|
||||
elseif abs( vtN:getY()) > 0.02 and Proc.Tail then
|
||||
elseif Proc.Tail and b3Solid:getDimX() < BD.LEN_SHORT_PART and abs( vtN:getY()) > 0.02 and dCutV < dMaxDepth + 10 * GEO.EPS_SMALL then
|
||||
vtOrthoO = -X_AX()
|
||||
elseif vtN:getY() > -0.02 then
|
||||
vtOrthoO = Y_AX()
|
||||
|
||||
+56
-3
@@ -1,4 +1,4 @@
|
||||
-- ShowSolid.lua by Egaltech s.r.l. 2019/11/22
|
||||
-- ShowSolid.lua by Egaltech s.r.l. 2020/01/03
|
||||
-- Gestione calcolo solido di una Trave
|
||||
|
||||
require( 'EgtBase')
|
||||
@@ -17,6 +17,52 @@ local function Show( PartId, bSolid)
|
||||
EgtSetStatus( SolidLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.ON, GDB_ST.OFF))
|
||||
end
|
||||
|
||||
-- Funzione per regolarizzare, se necessario, la superficie della feature
|
||||
local function RegularizeTriMesh( SurfId, DestGrpId, dStep)
|
||||
-- solo per superfici trimesh con poche facce (max4)
|
||||
local nFacetCnt = EgtSurfTmFacetCount( SurfId)
|
||||
if nFacetCnt > 4 then
|
||||
return SurfId
|
||||
end
|
||||
-- box della superficie
|
||||
local b3Surf = EgtGetBBox( SurfId, GDB_BB.STANDARD)
|
||||
if b3Surf:getDimX() < 2 * dStep then
|
||||
return SurfId
|
||||
end
|
||||
-- recupero le facce e le divido in X
|
||||
local dXmin = b3Surf:getMin():getX() - 1
|
||||
local dXmax = b3Surf:getMax():getX() + 1
|
||||
local nStep = floor( ( dXmax - dXmin) / dStep + 0.9)
|
||||
dStep = ( dXmax - dXmin) / nStep
|
||||
local NewSurfId
|
||||
for nF = 0, nFacetCnt - 1 do
|
||||
local FacId = EgtCopySurfTmFacet( SurfId, nF, DestGrpId)
|
||||
local b3Fac = EgtGetBBox( FacId, GDB_BB.STANDARD)
|
||||
local dX2 = dXmin
|
||||
for nI = 1, nStep do
|
||||
local dX1 = dX2
|
||||
dX2 = dX2 + dStep
|
||||
if b3Fac:getMin():getX() < dX2 and b3Fac:getMax():getX() > dX1 then
|
||||
EgtCutSurfTmPlane( FacId, Point3d( dX1, 0, 0), -X_AX(), true)
|
||||
EgtCutSurfTmPlane( FacId, Point3d( dX2, 0, 0), X_AX(), false)
|
||||
local LoopId = EgtExtractSurfTmFacetLoops( FacId, 0, DestGrpId)
|
||||
EgtApproxCurve( LoopId, GDB_CA.LINES , 0.01)
|
||||
local TmpSurfId = EgtSurfTmByFlatContour( DestGrpId, LoopId, 0.01)
|
||||
EgtErase( LoopId)
|
||||
if NewSurfId then
|
||||
NewSurfId = EgtSurfTmBySewing( DestGrpId, {NewSurfId, TmpSurfId})
|
||||
else
|
||||
NewSurfId = TmpSurfId
|
||||
end
|
||||
EgtErase( FacId)
|
||||
FacId = EgtCopySurfTmFacet( SurfId, nF, DestGrpId)
|
||||
end
|
||||
end
|
||||
EgtErase( FacId)
|
||||
end
|
||||
return NewSurfId
|
||||
end
|
||||
|
||||
-- Recupero il pezzo del primo oggetto selezionato
|
||||
local ObjId = EgtGetFirstSelectedObj()
|
||||
local PartId = EgtGetParent( EgtGetParent( ObjId or GDB_ID.NULL) or GDB_ID.NULL)
|
||||
@@ -42,7 +88,8 @@ if not SolidLy then
|
||||
end
|
||||
local SolidId = EgtGetFirstNameInGroup( SolidLy, 'Solid')
|
||||
if not SolidId then
|
||||
SolidId = EgtCopyGlob( BoxId, SolidLy)
|
||||
--SolidId = EgtCopyGlob( BoxId, SolidLy)
|
||||
SolidId = EgtSurfTmBBox( SolidLy, EgtGetBBoxGlob( BoxId, GDB_BB.STANDARD), true, GDB_RT.GLOB)
|
||||
EgtSetName( SolidId, 'Solid')
|
||||
EgtSetColor( SolidId, Color3d( 228, 196, 64))
|
||||
Show( PartId, true)
|
||||
@@ -51,13 +98,19 @@ else
|
||||
EgtDraw()
|
||||
return
|
||||
end
|
||||
local b3Solid = EgtGetBBox( SolidId, GDB_BB.STANDARD)
|
||||
local dStep = 1.23 * min( max( b3Solid:getDimY(), b3Solid:getDimZ()), 2 * min( b3Solid:getDimY(), b3Solid:getDimZ()))
|
||||
|
||||
-- Ciclo sulle features
|
||||
local ProcLy = EgtGetFirstNameInGroup( PartId, 'Processings')
|
||||
local ProcId = EgtGetFirstInGroup( ProcLy)
|
||||
while ProcId do
|
||||
if EgtGetInfo( ProcId, 'DO', 'i') ~= 0 and EgtGetType( ProcId) == GDB_TY.SRF_MESH then
|
||||
EgtSurfTmIntersect( SolidId, ProcId)
|
||||
local NewSurfId = RegularizeTriMesh( ProcId, SolidLy, dStep)
|
||||
EgtSurfTmIntersect( SolidId, NewSurfId)
|
||||
if NewSurfId ~= ProcId then
|
||||
EgtErase( NewSurfId)
|
||||
end
|
||||
end
|
||||
ProcId = EgtGetNext( ProcId)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user