DataWindow :
- correzioni varie.
This commit is contained in:
@@ -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 {}
|
||||
|
||||
Reference in New Issue
Block a user