On 12/4/2013 2:06 PM, Maciej Sumiński wrote: > I am digging through the code responsible for BOARD_ITEMs removal and I > have a few questions that are probably easy to answer for people, who > know the source code better than I do. > > I have found two places where removal happens: > - void PCB_EDIT_FRAME::RemoveStruct( BOARD_ITEM* Item, wxDC* DC ) > called when there is only one item to remove (user pressed the Delete > key when an item was under the cursor) > > - void PCB_EDIT_FRAME::Block_Delete() > used for removal of block of items (user selected a block of items, > right-clicked and chose "Delete block") > > Why are they handled in a different way? Is it only to avoid multiple > ratsnest compilations or refreshing the whole canvas vs xoring single > items to erase? > > There are also various way to remove items: > - void BOARD_ITEM::UnLink() & void BOARD_ITEM::DeleteStructure() > - BOARD_ITEM* BOARD::Remove( BOARD_ITEM* aBoardItem ) & void > BOARD::Delete( BOARD_ITEM* aBoardItem ) > > I can easily say the difference between BOARD_ITEM::Unlink & > DeleteStructure or BOARD::Remove & BOARD::Delete, but I am not able to > say why BOARD_ITEM::Unlink() and BOARD::Remove() coexist. Do not they > simply remove items from DLISTs stored in the BOARD class? > > Thanks in advance, > Orson >
Orson, The only reason I see that BOARD::Remove() has to stay is that MARKER_PCB and ZONE_CONTAINER objects are not stored DLISTs. They are std::vectors so BOARD_ITEM::Unlink() would not remove them from a vector. I'm not sure why this was done this way. If they were changed to DLISTs, BOARD::Remove() could be eliminated. Wayne _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp

