3DMatrix二次开发部分接口说明

OSG场景开启与关闭
加载OSG场景
通常我们都会默认加载场景,也可以手动加载,参考下面的代码。
bt_Util.executeScript("Render\\RenderDataContex\\DataPump\\OsgScene\\OpenOsgScene mc://http://39.98.79.255/sample_data/pb/gwh/ gwh.pb;")
bt_Util.executeScript("Render\\Camera\\JumpTo 547300.000000 3374948.750000 431.889771;");                        
bt_Util.executeScript("Render\\RenderDataContex\\DataPump\\OsgScene\\SetNodeLodFactor 2.0;");
                            
关闭OSG场景
OSG场景也可以关闭掉,只需要你传入正确的场景名。
bt_Util.executeScript("Render\\RenderDataContex\\DataPump\\OsgScene\\CloseOsgScene gwh.pb;");
                            
亲自试一试
反走样开启与关闭
开启反走样
开启反走样后你的场景会看起来更逼真。
bt_Util.executeScript("Render\\SetAA 2;");
                            
关闭反走样
当然,我们也有关闭反走样的功能,去看看吧。
bt_Util.executeScript("Render\\SetAA 1;");
                            
亲自试一试
点测量
开启点测量
很多时候我们想知道场景上的某个点对应在真实世界中的坐标是什么,点测量能够帮到你。
bt_plug_mapMeasurement.command_activate(1);
                            
关闭点测量
不想用到点测量的时候也能关闭它。
bt_plug_mapMeasurement.command_deactivate(1);
                            
亲自试一试
线测量
开启线测量
测量点到点之间的距离,也是有办法的,只需要开启线测量功能。
bt_plug_mapMeasurement.command_activate(2);
                            
关闭线测量
和点测量一样, 不需要时可以将其关闭。
bt_plug_mapMeasurement.command_deactivate(2);
                            
亲自试一试
模型实例
创建模型实例
对场景进行规划时,我们会需要添加一些实物来判断规划是否合理。
//飞行至模型处
bt_Util.executeScript("Render\\CameraControl\\FlyTo 547267.017417 3374664.628766 234.325912 547265.834796 3374845.317323 80.000000;");
//1.打开场景
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\OpenModelScene mc://http://"+ window.location.hostname +":80/ cam1.pb;");
//2.设置实例
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\ModelScene\\cam1.pb\\SetInstance 1_1 0 cam1 0 10 10 10 0 0 1 0.0 547180 3374905 80 1;");
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\ModelScene\\cam1.pb\\SetInstance 1_2 0 cam1 0 10 10 10 0 0 1 2.355 547275 3374905 80 1;");
bt_Util.executeScript("Plugin\\ActivePlugin ModelInstanceQuery;");
bt_PlugManager.addEventListener("Plugin\\ModelInstanceQuery\\OnInstanceSelected", function(ep){console.log(ep);});
//强制刷新重绘
bt_Util.executeScript("Render\\ForceRedraw;");
                            
改变模型实例颜色
如果对模型实例的颜色不满意,还可以自己修改。
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\ModelScene\\cam1.pb\\SetInstanceColor 1_1 1 0 0 1;");
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\ModelScene\\cam1.pb\\SetInstanceColor 1_2 0 0 0 0.8;");
                            
关闭模型实例
模型实例也可以关闭。
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\CloseModelScene cam1.pb;");
bt_Util.executeScript("Render\\ForceRedraw;")
                            
