Files
Carlo Baronchelli 741791a0e4 Copia locale Iniziale
2022-05-19 16:04:07 +02:00

126 lines
4.1 KiB
Lua

-- 2019/09/23 11:30:00
-- Creazione di uno scalpello per legno
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
require( "EgtDimension")
-- Dati utensile : dichiarazione e valori standard
local TOOL = {}
TOOL.TOOLHOLDER = ''
TOOL.TOTLEN = 110
TOOL.LEN = 80
TOOL.DIAM = 20
TOOL.MAXMAT = 40
TOOL.ERR = 0
_G.TOOL = TOOL
--------------------------------------------------------------------------------
function CreateTool()
TOOL.ERR = 999
-- Parametri utensile
local sFilePath = TOOL.TOOLHOLDER
local dWDHeight = TOOL.TOTLEN
local dWDCylHeight = TOOL.LEN
local dWDDiameter = TOOL.DIAM
local dMaxMat = TOOL.MAXMAT
local dCutterHeight = dMaxMat
-- Cancello tutto
EgtNewFile()
-- Se richiesto inserisco porta utensile
local dToolHolderHeight = 0
local dToolHolderDiameter = 0
if sFilePath and sFilePath ~= "" then
-- eseguo inserimento
if not EgtInsertFile( sFilePath) then
TOOL.ERR = 1
return
end
-- recupero altezza portautensile
local P = EgtGetFirstInGroup( GDB_ID.ROOT)
dToolHolderHeight = tonumber( EgtGetInfo( P, "H")) or 0
dToolHolderDiameter = tonumber( EgtGetInfo (P, "D")) or 0
-- Altrimenti creo pezzo e layer opportuni
else
-- Creo pezzo e layer
local P = EgtGroup( GDB_ID.ROOT)
local L = EgtGroup( P)
-- altezza portautensile rimane nulla
end
-- Layer
local Part = EgtGetFirstGroupInGroup( GDB_ID.ROOT)
local WDLayer = EgtGetFirstInGroup( Part)
EgtSetName( WDLayer, 'SOLID')
local QuoteLayer = EgtGroup( Part)
EgtSetName( QuoteLayer, 'AUX')
EgtSetColor( QuoteLayer, BLACK())
if EgtGetBackground then
local colTop, colBot = EgtGetBackground()
if colTop and colBot then
local nInt = colTop:getRed() + colTop:getGreen() + colTop:getBlue() + colBot:getRed() + colBot:getGreen() + colBot:getBlue()
if nInt < 769 then
EgtSetColor( QuoteLayer, WHITE())
end
end
end
-- verifico altezza parte non tagliente
local dNoCutHeight = dWDCylHeight - dMaxMat
if dNoCutHeight < dToolHolderHeight then
TOOL.ERR = 12
return
end
-- Pseudo raggio
local dRad = 0.5 * dWDDiameter
-- Creazione parte non tagliente
if dNoCutHeight > 0.1 then
local dRadP = dRad + 0.5
local NoCutRect = EgtRectangle2P( WDLayer, { -dRadP, -dRadP, 0}, { dRadP, dRadP, 0}, GDB_RT.GRID)
local NoCutSurf = EgtSurfTmByRegionExtrusion( WDLayer, NoCutRect, {0,0,dNoCutHeight}, 0.05, GDB_RT.GRID)
EgtRotate( NoCutSurf, ORIG(), X_AX(), 90, GDB_RT.GRID)
EgtSetColor( NoCutSurf, LGRAY())
EgtErase( NoCutRect)
end
-- Creazione parte tagliente
local CutRect1 = EgtRectangle2P( WDLayer, { -dRad, -dRad, 0}, { dRad, dRad, 0}, GDB_RT.GRID)
local dRadM = dRad - 0.5
local CutRect2 = EgtRectangle2P( WDLayer, { -dRadM, -dRadM, 0}, { dRadM, dRadM, 0}, GDB_RT.GRID)
local dH = dWDCylHeight - dNoCutHeight
local CutSurf = EgtSurfTmByRegionExtrusion( WDLayer, {CutRect1, CutRect2}, { 0, 0, dH}, 0.05, GDB_RT.GRID)
EgtMove( CutSurf, Vector3d( 0, 0, dNoCutHeight), GDB_RT.GRID)
EgtRotate( CutSurf, ORIG(), X_AX(), 90, GDB_RT.GRID)
EgtSetColor( CutSurf, RED())
EgtErase( {CutRect1, CutRect2})
-- Quotatura
local ptP2 = Point3d( dRad, - dWDCylHeight, 0)
local ptP4 = Point3d( - dRad, - dWDCylHeight, 0)
local dLenghtArrow = 0.05 * dWDHeight
local dDistQuoteX = 10
local dDistQuoteY = max( dToolHolderDiameter, dWDDiameter) / 2 + 10
local dTextSize = min( 15, max( 0.1 * dWDDiameter, 0.1 * dWDHeight))
local dTextDist = 5
local sLenTxt = EgtNumToString( EgtToUiUnits( dWDCylHeight), 3)
CreateLinearDimensionOnY( QuoteLayer, ORIG(), ptP4, sLenTxt, dTextSize, dDistQuoteY,
dLenghtArrow, dTextDist, false, 'LEN', GDB_RT.GRID)
local sDiamTxt = EgtNumToString( EgtToUiUnits( dWDDiameter), 3)
CreateLinearDimensionOnX( QuoteLayer, ptP2, ptP4, sDiamTxt, dTextSize, dDistQuoteX,
dLenghtArrow, dTextDist, false, 'DIAM', GDB_RT.GRID)
TOOL.ERR = 0
end
_G.CreateTool = CreateTool