com.supermap.realspace

类 Layer3D

  • java.lang.Object
    • com.supermap.data.InternalHandle
      • com.supermap.realspace.Layer3D
  • 直接已知子类:
    Layer3DCityGML, Layer3DDataset, Layer3DDatasetTile, Layer3DDynamicObject, Layer3DGrid, Layer3DGroup, Layer3DImageFile, Layer3DInstance, Layer3DKML, Layer3DMap, Layer3DModel, Layer3DOSGBFile, Layer3DOSGBGroup, Layer3DVectorFile, Layer3DVolumeFile, Layer3DWMS


    public class Layer3D
    extends com.supermap.data.InternalHandle
    三维图层类。

    该类提供了三维图层显示和控制等便于三维地图管理的一系列设置方法。

    三维图层种类有以下几种:数据集类型三维图层、地图类型三维图层、KML 类型三维图层、影像文件类型三维图层、模型缓存类型三维图层和矢量文件图层。各种类型三维图层可以叠加在一起显示。

    三维图层类提供了对三维图层的显示、选择等状态的控制,可以实现控制图层是否可选择,是否显示,还可以利用该类提供的方法返回图层中被选择的对象集合等。

    示范代码:
    以下代码示范了三维图层的一些操作,假设已经存在一个KML文件(KML.kml)。
         public void TestLayer3D()
        {
            //返回三维场景窗口的三维场景对象,并进行三维场景的设置
            SceneControl sceneControl = new SceneControl();
            Scene sceneObject = sceneControl.getScene();
            sceneObject.getAtmosphere().setVisible(true);
    
            //将已有的KML文件添加到三维场景中,作为KML图层显示在三维场景窗口中
            Layer3D layerKML = sceneObject.getLayers().add("G:\\Data\\KML.kml", Layer3DType.KML, true);
    
            //对KML类型的三维图层进行设置
            layerKML.setCaption("KMLlayer3D");
            layerKML.setDescription("示范三维图层的相关操作");
            layerKML.setEditable(false);
            layerKML.setSelectable(false);
            layerKML.setVisible(true);
            String layerName = layerKML.getName();
    
    
            //向该三维图层中添加三维要素
           //geoCone.getGeoModel接口引用其父类GeoMetry3D的getGeoModel,不影响使用。
            Point3D point3D = new Point3D(102, 31, 0);
            GeoCone geoCone = new GeoCone(point3D, 800, 800);
            GeoModel geoModel = geoCone.getGeoModel(80, 80);
            GeoPlacemark geoPlacemark = new GeoPlacemark("圆锥体", geoModel);
            //GeoPlacemark geoPlacemark = new GeoPlacemark("Cone", geoModel);
            layerKML.getFeatures().add(geoPlacemark);
    
            //根据指定的飞行模式,飞行到目标对象
            sceneControl.getScene().flycircle(geoPlacemark, 2.0);
            sceneObject.refresh();
    
            //释放占用的资源
            sceneControl.dispose();
    
            }
    • 方法详细资料

      • getName

        public String getName()
        返回三维图层的名称。

        三维图层的名称在三维图层所在的三维地图中唯一标识此图层。该标识不区分大小写。

        返回:
        三维图层的名称。
      • getCaption

        public String getCaption()
        返回三维图层的标题。

        三维图层的标题为该图层的显示名称,例如在图例或排版制图时显示的图层的名称即为图层的标题。注意与三维图层的名称相区别。

        返回:
        三维图层的标题。
      • setCaption

        public void setCaption(String value)
        设置三维图层的标题。

        三维图层的标题为该图层的显示名称,例如在图例或排版制图时显示的图层的名称即为图层的标题。注意与三维图层的名称相区别。

        参数:
        value - 三维图层的标题。
      • getDescription

        public String getDescription()
        返回三维图层的描述信息。
        返回:
        三维图层的描述信息。
      • setDescription

        public void setDescription(String value)
        设置三维图层的描述信息。
        参数:
        value - 三维图层的描述信息。
      • getType

        public Layer3DType getType()
        返回三维图层的类型。有关三维图层的类型,请参见 Layer3DType 类。
        返回:
        三维图层的类型。
      • getFeatures

        public Feature3Ds getFeatures()
        返回树状结构的三维要素集合对象。只针对 KML 类型的三维图层有效,对于其他类型的三维图层返回值为 null。

        下图为一个三维要素集合(Feature3Ds),由图可以看出三维要素集合包括两个部分,一个是三维要素集合的子对象(即树的分枝及枝上的叶子),另一个是三维要素对象(主枝干上的叶子)。每个叶子就是一个三维要素(Feature3D)对象。 1是主干,2、3、4均是枝干。

        返回:
        树状结构的三维要素集合对象。
      • isSelectable

        public boolean isSelectable()
        返回三维图层中的对象是否可以选择。true 表示可用鼠标选择相应三维图层中的对象,false 表示该三维图层中的对象不可选。
        返回:
        三维图层中的对象是否可以选择。
      • getEditFeature

        public EditFeature getEditFeature()
        返回特征编辑类。支持对图层中选中的可编辑对象(线、面)进行操作。
        返回:
        特征编辑类。
        抛出:
        IllegalStateException - 当前对象已被释放。
        从以下版本开始:
        11.2.0。
      • setSelectable

        public void setSelectable(boolean value)
        设置三维图层中的对象是否可以选择。true 表示可用鼠标选择相应三维图层中的对象,false 表示该三维图层中的对象不可选。
        参数:
        value - 一个布尔值指定三维图层中的对象是否可以选择。
      • isEditable

        public boolean isEditable()
        返回该三维图层对象是否可编辑。
        返回:
        一个布尔值,表示三维图层对象是否可编辑。true 表示该三维图层可编辑,false 表示不可编辑。
      • setEditable

        public void setEditable(boolean value)
        设置该三维图层对象是否可编辑。
        参数:
        value - 一个布尔值,该三维图层对象是否可编辑。true 表示该三维图层可编辑,false 表示不可编辑。
      • isVisible

        public boolean isVisible()
        返回该三维图层是否可显示。
        返回:
        一个布尔值,表示该三维图层是否可显示。false 表示该三维图层不可见;true 表示可见。
        默认值:
        默认值为 false,即该三维图层不可见。
      • setAlwaysRender

        @Deprecated
        public void setAlwaysRender(boolean value)
        已过时。 
      • isSketchMode

        public boolean isSketchMode()
        返回是否以草图模式来绘制此图层。在草图模式下,只绘制模型的骨架信息,不绘制纹理。

        使用场景:如果用户不需要显示纹理,通过设置此方法可以提高绘制效率,降低占用的内存。

        目前该方法只对Layer3DDataset(数据集类型三维图层)和 Layer3DVectorFile(矢量文件图层)起作用,并且只对模型或者拉伸面保存为CAD的模型起作用,包括数据集和缓存。

        返回:
        返回是否以草图模式来绘制此图层。
        默认值:
        默认值为false。
      • setSkecthMode

        @Deprecated
        public void setSkecthMode(boolean value)
        已过时。 
      • setSketchMode

        public void setSketchMode(boolean value)
        设置是否以草图模式来绘制此图层。在草图模式下,只绘制模型的骨架信息,不绘制纹理。

        使用场景:如果用户不需要显示纹理,通过设置此方法可以提高绘制效率,降低占用的内存。

        目前该方法只对 Layer3DDataset(数据集类型三维图层)和 Layer3DVectorFile(矢量文件图层)起作用,并且只对模型或者拉伸面保存为CAD的模型起作用,包括数据集和缓存。

        参数:
        value - 是否以草图模式来绘制此图层。
      • isAlwaysRender

        @Deprecated
        public boolean isAlwaysRender()
        已过时。 
      • setVisible

        public void setVisible(boolean value)
        设置该三维图层是否可显示。false 表示该三维图层不可见;true 表示可见。
        参数:
        value - 一个布尔值指定三维图层是否可显示。
      • getFilterPixelSize

        public int getFilterPixelSize()
        返回三维图层中模型显示的像素过滤阈值。

        此阈值用于对三维图层中的模型对象的显示过滤,屏幕像素值低于此值的模型对象将不会显示。

        像素过滤(get/setFilterPixelSize)和距离过滤(get/setMaxObjectVisibleDistance,get/setMinObjectVisibleDistance)都会对模型对象的可见进行过滤,在实现的过程中,先根据距离过滤进行判断,再根据像素过滤进行判断。

        这两种过滤功能仅针对模型对象、SCV以及数据集有效。

        返回:
        三维图层中模型显示的像素过滤阈值。
        默认值:
        默认值为 0,即:像素过滤功能未开启。
      • setFilterPixelSize

        public void setFilterPixelSize(int value)
        设置三维图层中模型显示的像素过滤阈值。

        此阈值用于对三维图层中的模型对象的显示过滤,屏幕像素值低于此值的模型或矢量对象将不会显示。此阈值设置为0时,表示像素过滤功能未开启。

        像素过滤(get/setFilterPixelSize)和距离过滤(get/setMaxObjectVisibleDistance,get/setMinObjectVisibleDistance)都会对模型对象的可见进行过滤,在实现的过程中,先根据距离过滤进行判断,再根据像素过滤进行判断。因此,此阈值的数值需要根据屏幕当前的分辨率大小以及相机距离图层的高度来综合考虑。

        这两种过滤功能仅针对模型对象、SCV以及数据集有效。

        参数:
        value - 三维图层中模型显示的像素过滤阈值,单位是屏幕像素。
      • setChangedToLayerStyle

        @Deprecated
        public void setChangedToLayerStyle(boolean value)
        已过时。 
      • isChangedToLayerStyle

        @Deprecated
        public boolean isChangedToLayerStyle()
        已过时。 
      • isDisposed

        public boolean isDisposed()
        返回对象是否已被释放。若为true时,操作该类的方法,都会抛出异常,意味着对象已被释放。
        返回:
        对象已经被释放,返回true;否则返回false。
      • getSelection

        public Selection3D getSelection()
        返回三维图层的选择集。详细信息,请参见 Selection3D 类。
        返回:
        三维图层的选择集。
      • setSelection

        public void setSelection(Selection3D selection3d)
        设置三维图层的选择集。详细信息,请参见 Selection3D 类。
        参数:
        selection3d - 三维图层的选择集。
      • getVisibleDistance

        @Deprecated
        public double getVisibleDistance()
        已过时。 
      • setVisibleDistance

        @Deprecated
        public void setVisibleDistance(double value)
        已过时。 
      • getMaxVisibleAltitude

        public double getMaxVisibleAltitude()
        返回三维图层的最大可见高度。
        返回:
        三维图层的最大可见高度。
      • setMaxVisibleAltitude

        public void setMaxVisibleAltitude(double value)
        设置三维图层的最大可见高度。
        参数:
        value - 三维图层的最大可见高度。
      • getMinVisibleAltitude

        public double getMinVisibleAltitude()
        返回三维图层的最小可见高度。
        返回:
        三维图层的最小可见高度。
      • setMinVisibleAltitude

        public void setMinVisibleAltitude(double value)
        设置三维图层的最小可见高度。
        参数:
        value - 三维图层的最小可见高度。
      • getMaxObjectVisibleDistance

        public double getMaxObjectVisibleDistance()
        返回该三维图层内模型对象的最大可见距离值。单位为米。该距离值用于距离过滤功能,当相机与图层内的模型对象距离大于该距离值时,该三维图层内的模型对象将不可见。

        像素过滤(get/setFilterPixelSize)和距离过滤(get/setMaxVisibleDistance,get/setMinObjectVisibleDistance)都会对模型对象的可见进行过滤,在实现的过程中,先根据距离过滤进行判断,再根据像素过滤进行判断。

        这两种过滤功能仅针对模型对象、SCV以及数据集有效。

        返回:
        三维图层的模型对象最大可见距离值。单位为米。该距离值用于距离过滤功能,当相机与图层内的模型对象距离大于该距离值时,该三维图层内的模型对象将不可见。
        默认值:
        默认值为 Double.MAX_VALUE,单位为米。
      • setMaxObjectVisibleDistance

        public void setMaxObjectVisibleDistance(double value)
        设置该三维图层内模型对象的最大可见距离值。该单位为米。距离值用于距离过滤功能,当相机与图层内模型对象的距离大于该距离值时,该三维图层内模型对象将不可见。

        像素过滤(get/setFilterPixelSize)和距离过滤(get/setMaxVisibleDistance,get/setMinObjectVisibleDistance)都会对模型对象的可见进行过滤,在实现的过程中,先根据距离过滤进行判断,再根据像素过滤进行判断。

        这两种过滤功能仅针对模型对象、SCV以及数据集有效。

        参数:
        value - 三维图层的模型对象最大可见距离值。单位为米。该距离值用于距离过滤功能,当相机与图层内的模型对象距离大于该距离值时,该三维图层内的模型对象将不可见。
      • getMinObjectVisibleDistance

        public double getMinObjectVisibleDistance()
        返回该三维图层内模型对象的最小可见距离值。单位为米。该距离值用于距离过滤功能,当相机与三维图层内模型对象的距离小于该距离值时,该三维图层内模型对象将不可见。

        像素过滤(get/setFilterPixelSize)和距离过滤(get/setMaxObjectVisibleDistance,get/setMinObjectVisibleDistance)都会对模型对象的可见进行过滤,在实现的过程中,先根据距离过滤进行判断,再根据像素过滤进行判断。

        这两种过滤功能仅针对模型对象、SCV以及数据集有效。

        返回:
        三维图层内模型对象的最小可见距离值。单位为米。
        默认值:
        默认值为0,单位为米。
      • setMinObjectVisibleDistance

        public void setMinObjectVisibleDistance(double value)
        设置该三维图层内模型对象的最小可见距离值。单位为米。该距离值用于距离过滤功能,当相机与三维图层内模型对象的距离小于该距离值时,该三维图层内的模型对象将不可见。

        像素过滤(get/setFilterPixelSize)和距离过滤(get/setMaxObjectVisibleDistance,get/setMinObjectVisibleDistance)都会对模型对象的可见进行过滤,在实现的过程中,先根据距离过滤进行判断,再根据像素过滤进行判断。

        这两种过滤功能仅针对模型对象、SCV以及数据集有效。

        参数:
        value - 三维图层内模型对象的最小可见距离值。单位为米。
      • getBounds

        public Rectangle2D getBounds()
        返回图层的范围。

        对于KML图层,该方法返回全球范围{ -180, 90, 180, -90}。

        返回:
        图层的范围。
      • updateData

        public void updateData()
        更新渲染所需要的数据。

        在以下情况需要调用该方法才能正确渲染更新后的数据:在调用了 GeoStyle3D.setAltitudeMode() 方法时。

      • getDataName

        public String getDataName()
        返回图层所使用数据的名称。

        如果数据直接来源于文件,此时为文件的全路径名 ,来源于数据集时,名称为DatasetName@DatasourceAlias ,如果数据直接来源于Map时该名字为地图名称。

        返回:
        图层所使用数据的名称
      • getPassword

        public String getPassword()
      • isShadowEnable

        public boolean isShadowEnable()
        返回三维图层的阴影是否可见。
        默认值:
        默认值为 false,表示阴影不可见。
      • setShadowEnable

        public void setShadowEnable(Boolean value)
        设置三维图层的阴影是否可见。

        目前该方法只对 Layer3DDataset(数据集类型三维图层)和 Layer3DVectorFile(矢量文件图层)起作用,并且对图层中的数据还有要求,对于数据集类型的三维图层(Layer3DDataset),图层对应的必须是模型数据集或设置了拉伸高度的线、面类型的数据集;对于矢量缓存图层(Layer3DVectorFile),图层的数据类型必须是模型缓存或设置了拉伸高度的线、面类型的矢量缓存。

      • isWebDatasource

        public boolean isWebDatasource()
        返回该图层的数据源是否是web服务数据源。
        返回:
        该图层的数据源是否是web服务数据源。
      • getMapServiceType

        public MapServiceType getMapServiceType()
        返回3D网络图层数据的服务类型。有关3D网络图层数据的服务类型,请参见 MapServiceType 类。
        返回:
        3D网络图层数据的服务类型。
      • fromXML

        public boolean fromXML(String xml)
        通过 XML 数据创建三维图层对象。
        参数:
        xml - XML 数据。
        返回:
        创建成功则返回 true,否则返回 false。
      • toXML

        public String toXML()
        返回三维图层的的 XML 形式的描述。
        返回:
        三维图层的 XML 形式的描述。
      • getExtendXML

        public String getExtendXML()
        返回该图层扩展XML信息
      • setReleaseWhenInvisible

        public void setReleaseWhenInvisible(boolean isRelease)
        获取或设置三维图层不可见时是否自动释放资源。true表示自动释放资源,false表示不自动释放资源。
        参数:
        isRelease -
      • getReleaseWhenInvisible

        public boolean getReleaseWhenInvisible()
      • setShadowType

        public void setShadowType(ShadowType type)
        设置图层中模型参与显示阴影的范围类型。
        参数:
        type - 模型参与显示阴影的范围类型。
      • getShdowType

        public ShadowType getShdowType()
        返回图层中模型参与显示阴影的范围类型。
        返回:
        模型参与显示阴影的范围类型。
      • setParentLayer

        public boolean setParentLayer(Layer3D layer)
        指定图层父子关系的图层的接口
        参数:
        layer -
      • getParentLayer

        public Layer3D getParentLayer()
        返回图层的父图层。
        返回:
        图层的父图层,没有则返回null。
      • setVisibleInViewport

        public void setVisibleInViewport(short index,
                                         boolean visible)
        设置当前三维图层在指定视口的可见性。设置图层在某一视口中可见,在另一视口不可见,可实现图层的对比显示效果。
        参数:
        index - 指定的视口索引。
        visible - 指定可见性,true表示可见,false表示不可见。
      • getVisibleInViewport

        public boolean getVisibleInViewport(short index)
        返回当前三维图层在指定视口的可见性。
        参数:
        index - 指定的视口索引。
        返回:
        一个布尔值指定在视口的可见性。
      • clipByBox

        public void clipByBox(GeoBox box,
                              BoxClipPart part)
        根据指定的长方体盒子和裁剪区域对图层的可渲染部分进行裁剪。此设置可用clearCustomClipPlane方法清除。
        参数:
        box - 指定的长方体盒子。
        part - 指定裁剪区域。
      • clearCustomClipPlane

        public void clearCustomClipPlane()
        清除裁剪面。
      • setCustomClipPlane

        public void setCustomClipPlane(Point3D firstPoint,
                                       Point3D secondPoint,
                                       Point3D thirdPoint)
        裁剪面分析,按顺序设置三个顶点的位置,裁剪面分析的结果指只显示该面法线方向的部分,法线遵循右手法则,逆时针法线朝上,顺时针法线朝下,分析结果只显示大拇指方向上的模型结构。

        此设置可用clearCustomClipPlane方法清除。

        参数:
        firstPoint - 指定裁剪面的第一个顶点。
        secondPoint - 指定裁剪面的第二个顶点。
        thirdPoint - 指定裁剪面的第三个顶点。
      • setSwipeEnable

        public void setSwipeEnable(boolean enable)
        设置三维图层是否开启卷帘功能。
        参数:
        enable - 指定是否开启卷帘功能。
      • isSwipeEnable

        public boolean isSwipeEnable()
        返回三维图层是否开启卷帘功能。
        返回:
        卷帘功能是否开启。
      • getSwipeRegion

        public Rectangle2D getSwipeRegion()
        返回三维图层开启卷帘的区域。
        返回:
        开启卷帘的区域。
      • setSwipeRegion

        public void setSwipeRegion(Rectangle2D rec)
        设置三维图层开启卷帘的区域。
        参数:
        rec - 指定开启卷帘的区域。
      • setLocalCache

        public void setLocalCache(boolean enable)
        设置或获取网络数据是否保存到本地
      • hasLocalCache

        public boolean hasLocalCache()
      • getParentGroup

        public Layer3DGroup getParentGroup()
        获取图层的父图层组。
        返回:
        图层组。
      • setParentGroup

        public void setParentGroup(Layer3DGroup parentGroup)
        设置图层的父图层组。
        参数:
        parentGroup - 指定的图层组。
      • getSnap

        public boolean getSnap()
        获取三维图层是否开启顶点捕捉。
        返回:
        是否开启顶点捕捉。
      • setSnap

        public void setSnap(boolean value)
        设置三维图层是否开启顶点捕捉。
        参数:
        value - 指定是否开启顶点捕捉。
      • getReceiveSunLight

        public boolean getReceiveSunLight()
        获取三维图层是否接收光照。
        返回:
        是否接收光照。
      • setReceiveSunLight

        public void setReceiveSunLight(boolean value)
        设置三维图层是否接收光照。
        参数:
        value - 指定是否接收光照。
      • getAlphaReject

        public double getAlphaReject()
        获取OSGB及模型数据集图层Alpha透明过滤属性 。
        返回:
        Alpha透明过滤值。
      • setAlphaReject

        public void setAlphaReject(double value)
        设置OSGB及模型数据集图层Alpha透明过滤属性 。
        参数:
        value - 指定的Alpha透明过滤值。
      • getClipBox

        public GeoBox getClipBox()
        返回用于裁剪的长方体对象。
        返回:
        用于裁剪的长方体对象。
      • getBoxClipPart

        public BoxClipPart getBoxClipPart()
        返回裁剪分析所指定的裁剪区域类型。
        返回:
        裁剪分析指定的裁剪区域类型。
      • getCustomClipCross

        public GeoRegion3D getCustomClipCross()
        获取区域裁剪面。
        返回:
        区域裁剪面。
      • setCustomClipCross

        public void setCustomClipCross(Point3D position,
                                       Point2D dimension,
                                       double rotX,
                                       double rotY,
                                       double rotZ,
                                       double extrudeDistance)
        设置自定义四边形裁剪。
        参数:
        position - 指定区域裁剪的中心点。
        dimension - 一个二维点,单位是米。X、Y作为裁剪面的长和宽。
        rotX - 裁剪面沿X轴旋转角度。
        rotY - 裁剪面沿Y轴旋转角度。
        rotZ - 裁剪面沿Z轴旋转角度。
        extrudeDistance - 拉伸高度,以起始面作为拉伸参考面,朝法线方向拉伸。
      • getClipLineColor

        public Color getClipLineColor()
      • setClipLineColor

        public void setClipLineColor(Color value)
      • setMixColorType

        public void setMixColorType(MixColorType value)
      • isVertexColorLinear

        public boolean isVertexColorLinear()
        获取顶点颜色是否是线性空间
        返回:
        返回true表示顶点颜色是线性空间的,返回false则表示不是
        抛出:
        IllegalStateException - 图层handle为空抛出异常,图层对象已释放
        从以下版本开始:
        11.3.0
      • setVertexColorLinear

        public void setVertexColorLinear(boolean value)
        设置顶点颜色是否是线性空间
        参数:
        value - 设置值
        抛出:
        IllegalStateException - 图层handle为空抛出异常,图层对象已释放
        从以下版本开始:
        11.3.0

Copyright © 2021–2024 SuperMap. All rights reserved.