По исследовал проблему:
1) таблицу ComponentDefinition.iAssemblyFactory я конечно могу прочитать, но пока я не понял что с этим можно сделать, учитывая что могут использоваться замены таблицы компонентов с исполнениями и в общем случае PartNumber может не совпадать с MemberName - тут надо думать.....
2) насчет ApprenticeServer
при приведении ApprenticeServerDocument к AssemblyDocument получаем exception: Unable to cast COM object of type 'System.__ComObject' to interface type 'Inventor.AssemblyDocument'.
видимо есть ограничение на использование ApprenticeServer
private void ShowBOM()
{
oApprenticeServerDoc = oApprenticeApp.Open(textFilename.Text);
if (oApprenticeServerDoc.DocumentType == DocumentTypeEnum.kAssemblyDocumentObject)
{
AssemblyDocument assemblydoc = (AssemblyDocument)oApprenticeServerDoc.ComponentDefinition.Document; // <-- 'Unable to cast COM object of type 'System.__ComObject' to interface type 'Inventor.AssemblyDocument'.....
BOM oBOM = assemblydoc.ComponentDefinition.BOM;
oBOM.StructuredViewFirstLevelOnly = true;
oBOM.StructuredViewEnabled = true;
BOMView oBOMView = oBOM.BOMViews[2];
}
}
Мне казалось что это будет простая задача, а в получается, что данные можно получить только какими-то самыми противоестественными методами. И главное есть программа которая выполняет похожую задачу, но исходников нет, а расковырять программу написанную на C++ я не настолько хакер.