之前是已经通过Python构建脚本工具,实现了stylx文件的符号属性的对调。
ArcGIS Pro脚本工具(12)——样式符号属性对调_学学GIS的博客-CSDN博客为地类做样式符号匹配经常碰到这样的问题:属性表里面只有地类代码,但是做样式文件的时候名称框里面填的是地类名称,或者是反过来,这都匹配不到一块嘛。如果我把地类名称、地类代码分别做到这几处,需要用地类代码匹配就把地类代码换到符号的名称属性,需要地类名称匹配就把地类名称换到符号的名称属性,岂不美哉?Python中用sqlite3模块对.stylx样式文件进行读写,考虑到这种对调操作将会是多次的,所以做成Python脚本工具。Pro里观察一下样式符号可以发现,符号可修改的属性有名称、标签、键3处。.........https://blog.csdn.net/baidu_28157641/article/details/126309203
上面的脚本工具有一些不足
- 不能单独选择样式中的某一类符号进行属性对调,而是进行点、线、面等所有符号的属性对调。
- 进行属性对调后需要手动刷新样式。
为了修补这些不足,再考虑到这个功能适合置于系统菜单中,所以琢磨了一下怎么通过SDK构建add-in来实现这个功能。
样式符号属性对调 加载项
效果演示
以三调样式里的面符号为例,将符号的名称属性与类别属性进行对调
主要代码
private void Button_apply_Click(object sender, RoutedEventArgs e)
{
try
{
var styleList = Project.Current.GetItems<StyleProjectItem>();
StyleProjectItem style = styleList.First(style => (style.Name == ComboBox_StyleList.Text));
var cate = ComboBox_Categories.Text switch
{
"点" => StyleItemType.PointSymbol,
"线" => StyleItemType.LineSymbol,
"面" => StyleItemType.PolygonSymbol,
"文本" => StyleItemType.TextSymbol,
_ => StyleItemType.PolygonSymbol,
};
var att1 = ComboBox_Attri1.Text switch
{
"名称" => "Name",
"标签" => "Tags",
"类别" => "Category",
"键" => "Key",
_ => "",
};
var att2 = ComboBox_Attri2.Text switch
{
"名称" => "Name",
"标签" => "Tags",
"类别" => "Category",
"键" => "Key",
_ => "",
};
QueuedTask.Run(() =>
{
IList<SymbolStyleItem> symbols = null;
symbols = style.SearchSymbols(cate, "");
foreach (SymbolStyleItem symbol in symbols)
{
var attValue1 = symbol.GetType().GetProperty(att1).GetValue(symbol, null);
var attValue2 = symbol.GetType().GetProperty(att2).GetValue(symbol, null);
symbol.GetType().GetProperty(att1).SetValue(symbol, attValue2);
symbol.GetType().GetProperty(att2).SetValue(symbol, attValue1);
style.UpdateItem(symbol);
}
style.Refresh();
});
}
catch(Exception)
{
MessageBox.Show("未完成");
}
}
工具下载
请私信联系
工具说明
- 只适用于ArcGIS Pro3.0及之后的版本,如需在Pro2.x版本中使用,需要使用代码重新构建。
- 建议不要将键值与其他属性对调,如果必须这样对调,请确保与它对调的属性具有唯一值。