在做截面投影时报参数接口仅支持直接坐标系?

0 投票

使用产品:iserver 9D 操作系统:win10 x64
数据类型:文件型
问题详细描述:对模型进行截面投影时,报出参数不允许为null,接口仅支持直角坐标系
问题重现步骤: 1.获取模型,2、调用ModelBuilder3D.SectionProjection(newGeoModel3D) 这一步就报错

4月 29 分类:  72次浏览 | 用户: supermap三维小小白 才疏学浅 (12 分)

2 个回答

0 投票
您好!获取截面需要先画一个截面线,我这边测出来了给您说
4月 29 用户: 胡延南 名扬四海 (2,834 分)
老师,这个有测试通过吗?
0 投票
您好!请问您做这个具体是什么效果呢?是按画的面剖切呢还是生成投影面?

如果是剖切就用接口Layer3D.SetCustomClipPlane,

如果是投影面我这边未能重现您的问题,请将完整的代码或者Demo发给我。
5月 7 用户: 胡延南 名扬四海 (2,834 分)

老师你好,1、我这里做投影面,用ModelBuilder3D.PlaneProjection(geoModel3D)时会报这个错误

2、另外如果用Layer3D.SetCustomClipPlane时这个就对图层中的所有模型进行了剖切,看到有ModelBuilder3D.SectionProjection(geoModel3D) 可以对单个模型进行截面,就进行测试,发现也是会报这个错误。

下面是我的代码,麻烦老师看看是否有问题

private void SceneControl_ObjectSelectChanged(object sender, ObjectSelectChangedEventArgs e)
        {
            Recordset recordset = null;
            Selection3D[] selection3Ds = null;
            try
            {
                if (e.Count > 0)
                {
                    selection3Ds = m_sceneControl.Scene.FindSelection(true);
                    if (selection3Ds.Length > 0)
                    {
                        recordset = selection3Ds[0].ToRecordset();
                        if (recordset != null)
                        {
                            highLightRecord(selection3Ds[0]);
                            Geometry geometry = recordset.GetGeometry();
                            if (geometry.Type == GeometryType.GeoModel3D)
                            {
                                GeoModel3D geoModel3D = geometry as GeoModel3D;
                                if (geoModel3D != null)
                                {
                                    GeoRegion geoRegion = ModelBuilder3D.PlaneProjection(geoModel3D);
                                    if (geoRegion != null)
                                    {
                                        //AddRegionRecord(selectDataset, geoRegion);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.Write(ex.Message);
            }
            finally
            {
                if (recordset != null)
                {
                    recordset.Close();
                    recordset.Dispose();
                }
            }
        }
您的highLightRecord内容是什么?

老师你好,这里highLightRecord是换一种显示颜色,我屏蔽这一句再测试还是一样的问题

 private void highLightRecord(Selection3D selection3D)
        {
            if (selection3D != null)
            {
                selection3D.Style.FillForeColor = Color.FromArgb(99, Color.Red);
            }
        }

您好!做投影面必须确保模型数据集是投影坐标系,不能是地理坐标系。桌面不管是地理还是投影坐标系都可以做投影面,它其实是底层判断了,如果是地理坐标系,转成投影坐标系才生成的投影面。
...