我正在使用Helix Toolkit和WPF,我想把一堆线条转换成表面。为了澄清,我有一组三维曲线,我想得到所有这些线条所产生的弯曲刀片。 (这些线表示通过刀片的线条。)
在某种程度上,我想做与this question所要求的相反的事情(将线条用作线框将其转换为模型)。
到目前为止,我有这个XAML:
<Window x:Class="_3D_Geometry_Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:helix="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
xmlns:local="clr-namespace:_3D_Geometry_Test">
<Grid>
<helix:HelixViewport3D x:Name="view1">
<helix:DefaultLights/>
<helix:MeshGeometryVisual3D x:Name="bladesMeshGeo" />
</helix:HelixViewport3D>
</Grid>
</Window>
代码隐藏的相关部分(我不包括GetSplines()
和GetSpars()
的内容,因为它们完全由我添加了大量Point3D
个对象列表):
using HelixToolkit.Wpf;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;
namespace _3D_Geometry_Test
{
public partial class MainWindow : Window
{
const int NUM_SPLINES = 11;
const int NUM_SPARS = 10;
public MainWindow()
{
InitializeComponent();
List<Point3D>[] splines = GetSplines();
List<Point3D>[] spars = GetSpars();
for (int i = 0; i < NUM_SPLINES; i++)
{
bladesMeshGeo.Children.Add(new LinesVisual3D
{
Points = new Point3DCollection(splines[i]),
Color = Colors.Red
});
}
for (int i = 0; i < NUM_SPARS; i++)
{
bladesMeshGeo.Children.Add(new LinesVisual3D
{
Points = new Point3DCollection(spars[i]),
Color = Colors.Blue
});
}
}
}
}
结果如下:
但我想要这样的事情:
编辑:我并不喜欢Helix Toolkit,所以如果有人知道另一个可以实现这一目标的图书馆,我会很高兴听到它!
答案 0 :(得分:0)
好的,所以我提出的最好的方法是制作很多很多连接所有点的小三角形,就像这样(XAML保持不变):
[Fact]
public async void UpdateMerchantSuccessPushesMerchantEntityToDataStore()
{
//Arrange
var originalMerchantConfig = ModelFactory.GetMerchant();
var merchants = new List<MerchantConfigurationEntity>();
var dataAccess = new Mock<IRepository<MerchantConfigurationEntity>>();
dataAccess.Setup(m => m.UpdateOneAsync(It.IsAny<MerchantConfigurationEntity>()))
.Callback((MerchantConfigurationEntity m) => merchants.Add(m))
.Returns(Task.FromResult(1));
var merchantRepo = new MerchantConfigurationRepository((MongoDBRepository<MerchantConfigurationEntity>)dataAccess.Object);
//Act
var result = await merchantRepo.UpdateMerchant(originalMerchantConfig);
//Assert
result.ShouldNotBeNull();
result.Sucess.ShouldBeTrue();
merchants.Count.ShouldBe(1);
merchants[0].merchantId.ShouldBe(originalMerchantConfig.merchantId);
}
生成的图像如下所示:
这绝对是对线框的改进,但它仍然不是很平滑(不确定是否显示在我发布的图像上),而且我确信必须有更好的解决方案,所以我会离开这暂时没有答案。只需发布我的(临时)解决方案,万一它可以帮助任何人。