SuperMap-设置同类文本风格

本文介绍如何使用SuperMap Desktop API实现地图中选中文本样式的修改,并提供了代码示例,展示了如何获取当前选中文本的样式,调用对话框修改样式,以及选择是否将样式应用于所有要素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该功能即SuperMap Desktop中的同类文本风格:

            string strDatasetName = "";
            soSelection pSoSelection = axSuperMapCtrl.selection;
            soDataset pSoDataset = pSoSelection.Dataset as soDataset;
            if (pSoDataset != null)
            {
                strDatasetName = pSoDataset.Name;
            }
            /// 得到所在图层的对象
            string strDataSourceName = pSoDataset.DataSourceAlias;

            soRecordset pSoRecordset = pSoSelection.ToRecordset(false);
            if (pSoRecordset == null || pSoRecordset.RecordCount == 0)
                return;

            /// 显示文本样式对话框
            pSoRecordset.MoveFirst();
            soGeoText pSoGeoText = pSoRecordset.GetGeometry() as soGeoText;
            soTextStyle pSoTextStyle = pSoGeoText.TextStyle;
            // bApplyFlag 记录对话框行为,应用还是取消设置
            bool bApplyFlag = axSuperMapCtrl.ShowTextStylePicker(pSoTextStyle);

            if (bApplyFlag)
            {
                DialogResult dlgResult = MessageBox.Show(this, "应用与全部要素?", "标注风格",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                /// 单一更新
                if (dlgResult == DialogResult.No)
                {
                    pSoRecordset.MoveFirst();
                    pSoGeoText = pSoRecordset.GetGeometry() as soGeoText;
                    pSoGeoText.TextStyle = pSoTextStyle;

                    // 编辑并进行更新
                    pSoRecordset.Edit();
                    pSoRecordset.SetGeometry(pSoGeoText as soGeometry);
                    pSoRecordset.Update();
                }
                else if (dlgResult == DialogResult.Yes)
                {
                    /// 对该图层所有对象应用同样风格
                    soDatasetVector pSoDatasetVector = pSoDataset as soDatasetVector;
                    pSoRecordset = pSoDatasetVector.Query("", true, null, "");
                    pSoRecordset.MoveFirst();
                    for (int i = 1; i <= pSoRecordset.RecordCount; i++)
                    {
                        pSoGeoText = pSoRecordset.GetGeometry() as soGeoText;
                        pSoGeoText.TextStyle = pSoTextStyle;

                        // 编辑并进行更新
                        pSoRecordset.Edit();
                        pSoRecordset.SetGeometry(pSoGeoText as soGeometry);
                        pSoRecordset.Update();

                        // 记录后移
                        pSoRecordset.MoveNext();
                    }
                    Marshal.ReleaseComObject(pSoDatasetVector); pSoDatasetVector = null;
                }
                // 刷新地图
                axSuperMapCtrl.Refresh();
            }

            Marshal.ReleaseComObject(pSoGeoText); pSoGeoText = null;
            Marshal.ReleaseComObject(pSoTextStyle); pSoTextStyle = null;
            Marshal.ReleaseComObject(pSoRecordset); pSoRecordset = null;
            Marshal.ReleaseComObject(pSoDataset); pSoDataset = null;
            Marshal.ReleaseComObject(pSoSelection); pSoSelection = null; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值