From b83e8aa9a2ddb90a205c76d114a53dc464d5b0b6 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 9 Apr 2020 08:04:18 +0000 Subject: [PATCH] DataBeamWall : - primo commit. --- BeamWall.ini | 10 ++++ ClearProcess.lua | 57 ++++++++++++++++++ DisableFeatures.lua | 48 +++++++++++++++ EnableFeatures.lua | 48 +++++++++++++++ HideAll.lua | 40 +++++++++++++ Images/ClearProcess.png | Bin 0 -> 1005 bytes Images/DisableFeatures.png | Bin 0 -> 303 bytes Images/EnableFeatures.png | Bin 0 -> 303 bytes Images/HideAll.png | Bin 0 -> 775 bytes Images/ShowAll.png | Bin 0 -> 604 bytes Images/ShowBuilding.png | Bin 0 -> 785 bytes Images/ShowSolid.png | Bin 0 -> 1172 bytes ShowAll.lua | 18 ++++++ ShowBuilding.lua | 63 ++++++++++++++++++++ ShowSolid.lua | 117 +++++++++++++++++++++++++++++++++++++ 15 files changed, 401 insertions(+) create mode 100644 BeamWall.ini create mode 100644 ClearProcess.lua create mode 100644 DisableFeatures.lua create mode 100644 EnableFeatures.lua create mode 100644 HideAll.lua create mode 100644 Images/ClearProcess.png create mode 100644 Images/DisableFeatures.png create mode 100644 Images/EnableFeatures.png create mode 100644 Images/HideAll.png create mode 100644 Images/ShowAll.png create mode 100644 Images/ShowBuilding.png create mode 100644 Images/ShowSolid.png create mode 100644 ShowAll.lua create mode 100644 ShowBuilding.lua create mode 100644 ShowSolid.lua diff --git a/BeamWall.ini b/BeamWall.ini new file mode 100644 index 0000000..82a75c1 --- /dev/null +++ b/BeamWall.ini @@ -0,0 +1,10 @@ +[Beam] +BtlEnable=1 +BaseDir=C:\EgtData\BeamWall +Button1=ClearProcess.lua,Images\ClearProcess.png,Cancella Lavorazioni Pezzo +Button2=DisableFeatures.lua,Images\DisableFeatures.png,Disabilita Lavorazioni +Button3=EnableFeatures.lua,Images\EnableFeatures.png,Abilita Lavorazioni +Button4=HideAll.lua,Images\HideAll.png,Nascondi i Pezzi non selezionati +Button5=ShowAll.lua,Images\ShowAll.png,Visualizza tutti i Pezzi +Button6=ShowSolid.lua,Images\ShowSolid.png,Visualizza/Nascondi Solido +Button7=ShowBuilding.lua,Images\ShowBuilding.png,Visualizza Struttura/Visualizza Pezzi diff --git a/ClearProcess.lua b/ClearProcess.lua new file mode 100644 index 0000000..63072cc --- /dev/null +++ b/ClearProcess.lua @@ -0,0 +1,57 @@ +-- ClearProcess.lua by Egaltech s.r.l. 2020/03/30 +-- Se la trave non è parte di un gruppo di lavoro, cancello geometrie aggiunte + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Recupero la prima trave selezionata +local ObjId = EgtGetFirstSelectedObj() +local PartId = EgtGetParent( EgtGetParent( ObjId or GDB_ID.NULL) or GDB_ID.NULL) +if not PartId then return end + +-- Recupero appartenenza a gruppi di lavoro +local vMGrps = {} +local sLst = EgtGetInfo( PartId, GDB_SI.LIST) +if sLst then + vLst = EgtSplitString( sLst) + if vLst then + for i = 1, #vLst do + local MGrpId = EgtGetParent( EgtGetParent( EgtGetParent( vLst[i]) or GDB_ID.NULL) or GDB_ID.NULL) + if MGrpId then + table.insert( vMGrps, EgtGetName( MGrpId)) + end + end + end +end + +-- Chiedo conferma della cancellazione +if #vMGrps > 0 then + local sOut = 'I seguenti gruppi di lavoro verranno cancellati :\n ' .. table.concat( vMGrps, ',') .. '.\nConfermi ?' + if not EgtOutBox( sOut, 'Cancella Lavorazioni', 'QUESTION') then + return + end +end + +-- Cancello i gruppi di lavoro e le geometrie aggiuntive relative +for i = 1, #vMGrps do + EgtRemoveMachGroup( EgtGetMachGroupId( vMGrps[i]) or GDB_ID.NULL) + EgtErase( EgtGetFirstNameInGroup( PartId, vMGrps[i]) or GDB_ID.NULL) +end + +-- Cancello eventuali altre geometrie aggiuntive per gruppi di lavoro +local LayId = EgtGetFirstLayer( PartId) +while LayId do + local NextLayId = EgtGetNextLayer( LayId) + if EgtGetInfo( LayId, GDB_SI.MGRPONLY) then + EgtErase( LayId) + end + LayId = NextLayId +end + +-- Aggiorno interfaccia grafica +EgtDeselectPartObjs( PartId) +EgtDraw() + +-- end \ No newline at end of file diff --git a/DisableFeatures.lua b/DisableFeatures.lua new file mode 100644 index 0000000..96d84f8 --- /dev/null +++ b/DisableFeatures.lua @@ -0,0 +1,48 @@ +-- DisableFeatures.lua by Egaltech s.r.l. 2020/04/06 +-- Gestione disabilitazione delle feature selezionate + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +if EgtGetSelectedObjCount() == 0 then + EgtOutBox( 'Nessuna lavorazione selezionata', 'Disabilita lavorazioni', 'ERROR') +end + +-- Elenco dei pezzi interessati +local vParts = {} + +-- Disabilito features selezionate +local nId = EgtGetFirstSelectedObj() +while nId do + -- verifico sia una feature + local nParentId = EgtGetParent( nId) + if EgtIsLayer( nParentId or GDB_ID.NULL) and EgtGetName( nParentId) == 'Processings' and + EgtGetInfo( nId, 'GRP', 'i') and EgtGetInfo( nId, 'PRC', 'i') then + EgtSetInfo( nId, 'DO', 0) + EgtSetColor( nId, Color3d( 160, 160, 160)) + local nAuxId = EgtGetInfo( nId, 'AUXID', 'i') + if nAuxId then + EgtSetColor( nId + nAuxId, Color3d( 160, 160, 160)) + end + table.insert( vParts, EgtGetParent( nParentId)) + end + nId = EgtGetNextSelectedObj() +end + +-- Cancello eventuale solido dei pezzi interessati +table.sort( vParts) +local PrevPartId = GDB_ID.NULL +for i = 1, #vParts do + if vParts[i] ~= PrevPartId then + local SolidLy = EgtGetFirstNameInGroup( vParts[i], 'Solid') + EgtErase( SolidLy or GDB_ID.NULL) + PrevPartId = vParts[i] + end +end + +EgtDeselectAll() +EgtDraw() + +-- end \ No newline at end of file diff --git a/EnableFeatures.lua b/EnableFeatures.lua new file mode 100644 index 0000000..d7ad536 --- /dev/null +++ b/EnableFeatures.lua @@ -0,0 +1,48 @@ +-- DisableFeatures.lua by Egaltech s.r.l. 2020/04/06 +-- Gestione abilitazione delle feature selezionate + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +if EgtGetSelectedObjCount() == 0 then + EgtOutBox( 'Nessuna lavorazione selezionata', 'Abilita lavorazioni', 'ERROR') +end + +-- Elenco dei pezzi interessati +local vParts = {} + +-- Abilito features selezionate +local nId = EgtGetFirstSelectedObj() +while nId do + -- verifico sia una feature + local nParentId = EgtGetParent( nId) + if EgtIsLayer( nParentId or GDB_ID.NULL) and EgtGetName( nParentId) == 'Processings' and + EgtGetInfo( nId, 'GRP', 'i') and EgtGetInfo( nId, 'PRC', 'i') then + EgtRemoveInfo( nId, 'DO') + EgtResetColor( nId) + local nAuxId = EgtGetInfo( nId, 'AUXID', 'i') + if nAuxId then + EgtResetColor( nId + nAuxId) + end + table.insert( vParts, EgtGetParent( nParentId)) + end + nId = EgtGetNextSelectedObj() +end + +-- Cancello eventuale solido dei pezzi interessati +table.sort( vParts) +local PrevPartId = GDB_ID.NULL +for i = 1, #vParts do + if vParts[i] ~= PrevPartId then + local SolidLy = EgtGetFirstNameInGroup( vParts[i], 'Solid') + EgtErase( SolidLy or GDB_ID.NULL) + PrevPartId = vParts[i] + end +end + +EgtDeselectAll() +EgtDraw() + +-- end \ No newline at end of file diff --git a/HideAll.lua b/HideAll.lua new file mode 100644 index 0000000..d8c7e8a --- /dev/null +++ b/HideAll.lua @@ -0,0 +1,40 @@ +-- HideAll.lua by Egaltech s.r.l. 2019/03/16 +-- Gestione nascondimento di tutte le Travi non selezionate + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- se non ci sono pezzi selezionati, esco +if not EgtGetFirstSelectedObj() then return end + +-- nascondo tutti i pezzi non selezionati +local bCurrPL = false +local nPartId = EgtGetFirstPart() +while nPartId do + local nStat = GDB_ST.ON + local nLayId = EgtGetFirstLayer( nPartId) + while nLayId do + local nEntId = EgtGetFirstInGroup( nLayId) + if nEntId then + nStat = EgtGetCalcStatus( nEntId) + break + else + nLayId = EgtGetNextLayer( nLayId) + end + end + if nStat ~= GDB_ST.SEL then + EgtSetMode( nPartId, GDB_MD.HIDDEN) + else + EgtDeselectPartObjs( nPartId) + if not bCurrPL then + bCurrPL = EgtSetCurrPartLayer( nPartId, EgtGetFirstLayer( nPartId)) + end + end + nPartId = EgtGetNextPart( nPartId) +end + +EgtZoom( SCE_ZM.ALL) + +-- end \ No newline at end of file diff --git a/Images/ClearProcess.png b/Images/ClearProcess.png new file mode 100644 index 0000000000000000000000000000000000000000..5b59c0c9c4451c8625f0685fe0b26019b8a25715 GIT binary patch literal 1005 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1A<9JK~z{r&6iC` zR6!iT|MUDPQ;gLWYOO=TW`q$PJXBz6Qi4RW6yYHXMe5Lpp;8_~gg!1ob%-Q2f*|OS zd5A8$nvh8c@z5z!54Blpo4H}O>N?G=^LF3v{^z}Uo0LCT-hbxJ$8YD&n>Rx!rLfx2 z#C25>k@~*bP4%D1GNrNc2X#2cDbakC5Fd5BztYy$U$%!G>o@ZF;$?C^eIO!Cpr~kq z4sBQfIL{K>SuyU?4?yn#l({m%>&=zcH6rU%`uO52=y*Ke=uq(j(EChc2m5IhXcoIx zvYRgf`ts+P^b}gxh^&21L<$=jtYTO2H_%HW5lTL9jXX%&^aX? zF^@72=pKo>)VzbQBeG-s^?_{-8)%qb#L^iIvt}3190@oe5u! zgv%Eacso2Va;#C7BJBICgNc<~yey(9dO4cT-a>6L9IK!{Qq!?Z7A9sS{{GUI<@u(9 zveepX5g2HB+$N$}HV$}2WFTL@NXMfrwN*E|;>5`+)j**=o-U3d5r>oi{Qqx%IDy%Rr&(ab zgUKmR?iN3&?^(?fcJk$aQ@0Qg-ghsOfno_JOWb5lU#$pq=Y3Z6>VLX8d(PD}3s(Q` zVC?CRKQvqNfAUdD_Si3q))NXpp8kKLW>u?*ir4?iZw$Pgdmc?V^o*g%xntEu_qAJG zzM8oDwr>ouZseD8pZJ8)&29F7NuJ^lrW+&MN@qzKT|9o`M27J#FNxACD;5K-oN;>P s|NsBx6_>w}>a|;x-E{Gxs}dsv-#c@~53^L+f&O6dboFyt=akR{0AG%H$p8QV literal 0 HcmV?d00001 diff --git a/Images/EnableFeatures.png b/Images/EnableFeatures.png new file mode 100644 index 0000000000000000000000000000000000000000..1753231062b8ea4643c696682be309fa62f6fe1d GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^svyk41|*NpQ(y*CY)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmPdi=>E|nUKT6JwTy7o-U3d5r>oi{Qqx%IDy%Rr&(ab zgUKl=DO-NdKWMH=`N`elge_AIUabgp@3qP@ um>&G!ez(Ph;Idvf`HQ9pUwlxS$iPrwW>9}J$ZelF{r5}E*Dka~*% literal 0 HcmV?d00001 diff --git a/Images/HideAll.png b/Images/HideAll.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed46afec1cf4f6c1311b307887267fc1465c131 GIT binary patch literal 775 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 m{KIJeZz??}gU)eq literal 0 HcmV?d00001 diff --git a/ShowAll.lua b/ShowAll.lua new file mode 100644 index 0000000..76100ee --- /dev/null +++ b/ShowAll.lua @@ -0,0 +1,18 @@ +-- ClearAll.lua by Egaltech s.r.l. 2017/11/16 +-- Gestione visualizzazione di tutte le Travi + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +local nId = EgtGetFirstPart() +while nId do + EgtSetMode( nId, GDB_MD.STD) + -- EgtSetStatus( nId, GDB_ST.ON) + nId = EgtGetNextPart( nId) +end + +EgtZoom( SCE_ZM.ALL) + +-- end \ No newline at end of file diff --git a/ShowBuilding.lua b/ShowBuilding.lua new file mode 100644 index 0000000..1f372f7 --- /dev/null +++ b/ShowBuilding.lua @@ -0,0 +1,63 @@ +-- ShowBuilding.lua by Egaltech s.r.l. 2018/11/21 +-- Gestione visualizzazione travi come struttura + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- recupero il gruppo di assemblaggio +local AsseBaseId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'AsseBase') +if not AsseBaseId then return end + +-- recupero il primo oggetto nel gruppo e verifico se devo assemblare o disassemblare +local AsseId = EgtGetFirstInGroup( AsseBaseId) +if not AsseId then return end +local bMake = ( EgtGetGroupObjs( AsseId) == 0) + +-- ciclo sul gruppo di assemblaggio +while AsseId do + -- salvo il successivo nel gruppo dell'assemblato + local NextId = EgtGetNext( AsseId) + -- costruisco l'assemblato + if bMake then + -- recupero il pezzo sorgente + local SouId = EgtGetInfo( AsseId, GDB_SI.SOURCE, 'i') + if SouId then + EgtSetMode( SouId, GDB_MD.STD) + EgtSetStatus( SouId, GDB_ST.ON) + -- se già utilizzato, ne faccio una copia + if not EgtIsPart( SouId) then + local CopyId = EgtCopy( SouId, GDB_ID.ROOT) + if CopyId then + EgtRemoveInfo( CopyId, GDB_SI.BASE) + EgtRemoveInfo( CopyId, GDB_SI.LIST) + EgtSetInfo( CopyId, GDB_SI.COPY, SouId) + SouId = CopyId + EgtSetInfo( AsseId, GDB_SI.SOURCE, SouId) + end + end + EgtSetStatus( EgtGetFirstNameInGroup( SouId, 'Box') or GDB_ID.NULL, GDB_ST.OFF) + EgtGroupSwap( SouId, AsseId, true, true) + end + -- ritorno ai pezzi + else + local BasId = EgtGetInfo( AsseId, GDB_SI.BASE, 'i') + if BasId then + EgtGroupSwap( AsseId, BasId, true, true) + local CopId = EgtGetInfo( AsseId, GDB_SI.COPY, 'i') + if CopId then + EgtErase( AsseId) + EgtSetInfo( BasId, GDB_SI.SOURCE, CopId) + else + EgtSetStatus( EgtGetFirstNameInGroup( AsseId, 'Box') or GDB_ID.NULL, GDB_ST.ON) + end + end + end + -- passo al successivo + AsseId = NextId +end + +EgtZoom( SCE_ZM.ALL) + +-- end \ No newline at end of file diff --git a/ShowSolid.lua b/ShowSolid.lua new file mode 100644 index 0000000..3a549b3 --- /dev/null +++ b/ShowSolid.lua @@ -0,0 +1,117 @@ +-- ShowSolid.lua by Egaltech s.r.l. 2020/01/03 +-- Gestione calcolo solido di una Trave + +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Funzione per visualizzazione del solido o standard +local function Show( PartId, bSolid) + local BoxLy = EgtGetFirstNameInGroup( PartId, 'Box') + EgtSetStatus( BoxLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON)) + local OutlineLy = EgtGetFirstNameInGroup( PartId, 'Outline') + EgtSetStatus( OutlineLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON)) + local ProcessingsLy = EgtGetFirstNameInGroup( PartId, 'Processings') + EgtSetStatus( ProcessingsLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON)) + local SolidLy = EgtGetFirstNameInGroup( PartId, 'Solid') + 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 not b3Surf or b3Surf:isEmpty() or 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) + EgtMergeCurvesInCurveCompo( LoopId, 0.001) + 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) +if not PartId or not EgtIsPart( PartId) then + EgtOutBox( 'Nessuna trave selezionata', 'Show Solid', 'ERROR') + return +end +EgtDeselectAll() + +-- Recupero il Box +local BoxLy = EgtGetFirstNameInGroup( PartId, 'Box') +local BoxId = EgtGetFirstNameInGroup( BoxLy or GDB_ID.NULL, 'Box') +if not BoxId then + EgtOutBox( 'Trave senza Box', 'Show Solid', 'ERROR') + return +end + +-- Verifico esistenza del solido +local SolidLy = EgtGetFirstNameInGroup( PartId, 'Solid') +if not SolidLy then + SolidLy = EgtGroup( PartId) + EgtSetName( SolidLy, 'Solid') +end +local SolidId = EgtGetFirstNameInGroup( SolidLy, 'Solid') +if not SolidId then + SolidId = EgtSurfTmBBox( SolidLy, EgtGetBBoxGlob( BoxId, GDB_BB.STANDARD), true, GDB_RT.GLOB) + EgtSetName( SolidId, 'Solid') + EgtSetColor( SolidId, Color3d( 228, 196, 64)) + Show( PartId, true) +else + Show( PartId, ( EgtGetStatus( SolidLy) == GDB_ST.OFF)) + 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 EgtGetInfo( ProcId, 'TRIM', 'i') ~= 0 and EgtGetType( ProcId) == GDB_TY.SRF_MESH then + local NewSurfId = RegularizeTriMesh( ProcId, SolidLy, dStep) + EgtSurfTmIntersect( SolidId, NewSurfId) + if NewSurfId ~= ProcId then + EgtErase( NewSurfId) + end + end + ProcId = EgtGetNext( ProcId) +end + +EgtDraw()