DataBeam :

- correzione a lato di lavorazione su tagli lunghi
- modifiche a visualizzazione solidi per regolarizzazione mesh.
This commit is contained in:
Dario Sassi
2020-01-07 18:22:45 +00:00
parent 4b5af90c95
commit 65bd3973c6
2 changed files with 59 additions and 6 deletions
+3 -3
View File
@@ -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
View File
@@ -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