Files
frontalini/Frontalini_ecc/CompoAF/PCucinaC23.lua
T
2021-07-22 19:30:13 +02:00

656 lines
22 KiB
Lua

-- 2015/10/__
-- PIANO CUCINA CON LAVORAZIONE A L CON ANGOLO ANCHE NON RETTO , SMUSSO o RACCORDO
-- Intestazioni
require('EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua')
require( 'EgtCompo')
local Nome = 'PCucinaC23'
-- Valori limite
local LgMin = 10 -- lati
local AlfaMin = 60
local AlfaMax = 150
local RMin = 10
-- Parametri : dichiarazione e valori standard
--.T (tipo) : 0=null, 1=bool, 2=int, 3=len, 4=num, 5=string
local CMP = {}
CMP.N1 = 'A' -- lato lungo muro 'obliquo'
CMP.T1 = 3
CMP.V1 = 1800
CMP.N2 = 'B' -- lato lungo muro 'orizzontale'
CMP.T2 = 3
CMP.V2 = 2000
CMP.N3 = 'C' -- profondità lato 'obliquo'
CMP.T3 = 3
CMP.V3 = 600
CMP.N4 = 'D' -- profondità lato 'orizzontale'
CMP.T4 = 3
CMP.V4 = 500
CMP.N5 = 'a' -- angolo Alfa tra i muri (compreso tra AlfaMin e AlfaMax)
CMP.T5 = 4
CMP.V5 = 80
CMP.N6 = '\\(' --'Ch/Fill' -- opzione smusso interno a 45° / raccordo (true = raccordo)
CMP.T6 = 1
CMP.V6 = false
CMP.N7 = 'G/R' -- lunghezza 'smusso' interno a 45° o raggio di raccordo
CMP.T7 = 3
CMP.V7 = 100
CMP.N8 = '←→' -- Simmetria dx/sx (true = svuotamento a dx)
CMP.T8 = 1
CMP.V8 = false
CMP.N9 = '↑↓' -- Simmetria su/giù ('ribaltamento') (true = 'L' capovolta)
CMP.T9 = 1
CMP.V9 = false
CMP.Npar = 9
CMP.Nome = Nome
CMP.WithInt = true
_G.CMP = CMP
-- Aggiorno con ultimi valori salvati (se presenti)
CMP.DATA = EgtGetSourceDir() .. CMP.Nome ..'.dat'
LoadCompoData()
local function CMP_DrawC2(bPreview)
-- Carico i messaggi
local Msg = require('EgtCompoMsg')
-- Assegnazioni
local L1 = CMP.V1
local L2 = CMP.V2
local L3 = CMP.V3
local L4 = CMP.V4
local Alfa = CMP.V5
local L6 = CMP.V7
local Simm = CMP.V8
local Rib = CMP.V9
CMP.N7 ='G' -- smusso
local L5label = 'E' -- lato 'obliquo' interno
local L7label = 'F' -- lato 'orizzontale' interno
local D1label = 'd' -- diagonale
CMP.ERR = 0
CMP.MSG = ''
--Verifica di compatibilità dei dati di input
if L1 < LgMin then
L1 = LgMin
CMP.ERR = 1
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a ...
end
if L2 < LgMin then
L2 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 2
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if L3 < LgMin then
L3 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 3
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if L4 < LgMin then
L4 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 4
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if Alfa < AlfaMin then
Alfa = AlfaMin
if CMP.ERR == 0 then
CMP.ERR = 5
CMP.MSG = Msg[220]..AlfaMin..' e '..AlfaMax -- L'angolo Alfa deve essere compreso tra ... e ...
end
end
if Alfa > AlfaMax then
Alfa = AlfaMax
if CMP.ERR == 0 then
CMP.ERR = 6
CMP.MSG = Msg[220]..AlfaMin..' e '..AlfaMax -- L'angolo Alfa deve essere compreso tra ... e ...
end
end
if L6 < LgMin then
L6 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 7
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
-- Se Preview cancello tutto
if bPreview then
EgtNewFile()
EgtSetDefaultMaterial( BLACK())
end
-- Pezzo e Layer
local Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- pezzo
local Ly = EgtGroup(Pz,GDB_RT.LOC) -- layer della figura principale
EgtSetName(Ly,'OutLoop')
local Lr = EgtGroup(Pz,GDB_RT.LOC) -- layer regione
EgtSetName(Lr,'Region')
local Lc = EgtGroup(Pz,GDB_RT.LOC) -- layer di costruzione
local La = EgtGroup(Pz,GDB_RT.LOC) -- layer ausiliario (diagonali e relative etichette, assi)
EgtSetName(La,"LayAux")
local Le = EgtGroup(Pz,GDB_RT.LOC) -- layer delle etichette pezzo
EgtSetName(Le,"Etichette")
local Lq = EgtGroup(Pz,GDB_RT.LOC) -- layer delle linee di quotatura
EgtSetName(Lq,"Quotature")
EgtSetCurrPartLayer(Pz,Ly)
-- Costruzione della figura
local vAlfa = Vector3d (cos(Alfa),sin(Alfa),0)
local l1 = EgtLinePVL(Ly,ORIG(),vAlfa,L1) EgtInvertCurve(l1)
EgtSetName(l1,"A7")
local l2 = EgtLinePDL(Ly,ORIG(),0,L2)
EgtSetName(l2,"A1")
local l3 = EgtLinePVL(Ly,EgtSP(l1),VRotated(vAlfa,-90),L3) EgtInvertCurve(l3)
EgtSetName(l3,"A6")
local l4 = EgtLinePDL(Ly,EgtEP(l2),90,L4)
EgtSetName(l4,"A2")
-- linea di estensione angolo
local arcAlfa , rrefAlfa
rrefAlfa = min(L1,L2)/5
arcAlfa = EgtArcC2P(La,EgtSP(l2),EgtSP(l2)+EgtEV(l2)*rrefAlfa,EgtSP(l1))
-- chiusura dei lati l5 e l7 se possibile
local l5 = EgtLinePVL(Ly,EgtSP(l3),VRotated(vAlfa,180),L1)
EgtInvertCurve(l5)
EgtSetName(l5,"A5")
local l7 = EgtLinePDL(Ly,EgtEP(l4),180,L2)
EgtSetName(l7,"A3")
local Beta, Dist, l6
if EgtIP(l5,l7,EgtSP(l3)) then
EgtModifyCurveStartPoint(l5,EgtIP(l5,l7,EgtSP(l3)))
EgtModifyCurveEndPoint(l7,EgtIP(l5,l7,EgtEP(l4)))
L5 = EgtCurveLength(l5)
L7 = EgtCurveLength(l7)
-- inserimentp dello smusso se possibile
Beta = (180 - Alfa ) / 2
Dist = L6/2/cos(Beta)
if Dist >= L5 or Dist >= L7 then
Dist = min(L5,L7) - LgMin
if CMP.ERR == 0 then
CMP.ERR = 9
CMP.MSG = Msg[222] -- lo smusso non ci sta : L6 troppo grande
end
end
if Dist > L5-LgMin or Dist > L7-LgMin then
Dist = min(L5,L7) - LgMin
if CMP.ERR == 0 then
CMP.ERR = 10
CMP.MSG = Msg[223]..GetLenLimit(LgMin) -- un lato risulta troppo piccolo (minore di ..)
end
end
--if L7 < LgMin then
-- if CMP.ERR == 0 then
-- CMP.ERR = 11
-- CMP.MSG = Msg[223]..GetLenLimit(LgMin) -- un lato risulta troppo piccolo (minore di ..)
-- end
-- end
l6 = EgtCurveChamfer (Ly,l7,EgtSP(l7),l5,EgtEP(l5),Dist,true)
EgtSetName(l6,"A4")
L5 = EgtCurveLength(l5)
L7 = EgtCurveLength(l7)
else
-- if CMP.ERR == 0 then
CMP.ERR = 8
CMP.MSG = Msg[221] -- figura impossibile: i lati L5 e L7 non si chiudono
--end
end
-- diagonali e assi di simmetria
local d1, D1, a1, a2
if CMP.ERR == 0 then
d1 = EgtLine(La,EgtSP(l1),EgtEP(l2))
D1 = EgtCurveLength(d1)
a1 = EgtLinePVL(La,EgtMP(l3),VRotated(vAlfa,180),L1)
a2 = EgtLinePDL(La,EgtMP(l4),180,L2)
EgtModifyCurveEndPoint(a1,EgtIP(a1,a2,EgtMP(l6)))
EgtModifyCurveEndPoint(a2,EgtIP(a1,a2,EgtMP(l6)))
end
if Lc then
EgtErase(Lc)
end
-- Riempimento della figura
local e1, s1
if CMP.ERR ~= 8 then
e1 = EgtCurveCompo(Ly,{l1,l2,l4,l7,l6,l5,l3},false)
s1 = EgtSurfFlatRegion(Lr,e1)
if CMP.ERR == 0 then
EgtSetColor(s1,AQUA())
else
EgtSetColor(s1,ORANGE())
end
EgtSetAlpha(s1,25)
EgtErase(e1)
end
-- Simmetria orizzontale
if Simm then
EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),X_AX(),GDB_RT.GLOB)
EgtInvertCurve({l1,l2,l3,l4,l5,l6,l7,arcAlfa})
if CMP.ERR == 0 then
EgtInvertCurve(d1)
EgtSetInfo(La,"SIMM","1")
end
end
-- Simmetria verticale ('ribaltamento')
if Rib then
EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),Y_AX(),GDB_RT.GLOB)
EgtInvertCurve({l1,l2,l3,l4,l5,l6,l7,arcAlfa})
EgtSetInfo(La,"RIB","1")
end
EgtReorderCurvesInGroup(Ly,ORIG())
-- Dimensioni dell'oggetto
local bbox = EgtGetBBoxGlob(Ly,GDB_BB.STANDARD)
local dimX = EgtToUiUnits(bbox:getDimX())
local dimY = EgtToUiUnits(bbox:getDimY())
local dim = bbox:getRadius() * 0.1
if CMP.ERR == 0 then
CMP.MSG = Msg[1] .. EgtNumToString(dimX,2) .. ' x ' .. EgtNumToString(dimY,2)
end
local pVal
if Rib then
pVal= bbox:getMin() - Vector3d(0,dim*3,0) -- uguali, se non ci sono linee di quotatura sotto la fiura
else
pVal= bbox:getMin() - Vector3d(0,dim*3,0)
end
-- Dimensioni sull'oggetto
local LbOn
if CMP.ERR == 0 then
local sDim = EgtNumToString(dimX,2) .. ' x ' .. EgtNumToString(dimY,2)
local dDim = bbox:getRadius() * 0.1
if L1 > L2 then
LbOn = AddLabelPnt(Lr,EgtMP(a1,GDB_ID.ROOT),sDim,dDim,90,BLACK())
else
LbOn = AddLabelPnt(Lr,EgtMP(a2,GDB_ID.ROOT),sDim,dDim,0,BLACK())
end
EgtSetStatus(LbOn,GDB_ST.OFF)
end
-- Etichette sulla figura
local stdoffset = 1
local LblL1 = AddLabel(Le,l1,stdoffset,CMP.N1,dim,-90,RED())
EgtSetInfo(LblL1,"Var",1)
local LblL2 = AddLabel(Le,l2,stdoffset,CMP.N2,dim,-90,RED())
EgtSetInfo(LblL2,"Var",2)
local LblL3 = AddLabel(Le,l3,stdoffset,CMP.N3,dim,-90,RED())
EgtSetInfo(LblL3,"Var",3)
local LblL4 = AddLabel(Le,l4,stdoffset,CMP.N4,dim,-90,RED())
EgtSetInfo(LblL4,"Var",4)
local LblAlfa = AddLabel(Le,arcAlfa,stdoffset*.5,CMP.N5,dim*.8,-90,RED())
EgtSetInfo(LblAlfa,"Var",5)
if CMP.ERR ~= 8 then
local LblL6 = AddLabel(Le,l6,stdoffset,CMP.N7,dim,-90,RED())
EgtSetInfo(LblL6,"Var",6)
end
if CMP.ERR == 0 then
local LblL5 = AddLabel(Le,l5,stdoffset,L5label,dim*.75,-90,GREEN())
local LblL7 = AddLabel(Le,l7,stdoffset,L7label,dim*.75,-90,GREEN())
local LblD1 = AddLabelAl(La,d1,stdoffset*.75,D1label,dim/2,90,GREEN())
end
-- Etichette sotto la figura
if CMP.ERR == 0 then
local lLenL5 = EgtToUiUnits(L5)
local sLenL5 = EgtNumToString(lLenL5,1)
local ValL5 = EgtTextAdv(Le,pVal,0,L5label..'='..sLenL5,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValL5,GREEN())
EgtSetStatus(ValL5,GDB_ST.SEL)
local ValL5Len = (EgtEP(ValL5,GDB_RT.GLOB)-EgtSP(ValL5,GDB_RT.GLOB)):getX() + dim/2
pVal = pVal + Vector3d(ValL5Len,0,0)
local lLenL7 = EgtToUiUnits(L7)
local sLenL7 = EgtNumToString(lLenL7,1)
local ValL7 = EgtTextAdv(Le,pVal,0,L7label..'='..sLenL7,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValL7,GREEN())
EgtSetStatus(ValL7,GDB_ST.SEL)
local ValL7Len = (EgtEP(ValL7,GDB_RT.GLOB)-EgtSP(ValL7,GDB_RT.GLOB)):getX() + dim/2
pVal = pVal + Vector3d(ValL7Len,0,0)
end
if CMP.ERR == 0 then
local lLenD1 = EgtToUiUnits(D1)
local sLenD1 = EgtNumToString(lLenD1,1)
local ValD1 = EgtTextAdv(La,pVal,0,D1label..'='..sLenD1,'',100,'S',dim*.5,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValD1,GREEN())
EgtSetStatus(ValD1,GDB_ST.SEL)
end
-- Se non Preview
if not bPreview then
-- cancello etichette e parti ausiliarie (es.: altezze, diagonali )
EgtErase({La,Le,Lq})
-- rendo visibile label sul pezzo
EgtSetStatus(LbOn,GDB_ST.ON)
end
-- Se ok
if CMP.ERR == 0 then
-- scrivo i parametri nelle info del pezzo
WriteCompoDataToPart(Pz,CMP.Nome,CMP.Npar)
-- salvo i parametri come nuovo default
SaveCompoData(CMP.Npar)
end
end
function CMP_DrawC3(bPreview)
-- Carico i messaggi
local Msg = require('EgtCompoMsg')
-- Assegnazioni
local L1 = CMP.V1
local L2 = CMP.V2
local L3 = CMP.V3
local L4 = CMP.V4
local Alfa = CMP.V5
local R = CMP.V7 -- -- raggio di raccordo tra i lati interni
local Simm = CMP.V8
local Rib = CMP.V9
CMP.N7 = 'R'
local L5label = 'E' -- lato 'obliquo' interno
local L7label = 'F' -- lato 'orizzontale' interno
local D1label = 'd' -- diagonale
CMP.ERR = 0
CMP.MSG = ''
--Verifica di compatibilità dei dati di input
if L1 < LgMin then
L1 = LgMin
CMP.ERR = 1
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a ...
end
if L2 < LgMin then
L2 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 2
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if L3 < LgMin then
L3 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 3
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if L4 < LgMin then
L4 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 4
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if Alfa < AlfaMin then
Alfa = AlfaMin
if CMP.ERR == 0 then
CMP.ERR = 5
CMP.MSG = Msg[220]..AlfaMin..' e '..AlfaMax -- L'angolo Alfa deve essere compreso tra ... e ...
end
end
if Alfa > AlfaMax then
Alfa = AlfaMax
if CMP.ERR == 0 then
CMP.ERR = 6
CMP.MSG = Msg[220]..AlfaMin..' e '..AlfaMax -- L'angolo Alfa deve essere compreso tra ... e ...
end
end
if R < RMin then
R = RMin
if CMP.ERR == 0 then
CMP.ERR = 7
CMP.MSG = Msg[26]..GetLenLimit(RMin) --Il raggio deve essere maggiore o uguale a ..
end
end
-- Se Preview cancello tutto
if bPreview then
EgtNewFile()
EgtSetDefaultMaterial( BLACK())
end
-- Pezzo e Layer
local Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- pezzo
local Ly = EgtGroup(Pz,GDB_RT.LOC) -- layer della figura principale
EgtSetName(Ly,'OutLoop')
local Lr = EgtGroup(Pz,GDB_RT.LOC) -- layer regione
EgtSetName(Lr,'Region')
local Lc = EgtGroup(Pz,GDB_RT.LOC) -- layer di costruzione
local La = EgtGroup(Pz,GDB_RT.LOC) -- layer ausiliario (diagonali e relative etichette, assi)
EgtSetName(La,"LayAux")
local Le = EgtGroup(Pz,GDB_RT.LOC) -- layer delle etichette pezzo
EgtSetName(Le,"Etichette")
local Lq = EgtGroup(Pz,GDB_RT.LOC) -- layer delle linee di quotatura
EgtSetName(Lq,"Quotature")
EgtSetCurrPartLayer(Pz,Ly)
-- Costruzione della figura
local vAlfa = Vector3d (cos(Alfa),sin(Alfa),0)
local l1 = EgtLinePVL(Ly,ORIG(),vAlfa,L1) EgtInvertCurve(l1)
EgtSetName(l1,"A7")
local l2 = EgtLinePDL(Ly,ORIG(),0,L2)
EgtSetName(l2,"A1")
local l3 = EgtLinePVL(Ly,EgtSP(l1),VRotated(vAlfa,-90),L3) EgtInvertCurve(l3)
EgtSetName(l3,"A6")
local l4 = EgtLinePDL(Ly,EgtEP(l2),90,L4)
EgtSetName(l4,"A2")
-- linea di estensione angolo
local arcAlfa , rrefAlfa
rrefAlfa = min(L1,L2)/5
arcAlfa = EgtArcC2P(La,EgtSP(l2),EgtSP(l2)+EgtEV(l2)*rrefAlfa,EgtSP(l1))
-- chiusura dei lati l5 e l7 se possibile
local l5 = EgtLinePVL(Ly,EgtSP(l3),VRotated(vAlfa,180),L1)
EgtInvertCurve(l5)
EgtSetName(l5,"A5")
local l7 = EgtLinePDL(Ly,EgtEP(l4),180,L2)
EgtSetName(l7,"A3")
local Dist, l6arc, L5, L7
if EgtIP(l5,l7,EgtSP(l3)) then
EgtModifyCurveStartPoint(l5,EgtIP(l5,l7,EgtSP(l3)))
EgtModifyCurveEndPoint(l7,EgtIP(l5,l7,EgtEP(l4)))
L5 = EgtCurveLength(l5) -- L5'
L7 = EgtCurveLength(l7) -- L7'
-- inserimentp del raccordo se possibile
Dist = R/tan(Alfa/2)
--if Dist >= L5 or Dist >= L7 then
--Dist = min(L5,L7) - LgMin
--if CMP.ERR == 0 then
--CMP.ERR = 9
--CMP.MSG = Msg[222] -- il raccordo non ci sta : L6 troppo grande
--end
--end --
if Dist > L5-LgMin or Dist > L7-LgMin then
Dist = min(L5-LgMin, L7-LgMin)
R = Dist * tan(Alfa/2)
if CMP.ERR == 0 then
CMP.ERR = 10
CMP.MSG = Msg[223]..GetLenLimit(LgMin) -- un lato risulta troppo piccolo (minore di ..)
end
end
l6arc = EgtCurveFillet (Ly,l7,EgtSP(l7),l5,EgtEP(l5),R,true)
EgtSetName(l6arc,"A4")
L5 = EgtCurveLength(l5)
L7 = EgtCurveLength(l7)
else
-- if CMP.ERR == 0 then
CMP.ERR = 8
CMP.MSG = Msg[221] -- figura impossibile: i lati L5 e L7 non si chiudono
--end
end
-- diagonali e assi di simmetria
local d1, D1, a1, a2
if CMP.ERR == 0 then
d1 = EgtLine(La,EgtSP(l1),EgtEP(l2))
D1 = EgtCurveLength(d1)
a1 = EgtLinePVL(La,EgtMP(l3),VRotated(vAlfa,180),L1)
a2 = EgtLinePDL(La,EgtMP(l4),180,L2)
EgtModifyCurveEndPoint(a1,EgtIP(a1,a2,EgtMP(l6arc)))
EgtModifyCurveEndPoint(a2,EgtIP(a1,a2,EgtMP(l6arc)))
end
-- linee di quota - raggio
local dim = EgtGetBBoxGlob(Ly,GDB_BB.STANDARD):getRadius() * 0.1
local pt = EgtMP(l6arc) local vr = EgtMV(l6arc,Lq) --vr = VRotaded(EgtMV(l3,Lq),90) non può funzionare?
local DimLineR = EgtLine(Lq,pt+VRotated(vr,-90)*dim,pt)
pt = EgtEP(DimLineR) vr = EgtEV(DimLineR)
EgtLinePVL(Lq,pt,VRotated(-vr,-15),dim*.4) -- freccia di quotatura
EgtLinePVL(Lq,pt,VRotated(-vr, 15),dim*.4)
pt = EgtSP(DimLineR)-vr*dim/2 -- linea aux per quotatura
local DimLineRAux = EgtLine(Lq,EgtSP(DimLineR),pt)
if Lc then
EgtErase(Lc)
end
-- Riempimento della figura
local e1, s1
if CMP.ERR ~= 8 then
e1 = EgtCurveCompo(Ly,{l1,l2,l4,l7,l6arc,l5,l3},false)
s1 = EgtSurfFlatRegion(Lr,e1)
if CMP.ERR == 0 then
EgtSetColor(s1,AQUA())
else
EgtSetColor(s1,ORANGE())
end
EgtSetAlpha(s1,25)
EgtErase(e1)
end
-- Simmetria orizzontale
if Simm then
EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),X_AX(),GDB_RT.GLOB)
EgtInvertCurve({l1,l2,l3,l4,l5,l6arc,l7,arcAlfa})
if CMP.ERR == 0 then
EgtInvertCurve(d1)
EgtSetInfo(La,"SIMM","1")
end
end
-- Simmetria verticale ('ribaltamento')
if Rib then
EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),Y_AX(),GDB_RT.GLOB)
EgtInvertCurve({l1,l2,l3,l4,l5,l6arc,l7,arcAlfa})
EgtSetInfo(La,"RIB","1")
end
EgtReorderCurvesInGroup(Ly,ORIG())
-- Dimensioni dell'oggetto
local bbox = EgtGetBBoxGlob(Ly,GDB_BB.STANDARD)
local dimX = EgtToUiUnits(bbox:getDimX())
local dimY = EgtToUiUnits(bbox:getDimY())
dim = bbox:getRadius() * 0.1
if CMP.ERR == 0 then
CMP.MSG = Msg[1] .. EgtNumToString(dimX,2) .. ' X ' .. EgtNumToString(dimY,2)
end
local pVal
if Rib then
pVal= bbox:getMin() - Vector3d(0,dim*3,0) -- uguali, se non ci sono linee di quotatura sotto la fiura
else
pVal= bbox:getMin() - Vector3d(0,dim*3,0)
end
-- Dimensioni sull'oggetto
local LbOn
if CMP.ERR == 0 then
local sDim = EgtNumToString(dimX,2) .. ' X ' .. EgtNumToString(dimY,2)
local dDim = bbox:getRadius() * 0.1
if L1 > L2 then
LbOn = AddLabelPnt(Lr,EgtMP(a1,GDB_ID.ROOT),sDim,dDim,90,BLACK())
else
LbOn = AddLabelPnt(Lr,EgtMP(a2,GDB_ID.ROOT),sDim,dDim,0,BLACK())
end
EgtSetStatus(LbOn,GDB_ST.OFF)
end
-- Etichette sulla figura
local stdoffset = 1
local LblL1 = AddLabel(Le,l1,stdoffset,CMP.N1,dim,-90,RED())
EgtSetInfo(LblL1,"Var",1)
local LblL2 = AddLabel(Le,l2,stdoffset,CMP.N2,dim,-90,RED())
EgtSetInfo(LblL2,"Var",2)
local LblL3 = AddLabel(Le,l3,stdoffset,CMP.N3,dim,-90,RED())
EgtSetInfo(LblL3,"Var",3)
local LblL4 = AddLabel(Le,l4,stdoffset,CMP.N4,dim,-90,RED())
EgtSetInfo(LblL4,"Var",4)
local LblAlfa = AddLabelU(Le,arcAlfa,1/4,stdoffset*.5,CMP.N5,dim*.8,-90,RED())
EgtSetInfo(LblAlfa,"Var",5)
if CMP.ERR ~= 8 then
local LblLR = AddLabelAl(Le,DimLineRAux,stdoffset*.2,CMP.N7,dim*.8,45,RED())
EgtSetInfo(LblLR,"Var",6)
EgtErase(DimLineRAux)
end
if CMP.ERR == 0 then
local LblL5 = AddLabel(Le,l5,stdoffset,L5label,dim*.75,-90,GREEN())
local LblL7 = AddLabel(Le,l7,stdoffset,L7label,dim*.75,-90,GREEN())
local LblD1 = AddLabelAl(La,d1,stdoffset*.75,D1label,dim/2,90,GREEN())
end
-- Etichette sotto la figura
if CMP.ERR == 0 then
local lLenL5 = EgtToUiUnits(L5)
local sLenL5 = EgtNumToString(lLenL5,1)
local ValL5 = EgtTextAdv(Le,pVal,0,L5label..'='..sLenL5,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValL5,GREEN())
EgtSetStatus(ValL5,GDB_ST.SEL)
local ValL5Len = (EgtEP(ValL5,GDB_RT.GLOB)-EgtSP(ValL5,GDB_RT.GLOB)):getX() + dim/2
pVal = pVal + Vector3d(ValL5Len,0,0)
local lLenL7 = EgtToUiUnits(L7)
local sLenL7 = EgtNumToString(lLenL7,1)
local ValL7 = EgtTextAdv(Le,pVal,0,L7label..'='..sLenL7,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValL7,GREEN())
EgtSetStatus(ValL7,GDB_ST.SEL)
local ValL7Len = (EgtEP(ValL7,GDB_RT.GLOB)-EgtSP(ValL7,GDB_RT.GLOB)):getX() + dim/2
pVal = pVal + Vector3d(ValL7Len,0,0)
end
if CMP.ERR == 0 then
local lLenD1 = EgtToUiUnits(D1)
local sLenD1 = EgtNumToString(lLenD1,1)
local ValD1 = EgtTextAdv(La,pVal,0,D1label..'='..sLenD1,'',100,'S',dim*.5,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValD1,GREEN())
EgtSetStatus(ValD1,GDB_ST.SEL)
end
-- Se non Preview
if not bPreview then
-- cancello etichette e parti ausiliarie (es.: altezze, diagonali )
EgtErase({La,Le,Lq})
-- rendo visibile label sul pezzo
EgtSetStatus(LbOn,GDB_ST.ON)
end
-- Se ok
if CMP.ERR == 0 then
-- scrivo i parametri nelle info del pezzo
WriteCompoDataToPart(Pz,CMP.Nome,CMP.Npar)
-- salvo i parametri come nuovo default
SaveCompoData(CMP.Npar)
end
end
function CMP_Draw( bPreview)
local OpzRaccordo = CMP.V6
if OpzRaccordo then
CMP_DrawC3( bPreview)
else
CMP_DrawC2( bPreview)
end
end
_G.CMP_Draw = CMP_Draw
CMP_Draw(true)
EgtZoom(SCE_ZM.ALL)