EgtgeomKernel :
- migliorie alle quotature lineari.
This commit is contained in:
+154
-65
@@ -78,14 +78,23 @@ ExtDimension::SetLinear( const Point3d& ptP1, const Point3d& ptP2, const Point3d
|
||||
if ( ! m_vtDir.Normalize())
|
||||
return false ;
|
||||
// punti estremi della linea di misura ed esterni delle linee di estremità
|
||||
Vector3d vtLine = m_vtDir ;
|
||||
vtLine.Rotate( m_vtN, 0, 1) ;
|
||||
if ( vtLine * ( m_ptPos - m_ptP1) < 0)
|
||||
vtLine.Invert() ;
|
||||
m_ptP5 = m_ptP1 + vtLine * ( m_ptPos - m_ptP1) * vtLine ;
|
||||
m_ptP6 = m_ptP2 + vtLine * ( m_ptPos - m_ptP2) * vtLine ;
|
||||
m_ptP3 = m_ptP5 + vtLine * m_dExtLineLen ;
|
||||
m_ptP4 = m_ptP6 + vtLine * m_dExtLineLen ;
|
||||
Vector3d vtLine1 = m_vtDir ;
|
||||
vtLine1.Rotate( m_vtN, 0, 1) ;
|
||||
Vector3d vtLine2 = vtLine1 ;
|
||||
double dProSca1 = vtLine1 * ( m_ptPos - m_ptP1) ;
|
||||
double dProSca2 = vtLine2 * ( m_ptPos - m_ptP2) ;
|
||||
if ( dProSca1 < -EPS_SMALL)
|
||||
vtLine1.Invert() ;
|
||||
if ( dProSca2 < -EPS_SMALL)
|
||||
vtLine2.Invert() ;
|
||||
if ( abs( dProSca1) < EPS_SMALL)
|
||||
vtLine1 = vtLine2 ;
|
||||
if ( abs( dProSca2) < EPS_SMALL)
|
||||
vtLine2 = vtLine1 ;
|
||||
m_ptP5 = m_ptP1 + vtLine1 * ( m_ptPos - m_ptP1) * vtLine1 ;
|
||||
m_ptP6 = m_ptP2 + vtLine2 * ( m_ptPos - m_ptP2) * vtLine2 ;
|
||||
m_ptP3 = m_ptP5 + vtLine1 * m_dExtLineLen ;
|
||||
m_ptP4 = m_ptP6 + vtLine2 * m_dExtLineLen ;
|
||||
// assegnazione del testo
|
||||
m_sText = sText ;
|
||||
// assegno il tipo
|
||||
@@ -142,8 +151,11 @@ ExtDimension::CopyFrom( const ExtDimension& clSrc)
|
||||
m_ptPos = clSrc.m_ptPos ;
|
||||
m_sText = clSrc.m_sText ;
|
||||
m_bToCalc = clSrc.m_bToCalc ;
|
||||
m_ptOutPos = clSrc.m_ptOutPos ;
|
||||
m_sOutText = clSrc.m_sOutText ;
|
||||
m_sCalcText = clSrc.m_sCalcText ;
|
||||
m_ptCalcPos = clSrc.m_ptCalcPos ;
|
||||
m_bCalcArrowIn = clSrc.m_bCalcArrowIn ;
|
||||
m_ptCalcP7 = clSrc.m_ptCalcP7 ;
|
||||
m_ptCalcP8 = clSrc.m_ptCalcP8 ;
|
||||
m_dExtLineLen = clSrc.m_dExtLineLen ;
|
||||
m_dArrowLen = clSrc.m_dArrowLen ;
|
||||
m_dTextDist = clSrc.m_dTextDist ;
|
||||
@@ -170,12 +182,40 @@ ExtDimension::GetTitle( void) const
|
||||
return sTitle ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const string&
|
||||
ExtDimension::GetSubType( void) const
|
||||
{
|
||||
static const string vsSubType[] = { "None", "Linear", "Radial", "Diametral", "Angular"} ;
|
||||
if ( m_nType >= DT_NONE && m_nType <= DT_ANGULAR)
|
||||
return vsSubType[m_nType] ;
|
||||
else
|
||||
return vsSubType[0] ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExtDimension::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
{
|
||||
// parametri
|
||||
sOut += "VN(" + ToString( m_vtN, 6) + ") " + szNewLine ;
|
||||
sOut += GetSubType() + szNewLine ;
|
||||
sOut += "VN(" + ToString( m_vtN, 3) + ") " + szNewLine ;
|
||||
sOut += "VD(" + ToString( m_vtDir, 3) + ") " + szNewLine ;
|
||||
sOut += "P1(" + ToString( GetInUiUnits( m_ptP1, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "P2(" + ToString( GetInUiUnits( m_ptP2, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "P3(" + ToString( GetInUiUnits( m_ptP3, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "P4(" + ToString( GetInUiUnits( m_ptP4, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "P5(" + ToString( GetInUiUnits( m_ptP5, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "P6(" + ToString( GetInUiUnits( m_ptP6, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "Pos(" + ToString( GetInUiUnits( m_ptPos, bMM), 3) + ") " + szNewLine ;
|
||||
sOut += "Txt=" + m_sText + szNewLine ;
|
||||
sOut += "El=" + ToString( GetInUiUnits( m_dExtLineLen, bMM), 3) +
|
||||
" Al=" + ToString( GetInUiUnits( m_dArrowLen, bMM), 3) +
|
||||
" Td=" + ToString( GetInUiUnits( m_dTextDist, bMM), 3) + szNewLine ;
|
||||
sOut += "Mm=" + string( m_bLenIsMM ? "1" : "0") +
|
||||
" Dec=" + ToString( m_nLenDec) + szNewLine ;
|
||||
sOut += "Fnt=" + m_sFont +
|
||||
" H=" + ToString( GetInUiUnits( m_dTextHeight, bMM), 3) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -292,12 +332,16 @@ ExtDimension::Load( NgeReader& ngeIn)
|
||||
bool
|
||||
ExtDimension::GetLocalBBox( BBox3d& b3Loc, int nFlag) const
|
||||
{
|
||||
// eventuale ricalcolo
|
||||
Update() ;
|
||||
// se lineare
|
||||
if ( m_nType == DT_LINEAR) {
|
||||
b3Loc.Set( m_ptP1) ;
|
||||
b3Loc.Add( m_ptP2) ;
|
||||
b3Loc.Set( m_ptP3) ;
|
||||
b3Loc.Add( m_ptP3) ;
|
||||
b3Loc.Add( m_ptP4) ;
|
||||
b3Loc.Add( m_ptCalcP7) ;
|
||||
b3Loc.Add( m_ptCalcP8) ;
|
||||
// ingombro del testo
|
||||
BBox3d b3Text ;
|
||||
if ( GetTextLocalBBox( b3Text))
|
||||
@@ -315,22 +359,29 @@ ExtDimension::GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
|
||||
// verifico validità del frame
|
||||
if ( frRef.GetType() == Frame3d::ERR)
|
||||
return false ;
|
||||
// eventuale ricalcolo
|
||||
Update() ;
|
||||
// se lineare
|
||||
if ( m_nType == DT_LINEAR) {
|
||||
// porto i punti nel riferimento passato
|
||||
// ingombro dei punti (portati nel riferimento passato)
|
||||
Point3d ptFrP1 = m_ptP1 ;
|
||||
ptFrP1.ToGlob( frRef) ;
|
||||
b3Ref.Set( ptFrP1) ;
|
||||
Point3d ptFrP2 = m_ptP2 ;
|
||||
ptFrP2.ToGlob( frRef) ;
|
||||
b3Ref.Add( ptFrP2) ;
|
||||
Point3d ptFrP3 = m_ptP3 ;
|
||||
ptFrP3.ToGlob( frRef) ;
|
||||
b3Ref.Add( ptFrP3) ;
|
||||
Point3d ptFrP4 = m_ptP4 ;
|
||||
ptFrP4.ToGlob( frRef) ;
|
||||
// assegno il box nel riferimento
|
||||
b3Ref.Set( ptFrP1) ;
|
||||
b3Ref.Add( ptFrP2) ;
|
||||
b3Ref.Add( ptFrP3) ;
|
||||
b3Ref.Add( ptFrP4) ;
|
||||
Point3d ptFrP7 = m_ptCalcP7 ;
|
||||
ptFrP7.ToGlob( frRef) ;
|
||||
b3Ref.Add( ptFrP7) ;
|
||||
Point3d ptFrP8 = m_ptCalcP8 ;
|
||||
ptFrP8.ToGlob( frRef) ;
|
||||
b3Ref.Add( ptFrP8) ;
|
||||
// ingombro del testo
|
||||
BBox3d b3Text ;
|
||||
if ( GetTextBBox( frRef, b3Text))
|
||||
@@ -501,6 +552,9 @@ ExtDimension::ToGlob( const Frame3d& frRef)
|
||||
// verifico validità del frame
|
||||
if ( frRef.GetType() == Frame3d::ERR)
|
||||
return false ;
|
||||
// se riferimento globale, non devo fare alcunché
|
||||
if ( AreSameFrame( frRef, GLOB_FRM))
|
||||
return true ;
|
||||
// imposto ricalcolo
|
||||
m_bToCalc = true ;
|
||||
m_OGrMgr.Reset() ;
|
||||
@@ -528,6 +582,9 @@ ExtDimension::ToLoc( const Frame3d& frRef)
|
||||
// verifico validità del frame
|
||||
if ( frRef.GetType() == Frame3d::ERR)
|
||||
return false ;
|
||||
// se riferimento globale, non devo fare alcunché
|
||||
if ( AreSameFrame( frRef, GLOB_FRM))
|
||||
return true ;
|
||||
// imposto ricalcolo
|
||||
m_bToCalc = true ;
|
||||
m_OGrMgr.Reset() ;
|
||||
@@ -561,16 +618,21 @@ ExtDimension::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
|
||||
// imposto ricalcolo
|
||||
m_bToCalc = true ;
|
||||
m_OGrMgr.Reset() ;
|
||||
// trasformo punto e versori
|
||||
return ( m_vtN.ToGlob( frOri) && m_vtN.ToLoc( frDest) &&
|
||||
m_vtDir.ToGlob( frOri) && m_vtDir.ToLoc( frDest) &&
|
||||
m_ptP1.ToGlob( frOri) && m_ptP1.ToLoc( frDest) &&
|
||||
m_ptP2.ToGlob( frOri) && m_ptP2.ToLoc( frDest) &&
|
||||
m_ptP3.ToGlob( frOri) && m_ptP3.ToLoc( frDest) &&
|
||||
m_ptP4.ToGlob( frOri) && m_ptP4.ToLoc( frDest) &&
|
||||
m_ptP5.ToGlob( frOri) && m_ptP5.ToLoc( frDest) &&
|
||||
m_ptP6.ToGlob( frOri) && m_ptP6.ToLoc( frDest) &&
|
||||
m_ptPos.ToGlob( frOri) && m_ptPos.ToLoc( frDest)) ;
|
||||
// se lineare
|
||||
if ( m_nType == DT_LINEAR) {
|
||||
// trasformo punto e versori
|
||||
return ( m_vtN.ToGlob( frOri) && m_vtN.ToLoc( frDest) &&
|
||||
m_vtDir.ToGlob( frOri) && m_vtDir.ToLoc( frDest) &&
|
||||
m_ptP1.ToGlob( frOri) && m_ptP1.ToLoc( frDest) &&
|
||||
m_ptP2.ToGlob( frOri) && m_ptP2.ToLoc( frDest) &&
|
||||
m_ptP3.ToGlob( frOri) && m_ptP3.ToLoc( frDest) &&
|
||||
m_ptP4.ToGlob( frOri) && m_ptP4.ToLoc( frDest) &&
|
||||
m_ptP5.ToGlob( frOri) && m_ptP5.ToLoc( frDest) &&
|
||||
m_ptP6.ToGlob( frOri) && m_ptP6.ToLoc( frDest) &&
|
||||
m_ptPos.ToGlob( frOri) && m_ptPos.ToLoc( frDest)) ;
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -583,14 +645,38 @@ ExtDimension::Update( void) const
|
||||
// se quota lineare
|
||||
if ( m_nType == DT_LINEAR) {
|
||||
// testo
|
||||
m_sOutText = m_sText ;
|
||||
if ( m_sOutText.find( IS_MEASURE) != string::npos) {
|
||||
m_sCalcText = m_sText ;
|
||||
if ( m_sCalcText.find( IS_MEASURE) != string::npos) {
|
||||
double dVal = ( m_ptP2 - m_ptP1) * m_vtDir * ( m_bLenIsMM ? 1 : 1. / ONEINCH) ;
|
||||
string sVal = ToString( dVal, m_nLenDec) ;
|
||||
ReplaceString( m_sOutText, IS_MEASURE, sVal) ;
|
||||
ReplaceString( m_sCalcText, IS_MEASURE, sVal) ;
|
||||
}
|
||||
// punto di inserimento del testo
|
||||
m_ptOutPos = ( m_ptP5 + m_ptP6) / 2 ;
|
||||
m_ptCalcPos = ( m_ptP5 + m_ptP6) / 2 ;
|
||||
// semidistanza di interruzione
|
||||
double dHalfDist = GetTextHalfDist( m_ptCalcPos) ;
|
||||
// lunghezza della linea di misura
|
||||
double dLen = ( m_ptP6 - m_ptP5).Len() ;
|
||||
// determino come orientare le frecce e dove mettere il testo
|
||||
if ( dLen - 2 * m_dArrowLen >= 2 * dHalfDist) {
|
||||
m_bCalcArrowIn = true ;
|
||||
m_ptCalcP7 = m_ptCalcPos - m_vtDir * dHalfDist ;
|
||||
m_ptCalcP8 = m_ptCalcPos + m_vtDir * dHalfDist ;
|
||||
}
|
||||
else if ( dLen >= 2 * dHalfDist) {
|
||||
m_bCalcArrowIn = false ;
|
||||
m_ptCalcP7 = m_ptP5 - m_vtDir * 2 * m_dArrowLen ;
|
||||
m_ptCalcP8 = m_ptP6 + m_vtDir * 2 * m_dArrowLen ;
|
||||
}
|
||||
else {
|
||||
m_bCalcArrowIn = false ;
|
||||
m_ptCalcP7 = m_ptP5 - m_vtDir * 2 * m_dArrowLen ;
|
||||
m_ptCalcP8 = m_ptP6 + m_vtDir * 2 * m_dArrowLen ;
|
||||
if ( ( m_ptPos - m_ptCalcP7).SqLen() <= ( m_ptPos - m_ptCalcP8).SqLen())
|
||||
m_ptCalcPos = m_ptCalcP7 - m_vtDir * dHalfDist ;
|
||||
else
|
||||
m_ptCalcPos = m_ptCalcP8 + m_vtDir * dHalfDist ;
|
||||
}
|
||||
// dichiaro ricalcolo eseguito
|
||||
m_bToCalc = false ;
|
||||
return true ;
|
||||
@@ -604,8 +690,7 @@ bool
|
||||
ExtDimension::ApproxWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST& lstPL) const
|
||||
{
|
||||
// eventuale ricalcolo
|
||||
if ( m_bToCalc)
|
||||
Update() ;
|
||||
Update() ;
|
||||
// se quota lineare
|
||||
if ( m_nType == DT_LINEAR) {
|
||||
// prima linea di riferimento
|
||||
@@ -617,41 +702,27 @@ ExtDimension::ApproxWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST&
|
||||
lstPL.back().AddUPoint( 0, m_ptP2) ;
|
||||
lstPL.back().AddUPoint( 1, m_ptP4) ;
|
||||
// se non c'è testo, linea di misura intera
|
||||
if ( IsEmptyOrSpaces( m_sOutText)) {
|
||||
if ( IsEmptyOrSpaces( m_sCalcText)) {
|
||||
lstPL.emplace_back() ;
|
||||
lstPL.back().AddUPoint( 0, m_ptP5) ;
|
||||
lstPL.back().AddUPoint( 1, m_ptP6) ;
|
||||
}
|
||||
// altrimenti, linea di misura divisa in due parti
|
||||
else {
|
||||
// semi distanza di interruzione
|
||||
double dHalfDist = m_dTextHeight / 2 + m_dTextDist ;
|
||||
// recupero il box di ingombro del testo
|
||||
BBox3d b3Text ;
|
||||
if ( GetTextLocalBBox( b3Text)) {
|
||||
double dHalfL = ( b3Text.GetMax().x - b3Text.GetMin().x) / 2 ;
|
||||
double dHalfH = ( b3Text.GetMax().y - b3Text.GetMin().y) / 2 ;
|
||||
dHalfDist = sqrt( dHalfL * dHalfL + dHalfH * dHalfH) ;
|
||||
if ( abs( m_vtDir.x) > EPS_ZERO)
|
||||
dHalfDist = min( dHalfDist, dHalfL / abs( m_vtDir.x)) ;
|
||||
if ( abs( m_vtDir.y) > EPS_ZERO)
|
||||
dHalfDist = min( dHalfDist, dHalfH / abs( m_vtDir.y)) ;
|
||||
dHalfDist += m_dTextDist ;
|
||||
}
|
||||
// prima parte
|
||||
lstPL.emplace_back() ;
|
||||
lstPL.back().AddUPoint( 0, m_ptP5) ;
|
||||
lstPL.back().AddUPoint( 1, m_ptOutPos - m_vtDir * dHalfDist) ;
|
||||
lstPL.back().AddUPoint( 1, m_ptCalcP7) ;
|
||||
// seconda parte
|
||||
lstPL.emplace_back() ;
|
||||
lstPL.back().AddUPoint( 0, m_ptOutPos + m_vtDir * dHalfDist) ;
|
||||
lstPL.back().AddUPoint( 1, m_ptP6) ;
|
||||
lstPL.back().AddUPoint( 0, m_ptP6) ;
|
||||
lstPL.back().AddUPoint( 1, m_ptCalcP8) ;
|
||||
}
|
||||
// frecce
|
||||
lstPL.emplace_back() ;
|
||||
GetArrowHead( m_ptP5, -m_vtDir, lstPL.back()) ;
|
||||
GetArrowHead( m_ptP5, ( m_bCalcArrowIn ? -m_vtDir : m_vtDir), lstPL.back()) ;
|
||||
lstPL.emplace_back() ;
|
||||
GetArrowHead( m_ptP6, m_vtDir, lstPL.back()) ;
|
||||
GetArrowHead( m_ptP6, ( m_bCalcArrowIn ? m_vtDir : -m_vtDir), lstPL.back()) ;
|
||||
// testo
|
||||
POLYLINELIST lstTxt ;
|
||||
if ( ApproxTextWithLines( dLinTol, dAngTolDeg, lstTxt))
|
||||
@@ -661,6 +732,27 @@ ExtDimension::ApproxWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST&
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
double
|
||||
ExtDimension::GetTextHalfDist( const Point3d& ptText) const
|
||||
{
|
||||
// semi distanza di interruzione
|
||||
double dHalfDist = m_dTextHeight / 2 + m_dTextDist ;
|
||||
// recupero il box di ingombro del testo
|
||||
BBox3d b3Text ;
|
||||
if ( GetTextMyBBox( ptText, b3Text)) {
|
||||
double dHalfL = ( b3Text.GetMax().x - b3Text.GetMin().x) / 2 ;
|
||||
double dHalfH = ( b3Text.GetMax().y - b3Text.GetMin().y) / 2 ;
|
||||
dHalfDist = sqrt( dHalfL * dHalfL + dHalfH * dHalfH) ;
|
||||
if ( abs( m_vtDir.x) > EPS_ZERO)
|
||||
dHalfDist = min( dHalfDist, dHalfL / abs( m_vtDir.x)) ;
|
||||
if ( abs( m_vtDir.y) > EPS_ZERO)
|
||||
dHalfDist = min( dHalfDist, dHalfH / abs( m_vtDir.y)) ;
|
||||
dHalfDist += m_dTextDist ;
|
||||
}
|
||||
return dHalfDist ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExtDimension::GetArrowHead( const Point3d& ptTip, const Vector3d& vtDir, PolyLine& PL) const
|
||||
@@ -681,8 +773,7 @@ bool
|
||||
ExtDimension::ApproxTextWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST& lstPL) const
|
||||
{
|
||||
// eventuale ricalcolo
|
||||
if ( m_bToCalc)
|
||||
Update() ;
|
||||
Update() ;
|
||||
|
||||
// imposto il font corrente e i suoi dati
|
||||
FontManager& fntMgr = FontManager::GetFontManager() ;
|
||||
@@ -690,12 +781,12 @@ ExtDimension::ApproxTextWithLines( double dLinTol, double dAngTolDeg, POLYLINELI
|
||||
return false ;
|
||||
|
||||
// richiedo l'outline
|
||||
if ( ! fntMgr.ApproxWithLines( m_sOutText, ETXT_IPMC, dLinTol, dAngTolDeg, lstPL))
|
||||
if ( ! fntMgr.ApproxWithLines( m_sCalcText, ETXT_IPMC, dLinTol, dAngTolDeg, lstPL))
|
||||
return false ;
|
||||
|
||||
// calcolo la trasformazione
|
||||
Frame3d frRef ;
|
||||
if ( ! frRef.Set( m_ptOutPos, m_vtN))
|
||||
if ( ! frRef.Set( m_ptCalcPos, m_vtN))
|
||||
return false ;
|
||||
|
||||
// eseguo la trasformazione
|
||||
@@ -713,7 +804,7 @@ ExtDimension::GetTextMyBBox( const Point3d& ptPos, BBox3d& b3Loc) const
|
||||
b3Loc.Reset() ;
|
||||
|
||||
// se testo vuoto, box vuoto
|
||||
if ( IsEmptyOrSpaces( m_sOutText))
|
||||
if ( IsEmptyOrSpaces( m_sCalcText))
|
||||
return true ;
|
||||
|
||||
// imposto il font corrente e i suoi dati
|
||||
@@ -722,7 +813,7 @@ ExtDimension::GetTextMyBBox( const Point3d& ptPos, BBox3d& b3Loc) const
|
||||
return false ;
|
||||
|
||||
// richiedo il box
|
||||
if ( ! fntMgr.GetBBox( m_sOutText, ETXT_IPMC, b3Loc))
|
||||
if ( ! fntMgr.GetBBox( m_sCalcText, ETXT_IPMC, b3Loc))
|
||||
return false ;
|
||||
|
||||
// calcolo ed eseguo la trasformazione
|
||||
@@ -739,11 +830,10 @@ bool
|
||||
ExtDimension::GetTextLocalBBox( BBox3d& b3Loc) const
|
||||
{
|
||||
// eventuale ricalcolo
|
||||
if ( m_bToCalc)
|
||||
Update() ;
|
||||
Update() ;
|
||||
|
||||
// calcolo il box
|
||||
return GetTextMyBBox( m_ptOutPos, b3Loc) ;
|
||||
return GetTextMyBBox( m_ptCalcPos, b3Loc) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -751,11 +841,10 @@ bool
|
||||
ExtDimension::GetTextBBox( const Frame3d& frRef, BBox3d& b3Ref) const
|
||||
{
|
||||
// eventuale ricalcolo
|
||||
if ( m_bToCalc)
|
||||
Update() ;
|
||||
Update() ;
|
||||
|
||||
// calcolo il box
|
||||
if ( ! GetTextMyBBox( m_ptOutPos, b3Ref))
|
||||
if ( ! GetTextMyBBox( m_ptCalcPos, b3Ref))
|
||||
return false ;
|
||||
|
||||
// porto il box nel riferimento passato
|
||||
|
||||
Reference in New Issue
Block a user