Как создать 3D-трубу с переменным диаметром

Я использую набор инструментов Helix с WPF и пытаюсь создать трехмерное изображение, включающее трубу/трубу с переменным диаметром. По сути, я пытаюсь взять непрямую линию и повернуть ее вокруг оси, создав трубу. Меня интересует только получившаяся трубка, а не фактическое вращение (я не пытаюсь визуализировать вращение, я имею в виду).

Есть ли способ сделать это с помощью набора инструментов Helix или любого другого инструмента для создания 3D-поверхностей? Лучшее решение, которое мне удалось придумать, это создать серию труб разного диаметра, но я не могу понять, как сгладить переходы между каждой из труб. Это также далеко не идеальное решение, потому что на трубе много точек, поэтому в итоге у меня получается около 150 очень маленьких сегментов трубы. Документации для Helix немного не хватает, но я просмотрел исходный код и не нашел очевидного решения.


person Eliza Bennet    schedule 10.01.2017    source источник


Ответы (1)


MeshBuilder.AddRevolvedGeometry() или MeshBuilder.AddSurfaceOfRevolution() должны сделать это.

См. исходный код с комментариями здесь и здесь говорит

/// <summary>
/// Adds a surface of revolution
/// </summary>
/// <param name="origin">The origin.</param>
/// <param name="axis">The axis.</param>
/// <param name="section">The points defining the curve to revolve.</param>
/// <param name="sectionIndices">The indices of the line segments of the section.</param>
/// <param name="thetaDiv">The number of divisions.</param>
/// <param name="textureValues">The texture values.</param>
public void AddSurfaceOfRevolution(
        Point3D origin, Vector3D axis, IList<Point> section, IList<int> sectionIndices,
        int thetaDiv = 37, IList<double> textureValues = null)

и

/// <summary>
/// Adds a surface of revolution.
/// </summary>
/// <param name="points">The points (x coordinates are distance from the origin along the axis of revolution, y coordinates are radius, )</param>
/// <param name="textureValues">The v texture coordinates, one for each point in the <paramref name="points" /> list.</param>
/// <param name="origin">The origin of the revolution axis.</param>
/// <param name="direction">The direction of the revolution axis.</param>
/// <param name="thetaDiv">The number of divisions around the mesh.</param>
/// <remarks>
/// See http://en.wikipedia.org/wiki/Surface_of_revolution.
/// </remarks>
public void AddRevolvedGeometry(IList<Point> points, IList<double> textureValues, Point3D origin, Vector3D direction, int thetaDiv)
person wkl    schedule 10.01.2017
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. – Из обзора - person Joseph; 10.01.2017
comment
@ Джозеф, почему бы и нет? ОП хотел создать вращающуюся геометрию с помощью набора инструментов Helix. Данные методы создают такую ​​геометрию и являются частью инструментария Helix. Я не критиковал и не просил разъяснений. - person wkl; 10.01.2017
comment
Можете ли вы предоставить дополнительную информацию об этих методах, пример их использования или ссылку, где содержится дополнительная информация? - person Joseph; 10.01.2017
comment
@Joseph Похоже, онлайн-документации нет (кажется, вам нужно создать свою собственную из исходников). Однако я добавил ссылки на исходный код, где методы имеют комментарии, описывающие их. - person wkl; 10.01.2017
comment
@wkl Спасибо, метод AddRevolvedGeometry() сделал именно то, что я искал, как только я понял, что Vector3D нужна ось для вращения. - person Eliza Bennet; 10.01.2017