EgtGraphics 1.5l1 :
- aggiornamento a VS2013 - curve marcate ora hanno spessore 2 e evidenziate 4. - gestione riferimento griglia (CPlane) spostata in EgtGeomKernel - aggiunta possibilità di visualizzare piccolo riferimento globale in basso a sinistra. - migliorato snap a intersezione di curve.
This commit is contained in:
+38
-16
@@ -34,8 +34,8 @@ using namespace std ;
|
||||
|
||||
//------------------------------ Local functions -----------------------------
|
||||
static ObjEGrGraphics* CreateObjEGrGraphics( bool bNewWay) ;
|
||||
static bool CalcCurveTailMark( const PolyLine& plCrv, PolyLine& plMark) ;
|
||||
static bool CalcCurveTipArrow( const PolyLine& plCrv, PolyLine& plArr) ;
|
||||
static bool CalcCurveTailMark( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plMark) ;
|
||||
static bool CalcCurveTipArrow( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plArr) ;
|
||||
static bool CalcConnectingLines( const PolyLine& plCrv, const Vector3d& vtTh, bool bDense, PNTVECTOR& vPnt) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -239,11 +239,14 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, MdStMk siObj)
|
||||
pGraphics->AddColor( cCol) ;
|
||||
pGraphics->AddPolyLine( PL) ;
|
||||
// eventuali segni ausiliari (mark, frecce, ...)
|
||||
Vector3d vtRef ;
|
||||
if ( ! pCurve->GetExtrusion( vtRef) || vtRef.IsSmall())
|
||||
vtRef = Z_AX ;
|
||||
PolyLine PLM ;
|
||||
if ( CalcCurveTailMark( PL, PLM))
|
||||
if ( CalcCurveTailMark( vtRef, PL, PLM))
|
||||
pGraphics->AddPolyLine( PLM, true) ;
|
||||
PolyLine PLA ;
|
||||
if ( CalcCurveTipArrow( PL, PLA))
|
||||
if ( CalcCurveTipArrow( vtRef, PL, PLA))
|
||||
pGraphics->AddPolyLine( PLA, true) ;
|
||||
// eventuale spessore
|
||||
double dTh ;
|
||||
@@ -387,7 +390,7 @@ CreateObjEGrGraphics( bool bNewWay)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
CalcCurveTailMark( const PolyLine& plCrv, PolyLine& plMark)
|
||||
CalcCurveTailMark( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plMark)
|
||||
{
|
||||
// pulisco la polilinea per il segno
|
||||
plMark.Clear() ;
|
||||
@@ -429,19 +432,37 @@ CalcCurveTailMark( const PolyLine& plCrv, PolyLine& plMark)
|
||||
dLenTr = MIN_LEN_TR ;
|
||||
// disegno traverso
|
||||
Frame3d frF ;
|
||||
frF.Set( ptTail, vtDir) ;
|
||||
Point3d ptP1 = ORIG + Vector3d( 0.5 * dLenTr, 0, 0) ;
|
||||
ptP1.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 0, ptP1) ;
|
||||
Point3d ptP2 = ORIG - Vector3d( 0.5 * dLenTr, 0, 0) ;
|
||||
ptP2.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 1, ptP2) ;
|
||||
if ( frF.Set( ptTail, vtDir, vtRef)) {
|
||||
Point3d ptP0 = ORIG + Vector3d( 0, 0.5 * dLenTr, 0) ;
|
||||
ptP0.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 0, ptP0) ;
|
||||
Point3d ptP1 = ORIG + Vector3d( 0, - 0.5 * dLenTr, 0) ;
|
||||
ptP1.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 1, ptP1) ;
|
||||
}
|
||||
else {
|
||||
frF.Set( ptTail, vtDir) ;
|
||||
Point3d ptP0 = ORIG + Vector3d( - 0.5 * dLenTr, - 0.5 * dLenTr, 0) ;
|
||||
ptP0.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 0, ptP0) ;
|
||||
Point3d ptP1 = ORIG + Vector3d( 0.5 * dLenTr, - 0.5 * dLenTr, 0) ;
|
||||
ptP1.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 1, ptP1) ;
|
||||
Point3d ptP2 = ORIG + Vector3d( 0.5 * dLenTr, 0.5 * dLenTr, 0) ;
|
||||
ptP2.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 2, ptP2) ;
|
||||
Point3d ptP3 = ORIG + Vector3d( - 0.5 * dLenTr, 0.5 * dLenTr, 0) ;
|
||||
ptP3.ToGlob( frF) ;
|
||||
plMark.AddUPoint( 3, ptP3) ;
|
||||
// punto di chiusura coincidente con il primo
|
||||
plMark.AddUPoint( 4, ptP0) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
CalcCurveTipArrow( const PolyLine& plCrv, PolyLine& plArr)
|
||||
CalcCurveTipArrow( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plArr)
|
||||
{
|
||||
// pulisco la polilinea per la freccia
|
||||
plArr.Clear() ;
|
||||
@@ -488,12 +509,13 @@ CalcCurveTipArrow( const PolyLine& plCrv, PolyLine& plArr)
|
||||
// disegno freccia
|
||||
const double A_WIDTH_COEFF = 0.3 ;
|
||||
Frame3d frF ;
|
||||
frF.Set( ptTip, vtDir) ;
|
||||
if ( ! frF.Set( ptTip, vtDir, vtRef))
|
||||
frF.Set( ptTip, vtDir) ;
|
||||
plArr.AddUPoint( 0, ptTip) ;
|
||||
Point3d ptP1 = ORIG + Vector3d( A_WIDTH_COEFF, 0, -1) * dLenArr ;
|
||||
Point3d ptP1 = ORIG + Vector3d( 0, A_WIDTH_COEFF, -1) * dLenArr ;
|
||||
ptP1.ToGlob( frF) ;
|
||||
plArr.AddUPoint( 1, ptP1) ;
|
||||
Point3d ptP2 = ORIG + Vector3d( -A_WIDTH_COEFF, 0, -1) * dLenArr ;
|
||||
Point3d ptP2 = ORIG + Vector3d( 0, - A_WIDTH_COEFF, -1) * dLenArr ;
|
||||
ptP2.ToGlob( frF) ;
|
||||
plArr.AddUPoint( 2, ptP2) ;
|
||||
plArr.AddUPoint( 3, ptTip) ;
|
||||
|
||||
Reference in New Issue
Block a user