iLogic. Получаем PartDocument через кривую на чертежном виде

Приветствую друзья! Продолжаем изучать API Autodesk Inventor.

Сегодня хочу показать пример как получить документ детали PartDocument от выделенной кривой на чертежном виде. В примере мы получаем документ детали, которому принадлежит выделенный сегмент. Проблема заключается в том, что сегмент, который мы выделяем, может быть порождён (спроецирован) кривой или гранью. В этом случае нам необходима проверка кому принадлежит сегмент.

Иерархия объектов следующего вида: Сегмент => Кривая => Грань или поверхность => Поверхность тела => Определения компонента => Документ детали.

Код на C#

public void GetPartFromSegment(Inventor.Application invApp)
{
	// Получаем сегмент кривой.
	DrawingCurveSegment curveSegment;
	curveSegment = invApp.CommandManager.Pick(SelectionFilterEnum.kDrawingCurveSegmentFilter, 
											  "Нужно выбрать сегмент на чертежном виде.");

	// Инициализируем поверхность тела. Присваиваем null чтобы в дальнейшим проверить.
	SurfaceBody surfaceBody=null;

	// Получаем кривую из сегмента.
	DrawingCurve drawingCurve;
	drawingCurve = curveSegment.Parent;

	// Кривая может принадлежать двум объектам.
	// 1. Грани. (проекция грани).
	// 2. Поверхности. (проекция поверхности).
	if (drawingCurve.ModelGeometry is Edge) // Если кривая является гранью. 
	{
		// Получаем грань из кривой.
		Edge edge;
		edge = drawingCurve.ModelGeometry;

		// Получаем поверхность тела из грани.
		surfaceBody = edge.Parent;
	}
	else if (drawingCurve.ModelGeometry is Face) // Если кривая является поверхностью. 
	{
		// Получаем поверхность из кривой.
		Face face;
		face = drawingCurve.ModelGeometry;

		// Получаем поверхность тела из поверхности.
		surfaceBody = face.Parent;
	}      
	else
	{
		MessageBox.Show("Неизвестный тип!");
	}

	// Если объект не получили, выходим.
	if (surfaceBody == null)
		return;

	// Получаем ComponentDefinition.
	ComponentDefinition componentDefinition;
	componentDefinition = surfaceBody.ComponentDefinition;

	// Получаем документ.
	PartDocument partDocument;
	partDocument = (PartDocument)componentDefinition.Document;

	// Выводим имя документа.
	MessageBox.Show(partDocument.FullFileName);
}