Ceisum(SuperMap iClient3D for Cesium)实现平面裁剪

news2024/9/30 5:40:02

1:参考API文档:SuperMap iClient3D for Cesium 开发指南

2:官网示例:support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/examples.html#layer

3:SuperMap iServer:欢迎使用 SuperMap iServer 11i(2022) (supermapol.com)

1:引入样式,必要文件:

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>平面裁剪</title>
    <link href="../../Build/Cesium/Widgets/widgets.css" rel="stylesheet">
    <link href="./css/bootstrap.min.css" rel="stylesheet">
    <link href="./css/pretty.css" rel="stylesheet">
    <script src="./js/jquery.min.js"></script>
    <script src="./js/bootstrap.min.js"></script>
    <script src="./js/bootstrap-select.min.js"></script>
    <script src="./js/tooltip.js"></script>
    <script src="./js/config.js"></script>
    <script type="text/javascript" src="../../Build/Cesium/Cesium.js"></script>
</head>

2:html部分:

<body>
<div id="cesiumContainer"></div>
<div id='loadingbar' class="spinner">
    <div class="spinner-container container1">
        <div class="circle1"></div>
        <div class="circle2"></div>
        <div class="circle3"></div>
        <div class="circle4"></div>
    </div>
    <div class="spinner-container container2">
        <div class="circle1"></div>
        <div class="circle2"></div>
        <div class="circle3"></div>
        <div class="circle4"></div>
    </div>
    <div class="spinner-container container3">
        <div class="circle1"></div>
        <div class="circle2"></div>
        <div class="circle3"></div>
        <div class="circle4"></div>
    </div>
</div>
<div id="toolbar" class="param-container tool-bar">
    <button type="button" id="polygon" class="button black">绘制裁剪面</button>
    <button type="button" id="clear" class="button black">清除</button>
</div>

3.js部分:

1.Cesium初始化
  1. 使用 Cesium.Viewer 对象来初始化 cesiumContainer 元素。

  2. 配置包括禁用 infoBoxselectionIndicator,并添加了 Bing Maps 图像提供者。

  3. 使用 scene.open() 方法将 S3M 图层添加到场景中。

2.绘制和裁剪
  1. 处理事件包括绘制开始、移动和完成等,使用 handlerPolygon.setCustomClipPlane() 方法设置裁剪面。

  2. 使用 Cesium.DrawHandler 来处理多边形绘制。

3.引用的必要文件
  1. 引用 Cesium.jswidgets.css 文件。

  2. 额外的 JavaScript 文件包括 jQuery、Bootstrap、Bootstrap-Select、Tooltip 和 Config 文件。

4.功能实现的工具
  1. 使用 Cesium.DrawHandler 类来处理绘图操作。

  2. 使用 Cesium.ColorCesium.Cartesian3 处理颜色和坐标。


<script type="text/javascript">
    function onload(Cesium) {
        //初始化viewer部件
        var viewer = new Cesium.Viewer('cesiumContainer',{
            infoBox : false,
            selectionIndicator : false
        });
        viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({
            url : 'https://dev.virtualearth.net',
            mapStyle : Cesium.BingMapsStyle.AERIAL,
            key : URL_CONFIG.BING_MAP_KEY
        }));
        var scene = viewer.scene;
        scene.lightSource.ambientLightColor = new Cesium.Color(0.65, 0.65, 0.65, 1);
        var BIMLayer;
        try{
            //场景添加S3M图层服务
            var promise = scene.open(URL_CONFIG.SCENE_BIMBUILDING);
            Cesium.when(promise,function(layers){
                // 精准定位
                scene.camera.setView({
                    destination : new Cesium.Cartesian3(-2180753.065987198, 4379023.266141494, 4092583.575045952),
                    orientation : {
                        heading : 4.0392222751147955,
                        pitch :0.010279641987852584,
                        roll : 1.240962888005015e-11
                    }
                });
                var layer = scene.layers.find('BIMbuilding');
                layer.selectEnabled = false;
                //设置被裁剪对象的颜色
                layer.clipLineColor = new Cesium.Color(1,1,1,0);
                BIMLayer = layer;
                if(!scene.pickPositionSupported){
                    alert('不支持深度纹理,无法拾取位置!');
                }
            },function(e){
                if (widget._showRenderLoopErrors) {
                    var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
                    widget.showErrorPanel(title, undefined, e);
                }
            });
        }
        catch(e){
            if (widget._showRenderLoopErrors) {
                var title = '渲染时发生错误,已停止渲染。';
                widget.showErrorPanel(title, undefined, e);
            }
        }
        var clampMode = 0;
        var tooltip = createTooltip(document.body);
        

        var handlerPolygon = new Cesium.DrawHandler(viewer,Cesium.DrawMode.Polygon,clampMode);
        handlerPolygon.activeEvt.addEventListener(function(isActive){
            if(isActive == true){
                viewer.enableCursorStyle = false;
                viewer._element.style.cursor = '';
                $('body').removeClass('drawCur').addClass('drawCur');
            }
            else{
                viewer.enableCursorStyle = true;
                $('body').removeClass('drawCur');
            }
        });
        handlerPolygon.movingEvt.addEventListener(function(windowPosition){
            if(handlerPolygon.isDrawing){
                tooltip.showAt(windowPosition,'<p>点击确定多边形中间点</p><p>绘制三点即可</p><p>右键单击结束绘制</p>');
            }
            else{
                tooltip.showAt(windowPosition,'<p>点击绘制第一个点</p>');
            }
        });
        handlerPolygon.drawEvt.addEventListener(function(result){
            tooltip.setVisible(false);
            handlerPolygon.polygon.show = false;
            var positions = result.object.positions;
            //通过多边形的顶点设置裁剪面,裁剪方向为裁剪面的法线方向
            BIMLayer.setCustomClipPlane(positions[0],positions[1],positions[2]);
        });

        $('#polygon').click(function(){
            handlerPolygon.activate();
        });

        $('#clear').click(function(){
            handlerPolygon.clear();
            //清除裁剪结果
            BIMLayer.clearCustomClipBox();
        });
        $('#toolbar').show();
        $('#loadingbar').remove();
        if(!scene.pickPositionSupported){
            alert('不支持深度拾取,无法进行鼠标交互绘制!');
        }
    }
    if (typeof Cesium !== 'undefined') {
        window.startupCalled = true;
        onload(Cesium);
    }
