From d412ce65cd19e3337f7308dc95118102d3108095 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 14 Apr 2023 09:46:03 +0200 Subject: [PATCH 1/4] EgtExecutor : - aggiustamenti alle quote angolari. --- EXE_GdbCreate.cpp | 243 +++++++++++++--------------------------------- LUA_GdbCreate.cpp | 31 ------ 2 files changed, 70 insertions(+), 204 deletions(-) diff --git a/EXE_GdbCreate.cpp b/EXE_GdbCreate.cpp index 94ebfc8..bb5ec38 100644 --- a/EXE_GdbCreate.cpp +++ b/EXE_GdbCreate.cpp @@ -480,7 +480,7 @@ MyCreateRadialDimension( int nParentId, int nCrvId, const Point3d& ptDim, Point3d ptCenL = pArc->GetCenter() ; ptCenL.LocToLoc( frArc, frLoc) ; Vector3d vtNL = pArc->GetNormVersor() ; - vtNL.LocToLoc( frArc, frLoc) ; + vtNL.LocToLoc( frArc, frLoc) ; // porto ptDimL sulla circonferenza cui appartiene l'arco Vector3d vtDir = ptDimL - ptCenL ; if ( ! vtDir.Normalize()) @@ -543,7 +543,7 @@ MyCreateDiametralDimension( int nParentId, int nCrvId, const Point3d& ptDim, Point3d ptCenL = pArc->GetCenter() ; ptCenL.LocToLoc( frArc, frLoc) ; Vector3d vtNL = pArc->GetNormVersor() ; - vtNL.LocToLoc( frArc, frLoc) ; + vtNL.LocToLoc( frArc, frLoc) ; // porto ptDimL sulla circonferenza Vector3d vtDir = ptDimL - ptCenL ; if ( ! vtDir.Normalize()) @@ -645,27 +645,24 @@ MyCreateAngularDimensionFromLines( int nParentId, INTVECTOR vLineIds, const Poin Frame3d frLoc ; if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc)) return GDB_ID_NULL ; - - //recupero le linee + // recupero le linee ICurveLine* pCrv1 = GetCurveLine( pGeomDB->GetGeoObj( vLineIds[0])) ; ICurveLine* pCrv2 = GetCurveLine( pGeomDB->GetGeoObj( vLineIds[1])) ; if ( pCrv1 == nullptr || pCrv2 == nullptr) return GDB_ID_NULL ; PtrOwner pL1( pCrv1->Clone()) ; PtrOwner pL2( pCrv2->Clone()) ; - if ( IsNull( pL1 ) || ! pL1->IsValid() || IsNull( pL2) || ! pL2->IsValid()) + if ( IsNull( pL1 ) || ! pL1->IsValid() || IsNull( pL2) || ! pL2->IsValid()) return GDB_ID_NULL ; - - //porto tutto nel frLoc + // porto tutto nel frLoc Frame3d frL1, frL2 ; if ( ! pGeomDB->GetGlobFrame( vLineIds[0], frL1) || ! pGeomDB->GetGlobFrame( vLineIds[1], frL2)) return GDB_ID_NULL ; pL1->LocToLoc( frL1, frLoc) ; pL2->LocToLoc( frL2, frLoc) ; + // recupero il punto lo porto nel riferimento locale Point3d ptDimL = GetPointLocal( pGeomDB, ptDim, nRefType, frLoc) ; - Vector3d vtNL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ; - - //recupero i punti e le direzioni + // recupero i punti e le direzioni Point3d ptP1L, ptP2L, ptP3L, ptP4L ; Vector3d vtL1, vtL2 ; pL1->GetStartPoint( ptP1L) ; @@ -674,15 +671,12 @@ MyCreateAngularDimensionFromLines( int nParentId, INTVECTOR vLineIds, const Poin pL2->GetEndPoint( ptP4L) ; pL1->GetStartDir( vtL1) ; pL2->GetStartDir( vtL2) ; - // controllo se le rette sono coincidenti o parallele if ( AreSameOrOppositeVectorApprox( vtL1, vtL2)) return GDB_ID_NULL ; - // verifico se le rette si intersecano già - Point3d ptP0L ; + Point3d ptCenL ; IntersCurveCurve pInters( *pL1, *pL2) ; - IntCrvCrvInfo Info ; int nNumeroInters = pInters.GetIntersCount() ; // se non ho intersezioni estendo if ( nNumeroInters == 0) { @@ -691,54 +685,54 @@ MyCreateAngularDimensionFromLines( int nParentId, INTVECTOR vLineIds, const Poin pL2->ExtendStartByLen( dLen) ; pL1->ExtendEndByLen( dLen) ; pL2->ExtendEndByLen( dLen) ; - - //faccio intersezione + // faccio intersezione IntersCurveCurve pIntersExt( *pL1, *pL2) ; nNumeroInters = pIntersExt.GetIntersCount() ; - // le linee estese non si intersecano, quindi vuol dire che sono quasi parallele e lontanissime if ( nNumeroInters == 0 ) return GDB_ID_NULL ; else { + IntCrvCrvInfo Info ; pIntersExt.GetIntCrvCrvInfo( 0, Info) ; // controllo che non siano coincidenti if ( Info.bOverlap) return false ; else - ptP0L = Info.IciA->ptI ; + ptCenL = Info.IciA->ptI ; } // seleziono i punti necessari - // se ptDimL è più vicino a ptP0L rispetto agli estremi esterni delle linee, allora tengo gli estremi interni - double dP1P0 = ( ptP1L - ptP0L ).Len() ; - double dP2P0 = ( ptP2L - ptP0L ).Len() ; - double dDimP0 = ( ptDimL - ptP0L ).Len() ; - if ( ( dDimP0 < dP1P0 || dDimP0 < dP2P0)) - // se uno dei due punti è più vicino a ptP0L rispetto a ptDimL, allora tengo il punto più vicino a ptDimL + // se ptDimL è più vicino a ptCenL rispetto agli estremi esterni delle linee, allora tengo gli estremi interni + double dP1Cen = ( ptP1L - ptCenL).Len() ; + double dP2Cen = ( ptP2L - ptCenL).Len() ; + double dDimCen = ( ptDimL - ptCenL).Len() ; + if ( ( dDimCen < dP1Cen || dDimCen < dP2Cen)) + // se uno dei due punti è più vicino a ptCenL rispetto a ptDimL, allora tengo il punto più vicino a ptDimL ptP1L = ( ( ptDimL - ptP1L ).Len() < ( ptDimL - ptP2L ).Len() ? ptP1L : ptP2L) ; else - ptP1L = ( dP1P0 < dP2P0 ? ptP2L : ptP1L ) ; + ptP1L = ( dP1Cen < dP2Cen ? ptP2L : ptP1L ) ; // rifaccio anche per l'altro lato - double dP3P0 = ( ptP3L - ptP0L).Len() ; - double dP4P0 = ( ptP4L - ptP0L).Len() ; - if ( dDimP0 < dP3P0 || dDimP0 < dP4P0 ) - ptP3L = ( ( ptDimL - ptP3L).Len() < ( ptDimL - ptP4L).Len() ? ptP3L : ptP4L ) ; + double dP3Cen = ( ptP3L - ptCenL).Len() ; + double dP4Cen = ( ptP4L - ptCenL).Len() ; + if ( dDimCen < dP3Cen || dDimCen < dP4Cen) + ptP3L = ( ( ptDimL - ptP3L).Len() < ( ptDimL - ptP4L).Len() ? ptP3L : ptP4L) ; else - ptP3L = ( dP3P0 < dP4P0 ? ptP4L : ptP3L) ; + ptP3L = ( dP3Cen < dP4Cen ? ptP4L : ptP3L) ; } // se ho già intesezioni devo capire in quale quadrante si trova ptDim else { // recupero l'intersezione + IntCrvCrvInfo Info ; pInters.GetIntCrvCrvInfo( 0, Info) ; // controllo che non siano coincidenti if ( Info.bOverlap) return false ; + // se non coincidono restituisco l'intersezione else - ptP0L = Info.IciA->ptI ; // se non coincidono restituisco l'intersezione - - // se le due linee hanno un estremo in comune, estendo le linee quel lato - if ( ( AreSamePointApprox( ptP0L, ptP1L) || AreSamePointApprox( ptP0L, ptP2L)) && - ( AreSamePointApprox( ptP0L, ptP3L) || AreSamePointApprox( ptP0L, ptP4L))) { - if ( AreSamePointApprox( ptP0L, ptP1L)) { + ptCenL = Info.IciA->ptI ; + // se le due linee hanno un estremo in comune, estendo le linee da quel lato + if ( ( AreSamePointApprox( ptCenL, ptP1L) || AreSamePointApprox( ptCenL, ptP2L)) && + ( AreSamePointApprox( ptCenL, ptP3L) || AreSamePointApprox( ptCenL, ptP4L))) { + if ( AreSamePointApprox( ptCenL, ptP1L)) { pL1->ExtendStartByLen(Dist( ptP1L, ptP2L) / 2) ; pL1->GetStartPoint( ptP1L) ; } @@ -746,8 +740,8 @@ MyCreateAngularDimensionFromLines( int nParentId, INTVECTOR vLineIds, const Poin pL1->ExtendEndByLen(Dist( ptP1L, ptP2L) / 2) ; pL1->GetEndPoint( ptP2L) ; } - if ( AreSamePointApprox( ptP0L, ptP3L) ) { - pL2->ExtendStartByLen(Dist( ptP3L, ptP4L) / 2); + if ( AreSamePointApprox( ptCenL, ptP3L)) { + pL2->ExtendStartByLen( Dist( ptP3L, ptP4L) / 2); pL2->GetStartPoint( ptP3L) ; } else { @@ -755,36 +749,42 @@ MyCreateAngularDimensionFromLines( int nParentId, INTVECTOR vLineIds, const Poin pL2->GetEndPoint( ptP4L) ; } } - // seleziono i punti necessari // proietto pdDim su vtLine1 e su vtLine2 Point3d ptDim1, ptDim2 ; DistPointCurve distPL1( ptDimL, *pL1, true) ; DistPointCurve distPL2( ptDimL, *pL2, true) ; int nFlag1, nFlag2 ; - if ( ! distPL1.GetMinDistPoint( 0, ptDim1, nFlag1) || ! distPL2.GetMinDistPoint( 0, ptDim2, nFlag2) ) + if ( ! distPL1.GetMinDistPoint( 0, ptDim1, nFlag1) || ! distPL2.GetMinDistPoint( 0, ptDim2, nFlag2) ) return false ; - if ( abs(( ptDim1 - ptP1L).Len() + ( ptP0L - ptDim1).Len() - ( ptP0L - ptP1L).Len()) < EPS_SMALL || - abs(( ptDim1 - ptP1L).Len() + ( ptP0L - ptP1L ).Len() - ( ptDim1 - ptP0L).Len()) < EPS_SMALL) - // ptDim è dal lato di ptP1L + if ( abs(( ptDim1 - ptP1L).Len() + ( ptCenL - ptDim1).Len() - ( ptCenL - ptP1L).Len()) < EPS_SMALL || + abs(( ptDim1 - ptP1L).Len() + ( ptCenL - ptP1L ).Len() - ( ptDim1 - ptCenL).Len()) < EPS_SMALL) + // ptDim è dal lato di ptP1L ptP1L = ptP1L ; else - // ptDim è dal lato di ptP2L + // ptDim è dal lato di ptP2L ptP1L = ptP2L ; - if ( abs(( ptDim2 - ptP3L).Len() + ( ptP0L - ptDim2).Len() - ( ptP0L - ptP3L).Len()) < EPS_SMALL || - abs(( ptDim2 - ptP3L).Len() + ( ptP0L - ptP3L).Len() - ( ptDim2 - ptP0L).Len()) < EPS_SMALL) - // ptDim è dal lato di ptP1L + if ( abs(( ptDim2 - ptP3L).Len() + ( ptCenL - ptDim2).Len() - ( ptCenL - ptP3L).Len()) < EPS_SMALL || + abs(( ptDim2 - ptP3L).Len() + ( ptCenL - ptP3L).Len() - ( ptDim2 - ptCenL).Len()) < EPS_SMALL) + // ptDim è dal lato di ptP1L ptP3L = ptP3L ; else - // ptDim è dal lato di ptP2L + // ptDim è dal lato di ptP2L ptP3L = ptP4L ; } - + // recupero la normale al piano dell'angolo da quotare + Frame3d frArc; + frArc.Set(ptCenL, ptP1L, ptP3L); + Vector3d vtNL = frArc.VersZ() ; + if ( vtNL * Z_AX < - EPS_SMALL) { + frArc.Set(ptCenL, ptP3L, ptP1L); + vtNL = frArc.VersZ() ; + } // creo la quota PtrOwner pDim( CreateExtDimension()) ; if ( IsNull( pDim ) || ! MySetDimensionStyle( pDim ) || - ! pDim->SetAngular( ptP1L, ptP0L, ptP3L, ptDimL, vtNL, sText)) + ! pDim->SetAngular( ptP1L, ptCenL, ptP3L, ptDimL, vtNL, sText)) return GDB_ID_NULL ; // inserisco la quota nel DB return pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pDim)) ; @@ -825,50 +825,36 @@ MyCreateAngularDimensionFromArc( int nParentId, int nCrvId, const Point3d& ptDim Frame3d frLoc ; if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc)) return GDB_ID_NULL ; - // recupero l'arco e il suo frame - ICurveArc* pCurve = GetCurveArc( pGeomDB->GetGeoObj( nCrvId)) ; - if ( pCurve == nullptr) + ICurveArc* pArc = GetCurveArc( pGeomDB->GetGeoObj( nCrvId)) ; + if ( pArc == nullptr) return GDB_ID_NULL ; - Frame3d frArc; + Frame3d frArc ; if ( ! pGeomDB->GetGlobFrame( nCrvId, frArc)) return GDB_ID_NULL ; - - PtrOwner pCrv( pCurve->Clone()) ; - if ( IsNull( pCrv ) || ! pCrv->IsValid()) - return GDB_ID_NULL ; - - // porto tutto nel frLoc - pCrv->LocToLoc( frArc, frLoc ) ; + // recupero i punti e la normale e li porto nel frame locale Point3d ptDimL = GetPointLocal( pGeomDB, ptDim, nRefType, frLoc) ; - Vector3d vtNL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ; - - //recupero i punti e i versori - Point3d ptP0L, ptP1L, ptP2L ; - pCrv->GetStartPoint( ptP1L) ; - pCrv->GetEndPoint( ptP2L) ; - pCrv->GetCenterPoint( ptP0L) ; - + Vector3d vtNL = pArc->GetNormVersor() ; + vtNL.LocToLoc( frArc, frLoc) ; + Point3d ptCenL, ptP1L, ptP2L ; + pArc->GetStartPoint( ptP1L) ; + ptP1L.LocToLoc( frArc, frLoc) ; + pArc->GetEndPoint( ptP2L) ; + ptP2L.LocToLoc( frArc, frLoc) ; + pArc->GetCenterPoint( ptCenL) ; + ptCenL.LocToLoc( frArc, frLoc) ; // porto ptDimL nell'area di influenza dell'arco - Point3d ptDimNew ; - double dDist = ( ptDimL - ptP0L).Len() ; Point3d ptMid ; - pCrv->GetMidPoint( ptMid) ; - Vector3d vtDir = ( ptMid - ptP0L) ; - vtDir.Normalize() ; - ptDimNew = ptP0L + dDist * vtDir ; - // proietto il punto sul piano XY della griglia - Frame3d frGrid = pGeomDB->GetGridFrame() ; - if ( ! frGrid.IsValid()) - return GDB_ID_NULL ; - Point3d ptOrig = frGrid.Orig() ; - ptDimNew -= ( ptDimNew - ptOrig) * vtNL * vtNL; - + pArc->GetMidPoint( ptMid) ; + Vector3d vtDir = ( ptMid - ptCenL) ; + if ( ! vtDir.Normalize()) + return GDB_ID_NULL ; + ptDimL = ptCenL + Dist( ptDimL, ptCenL) * vtDir ; // creo la quota PtrOwner pDim( CreateExtDimension()) ; if ( IsNull( pDim ) || ! MySetDimensionStyle( pDim) || - ! pDim->SetAngular( ptP1L, ptP0L, ptP2L, ptDimNew, vtNL, sText)) + ! pDim->SetAngular( ptP1L, ptCenL, ptP2L, ptDimL, vtNL, sText)) return GDB_ID_NULL ; // inserisco la quota nel DB return pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pDim)) ; @@ -894,93 +880,4 @@ ExeCreateAngularDimensionFromArc( int nParentId, int nCrvId, const Point3d& ptDi } // restituisco l'identificativo del oggetto return nId ; -} - -//------------------------------------------------------------------------------- -static int -MyCreateAngularDimensionFromCircle( int nParentId, int nCrvId, const Point3d& ptP1, const Point3d& ptP2, const Point3d& ptDim, - const string& sText, int nRefType) -{ - IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) - nParentId = AdjustId( nParentId ) ; - // recupero il riferimento locale - Frame3d frLoc ; - if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc)) - return GDB_ID_NULL ; - - // recupero il cerchio e il suo frame - ICurveArc* pCurve = GetCurveArc( pGeomDB->GetGeoObj( nCrvId)) ; - if ( pCurve == nullptr) - return GDB_ID_NULL ; - Frame3d frCrv; - if ( ! pGeomDB->GetGlobFrame( nCrvId, frCrv)) - return GDB_ID_NULL ; - - PtrOwner pCrv( pCurve->Clone()) ; - if ( IsNull( pCrv ) || ! pCrv->IsValid()) - return GDB_ID_NULL ; - - // porto tutto nel frLoc - pCrv->LocToLoc( frCrv, frLoc ) ; - Point3d ptP1L = GetPointLocal( pGeomDB, ptP1, nRefType, frLoc) ; - Point3d ptP2L = GetPointLocal( pGeomDB, ptP2, nRefType, frLoc) ; - Point3d ptDimL = GetPointLocal( pGeomDB, ptDim, nRefType, frLoc) ; - Vector3d vtNL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ; - - // recupero il centro - Point3d ptP0L ; - pCrv->GetCenterPoint( ptP0L) ; - - // verifico che i punti P1 e P2 siano sul cerchio, sennò prendo i più vicini - if ( ! pCrv->IsPointOn(ptP1L)) { - DistPointCurve distPC( ptP1L, *pCrv) ; - int nFlag ; - distPC.GetMinDistPoint(0,ptP1L,nFlag); - } - if ( ! pCrv->IsPointOn(ptP2L)) { - DistPointCurve distPC(ptP2L, *pCrv) ; - int nFlag ; - distPC.GetMinDistPoint(0, ptP2L, nFlag); - } - - // proietto il punto sul piano XY della griglia - Frame3d frGrid = pGeomDB->GetGridFrame() ; - if ( ! frGrid.IsValid()) - return GDB_ID_NULL ; - Point3d ptOrig = frGrid.Orig() ; - ptDimL -= ( ptDimL - ptOrig) * vtNL * vtNL; - - // creo la quota - PtrOwner pDim( CreateExtDimension()) ; - if ( IsNull( pDim) || - ! MySetDimensionStyle( pDim) || - ! pDim->SetAngular( ptP1L, ptP0L, ptP2L, ptDimL, vtNL, sText)) - return GDB_ID_NULL ; - // inserisco la quota nel DB - return pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pDim)) ; -} - -//------------------------------------------------------------------------------- -int -ExeCreateAngularDimensionFromCircle( int nParentId, int nCrvId, const Point3d& ptP1, const Point3d& ptP2, const Point3d& ptDim, - const string& sText, int nRefType) -{ - // eseguo - int nId = MyCreateAngularDimensionFromCircle( nParentId, nCrvId, ptP1, ptP2, ptDim, sText, nRefType) ; - ExeSetModified() ; - // se richiesto, salvo il comando Lua equivalente - if ( IsCmdLog()) { - string sLua = "EgtAngularDimensionFromCircle(" + IdToString( nParentId) + "," + - IdToString( nCrvId) + ",{" + - ToString( ptP1) + "},'" + - ToString( ptP2) + "},'" + - ToString( ptDim) + "},'" + - StringToLuaString( sText) + "'," + - RefTypeToString( nRefType) + ")" + - " -- Id=" + ToString( nId) ; - LOG_INFO( GetCmdLogger(), sLua.c_str()) ; - } - // restituisco l'identificativo del oggetto - return nId ; -} +} \ No newline at end of file diff --git a/LUA_GdbCreate.cpp b/LUA_GdbCreate.cpp index 7857cbe..a599f81 100644 --- a/LUA_GdbCreate.cpp +++ b/LUA_GdbCreate.cpp @@ -478,36 +478,6 @@ LuaCreateAngularDimensionFromArc( lua_State* L) return 1 ; } -//------------------------------------------------------------------------------- -static int -LuaCreateAngularDimensionFromCircle( lua_State* L) -{ - // 6 o 7 parametri : nParentId, nCrvId, ptP1, ptP2, ptDim, Text [, nRefType] - int nParentId ; - LuaCheckParam( L, 1, nParentId) - int nCrvId ; - LuaCheckParam( L, 2, nCrvId) ; - Point3d ptP1 ; - LuaCheckParam( L, 3, ptP1) ; - Point3d ptP2 ; - LuaCheckParam( L, 4, ptP2) ; - Point3d ptDim ; - LuaCheckParam( L, 5, ptDim) ; - string sText ; - LuaCheckParam( L, 6, sText) ; - int nRefType = RTY_DEFAULT ; - LuaGetParam( L, 7, nRefType) ; - LuaClearStack( L) ; - // creo la quota allineata - int nId = ExeCreateAngularDimensionFromCircle( nParentId, nCrvId, ptP1, ptP2, ptDim, sText, nRefType) ; - // restituisco il risultato - if ( nId != GDB_ID_NULL) - LuaSetParam( L, nId) ; - else - LuaSetParam( L) ; - return 1 ; -} - //------------------------------------------------------------------------------- bool LuaInstallGdbCreate( LuaMgr& luaMgr) @@ -530,6 +500,5 @@ LuaInstallGdbCreate( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtAngularDimension", LuaCreateAngularDimension); bOk = bOk && luaMgr.RegisterFunction( "EgtAngularDimensionFromLines", LuaCreateAngularDimensionFromLines) ; bOk = bOk && luaMgr.RegisterFunction( "EgtAngularDimensionFromArc", LuaCreateAngularDimensionFromArc) ; - bOk = bOk && luaMgr.RegisterFunction( "EgtAngularDimensionFromCircle", LuaCreateAngularDimensionFromCircle) ; return bOk ; } From f6915d80fa9b95ce3a89e8816a1e858e658a3d84 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 14 Apr 2023 10:06:08 +0200 Subject: [PATCH 2/4] EgtExecutor : - modifica minore alle quote angolari. --- EXE_GdbCreate.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/EXE_GdbCreate.cpp b/EXE_GdbCreate.cpp index bb5ec38..ba6b722 100644 --- a/EXE_GdbCreate.cpp +++ b/EXE_GdbCreate.cpp @@ -583,7 +583,7 @@ ExeCreateDiametralDimension( int nParentId, int nCrvId, const Point3d& ptDim, //------------------------------------------------------------------------------- static int -MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptP0, const Point3d& ptP2, +MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptCen, const Point3d& ptP2, const Point3d& ptDim, const string& sText, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; @@ -594,7 +594,7 @@ MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptP if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc)) return GDB_ID_NULL ; // porto in locale i punti e assegno i versori - Point3d ptP0L = GetPointLocal( pGeomDB, ptP0, nRefType, frLoc) ; + Point3d ptP0L = GetPointLocal( pGeomDB, ptCen, nRefType, frLoc) ; Point3d ptP1L = GetPointLocal( pGeomDB, ptP1, nRefType, frLoc) ; Point3d ptP2L = GetPointLocal( pGeomDB, ptP2, nRefType, frLoc) ; Point3d ptDimL = GetPointLocal( pGeomDB, ptDim, nRefType, frLoc) ; @@ -611,16 +611,16 @@ MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptP //------------------------------------------------------------------------------- int -ExeCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptP0, const Point3d& ptP2, +ExeCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptCen, const Point3d& ptP2, const Point3d& ptDim, const string& sText, int nRefType) { // eseguo - int nId = MyCreateAngularDimension( nParentId, ptP1, ptP0, ptP2, ptDim, sText, nRefType) ; + int nId = MyCreateAngularDimension( nParentId, ptP1, ptCen, ptP2, ptDim, sText, nRefType) ; ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtAngularDimension(" + IdToString( nParentId) + ",{" + - ToString( ptP0) + "},{" + + ToString( ptCen) + "},{" + ToString( ptP1) + "},{" + ToString( ptP2) + "},{" + ToString( ptDim) + "},'" + From fb388799ea217947432b1c1cf5232cae75d94ae2 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Wed, 19 Apr 2023 17:21:53 +0200 Subject: [PATCH 3/4] EgtExecutor : - modifica minore alle quote angolari. --- EXE_GdbCreate.cpp | 12 ++++++------ LUA_GdbCreate.cpp | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/EXE_GdbCreate.cpp b/EXE_GdbCreate.cpp index ba6b722..a46376f 100644 --- a/EXE_GdbCreate.cpp +++ b/EXE_GdbCreate.cpp @@ -583,7 +583,7 @@ ExeCreateDiametralDimension( int nParentId, int nCrvId, const Point3d& ptDim, //------------------------------------------------------------------------------- static int -MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptCen, const Point3d& ptP2, +MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptV, const Point3d& ptP2, const Point3d& ptDim, const string& sText, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; @@ -594,7 +594,7 @@ MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptC if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc)) return GDB_ID_NULL ; // porto in locale i punti e assegno i versori - Point3d ptP0L = GetPointLocal( pGeomDB, ptCen, nRefType, frLoc) ; + Point3d ptVL = GetPointLocal( pGeomDB, ptV, nRefType, frLoc) ; Point3d ptP1L = GetPointLocal( pGeomDB, ptP1, nRefType, frLoc) ; Point3d ptP2L = GetPointLocal( pGeomDB, ptP2, nRefType, frLoc) ; Point3d ptDimL = GetPointLocal( pGeomDB, ptDim, nRefType, frLoc) ; @@ -603,7 +603,7 @@ MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptC PtrOwner pDim( CreateExtDimension()) ; if ( IsNull( pDim) || ! MySetDimensionStyle( pDim ) || - ! pDim->SetAngular( ptP1L, ptP0L, ptP2L, ptDimL, vtNL, sText)) + ! pDim->SetAngular( ptP1L, ptVL, ptP2L, ptDimL, vtNL, sText)) return GDB_ID_NULL ; // inserisco la quota nel DB return pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pDim)) ; @@ -611,16 +611,16 @@ MyCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptC //------------------------------------------------------------------------------- int -ExeCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptCen, const Point3d& ptP2, +ExeCreateAngularDimension( int nParentId, const Point3d& ptP1, const Point3d& ptV, const Point3d& ptP2, const Point3d& ptDim, const string& sText, int nRefType) { // eseguo - int nId = MyCreateAngularDimension( nParentId, ptP1, ptCen, ptP2, ptDim, sText, nRefType) ; + int nId = MyCreateAngularDimension( nParentId, ptP1, ptV, ptP2, ptDim, sText, nRefType) ; ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtAngularDimension(" + IdToString( nParentId) + ",{" + - ToString( ptCen) + "},{" + + ToString( ptV) + "},{" + ToString( ptP1) + "},{" + ToString( ptP2) + "},{" + ToString( ptDim) + "},'" + diff --git a/LUA_GdbCreate.cpp b/LUA_GdbCreate.cpp index a599f81..e9f51ec 100644 --- a/LUA_GdbCreate.cpp +++ b/LUA_GdbCreate.cpp @@ -400,13 +400,13 @@ LuaCreateDiametralDimension( lua_State* L ) static int LuaCreateAngularDimension(lua_State* L) { - // 6 o 7 parametri : ParentId, ptP1, ptP0, ptP2, ptDim, Text [, nRefType] + // 6 o 7 parametri : ParentId, ptP1, ptV, ptP2, ptDim, Text [, nRefType] int nParentId ; LuaCheckParam( L, 1, nParentId) Point3d ptP1 ; LuaCheckParam( L, 2, ptP1) ; - Point3d ptP0 ; - LuaCheckParam( L, 3, ptP0) ; + Point3d ptV ; + LuaCheckParam( L, 3, ptV) ; Point3d ptP2 ; LuaCheckParam( L, 4, ptP2) ; Point3d ptDim ; @@ -417,7 +417,7 @@ LuaCreateAngularDimension(lua_State* L) LuaGetParam( L, 7, nRefType) ; LuaClearStack( L) ; // creo la quota angolare - int nId = ExeCreateAngularDimension( nParentId, ptP1, ptP0, ptP2, ptDim, sText, nRefType) ; + int nId = ExeCreateAngularDimension( nParentId, ptP1, ptV, ptP2, ptDim, sText, nRefType) ; // restituisco il risultato if ( nId != GDB_ID_NULL) LuaSetParam( L, nId) ; From 9e725f3feb9fd7cd8a8aff42e84f11bfb7aba9eb Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 18 Sep 2023 11:47:19 +0200 Subject: [PATCH 4/4] EgtExecutor : - correzione minore. --- EXE_GdbCreate.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/EXE_GdbCreate.cpp b/EXE_GdbCreate.cpp index c70d2de..4d61238 100644 --- a/EXE_GdbCreate.cpp +++ b/EXE_GdbCreate.cpp @@ -767,6 +767,7 @@ MyCreateAngularDimensionFromLines( int nParentId, INTVECTOR vLineIds, const Poin if ( abs(( ptDim2 - ptP3L).Len() + ( ptCenL - ptDim2).Len() - ( ptCenL - ptP3L).Len()) < EPS_SMALL || abs(( ptDim2 - ptP3L).Len() + ( ptCenL - ptP3L).Len() - ( ptDim2 - ptCenL).Len()) < EPS_SMALL) // ptDim è dal lato di ptP1L + ; else // ptDim è dal lato di ptP2L ptP3L = ptP4L ;