David-Duan 发表于 2023-5-17 15:24:49

.NET 6 WPF C1Chart3D 如何设置圆形的grid layout

以前用WinForm 版本的 C1Chart3D 时可通过 Chart3DDataSetGrid 类来设置 圆形的grid layout, 代码如下:



Chart3DDataSetGrid setGrid = new Chart3DDataSetGrid(-(waferDiameter / 2-edgeClude), -(waferDiameter / 2-edgeClude),
                  (waferDiameter-edgeClude)/(ContourSize - 1), (waferDiameter-edgeClude) / (ContourSize - 1), gridData);

               
                setGrid.Hole = 0;
                c1Chart3D1.BackColor = Color.Transparent;
                c1Chart3D1.ChartGroups.ChartData.SetGrid = setGrid;


效果:


但是wpf 版本的C1Chart3D 没有Chart3DDataSetGrid 类, 请问有什么设置或者有什么方式能达到圆形的效果吗?现在只能是如下效果:



Richard.Ma 发表于 2023-5-17 18:12:41

验证了一下,目前没有什么办法。刚刚电话中和你提到的是,如果刚好是俯视视角,那么可以通过其他的组件遮罩一下,但是从3dchart组件内部目前没法实现你的需求

波波虎 发表于 2023-5-22 23:02:13

你好,要设置圆形的网格布局(Layout)是比较困难的,因为 .NET 6 WPF C1Chart3D 默认的 Layout 是矩形的。不过你可以尝试下通过调整绘制的数据来实现类似圆形的布局。

Richard.Ma 发表于 2023-5-23 09:43:09

:hjyzw:

David-Duan 发表于 2023-5-23 17:44:31

波波虎 发表于 2023-5-22 23:02
你好,要设置圆形的网格布局(Layout)是比较困难的,因为 .NET 6 WPF C1Chart3D 默认的 Layout 是矩形的。不 ...

你好,有没有具体的例子来参照一下呢? 我还没见过怎么去调整绘制数据

波波虎 发表于 2023-5-23 22:58:37

下面是一个简单的示例代码,我也不清楚是不是你想要的效果:

private void DrawCircularData()
{
    chart3D.ChartGroups.ChartData.SeriesList.Clear();

    int numSlices = 10; // 设置圆形数据的切片数
    double sliceAngle = 360.0 / numSlices;
    int numPointsPerSlice = 5; // 每个切片中的点数
    double sliceRadius = 50;

    for (int i = 0; i < numSlices; i++)
    {
      ChartDataSeries dataSeries = new ChartDataSeries();
      dataSeries.SymbolStyle.Shape = C1.WPF.Chart.ChartSymbolShapeEnum.Box;

      double sliceStartAngle = i * sliceAngle;
      double sliceEndAngle = sliceStartAngle + sliceAngle;

      for (int j = 0; j < numPointsPerSlice; j++)
      {
            double pointAngle = sliceStartAngle + ((sliceEndAngle - sliceStartAngle) / (numPointsPerSlice - 1)) * j;
            double pointRadius = sliceRadius;

            double x = pointRadius * Math.Cos(pointAngle * Math.PI / 180.0f);
            double y = pointRadius * Math.Sin(pointAngle * Math.PI / 180.0f);
            double z = 5 * i;

            dataSeries.XValues.Add(x);
            dataSeries.YValues.Add(y);
            dataSeries.ZValues.Add(z);
      }

      chart3D.ChartGroups.ChartData.SeriesList.Add(dataSeries);
    }
}

以上代码将创建一个由 10 个切片组成的圆形网格布局,每个切片中包含 5 个点。这个圆形网格布局的中心点是(0,0,0),刻度尺度为 1。

JoestarXu 发表于 2023-5-24 08:52:00

波波虎 发表于 2023-5-23 22:58
下面是一个简单的示例代码,我也不清楚是不是你想要的效果:

private void DrawCircularData()


:hjyzw::hjyzw:

David-Duan 发表于 2023-5-24 09:47:01

波波虎 发表于 2023-5-23 22:58
下面是一个简单的示例代码,我也不清楚是不是你想要的效果:

private void DrawCircularData()


你好,这个代码好像还是使用winform 版本的chart3d控件吧?wpf 版本的chart3d是通过这种方式来添加数据的Chart3DCtl.Children.Add(new GridDataSeries() { ZData = gridData});

ChartDataSeries 这个类 wpf chart3d 里根本找不到啊

Richard.Ma 发表于 2023-5-24 18:54:29

WPF中,你也可以尝试一下,判断xy坐标,把在圆外的xy坐标对应的Z值设置为0,看看能否实现类型效果

波波虎 发表于 2023-5-24 21:37:04

Richard.Ma 发表于 2023-5-24 18:54
WPF中,你也可以尝试一下,判断xy坐标,把在圆外的xy坐标对应的Z值设置为0,看看能否实现类型效果

:hjyzw::hjyzw:
页: [1] 2
查看完整版本: .NET 6 WPF C1Chart3D 如何设置圆形的grid layout