首页 / 浏览问题 / 三维GIS / 问题详情
iClient 3D 三维场景添加文本问题
15EXP 2017年04月10日

在三维场景添加文本时出现问题,我本意是在鼠标点击的位置添加文本标签,但是每次点击都会在同一固定位置添加,如下是我具体代码,请帮助看下是哪里造成的错误。

//添加文本标签
function addLabel() {
       var newAction = new SuperMap.Web.UI.Action3Ds.MakeLabelAction(sceneControl);
       sceneControl.set_sceneAction(newAction);
       setFocus();
   }

   //点击添加文本扩展Action
   SuperMap.Web.UI.Action3Ds.MakeLabelAction = function (sceneControl) {
       SuperMap.Web.UI.Action3Ds.MakeLabelAction.initializeBase(this);
       this._name = "MakeLabel";
       this._sceneControl = sceneControl;
       this._type = SuperMap.Web.UI.Action3Ds.SceneActionType.PAN;
   };
   SuperMap.Web.UI.Action3Ds.MakeLabelAction.prototype = {
       dispose: function () {
           this._sceneControl = null;
       }, onMouseDown: function (e) {
           if (e.get_flagType() % 2 == 1) {
               var point = new SuperMap.Web.Core.Point3D(e.get_longitude(), e.get_latitude(), e.get_altitude());
               var point3D = new SuperMap.Web.Core.GeoPoint3D(point);
               var txtPart3D = new SuperMap.Web.Core.TextPart3D("文本标签测试", point3D);
               var textArray = [txtPart3D];
               var text3D = new SuperMap.Web.Core.GeoText3D(textArray);
               //text3D.set_position(point3D);

               var feature3D = new SuperMap.Web.Core.Feature3D();
               feature3D.set_geometry(text3D);

               var textStyle = new SuperMap.Web.Core.TextStyle3D();
               textStyle.set_foreColor(new SuperMap.Web.Core.Color(255,0,0,255));
               textStyle.set_backColor(new SuperMap.Web.Core.Color(0,0,0,255));
               textStyle.set_outline(true);
               textStyle.set_fontName("微软雅黑");
               textStyle.set_fontScale(0.8);
               feature3D.set_textStyle3D(textStyle);

               var trackingLayer = this._sceneControl.get_scene().get_trackingLayer3D();                 //设置跟踪图层可见性
               trackingLayer.set_isVisible(true);
               trackingLayer.add(feature3D,"Text");
           }
       }
   };
   SuperMap.Web.UI.Action3Ds.MakeLabelAction.registerClass('SuperMap.Web.UI.Action3Ds.MakeLabelAction', SuperMap.Web.UI.Action3Ds.SceneAction, Sys.IDisposable);

1个回答

您好,看代码没问题呢。

调试看看

var point = new SuperMap.Web.Core.Point3D(e.get_longitude(), e.get_latitude(), e.get_altitude());这行是每次都一样的值吗?

另外您测试一下这个在线的范例在您那正常吗?

http://www.supermap.com.cn:8090/iserver/iClient/for3D/plugin/samplecode/samplecode/samples/Feature3D/DrawPlacemarkAction.html

3,389EXP 2017年04月10日

范例是正常的

var point = new SuperMap.Web.Core.Point3D(e.get_longitude(), e.get_latitude(), e.get_altitude());

var point3D = new SuperMap.Web.Core.GeoPoint3D(point);

每次的x、y、z也是不一样的
 feature3D.set_geometry(text3D);

我把geometry换成point3D每次鼠标单击会在相应位置新增个3D点,但是文本就不行了

那您再调试看一下您feature3D里面的加的 position 每次都是一样的吗?

每次都不一样

但是每次都添加到这个位置

那确实是奇怪,您再看看还有没有其他地方什么做了操作影响了这个。

如果确实看不出,您把工程上传百度云,我下载测试看看。

您只需要做来我这边下载了能直接运行方便测试。
链接:http://pan.baidu.com/s/1o8e6EaI 密码:6z6d

您帮助看看哪的问题,谢谢!
您好,调试发现了text3D的X Y Z都是0,0,0。说明坐标是没对的。

再次看一下帮助手册发现,TextPart3D的构造点用的是Point3D而不是GeoPoint3D。

所以把这两句改了就可以了:

var txtPart3D = new SuperMap.Web.Core.TextPart3D("文本标签测试", point);

text3D.set_position(point);
谢谢,问题解决了。
...