Engine中如何按指定角度旋转矢量图层的符号?

Engine中如何实现根据指定字段值(角度)将符号(简单渲染的点符号为例)进行旋转?
已邀请:

朱新颖

赞同来自:

【解决办法】:
将二维符号进行旋转使用的接口为IRotationRenderer,将3D符号旋转使用IRotationRenderer2接口,下面分开使用。

1,MapControl中,使用IRotationRenderer接口,指定旋转角度和旋转类型即可。
可参考下面代码:
 IGeoFeatureLayer GeofeatureLayer = featureLayer as IGeoFeatureLayer;
            ISimpleRenderer simpleRenderer = GeofeatureLayer.Renderer as ISimpleRenderer;
            IRotationRenderer rotationRenderer = simpleRenderer as IRotationRenderer;
            rotationRenderer.RotationField = angle;
            rotationRenderer.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic;
            GeofeatureLayer.Renderer = simpleRenderer as IFeatureRenderer;
            axMapControl1.Refresh();

           
2,SceneControl中使用IRotationRenderer2 接口,使用SetSymbolRotation3DExpressions指定旋转字段(表达式),SetSymbolRotation3DFlags指定旋转轴。
可参考下面代码:

IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer; 

ISimpleRenderer simpleRenderer = geoFeatureLayer.Renderer as ISimpleRenderer; 
IRotationRenderer2 rotationRenderer = simpleRenderer as IRotationRenderer2; 
rotationRenderer.SetSymbolRotation3DFlags(esriSymbolRotation3DFlags.esriSymbolRotation3DUseExpressionX, esriSymbolRotation3DFlags.esriSymbolRotation3DNone, esriSymbolRotation3DFlags.esriSymbolRotation3DNone); //指定旋转轴 
rotationRenderer.SetSymbolRotation3DExpressions([Angle],,); //Angle为旋转的角度字段 
rotationRenderer.SymbolRotation3DRotationTypeZ = esriSymbolRotationType.esriRotateSymbolGeographic; 
geoFeatureLayer.Renderer = simpleRenderer as IFeatureRenderer;
axSceneControl1.SceneGraph.Invalidate(featureLayer, true, false); 
axSceneControl1.SceneGraph.ActiveViewer.Redraw(true);

要回复问题请先登录注册