三维场景自定义添加图片标签

0 投票
怎么实现在三维场景中选择图片后添加到场景中并显示?
4月 21, 2017 分类:  2251次浏览 | 用户: cherish 初出茅庐 (31 分)

2 个回答

0 投票
 
已采纳
您好,一般是添加点,然后设置点图层的风格GeoStyle3D.MarkerFile。
4月 21, 2017 用户: 邹涛 名扬四海 (3,389 分)
采纳于 5月 25, 2017 用户:cherish
如果您的recordset是CAD模型数据集的recordset的话,您应该添加geomodel而不是直接添加geocircle

比如您可以GeoModel geoModel = geoCircle.GetGeoModel(100,100);

recordset.AddNew(geoModel);
额不好意思哈,我又试了下,geoModel是可以添加,不过geoCircle也可以成功添加的(返回true)。要不您把您相关的代码发一下?

我这边添加geoModel的代码:

            GeoCircle3D geocircle = new GeoCircle3D(new Point3D(0, 0, 0), 10000);
            GeoModel geoModel = geocircle.GetGeoModel(100,100);
            if (recordset.AddNew(geoModel))
            {
                MessageBox.Show("helloworld");
            }

添加geoCircle的代码(直接添加的话不用写getGeoModel()):

            if(recordset.AddNew(new GeoCircle3D(new Point3D(0, 0, 0), 10000)))
            {
                MessageBox.Show("helloworld");
            }
我用的是Region3D 数据集,添加geoModel还是返回false.

m_sceneControl.TrackMode = SuperMap.UI.TrackMode3D.Edit;
            Datasource datasource = m_workspace.Datasources[0];
            String bufferName = "缓冲分析";
            //if (m_workspace.Datasources[0].Datasets.Contains(bufferName))
            //{
            //    m_workspace.Datasources[0].Datasets.Delete(bufferName);
            //}
            // 缓冲区结果数据集和对应的场景图层
            DatasetVectorInfo layerInfo = new DatasetVectorInfo(bufferName, DatasetType.Region3D);
            DatasetVector m_bufferDataset = datasource.Datasets.Create(layerInfo);

            #region 创建缓冲数据集
            Layer3DSettingVector layer3DSetting = new Layer3DSettingVector();
            GeoStyle3D style = new GeoStyle3D();
            style.FillForeColor = Color.FromArgb(100, 255, 128, 64);
            style.AltitudeMode = AltitudeMode.RelativeToGround;
            style.FillMode = FillMode3D.Fill;
            layer3DSetting.Style = style;
            Layer3D m_layerBuffer = m_sceneControl.Scene.Layers.Add(m_bufferDataset, layer3DSetting, true);
            m_layerBuffer.Caption = bufferName;
            m_layerBuffer.IsEditable = true;
            Recordset recordset = m_bufferDataset.GetRecordset(false, CursorType.Dynamic);
            recordset.MoveLast();

            GeoCircle3D geoCircle = new GeoCircle3D(new Point3D(x, y, 0), Radius);
            GeoModel geoModel = geoCircle.GetGeoModel(100,100);
            recordset.AddNew(geoModel);
            recordset.Update();
            recordset.Dispose();
            m_layerBuffer.UpdateData();
            m_sceneControl.Scene.Refresh();
            recordset.Dispose();
我刚试过了,换为CAD数据集是可以的,但Region3D 数据集,添加geoModel还是返回false
Region3D的话,Region3D是三维面数据集,但是GeoCircle3D并不属于三维面数据,而是属于CAD数据,所以并不能直接添加至Region3D中(同理,GeoModel也不能添加至三维面数据集)。

您要是想将GeoCircle3D添加至三维面数据集中的话,

首先建议您使用GeoCircle而不是GeoCircle3D(其实后者就是前者加了高程)。

然后,您需要先将GeoCircle转换为GeoRegion。

再提取GeoRegion中所有结点的子对象(Point2Ds)。

然后根据这个Point2Ds(二维点对象集合)创建Point3Ds(三维点数据集合)。

接着根据Point3Ds构造GeoRegion3D。

最后即可这个GeoRegion3D添加至Region3D中。
0 投票
选择图片后,使用构建GeoPicture3D对象,添加到您所需要添加的地方,屏幕图层,跟踪层,以及KML都可以添加
4月 21, 2017 用户: 周仕斌 名扬四海 (1,495 分)
...