亲自试一试
标注
添加标注
对于地图上的点,我们可以添加标注作为提示。
bt_Plug_Annotation.setAnnotation("a1", 547320, 3374906, 70, -8, -16, "
" + "标注点" + "
", true); //飞行至标注处 bt_Util.executeScript("Render\\CameraControl\\FlyTo 547310.364569 3374673.415575 290.260955 547308.131174 3374844.024617 54.292706;");
移除标注
添加的标注可以移除。
bt_Plug_Annotation.removeAnnotation("a1");
                            
亲自试一试
渲染图叠加
我们可以将一张图片叠加在场景上。
var image=new Image();
image.src="http://"+ window.location.hostname +":80/splicedImage.png";
image.onload=function() {
    var canv = document.createElement('canvas');
    var ctx = canv.getContext("2d");
    canv.width = image.width;
    canv.height = image.height;
    ctx.drawImage(image, 0, 0);
    bt_Util.SetGlobalOrthoTexture0(547083,3375098,547509,3374849, image.width, image.height, ctx.getImageData(0, 0, image.width, image.height).data);
    bt_Util.executeScript("Render\\CameraControl\\FlyTo 547303.404442 3374664.941569 437.492755 547303.472835 3374668.424365 431.889771;");
    bt_Util.executeScript("Render\\ForceRedraw;");
}
                    
亲自试一试
渲染对象
添加渲染对象
我们可以自定义几何对象,并添加到场景上。
//1.折线
bt_Util.executeScript("Render\\RenderDataContex\\DynamicFrame\\AddRenderObj 006B852C-EBE8-4431-89BD-8B6F30D68134 4 1 (547320 3374906 70) 8 3 4 (0.000000 0.000000 0.000000 255 255 0 255) (-274.336473 -81.487219 -31.113319 255 255 0 255) (0.0 0.0 100.0 255 255 0 255) 0,1,1,2 1;");
//2.彩色渐变三角形
bt_Util.executeScript("Render\\RenderDataContex\\DynamicFrame\\AddRenderObj 006B852C-EBE8-4431-89BD-8B6F30D68133 1 1 (547320 3374956 70) 16 3 3 (0.000000 0.000000 0.000000 255 0 0 128) (-274.336473 -81.487219 -31.113319 0 255 0 128) (0.0 0.0 100.0 0 0 255 128) 0,1,2 1;");
//3.强制重绘
bt_Util.executeScript("Render\\ForceRedraw;");
bt_Util.executeScript("Render\\CameraControl\\FlyTo 547303.252070 3374614.998930 464.232157 547303.407961 3374638.817065 431.889771;");
                            
删除渲染对象
添加的渲染对象可以移除。
//1.折线
bt_Util.executeScript("Render\\RenderDataContex\\DynamicFrame\\DelRenderObj 006B852C-EBE8-4431-89BD-8B6F30D68134 8;");
//2.彩色渐变三角形
bt_Util.executeScript("Render\\RenderDataContex\\DynamicFrame\\DelRenderObj 006B852C-EBE8-4431-89BD-8B6F30D68133 16;");
//3.强制重绘
bt_Util.executeScript("Render\\ForceRedraw;");
                            
亲自试一试
设置局部高亮
当你需要场景上的某个位置引人注目时,可以设置局部高亮。
bt_Util.executeScript("Render\\RenderDataContex\\SetOsgAttribBox 58 84 #FF00FF 5 547334 3374983 547387 3374983 547387 3375021 547334 3375021 547329 3375029;");
bt_Util.executeScript("Render\\CameraControl\\FlyTo 547299.713824 3374716.865301 359.463362 547295.191682 3374889.558915 58.671426;");
                    
亲自试一试
设置局部裁剪
场景上的物体能够被裁剪,就像被“挖空”。
bt_Util.executeScript("Render\\RenderDataContex\\SetOsgClipBox 4 58 104 547334 3374983 547387 3374983 547387 3375021 547334 3375021;");
bt_Util.executeScript("Render\\CameraControl\\FlyTo 547299.713824 3374716.865301 359.463362 547295.191682 3374889.558915 58.671426;");
                    
亲自试一试
设置局部压平
场景上的物体也能够被压平。
bt_Util.executeScript("Render\\RenderDataContex\\DataPump\\OsgScene\\SetClipZ 4 58.6 547334 3374983 547387 3374983 547387 3375021 547334 3375021 0;");
bt_Util.executeScript("Render\\CameraControl\\FlyTo 547299.713824 3374716.865301 359.463362 547295.191682 3374889.558915 58.671426;");
                    
亲自试一试
添加实例动作
我们添加的模型实例还能有一些“动作”,如位移,旋转等等。
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\OpenModelScene mc://http://"+ window.location.hostname +":80/ car.pb;");
bt_Util.executeScript("Render\\RenderDataContex\\ModelScene\\ModelScene\\car.pb\\SetInstance car 0 car 0 1 1 1 0 0 1 1.5 547075.6 3374758.7 52.2 1;");
bt_Util.executeScript('Render\\RenderDataContex\\ModelScene\\ModelScene\\car.pb\\AppendMotion car 1 1 1 0 0 1 3.05 547382 3374755 56.41 60;');
bt_Util.executeScript("Render\\CameraControl\\FlyTo 547159.175161 3374671.179148 168.972638 547159.175161 3374758.023517 53.180146;");
bt_Util.executeScript("Render\\ForceRedraw;");
                    
亲自试一试
打印相机位置
我们可以获取当前相机的位置。
bt_PlugManager.addEventListener("GUIEvent\\KM\\OnMouseButtonUp", function(){console.table(bt_Util.getCameraParam())});
                    
亲自试一试