From 5614045e0f95d6fe441113f2afc7a78a7eb4ae54 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 14 Oct 2014 06:52:00 +0000 Subject: [PATCH] EgtGraphics 1.5j2 : - migliorie a snap point da selezione. --- EgtGraphics.rc | Bin 11398 -> 11398 bytes SceneBasic.cpp | 2 +- SceneSnap.cpp | 212 +++++++++++++++++++++++++++++++++++++------------ 3 files changed, 161 insertions(+), 53 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 12430356b915b024e3e9937f82122e82aa510550..4ae02689dbef75cf88f02a80689cdb2168ce84fa 100644 GIT binary patch delta 102 zcmZpRY>V9RgN@N>b2s09rpY@vgBXn_PZZMKY{3=80v6R}hKqV9RgN@N}b2s09rpY@vgBT4bPZZMKY{3=80v6R}hKqGetGeoObj( nIds[i])) ; - if ( pCrv == nullptr) + // se non è entità geometrica + const IGeoObj* pGObj ; + if ( ( pGObj = m_pGeomDB->GetGeoObj( nIds[i])) == nullptr) continue ; + // recupero riferimento dell'entità Frame3d frEnt ; if ( ! m_pGeomDB->GetGlobFrame( nIds[i], frEnt)) continue ; - // recupero il punto - Point3d ptP ; - switch ( nSnap) { - case SP_END : - // punto iniziale - if ( pCrv->GetStartPoint( ptP)) { - ptP.ToGlob( frEnt) ; - if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { - bFound = true ; - ptSel = ptP ; - } + // se punto + if ( pGObj->GetType() == GEO_PNT3D) { + // recupero il geo-punto + const IGeoPoint3d* pGP = GetGeoPoint3d( pGObj) ; + // recupero il punto + Point3d ptP = pGP->GetPoint() ; + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; } - // punto finale - if ( pCrv->GetEndPoint( ptP)) { - ptP.ToGlob( frEnt) ; - if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { - bFound = true ; - ptSel = ptP ; - } + } + // se vettore + else if ( pGObj->GetType() == GEO_VECT3D) { + // recupero il geo-vettore + const IGeoVector3d* pGV = GetGeoVector3d( pGObj) ; + // recupero il punto + Point3d ptP = pGV->GetBase() ; + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; } - break ; - case SP_MID : - if ( pCrv->GetMidPoint( ptP)) { - ptP.ToGlob( frEnt) ; - if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { - bFound = true ; - ptSel = ptP ; - } + } + // se frame + else if ( pGObj->GetType() == GEO_FRAME3D) { + // recupero il geo-frame + const IGeoFrame3d* pGF = GetGeoFrame3d( pGObj) ; + // recupero il punto + Point3d ptP = pGF->GetFrame().Orig() ; + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; } - break ; - case SP_CENTER : - if ( pCrv->GetCenterPoint( ptP)) { - ptP.ToGlob( frEnt) ; - if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { - bFound = true ; - ptSel = ptP ; - } - } - break ; - case SP_NEAR : - { // il punto di riferimento deriva da XY su viewport e Z da selezione - Point3d ptRefWin( ptWin.x, ptWin.y, GetSelectedObjWinZ( int( i))) ; - Point3d ptRef ; - // lo porto da spazio grafico a spazio geometrico globale - UnProject( ptRefWin, ptRef) ; - // lo porto nel frame della curva - ptRef.ToLoc( frEnt) ; - // determino il punto più vicino della curva a questo - int nFlag ; - DistPointCurve dstPtCurve( ptRef, *pCrv) ; - if ( dstPtCurve.GetMinDistPoint( 0, ptP, nFlag)) { + } + // se curva + else if ( ( pGObj->GetType() & GEO_CURVE) != 0) { + // recupero la curva + const ICurve* pCrv = GetCurve( m_pGeomDB->GetGeoObj( nIds[i])) ; + // recupero il punto + Point3d ptP ; + switch ( nSnap) { + case SP_END : + // punto iniziale + if ( pCrv->GetStartPoint( ptP)) { ptP.ToGlob( frEnt) ; if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { bFound = true ; ptSel = ptP ; } } - } break ; + // punto finale + if ( pCrv->GetEndPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + break ; + case SP_MID : + if ( pCrv->GetMidPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + break ; + case SP_CENTER : + if ( pCrv->GetCenterPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + break ; + case SP_NEAR : + { // il punto di riferimento deriva da XY su viewport e Z da selezione + Point3d ptRefWin( ptWin.x, ptWin.y, GetSelectedObjWinZ( int( i))) ; + Point3d ptRef ; + // lo porto da spazio grafico a spazio geometrico globale + UnProject( ptRefWin, ptRef) ; + // lo porto nel frame della curva + ptRef.ToLoc( frEnt) ; + // determino il punto più vicino della curva a questo + int nFlag ; + DistPointCurve dstPtCurve( ptRef, *pCrv) ; + if ( dstPtCurve.GetMinDistPoint( 0, ptP, nFlag)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + } break ; + } + } + // se testo + else if ( pGObj->GetType() == EXT_TEXT) { + // recupero il testo + const IExtText* pTxt = GetExtText( pGObj) ; + // recupero il punto + Point3d ptP ; + switch ( nSnap) { + case SP_END : + // punto iniziale + if ( pTxt->GetStartPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + // punto sopra iniziale + if ( pTxt->GetOverStartPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + // punto finale + if ( pTxt->GetEndPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + // punto sopra finale + if ( pTxt->GetOverEndPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + break ; + case SP_MID : + // punto medio + if ( pTxt->GetMidPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + break ; + case SP_CENTER : + // centro + if ( pTxt->GetCenterPoint( ptP)) { + ptP.ToGlob( frEnt) ; + if ( VerifySnapPoint( ptP, ptWin, dMinSqDist)) { + bFound = true ; + ptSel = ptP ; + } + } + break ; + } } } return bFound ;