如何在三维场景中画虚线及设置线方向

0 投票
supermap.net object 9d,如何对三维线设置风格,并控制线为虚线,并设置线的方向及不同虚线样式?
1月 16, 2018 分类:  797次浏览 | 用户: petergis 初出茅庐 (56 分)

1个回答

0 投票
您好,虚线就是线的风格,可以现在IDesktop里面查看线符号库哪种线型风格是虚线,然后记录符号ID,在代码里设置线风格就用该ID。线的方向就是线节点的起点到终点,如果需要反向获取所有节点重新构造线对象即可。
1月 16, 2018 用户: 胡林 登峰造极 (5,972 分)
在代码里设置了线的符号ID=9(长划线),但是并未看到长划线效果,还是蓝色实线,为何?是不是要事先做加载符号库之类的。代码如下:

// 设置线数据集的显示风格
            Layer3DSettingVector layer3DSetting = new Layer3DSettingVector();
            layer3DSetting.Style.LineColor = Color.Blue;
            layer3DSetting.Style.LineWidth = 4;
            layer3DSetting.Style.LineSymbolID = 9;
            layer3DSetting.Style.AltitudeMode = AltitudeMode.Absolute;
            layer3DSetting.Style.BottomAltitude = 0.3;//向上拉伸0.3米,因为路面是不平的。
            var index = sceneControl.Scene.Layers.IndexOf(LocalConstsTables.PL_GuardLine3D);
            if (index >= 0)
                sceneControl.Scene.Layers.Remove(index);
            var lineLayer = sceneControl.Scene.Layers.Add(dataset.Dataset, layer3DSetting, true, layerName);
            lineLayer.Selection.Style.LineColor = Color.Green;
            //lineLayer.IsSelectable = true;
            sceneControl.Scene.Refresh();
1.符号是存在工作空间里面的,确认你在桌面打开查看的和你在程序里面使用的是同一个工作空间。

2.之前某些版本的组件存在一个问题, sceneControl.Scene.Layers.Add(dataset.Dataset, layer3DSetting, true, layerName)通过该接口来设置图层风格无效。解决方案是先把线数据集添加至场景,然后再获取到该图层,设置其风格,这样才有效果。
1,是同一个工作空间。在桌面手动添加一个三维线的图层并设置符号可以看到效果

2,我用的是9d.net,这个版本也不行吗?
所以我说的是某些版本,不能确定你手上的9D版本是否做了修改,最好先把线数据集添加至场景,然后再获取到该图层,设置其风格。
谢谢,设置其风格请问代码如何写?
Layer3DDataset layer= sceneControl.Scene.Layers[layerName] as Layer3DDataset;

layer.AdditionalSetting =layer3DSetting;

layer.Updatedata();

scenecontrol.。scene.refresh();
出来效果还是蓝色的实线啊。没起作用。代码如下:

private void TestLineStyle(SceneControl sceneControl)
        {
            var lineLayerName = @"PL_GuardLine3D@10.0.0.221\sqlexpress_JointGuardSpatial";
            var index = sceneControl.Scene.Layers.IndexOf(lineLayerName);
            if (index >= 0)
            {
                var layer3DDataset = sceneControl.Scene.Layers[index] as Layer3DDataset;
                Layer3DSettingVector layer3DSetting = new Layer3DSettingVector();
                layer3DSetting.Style.LineColor = Color.Blue;
                layer3DSetting.Style.LineWidth = 4;
                layer3DSetting.Style.LineSymbolID = 9;//未起作用
                layer3DSetting.Style.AltitudeMode = AltitudeMode.Absolute;
                layer3DSetting.Style.BottomAltitude = 0.3;//向上拉伸0.3米,因为路面是不平的。

                layer3DDataset.AdditionalSetting = layer3DSetting;
                layer3DDataset.UpdateData();
                sceneControl.Scene.Refresh();
            }
        }
你这边是线的颜色改了,但是线型没有改吗?
就是通过layer3DSetting.Style.LineSymbolID = 9;//未起作用,但是没有效果。9就是长划线(虚线)

是的,线还是实线。不起作用。问题就在这里。
既然其它风格起作用了,就线型没起作用,那么就是你程序用的工作空间跟桌面查看的工作空间可能不是同一个,建议操作如下测试问题。

1.在桌面把数据添加至场景(不修改风格,默认风格即可)

2.保存场景,保存该工作空间

3.在程序里面打开工作空间,打开场景

4.获取图层,修改其风格

这样操作如果能显示设置的线型,那么就是你工作空间不一致,如果还是不行,直接打我分机号01059896631
...