</script>
</body>

4.实现效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS属性表汉字转拼音

直接复制粘贴现成代码&#xff1a; # -*- coding: utf-8 -*-import arcpyfrom arcpy import envimport osimport pypinyin import sys# 不带声调皿stylepypinyin.NORMAL)def pinyin(word): s for i in pypinyin.pinyin(word, stylepypinyin.NORMAL): s .join(…

idea中java及java web项目的常见问题

1、乱码问题&#xff0c;主要有几处地方&#xff0c;需要检查。 ①确保文件编码&#xff0c;其实主要就是在idea启动文件中&#xff0c;增加了 -Dfile.encodingUTF-8的设置 ②编辑器默认编码&#xff0c;都改为UTF-8 ③Tomcat的运行配置&#xff0c;编码也改为UTF-8,同样使用…

PHP省时省力海报在线制作系统小程序源码

省时省力海报在线制作系统&#xff1a;设计小白也能秒变大师 &#x1f3a8; 开篇&#xff1a;告别繁琐&#xff0c;拥抱高效设计 你还在为设计一张海报而熬夜加班吗&#xff1f;还在为找不到合适的素材而焦头烂额吗&#xff1f;别担心&#xff0c;“省时省力海报在线制作系统”…

Linux python pyinstaller 打包问题

1.环境 系统版本:Linux -4.19.91-24.8.el8.ks8.11.x86_64-x86_64-with-kylin-10-Sun python 版本 &#xff1a;3.11.2 pyinstaller &#xff1a;6.10.0 pyinstaller 安装不在说明 2.打包 [rootlocalhost pythonNacos]# /usr/local/python3.11/bin/pyinstaller --onefile…

AI+代码审核平台CodeSec获CCIA中国网络安全创新创业大赛总决赛三等奖

近日&#xff0c;由中央网信办指导&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;主办的2024年中国网络安全创新创业大赛总决赛及颁奖典礼在国家网络安全宣传周落下帷幕。开源网安“AI代码审核平台CodeSec V4.0” 凭借在AI方向的技术创新、技术突破及功能应用创…

服务器基础知识拓展( Linux 网络操作系统 03)

1 什么是服务器 服务器就是在网络中为其他客户机提供服务的计算机。 服务器是计算机的一种&#xff0c;它是在网络操作系统的控制下为网络环境里的客户机&#xff08;如PC&#xff09;提供共享资源&#xff08;包括查询、存储、计算等&#xff09;高性能计算机&#xff0c;它…

OpenCV class1-C#+winfrom显示控件并内存管理

OpenCV是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法。它采用C语言编写,并提供了C、Python、Java等多种语言接口,可广泛应用于各种计算机视觉相关领域。OpenCV具有强大的图像处理能力,包括图像滤波、几何变换、特征提取等,同时也支持视频分析、目标检测与跟踪…

Leetcode 516. 最长回文序列 区间dp C++实现

Leetcode 516. 最长回文序列 问题&#xff1a;给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 算法1&#xff1a…

