//--------------------------------------------------------- bool CSG_PointCloud::Assign(CSG_Data_Object *pObject) { if( pObject && pObject->is_Valid() && pObject->Get_ObjectType() == Get_ObjectType() ) { Destroy(); CSG_PointCloud *pPointCloud = (CSG_PointCloud *)pObject; Get_History() = pPointCloud->Get_History(); for(int iField=0; iField<pPointCloud->m_nFields; iField++) { _Add_Field(pPointCloud->m_Field_Name[iField]->c_str(), pPointCloud->m_Field_Type[iField]); } for(int iPoint=0; iPoint<pPointCloud->Get_Count(); iPoint++) { if( _Inc_Array() ) { memcpy(m_Points[iPoint] + 1, pPointCloud->m_Points[iPoint] + 1, m_nPointBytes - 1); } } return( true ); } return( false ); }
//--------------------------------------------------------- bool CPC_Drop_Attribute::On_Execute(void) { //------------------------------------------------- int *Features = (int *)Parameters("FIELDS")->asPointer(); int nFeatures = Parameters("FIELDS")->asInt (); if( !Features || nFeatures <= 0 ) { Error_Set(_TL("You must specify at least one attribute to drop!")); return( false ); } //----------------------------------------------------- CSG_PointCloud *pInput = Parameters("INPUT" )->asPointCloud(); CSG_PointCloud *pOutput = Parameters("OUTPUT")->asPointCloud(), Output; if( !pOutput || pOutput == pInput ) { pOutput = &Output; } pOutput->Create(pInput); //----------------------------------------------------- int i; std::set<int> setCols; std::set<int>::iterator it; setCols.clear(); for(i=0; i<nFeatures; i++) { setCols.insert(Features[i]); } for(i=0, it=setCols.begin(); it!=setCols.end(); i++, it++) { pOutput->Del_Field(*it - i); } //----------------------------------------------------- for(i=0; i<pInput->Get_Point_Count() && SG_UI_Process_Set_Progress(i, pInput->Get_Count()); i++) { pOutput->Add_Point(pInput->Get_X(i), pInput->Get_Y(i), pInput->Get_Z(i)); for(int j=0, k=0; j<pInput->Get_Attribute_Count(); j++, k++) { it = setCols.find(j + 3); if( it != setCols.end() ) { k--; continue; } switch (pInput->Get_Attribute_Type(j)) { default: pOutput->Set_Attribute(k, pInput->Get_Attribute(i, j)); break; case SG_DATATYPE_Date: case SG_DATATYPE_String: CSG_String sAttr; pInput->Get_Attribute(i, j, sAttr); pOutput->Set_Attribute(k, sAttr); break; } } } //----------------------------------------------------- if( pOutput == &Output ) { CSG_MetaData History = pInput->Get_History(); CSG_String Name = pInput->Get_Name (); pInput->Assign(pOutput); pInput->Get_History() = History; pInput->Set_Name(Name); Parameters("OUTPUT")->Set_Value(pInput); } else { pOutput->Fmt_Name("%s [%s]", pInput->Get_Name(), _TL("Dropped Attributes")); } //----------------------------------------------------- return( true ); }