问题描述
我需要从后面的代码中(而不是从 xaml)中绘制大量三角形。 为了计算,我用 for 循环计算一半 Triangleindices,另一半用另一个计算。 这里的代码: xml:
<Window x:Name="MainWindowX" x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HelixTest"
xmlns:HelixToolkit="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<HelixToolkit:HelixViewport3D Name="myviewport" ZoomExtentsWhenLoaded="True" Background="Black" ShowCoordinateSystem="True" >
<!-- Remember to add light to the scene -->
<HelixToolkit:SunLight/>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="myGeometryModel3D">
<GeometryModel3D.Geometry>
<MeshGeometry3D x:Name="myMeshGeometry3D">
</MeshGeometry3D>
</GeometryModel3D.Geometry >
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.GradientStops>
<GradientStop Color="red" Offset="2" />
<GradientStop Color="Red" Offset="3" />
<GradientStop Color="Blue" Offset="4" />
<GradientStop Color="LimeGreen" Offset="5" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</MaterialGroup>
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
<HelixToolkit:BillboardTextVisual3D Position="11 0 0" Text="X" Foreground="Yellow"/>
<HelixToolkit:BillboardTextVisual3D Position="0 11 0" Text="Y" Foreground="Yellow" />
<HelixToolkit:BillboardTextVisual3D Position="0 0 11" Text="Z" Foreground="Yellow"/>
</HelixToolkit:HelixViewport3D>
</Grid>
和后面的 vb.net 代码
Imports System.Windows.Media.Media3D
Imports HelixToolkit
Class MainWindow
Dim punti = 5
Dim curve = 5
Dim valori As New List(Of Integer)
Dim indices As New List(Of Integer)
Dim triangoli = (punti - 1) * (curve - 1) * 2
Private Sub MainWindowX_Loaded(sender As Object,e As RoutedEventArgs) Handles MyBase.Loaded,MyBase.Loaded
myMeshGeometry3D.Positions.Clear()
myMeshGeometry3D.TriangleIndices.Clear()
valori.Add(0)
valori.Add(1)
valori.Add(2)
valori.Add(3)
valori.Add(3)
valori.Add(0)
valori.Add(1)
valori.Add(2)
valori.Add(3)
valori.Add(3)
valori.Add(0)
valori.Add(1)
valori.Add(2)
valori.Add(3)
valori.Add(3)
valori.Add(0)
valori.Add(1)
valori.Add(2)
valori.Add(3)
valori.Add(3)
valori.Add(0)
valori.Add(1)
valori.Add(2)
valori.Add(3)
valori.Add(3)
'load myMeshGeometry3d.Positions
For I = 0 To curve - 1
'per ogni curva
For b = 0 To punti - 1
myMeshGeometry3D.Positions.Add(New Point3D(b,I,valori(I * punti + b)))
Next
Next
'First half
For d = punti + 1 To triangoli - 2 Step punti
For f = 0 To punti - 2 Step 1
myMeshGeometry3D.TriangleIndices.Add(d + f)
myMeshGeometry3D.TriangleIndices.Add((d - 1) + f)
myMeshGeometry3D.TriangleIndices.Add((d - punti) + f)
Next
Next
'second half
For j = 0 To triangoli Step punti
For i = 0 To punti - 2 Step 1
myMeshGeometry3D.TriangleIndices.Add(j + i)
myMeshGeometry3D.TriangleIndices.Add((j + 1) + i)
myMeshGeometry3D.TriangleIndices.Add((j + punti) + i)
Next
Next
End Sub
End Class
我的用处是只显示从第一个循环生成的三角形,第二个不显示。 我试图交换循环,它们都是正确的。 我还尝试添加 2 个按钮,一个用于循环。他们努力显示半三角形,但只有首先我清除三角形索引。 有什么建议吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)