如何选择适合企业的高效财税自动化软件

数字化时代&#xff0c;企业财税管理的自动化已成为提高效率、降低成本的重要途径。然而&#xff0c;市面上众多的财税自动化软件让企业在选择合适的方案时感到困惑。本文金智维将介绍如何选择适合企业的高效财税自动化软件&#xff0c;以帮助企业更好地进行运营管理和决策。 1…

部署FileBeat采集日志发送到Kafka集群服务器

为什么要使用FileBeat Logstash功能虽然强大,但是他依赖java,在数据量大的时候,Logstash进程会消耗过多的系统资源,这将严重影响业务系统的性能,而Filebeat就是一个完美的代替者,filebeat是Beat成员之一,基于Go语言开发,没有任何依赖,配置文件简单,格式明了,同时,…

快手自研Spark向量化引擎正式发布,性能提升200%

Blaze 是快手自研的基于Rust语言和DataFusion框架开发的Spark向量化执行引擎&#xff0c;旨在通过本机矢量化执行技术来加速Spark SQL的查询处理。Blaze在快手内部上线的数仓生产作业也观测到了平均30%的算力提升&#xff0c;实现了较大的降本增效。本文将深入剖析blaze的技术原…

见刊丨“GPU池化”术语发布

中国计算机学会(CCF)日前与趋动科技联合发布了“GPU池化”这一术语&#xff0c;并在《中国计算机学会通讯》总第198期刊中发表。 期刊第90/91页 目前&#xff0c;人工智能通过数据、算力、算法和场景的融合深入到各行各业&#xff0c;促进和赋能数智化转型。其中&#xff0c;强…

无人机在战争方面的应用!!!

01 侦察与监视 无人机能够进行长时间的侦察和监视&#xff0c;为指挥官提供实时的战场情报&#xff0c;是现代战争中不可或缺的“眼睛”。它们可以飞越敌方领空&#xff0c;收集情报&#xff0c;为军事决策提供关键信息。 02 精确打击 携带精确制导武器的无人机能够对敌方的…

OpenHarmony(鸿蒙南向开发)——标准系统移植指南(一)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统芯片移植指南(一) Op…

Acwing 区间合并

区间合并 主要思想&#xff1a;给定很多区间。若两个区间有交集&#xff0c;将二者合并成一个区间。 具体做法: 先按照区间的左端点进行排序然后遍历每个区间&#xff0c;根据不同的情况进行合并&#xff0c;有一下几种情况&#xff1a; 第一种情况&#xff0c;区间不变&…

VMware中安装win7和kail等虚拟机

主要内容 第一部分&#xff1a;安装win 7第二部分 安装kali第三部分 安装UbuntuUbuntu22.04上安装PwntoolsUbuntu上安装vim 第一部分&#xff1a;安装win 7 1.打开安装好的虚拟机 参考链接&#xff1a;虚拟机VMware安装windows7 64位操作系统&#xff08;图文版详解版&…

TDengine 与飞腾腾锐 D2000 完成兼容互认证,推动国产软硬件深度融合

在国家信息安全和自主可控技术日益受到重视的背景下&#xff0c;国产软硬件的发展已成为推动数字经济的重要力量。随着全球科技竞争加剧&#xff0c;企业在选择技术解决方案时&#xff0c;越来越倾向于采用国产产品以降低对外部技术的依赖。这一趋势不仅是为了确保数据安全与隐…

VUE下拉选择分页,远程搜索

实现效果 实现思路 初始化加载第一页&#xff1b;监听下拉框的滚动事件&#xff0c;当滚动到底部的时候加载下一页&#xff1b;输入搜索时&#xff0c;重置为第一页加载&#xff1b;关闭下拉选择框时&#xff0c;判断如果存在搜索值&#xff0c;要清空搜索值、并加载第一页。 …

【运维方案】某系统运维需求方案参考(doc全原件2024)

系统运维需求方案 1服务目标 2服务人力需求、服务资源需求 3信息资产统计服务需求 4业务应用软件服务需求 5网络、安全系统运维服务需求 6主机、存储系统运维服务需求 7数据库系统运维服务需求 8终端运维服务需求 9综合布线系统服务需求 10大屏幕显示系统的维护需求 11视频会议…

2024年最新会声会影2025旗舰版新功能介绍及安装图文激活教程

会声会影2025是一款超级受欢迎的视频播放软件&#xff0c;用于剪辑和编辑各种类型的视频素材。软件具有直观的用户界面&#xff0c;使得即使对于初学者来说也能轻松上手。该软件提供了各种创意工具&#xff0c;可以帮助用户实现他们的创意想法。用户可以裁剪、合并和重新排列视…