Untitled
//---------------------------------------------------------------------------- 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