首页 / 浏览问题 / 组件GIS / 问题详情
C++ 跟踪图层添加 GeoText 修改子文本对象位置无效
19EXP 2019年09月07日

 可以在 git 项目的点击事件中添加如下代码进行测试:

    {
        static UGC::UGGeoEvent *pGeoTextE = nullptr;
        if (!pGeoTextE) {
            static const UGC::UGString tag = _U("caption");
            auto pGeoText = new UGC::UGGeoText;
            UGC::UGSubText text1(_U("abc"));
            UGC::UGSubText text2(_U("def"));
            pGeoText->AddSub(PixelToMap(x, y), text1);
            pGeoText->AddSub(PixelToMap(x+10, y+10), text2);

            UGC::UGTextStyle tStyle;
            tStyle.SetForeColor(UGRGB(0xff, 0x00, 0x00));
            tStyle.SetBold(true);
            tStyle.SetAlign(4);
            tStyle.SetHeight(9);
            tStyle.SetFixedSize(true);
            pGeoText->SetTextStyle(tStyle);

            auto &layer = m_pUGMapWnd->m_mapWnd.m_Map.m_TrackingLayer;
            pGeoTextE = layer.Add(pGeoText, tag);
        } else {
            if (auto pGeoText = dynamic_cast<UGC::UGGeoText *>(pGeoTextE->GetGeometry())) {
                pGeoText->SetSubAnchor(0, PixelToMap(x, y));
                pGeoText->SetSubAnchor(1, PixelToMap(x+10, y+10));
            }
        }
        Refresh();
    }

各 API 的用法仅凭其注释进行开发实在是太难了……

根本没办法确定每个 API 是干什么用的,现在是根据 API 名称及注释在猜,猜半天都不知道是用法不对还是根本就不支持。

1个回答

您好,SuperMap for C++的使用没有问题,从您的代码来看,UGGeoText并没有添加到动态层。

第一个if中的代码不会执行,第二个if条件可能使用空指针,请仔细检查一下。
694EXP 2019年09月09日
并没有怀疑sdk不能用,只是表示仅是注释用法不明确。

另外添加的不是动态层,根据之前的建议,是跟踪层。

pGeoTextE 初始为空,!nullptr 为真,执行第一个if  block 中内容,第二个if 断点可以执行进去,可以编译测试一下,以上例子基于您的GitHub项目做的修改,可以比较容易测试,直接复制到鼠标左键处理部分即可,使用的qt编译,并不存在逻辑问题

abc def全部可以显示,只是修改锚点不生效
抱歉,是我写错了,应该是跟踪层。修改后需重新添加,并非同一个对象。
多谢耐心回复,意思是设置完 UGGeoText 添加到 m_TrackingLayer 后便无法再进行修改,想要修改就只能删除重新添加?目前这样处理是可以的。

通过添加时返回的 UGGeoEvent 可以移动 UGGeoText,但是移动的是整体 UGGeoText,而无法单独控制某个 GeoSubText。
...