首页 / 浏览问题 / 组件GIS / 问题详情
iobject c++重设文本对象尺寸无效
32EXP 2019年05月13日
我试图将一个文本对象UGGeoText放置到一个符号对象UGGraphicObject之上,我的做法是先分别创建这两个对象,加入图层,然后获取符号对象的边界矩形GetBounds,设置文本对象矩形的下部bottom等于符号对象的顶部top,设置文本对象矩形的左侧left等于符号对象的左侧left,最后调用文本对象的Resize接口重设。但是这样做之后,并没有实现我想得到的效果(PS:当我按上述方法将一个文本对象放置到一个矩形对象UGGeoRegion之上时,可以实现)。

我使用的超图组件是iobject c++ 9.1.0

操作系统是银河麒麟4.0.2

1个回答

你的需求是什么,添加一个文本对象并不需要使用到符号对象,直接用UGGeoText,通过UGGeoText去直接设置范围,UGGeoText.SetTextStyle(UGTextStyle),UGTextStyle去设置字体大小
4,620EXP 2019年05月13日
我需要将文本对象和符号对象共同更新。文本对象的位置随符号对象位置更新而更新。二者是一体的。
UGGeoText.SetTextStyle(UGTextStyle),UGTextStyle去设置字体大小
这个问题之前在8c的版本上未出现,都是正常的,我把我的代码移到9.1.0时才出现。
和设置字体大小有啥关系?而且字体大小我也设置过,设置的8,没有用。
你放在什么图层的,跟踪层还是普通数据集图层,重现设置完对象风格是需要Setgeometry重新替换指定的几何对象的
用的你们的QDynamicLayeer,底层是UGDynamicLayer
动态层,一样的,设置完对象风格,需要Setgeometry重新替换指定的几何对象
好的,我明天试一下。
试过了,依然没效。
QDynamicLayer*layer = new QDynamicLayer("geo");
qMapControl->getDynamicLayer().Add(layer);
///符号对象创建
UGGraphicObject* pGeo = new UGGraphicObject();
UGPoint3D pt3d(123.391125,41.485572,0);
UGPoint3DS pts3d;
pts3d.Add(pt3d);
pGeo->SetGeometryShape(100,5200,pts3d);
layer->AddObject("geo",pGeo,NULL);
qMapControl->Refresh;
///文本对象创建
UGGeoText* pText = new UGGeoText();
pText->Make(_U("BBBB"),UGPoint2D(123.391125,41.485572));
UGTextStyle* pTextStyle = new UGTextStyle();
pTextStyle->SetForeColor(UGRGBA(255,0,0,255));
pTextStyle->SetAlign(4);
pTextStyle->SetHeight(9);
pTextStyle->SetFixedSize(true);
pText->SetTextStyle(*pTextStyle);

UGStyle* pUGStyle = new UGStyle();
pText->SetStyle(pUGStyle);

layer->AddObject("txt",pText,NULL);
qMapControl->Refresh();

///获取符号对象的位置
OgdcPoint2D topright = pGeo->GetBounds().TopRight();
double left = pGeo->GetBounds().left;
///文本对象的宽和高
double height = pText->GetBounds().top - pText->GetBounds().bottom;
double width = pText->GetBounds().right - pText->GetBounds().left;
///设置文本对象的矩形
UGRect2D textRect;
textRect.bottom = topright.y;
textRect.top = textRect.bottom + height;
textRect.left = left;
textRect.right = textRect.left + width;
bool flag = pText->Resize(textRect);
layer->GetUGDynamicLayer()->SetGeometry(_U("txt"),pText);
qMapControl->Refresh();

上面是我的符号对象的代码。试过了,没有效果。下面是我的区域对象的代码,有效。

QDynamicLayer*layer = new QDynamicLayer("geo");
qMapControl->getDynamicLayer().Add(layer);
///Region对象创建
QString regionname("region");
UGGeoRegion* region = new UGGeoRegion();
UGPoint2D pt2d(123.391125,41.485572);
UGPoint2D ugPts2[4];
ugPts2[0].x = pt2d.x;
ugPts2[0].y = pt2d.y;

ugPts2[1].x = pt2d.x + 0.01;
ugPts2[1].y = pt2d.y;

ugPts2[2].x = pt2d.x + 0.01;
ugPts2[2].y = pt2d.y + 0.01;

ugPts2[3].x = pt2d.x;
ugPts2[3].y = pt2d.y + 0.01;

region->Make(ugPts2,4);
UGStyle* pstyle = new UGStyle;
region->SetStyle(pstyle);

layer->AddObject("region",pGeo,NULL);
qMapControl->Refresh;
///文本对象创建
UGGeoText* pText = new UGGeoText();
pText->Make(_U("BBBB"),UGPoint2D(123.391125,41.485572));
UGTextStyle* pTextStyle = new UGTextStyle();
pTextStyle->SetForeColor(UGRGBA(255,0,0,255));
pTextStyle->SetAlign(4);
pTextStyle->SetHeight(9);
pTextStyle->SetFixedSize(true);
pText->SetTextStyle(*pTextStyle);

UGStyle* pUGStyle = new UGStyle();
pText->SetStyle(pUGStyle);

layer->AddObject("txt",pText,NULL);
qMapControl->Refresh();

///获取符号对象的位置
OgdcPoint2D topright = pGeo->GetBounds().TopRight();
double left = pGeo->GetBounds().left;
///文本对象的宽和高
double height = pText->GetBounds().top - pText->GetBounds().bottom;
double width = pText->GetBounds().right - pText->GetBounds().left;
///设置文本对象的矩形
UGRect2D textRect;
textRect.bottom = topright.y;
textRect.top = textRect.bottom + height;
textRect.left = left;
textRect.right = textRect.left + width;
bool flag = pText->Resize(textRect);
layer->GetUGDynamicLayer()->SetGeometry(_U("txt"),pText);
qMapControl->Refresh();

...