找回密码
 立即注册

QQ登录

只需一步,快速开始

David-Duan

注册会员

3

主题

12

帖子

45

积分

注册会员

积分
45
David-Duan
注册会员   /  发表于:2023-5-17 15:24  /   查看:8360  /  回复:17
以前用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[0].ChartData.SetGrid = setGrid;


效果:
3DChart_Circle.png770657653.png

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

3DChart_WPF-Retangular.png744252013.png

17 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-17 18:12:41
沙发
验证了一下,目前没有什么办法。刚刚电话中和你提到的是,如果刚好是俯视视角,那么可以通过其他的组件遮罩一下,但是从3dchart组件内部目前没法实现你的需求
回复 使用道具 举报
波波虎
注册会员   /  发表于:2023-5-22 23:02:13
板凳
你好,要设置圆形的网格布局(Layout)是比较困难的,因为 .NET 6 WPF C1Chart3D 默认的 Layout 是矩形的。不过你可以尝试下通过调整绘制的数据来实现类似圆形的布局。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-23 09:43:09
地板
回复 使用道具 举报
David-Duan
注册会员   /  发表于:2023-5-23 17:44:31
5#
波波虎 发表于 2023-5-22 23:02
你好,要设置圆形的网格布局(Layout)是比较困难的,因为 .NET 6 WPF C1Chart3D 默认的 Layout 是矩形的。不 ...

你好,有没有具体的例子来参照一下呢? 我还没见过怎么去调整绘制数据
回复 使用道具 举报
波波虎
注册会员   /  发表于:2023-5-23 22:58:37
6#
下面是一个简单的示例代码,我也不清楚是不是你想要的效果:

private void DrawCircularData()
{
    chart3D.ChartGroups[0].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[0].ChartData.SeriesList.Add(dataSeries);
    }
}

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

评分

参与人数 1金币 +300 收起 理由
JoestarXu + 300

查看全部评分

回复 使用道具 举报
JoestarXu
超级版主   /  发表于:2023-5-24 08:52:00
7#
波波虎 发表于 2023-5-23 22:58
下面是一个简单的示例代码,我也不清楚是不是你想要的效果:

private void DrawCircularData()

回复 使用道具 举报
David-Duan
注册会员   /  发表于:2023-5-24 09:47:01
8#
波波虎 发表于 2023-5-23 22:58
下面是一个简单的示例代码,我也不清楚是不是你想要的效果:

private void DrawCircularData()

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

ChartDataSeries 这个类 wpf chart3d 里根本找不到啊
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-24 18:54:29
9#
WPF中,你也可以尝试一下,判断xy坐标,把在圆外的xy坐标对应的Z值设置为0,看看能否实现类型效果

image.png41148985.png
回复 使用道具 举报
波波虎
注册会员   /  发表于:2023-5-24 21:37:04
10#
Richard.Ma 发表于 2023-5-24 18:54
WPF中,你也可以尝试一下,判断xy坐标,把在圆外的xy坐标对应的Z值设置为0,看看能否实现类型效果

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部