Вот, накалякал консольную программу, которая урезает IDF в секции .PLACEMENT, оставляя в нем только компоненты, перечисленные в BOM. При этом BOM должен быть формата стандартного CIS отчета, а не самый простой BOM Capture. Примерный вид BOM такой:

Код
Item Number    Quantity    Part Reference    Value    PE3_Name    Part Number    Producer    Supplier
1    1    BT1    BATTERY    Держатель батарейки CR2032    1734178-1    TYCO    
2    12    C1,C5,C10,C16,C118,C122,C127,C129,C142,C143,C147,C148    10uF    Конденсатор керамический 0805 X5R 10мкФ 6.3В 10%    CC0805K-X5R-10V-106    GENERIC


Файл BOM, должен иметь регулярную структуру, столбцы разделены любым из знаков табуляции, запятой, точки с запятой, или #. Списки компонентов должны разделяться либо пробелом, либо запятой. При сокращенной выдаче должен использоваться один минус (C4-C15). Первая строка должна содержать заголовок столбцов, причем столбец с рефдесами должен называться либо Reference, либо Part Reference. Какой именно он по счету - неважно.

В принципе, стандартный отчет CIS вполне попадает во все эти правила. Могу также сделать доработку для BOM других САПРов, если кто-нибудь пример предоставит.

Кратко о том, как делается фильтрация. Программа заглатывает BOM, и IDF. Просто копирует исходный IDF от начала файла до строчки .PLACEMENT. Потом начинает читать файл записями по две строки и искать в них refdes. Если таковой находится в BOM'е, то она копирует строчки на выход, или пропускает. Как только найдет строчку, начинающуюся с точки, то просто копирует на выход концевик IDF. Вот собственно и все.