DataWindow :

- correzioni varie.
This commit is contained in:
SaraP
2025-03-20 11:58:07 +01:00
parent 4762dee48c
commit 32b9e4b347
+50 -52
View File
@@ -58,50 +58,52 @@ end
---------------------------------------------------------------------
-- funzione che trova punto di intersezione fra due curve eventualmente estendendole
local function FindIntersectionPoint( nCrv1, nCrv2, ptRef)
local ptInt = EgtIP( nCrv1, nCrv2, ptRef)
if not ptInt then
-- se entrambe linee
if EgtGetType( nCrv1) == GDB_TY.CRV_LINE and EgtGetType( nCrv2) == GDB_TY.CRV_LINE then
local ptInt
-- se archi, cerco intersezioni tra le circonferenze
if EgtGetType( nCrv1) == GDB_TY.CRV_ARC and EgtGetType( nCrv2) == GDB_TY.CRV_ARC then
-- trovo intersezione tra le due circonferenze
local nCircle1 = EgtCircle( GDB_ID.ROOT, EgtCP( nCrv1), EgtArcRadius( nCrv1))
local nCircle2 = EgtCircle( GDB_ID.ROOT, EgtCP( nCrv2), EgtArcRadius( nCrv2))
ptInt = EgtIP( nCircle1, nCircle2, ptRef)
EgtModifyCurveStartPoint( nCrv1, ptInt)
EgtModifyCurveEndPoint( nCrv2, ptInt)
EgtErase( nCircle1)
EgtErase( nCircle2)
elseif EgtGetType( nCrv1) == GDB_TY.CRV_ARC or EgtGetType( nCrv2) == GDB_TY.CRV_ARC then
local nLine = EgtIf( EgtGetType( nCrv1) == GDB_TY.CRV_LINE, nCrv1, nCrv2)
local nArc = EgtIf( nLine == nCrv1, nCrv2, nCrv1)
-- creo circonferenza corrispondente all'arco
local nCircle = EgtCircle( GDB_ID.ROOT, EgtCP( nArc), EgtArcRadius( nArc))
-- prolungo la linea dal lato opportuno
local dDist1 = dist( EgtSP( nLine), ptRef)
local dDist2 = dist( EgtEP( nLine), ptRef)
if dDist1 < dDist2 then
EgtExtendCurveStartByLen( nLine, 10000)
else
EgtExtendCurveEndByLen( nLine, 10000)
end
-- ricavo il punto di riferimento dalla circonferenza
local ptNewRef = EgtIf( nArc == nCrv2, EgtEP( nArc), EgtSP( nArc))
-- trovo l'intersezione tra retta e circonferenza
ptInt = EgtIP( nCircle, nLine, ptNewRef)
EgtErase( nCircle)
-- allungo l'arco per arrivare al punto di intersezione
if nArc == nCrv2 then
EgtModifyCurveEndPoint( nArc, ptInt)
else
EgtModifyCurveStartPoint( nArc, ptInt)
end
else
ptInt = EgtIP( nCrv1, nCrv2, ptRef)
if not ptInt then
-- tento estendendo le curve
EgtExtendCurveStartByLen( nCrv1, 10000)
EgtExtendCurveEndByLen( nCrv1, 10000)
EgtExtendCurveStartByLen( nCrv2, 10000)
EgtExtendCurveEndByLen( nCrv2, 10000)
ptInt = EgtIP( nCrv1, nCrv2, ptRef)
-- se entrambi archi
elseif EgtGetType( nCrv1) == GDB_TY.CRV_ARC and EgtGetType( nCrv2) == GDB_TY.CRV_ARC then
-- trovo intersezione tra le due circonferenze
local nCircle1 = EgtCircle( GDB_ID.ROOT, EgtCP( nCrv1), EgtArcRadius( nCrv1))
local nCircle2 = EgtCircle( GDB_ID.ROOT, EgtCP( nCrv2), EgtArcRadius( nCrv2))
ptInt = EgtIP( nCircle1, nCircle2, ptRef)
EgtModifyCurveStartPoint( nCrv1, ptInt)
EgtModifyCurveEndPoint( nCrv2, ptInt)
EgtErase( nCircle1)
EgtErase( nCircle2)
-- se arco e linea
else
local nLine = EgtIf( EgtGetType( nCrv1) == GDB_TY.CRV_LINE, nCrv1, nCrv2)
local nArc = EgtIf( nLine == nCrv1, nCrv2, nCrv1)
-- tento di trovare intersezione prolungando la linea
EgtExtendCurveStartByLen( nLine, 10000)
EgtExtendCurveEndByLen( nLine, 10000)
ptInt = EgtIP( nArc, nLine, ptRef)
if not ptInt then
-- creo circonferenza corrispondente all'arco
local nCircle = EgtCircle( GDB_ID.ROOT, EgtCP( nArc), EgtArcRadius( nArc))
-- trovo l'intersezione tra retta e circonferenza
local ptDist = EgtIf( nArc == nCrv2, EgtEP( nArc), EgtSP( nArc))
local _, ptRef = EgtPointCurveDist( ptDist, nLine)
ptInt = EgtIP( nCircle, nLine, ptRef)
EgtErase( nCircle)
-- allungo l'arco per arrivare al punto di intersezione
if nArc == nCrv2 then
EgtModifyCurveEndPoint( nArc, ptInt)
else
EgtModifyCurveStartPoint( nArc, ptInt)
end
end
end
end
@@ -123,12 +125,6 @@ local function TrimAndOrientOrderedCurves( vCrvs, bOrient)
local ptInters = FindIntersectionPoint( vCrvs[i], vCrvs[ nPrevIndex], EgtSP( vCrvs[i]))
if LastCurveInters then
LastCurveInters.EndInters = Point3d( ptInters)
-- se il punto di intersezione è lo stesso trovato nell'iterazione precedente cerco una seconda
-- intersezione tra le due curve
if AreSamePointApprox( ptInters, LastCurveInters.StartInters) then
ptInters = FindIntersectionPoint( vCrvs[i], vCrvs[ nPrevIndex], EgtEP( vCrvs[i]))
LastCurveInters.EndInters = Point3d( ptInters)
end
end
local NewCurveInters = { CurveId = vCrvs[i], StartInters = Point3d( ptInters)}
table.insert( IntersCurveList, NewCurveInters)
@@ -1999,7 +1995,7 @@ local function CalcGeoRaw( nPartId)
-- aggiungo spessore
local dDimH = EgtGetInfo( nGeoLayerId, WIN_GEOHEIGHT, 'd')
EgtModifyCurveThickness( nCompo, - dDimH)
-- creo frame ausiliario
local vtX = EgtSV( nCompo)
local frGeo = Frame3d( EgtSP( nCompo), vtX, Z_AX() ^ vtX, Z_AX())
@@ -4684,17 +4680,19 @@ local function CalcWaterdrip( nPartId, nOutlineId, nAreaId, bDraw)
local nCopy1 = EgtCopyGlob( nCrv1, nGrp)
EgtExtendCurveStartByLen( nCopy1, 200)
EgtExtendCurveEndByLen( nCopy1, 200)
local pt1 = EgtIP( nOutlineId, nCopy1, ORIG())
local nCrv2 = EgtGetFirstNameInGroup( nSplitGeo, WIN_OUT)
local nCopy2 = EgtCopyGlob( nCrv2, nGrp)
EgtExtendCurveStartByLen( nCopy2, 200)
EgtExtendCurveEndByLen( nCopy2, 200)
local pt1 = EgtIP( nOutlineId, nCopy1, ORIG())
local pt2 = EgtIP( nOutlineId, nCopy2, ORIG())
-- salvo i parametri di intersezione
local dPar1 = EgtCurveParamAtPoint( nOutlineId, pt1, 100 * GEO.EPS_SMALL)
local dPar2 = EgtCurveParamAtPoint( nOutlineId, pt2, 100 * GEO.EPS_SMALL)
table.insert( vParams, dPar1)
table.insert( vParams, dPar2)
if pt1 and pt2 then
-- salvo i parametri di intersezione
local dPar1 = EgtCurveParamAtPoint( nOutlineId, pt1, 100 * GEO.EPS_SMALL)
local dPar2 = EgtCurveParamAtPoint( nOutlineId, pt2, 100 * GEO.EPS_SMALL)
table.insert( vParams, dPar1)
table.insert( vParams, dPar2)
end
-- salvo le sue sottoaree per analizzarle
local vChildren = EgtGetNameInGroup( vStack[i], WIN_AREA .. '*') or {}