Untitled

 avatar
unknown
plain_text
a year ago
2.0 kB
1
Indexable
//----------------------------------------------------------------------------
BOOL
CParseDxf::SaveLine( const POINT_3D& ptP1, const POINT_3D& ptP2, const VECTOR_3D& vtZloc,
                     const DdxString& szLayer, const DXFColor& dxfColor, double dThick, DdxString* pszFullName )
{
   DdxString   szGroupName;
   GDBGObjData GObData;
   GDBLineData LineData;
   GDBRefData  RefGroup;


   // inizializzazioni
   if ( pszFullName )
      pszFullName->Empty();

   // se linea nulla salto tutto, ma ok
   if ( SAME_POINT_EPS( ptP1, ptP2, 2 * EPSILON ) )
      return TRUE;

   // memorizzazione della retta
   if ( CalculateGroup( szLayer, &szGroupName ) ) {
      // creazione del gruppo, se non esiste già
      InsertGroup( szGroupName, vtZloc, fabs( dThick ) > EPSILON, ( dxfColor.IsVisible() ? ST_ON : ST_OFF ), ( m_nFlag & IDXF_MODIFLAYERREF ) );
      // recupero del riferimento del gruppo
      GetGroupReference( szGroupName, &RefGroup );
      // non é necessario verificare che vtZloc e la Z del riferimento del gruppo siano compatibili
      // inserimento della linea nel DB
      m_nNumCurr++;

      GObData.szName.Format( _T("DXF%d"), m_nNumCurr );
      GObData.szGroup = szGroupName;
      GObData.nStatus = ST_ON;
      GObData.rdRef.bIs = FALSE;
      GetMaterialName( dxfColor, &GObData.szMatName );
      LineData.nStatus = GDBLINE_P1_P2;

      // i punti sono espressi in riferimento globale e vanno portati in locale
      POINT_TO_LOC( ptP1, LineData.ptP1, RefGroup )
      POINT_TO_LOC( ptP2, LineData.ptP2, RefGroup )
      if ( !m_pGdb->AddLine( GObData, LineData ) )
         return FALSE;
      SetThick( GObData.szName, GObData.szGroup, dThick );
      SetReserved( GObData.szName, GObData.szGroup, dxfColor.ToInt() );

      // salvo di averla aggiunta
      if ( pszFullName )
         *pszFullName = GObData.szGroup + STR_PATHSEPARATOR + GObData.szName;
   }

   return TRUE;
}
Leave a Comment