ProGuide Configurations - EsriJapan/arcgis-pro-sdk GitHub Wiki
Language: C#
Subject: Framework
Contributor: ArcGIS Pro SDK Team <[email protected]>
Organization: Esri, http://www.esri.com
Date: 10/06/2024
ArcGIS Pro: 3.4
Visual Studio: 2022
ArcGIS Pro æ§æ管çã¯ãã¢ããªã±ãŒã·ã§ã³ã®é«åºŠãªã«ã¹ã¿ãã€ãºãã¿ãŒã³ã§ããæ§æã¯ãã¢ããªã±ãŒã·ã§ã³ãæ§æããã³æ¡åŒµããããã®ããã€ãã®è¿œå ã®æ©äŒãããããšãé€ããŠãã¢ãã€ã³ã«äŒŒãŠããŸãããã®ProGuideã¯ã次ã®2ã€ã®éšåã«åãããŠããŸãã
- çµç¹ã®ãã©ã³ãã£ã³ã°ã®ããã®ç®¡çãããæ§æã®äœ¿çš
- æ§æã䜿çšããŠãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšæ©èœãã«ã¹ã¿ãã€ãºãã
詳现ã«ã€ããŠã¯ãProConcepts: Configurations ãåç §ããŠãã ããã
- çµç¹ã®ãã©ã³ãã£ã³ã°ã®ããã®æ§æã®äœ¿çš
- æ§æã䜿çšããŠãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšæ©èœãã«ã¹ã¿ãã€ãºãã
çµç¹ã®ãã©ã³ãã£ã³ã°ã瀺ãããã«ãPro SDKã®æ§æ管çãã³ãã¬ãŒãã䜿çšããŠæ°ããæ§æãäœæããŸããæ§æ管çã®ã³ã³ããã¹ãã§ã® çµç¹ã®ãã©ã³ãã£ã³ã° ãšã¯ãã¢ããªã±ãŒã·ã§ã³ã¢ã€ã³ã³ãã¹ãã©ãã·ã¥ç»é¢ãèµ·åç»é¢ããArcGIS Pro ã«ã€ããŠãããŒãžãªã©ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãã«ã¹ã¿ãã€ãºããŠãçµç¹ã®ãã©ã³ããåæ ã§ããããšãæå³ããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ããããã®UIèŠçŽ ãã«ã¹ã¿ãã€ãºããæ¹æ³ã瀺ããŸãã
Visual Studio ãéãããã¡ã€ã« | æ°èŠäœæ | ãããžã§ã¯ããã€ã³ã¹ããŒã«æžã¿ãå±é | ãã³ãã¬ãŒã | Visual C# | ArcGIS | ArcGIS Pro ã¢ãã€ã³ | ArcGIS Pro æ§æ管çãéžæããŸãããœãªã¥ãŒã·ã§ã³åã"MyConfiguration"ãšããŸãã
Visual Studioã§ãããžã§ã¯ãããã«ãããMyConfigurationãããžã§ã¯ãã®ããããã£ããŒãžãéããŠããããã° ã¿ããéžæããŸããArcGISPro.exeã¯ã /config:{configuration name}
ã³ãã³ãã©ã€ã³ ãã©ã¡ãŒã¿ãŒã䜿çšããŠå®è¡ãããããšã«æ³šæããŠãã ãã
æ§æ管çãã³ãã¬ãŒãã¯ãæ£ããã³ãã³ãã©ã€ã³ ãã©ã¡ãŒã¿ãŒããããžã§ã¯ãã«èªåçã«è¿œå ããŸãããããžã§ã¯ãããã«ãããããšã.ProConfigX ãã¡ã€ã«æ¡åŒµåãæã€æ§æããã±ãŒãžãæ§æã®ããã©ã«ãã®å ŽæïŒC:\Users\<ãŠãŒã¶ãŒå>\Documents\ArcGIS\AddIns\ArcGISPro\Configurations
ïŒã«ã€ã³ã¹ããŒã«ãããŸãã
泚ïŒãããžã§ã¯ãã§æ§æã®ååãå€æŽããå Žåã¯ã ãããã° ã¿ãã®ã³ãã³ãã©ã€ã³ã¹ã€ããã§ãæ§æã®ååãå€æŽãããå¿ èŠããããŸãã
ãããã°ããã«ã¯ããã¬ãŒã¯ãã€ã³ããéåžžã©ããã«èšå®ãããéå§ããã¯ãªãã¯ããŠæ§æãå®è¡ããŸãïŒã¢ã¯ãã£ããªVisual Studioæ§æã ã¢ã¯ãã£ã㪠(Debug)
ã§ããããšã確èªããŠãã ããïŒã
ãConfigurationManager1.csããéããŸããOnShowSplashScreen
ãªãŒããŒã©ã€ãã¡ãœãããŸã§ã¹ã¯ããŒã«ããŸããæ§æ管çãã³ãã¬ãŒãã«ã¯ãã«ã¹ã¿ãã€ãºå¯èœãªã¹ãã©ãã·ã¥ç»é¢ãŠã£ã³ããŠã®ããã©ã«ãã®å®è£
ããSplashScreen.xamlãã«è¿œå ãããŸãïŒãŸãã¯ãã³ãŒã«ããã¯ãåé€ããããnullãè¿ããŠå
ã®ã¹ãã©ãã·ã¥ç»é¢ãä¿æããŸãïŒã
ãConfigurationManager1.csããéããŸããOnShowStartPage
ãªãŒããŒã©ã€ãã¡ãœãããŸã§ã¹ã¯ããŒã«ããŸããæ§æ管çãã³ãã¬ãŒãã¯ãã«ã¹ã¿ãã€ãºå¯èœãªã¹ã¿ãŒãã¢ããããŒãžã®ããã©ã«ãå®è£
ããStartPage.xamlãã«è¿œå ããŸãïŒãŸãã¯ãã³ãŒã«ããã¯ãåé€ããããnullãè¿ããŠå
ã®ã¹ã¿ãŒãã¢ããããŒãžãä¿æããŸãïŒãæ§æã§ã¯Model-View-ViewModelãMVVMããã¿ãŒã³ã䜿çšãããããã¹ã¿ãŒãã¢ããããŒãž ãã¥ãŒã«ãã³ã³ãããªã³ ãã¥ãŒã¢ãã«ãStartPageViewModel.csãããããŸãã次ã«ç€ºãããã«ããã€ã³ãã®ç®çã§ãã¹ã¿ãŒãã¢ããããŒãžã®ããŒã¿ã³ã³ããã¹ãããã¥ãŒã¢ãã«ã§åæåããã®ã¯ãŠãŒã¶ãŒã®è²¬ä»»ã§ãã
if (_vm == null)
{
_vm = new StartPageViewModel();
}
var page = new StartPage();
page.DataContext = _vm;//Initialize the datacontext
return page;
ArcGIS Pro ãããžã§ã¯ããã¡ã€ã«ãéããšãã¹ã¿ãŒãã¢ããããŒãžã¯èªåçã«éããããŸããããªãã¯ãããéããå¿ èŠã¯ãããŸããïŒ
if (dlg.ShowDialog() ?? false)
{
var item = dlg.Items.FirstOrDefault();
if (item != null)
{
Project.OpenAsync(item.Path);//Automatically closes the startup page
}
}
ããŸããŸãªã¹ã¿ãŒãã¢ããããŒãžã®å®è£ ã確èªããã«ã¯ã次ã®ã³ãã¥ããã£ãµã³ãã«ãåç §ããŠãã ããã
ConfigWithStartWizard ã³ãã¥ãã㣠ãµã³ãã« ã³ãŒã
æšæºã® Pro ã¹ã¿ãŒãããŒãžãšåæ§ã®ã«ãã¯ïŒãã£ãŒã«ãæäŸããã«ã¹ã¿ã ã¹ã¿ãŒãããŒãžãäœæããã®ã«åœ¹ç«ã€å€ãã®UIã³ã³ãããŒã«ãAPIã§æäŸãããŠããŸãã詳ããã¯ãSignOn ã³ã³ãããŒã«ãRecent Projects ã³ã³ãããŒã«ãRecent Templates ã³ã³ãããŒã«ãåç §ããŠãã ããã
*äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«ããããžã§ã¯ããéããšæ°ãããããžã§ã¯ãã®ããã¯ã¹ããŒãžã¿ãã眮ãæããå¿
èŠããããŸãããããã¯ãã¹ã¿ãŒãã¢ããããŒãžãšã¯å¥ã®ãã¥ãŒã§ããæšæºã®DAMLïŒã€ãŸã<deleteTab .... />
ïŒã䜿çšããŠæ¢åã®ããã¯ã¹ããŒãžã¿ããåé€ãããArcGIS Pro ã®ããã¯ã¹ããŒãžã¿ãããã³ãã¬ãŒãã䜿çšããŠã ã«ã¹ã¿ã ã®éããšæ°ãããããžã§ã¯ãã¿ããæ§æã«è¿œå ããŸãã
ãConfigurationManager1.csããéããŸããIcon
ã®ãšãããŸã§ã¹ã¯ããŒã«ããŠãäžæžãããŠãã ãããããã©ã«ãã§ã¯ã"new Configuration" ãã³ãã¬ãŒãã«ä»å±ããŠãã "favico.ico" ã衚瀺ãããŸããã¿ã€ãã«ããŒã®ã¢ã€ã³ã³ã¯å€æŽãããŸããïŒæ§æãå®è¡ãããŠããªãå Žåã¯Proã®ã¢ã€ã³ã³ã«æ»ããŸãïŒãWindowsã¿ã¹ã¯ããŒã®ã¢ã€ã³ã³ã¯å€æŽãããŸãããã¿ã¹ã¯ããŒã«ã¯åžžã«Proã®ã¢ã€ã³ã³ã衚瀺ãããŸããã¢ã€ã³ã³ã®å€æŽã¯ä»»æã§ããProã¢ããªã±ãŒã·ã§ã³ã®ããã©ã«ã ã¢ã€ã³ã³ã䜿çšããã«ã¯ããã®ããããã£ãåé€ããŠãã ããã
èµ·åæã®ã¢ããªã±ãŒã·ã§ã³ ã¢ã€ã³ã³
ãããžã§ã¯ããéããç¶æ ã§ã®ã¢ããªã±ãŒã·ã§ã³ ã¢ã€ã³ã³
泚ïŒä»¥äžã«ç€ºãããã«ãå®å šãªããã¯URI圢åŒã䜿çšããŠãã ãããVisual ãStudioãããžã§ã¯ãã§ãã¢ã€ã³ã³ãã¡ã€ã«ã®ãã«ãã¢ã¯ã·ã§ã³ããResourceãã«èšå®ããŸãã
protected override ImageSource Icon
{
get
{
return new BitmapImage(
new Uri(
@"pack://application:,,,/MyConfiguration;component/Images/favicon.ico"));
}
}
ãConfigurationManager1.csããéããŸããOnShowAboutPage
ãªãŒããŒã©ã€ãã¡ãœãããŸã§ã¹ã¯ããŒã«ããŸãããªãã·ã§ã³ã§ããã®ã¡ãœããããªãŒããŒã©ã€ãããŠããPro ã«ã€ããŠãã¿ãå
ã§ãã¹ããããŠããSystem.Windows.FrameworkElement
ïŒéåžžã¯ãŠãŒã¶ãŒã³ã³ãããŒã«ïŒãè¿ããŸããæ§æ管çãã³ãã¬ãŒãã¯ãã«ã¹ã¿ãã€ãºå¯èœãªãAboutPage.xamlãã«ã¢ããŠãããŒãž ã³ã³ãã³ãã®ããã©ã«ãå®è£
ãè¿œå ããŸãïŒãŸãã¯ã³ãŒã«ããã¯ãåé€ããŠãå
ã®ã¢ããŠãããŒãžãå€æŽããªãã§ãã ããïŒã
çµç¹ã®ãã©ã³ãã£ã³ã°ã®ããã«åã®ã¹ãããã§äœæããMyConfigurationãœãªã¥ãŒã·ã§ã³ã䜿çšããŸãããªãã¡ã¬ã³ã¹å®è£ ã¯ã次ã®ã³ãã¥ããã£ãµã³ãã«ã§ãæäŸãããŠããŸãã
ConfigWithMap ã³ãã¥ãã㣠ãµã³ãã« ã³ãŒã
åã®ã»ã¯ã·ã§ã³ã§äœæããMyConfigurationãœãªã¥ãŒã·ã§ã³ãéããŸããVisual Studioã®ã¹ã¿ãŒã ãã¿ã³ãã¯ãªãã¯ããŠããããã°ã»ãã·ã§ã³ãéå§ããŸããããã©ã«ãã®ArcGIS Pro ãªãã³ã¯å€æŽãããŠããªãããšã«æ³šæããŠãã ããïŒä»ã®ã¢ãã€ã³ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠããªãããšãåæãšããŠããŸãïŒã
ArcGIS ProãéããŠããããã°ãåæ¢ããŸãã
泚ïŒArcGIS Proã®åã»ãã·ã§ã³ã®å®å
šãªDAMLã調ã¹ãã«ã¯ã次ã®ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ /dumpcombineddaml
ãArcGISPro.exeã«è¿œå ããŸãã
ArcGISPro.exe /config:MyConfiguration /dumpcombineddaml
ãConfigurationManager1.csããéããŸããConfigurationManager1å
ã§ãOnUpdateDatabase
ã¡ãœããã®ãªãŒããŒã©ã€ããè¿œå ããŸãã
#region Override DAML Database
protected override void OnUpdateDatabase(XDocument database)
{
}
#endregion
OnUpdateDatabase
ãªãŒããŒã©ã€ãã¡ãœããã¯åäžã®ãã©ã¡ãŒã¿ãŒ XDocument database
ãåãããšã«æ³šæããŠãã ãããèµ·åæã«ãProïŒbin\ExtensionsïŒããã®ãã¹ãŠã®DAMLãã¡ã€ã«ãæ€åºãããã¢ãã€ã³ãããã³æ§æãåäžã®DAMLããŒã¿ããŒã¹ïŒã€ãŸãXMLïŒã«ããŒãžãããŸãïŒãã®ããŒã¿ããŒã¹ã¯ãåè¿°ã®/dumpcombineddaml
ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã䜿çšããŠèª¿ã¹ãããšãã§ããŸãïŒãOnUpdateDatabase
ã³ãŒã«ããã¯ã«ã³ãŒããè¿œå ããŠããªãã³ã®ãã¹ãŠã®ã¿ãèŠçŽ ãåé€ããŸããæ§æã§ãã®XMLãç·šéãããšãã¯ã现å¿ã®æ³šæãæã£ãŠãã ãããã¢ããªã±ãŒã·ã§ã³UIå
šäœãå®çŸ©ããŸãã
以äžã®ã³ãŒãã¹ããããã¯ãXMLããŒã¿ããŒã¹ãããã¹ãŠã®ã¿ãèŠçŽ ãHashSetã«åéããŠãããããããåé€ããŸãããã®ã¹ãããããOnUpdateDatabaseãªãŒããŒã©ã€ãã¡ãœããã«æ¿å ¥ããŸãã
using System.Xml.Linq;
...
...
protected override void OnUpdateDatabase(XDocument database) {
var nsp = database.Root.Name.Namespace;
// select all elements that are tabs
var tabElements = from seg in database.Root.Descendants(nsp + "tab") select seg;
// collect all elements that need to be removed
var elements = new HashSet<XElement>();
foreach (var tabElement in tabElements)
{
// skip root and backstage elements
if (tabElement.Parent == null
|| tabElement.Parent.Name.LocalName.StartsWith("backstage"))
continue;
var id = tabElement.Attribute("id");
//Add your own id prefix here to skip deleting your own tabs
if (id == null) continue;
elements.Add(tabElement);
}
// remove the elements
foreach (var element in elements)
{
element.Remove();
}
}
Pro UIã«ããã€ãã®ã«ã¹ã¿ã ã³ã³ãããŒã«ãšã¿ããè¿œå ããŸãã MyConfigurationãããžã§ã¯ããå³ã¯ãªãã¯ãããããžã§ã¯ãã®ã³ã³ããã¹ãã¡ãã¥ãŒãã è¿œå | æ°ããé ç® ãéžæããŸãã æ§æã«ArcGIS Proãã¿ã³ãè¿œå ããŸãïŒVisual C# é ç® | ArcGIS | ArcGIS Pro ã¢ãã€ã³ | ArcGIS Pro ãã¿ã³ ã®é ã«éžæããŸãïŒããã¿ã³ã«ãTestUserInterfaceããšããååãä»ããŸãã
æ°ããè¿œå ããããTestUserInterface.csããã¡ã€ã«ãéããŸããOnClickã¡ãœããã«MessageBox.Show("test");
è¡ãè¿œå ããŸãã
ãããžã§ã¯ãã®ãConfig.damlããã¡ã€ã«ãç·šéããŸããConfig.damlã«æ°ããã¿ããè¿œå ããŸããMyConfiguration_Group1
ã°ã«ãŒããžã®åç
§ãå«ãŸããŠããããšã確èªããŸãã
<tabs>
<tab id="MyConfiguration_Tab1" caption="Test UI Tab" keytip="Z0">
<group refID="MyConfiguration_Group1"/>
</tab>
</tabs>
<group ...>
èŠçŽ ã§appearsOnAddInTab="true"
ãappearsOnAddInTab="false"
ã«å€æŽããŸãããªãã³ã«ã¢ãã€ã³ ã¿ãã衚瀺ããªãããã«ããŸãã
<groups>
<group id="MyConfiguration_Group1" caption="Group 1" appearsOnAddInTab="false">
<button refID="MyConfiguration_TestUserInterface" size="large" />
</group>
</groups>
次ã«ãæ°ããè¿œå ããã¿ãã OnUpdateDatabase
ã®ãªãŒããŒã©ã€ãã®åé€ã³ãŒãããé€å€ããããšæããŸããOnUpdateDatabase ãªãŒããŒã©ã€ãã® //Add your own id prefix here to skip deleting your own tabs
ã³ã¡ã³ãã«æ³šç®ããŠãã ãããæ¢åã® if (id == null) continue;
åŒã if (id == null || id.Value.StartsWith("MyConfiguration")) continue;
ã«çœ®ãæããç¬èªã®ã¿ãèŠçŽ ãã¹ãããããããã«ããŸããããŒã: ...StartsWith("MyConfiguration")
ããèªåã®ã¿ã ID ã®ãã¬ãã£ãã¯ã¹ãç°ãªãå Žåã¯ããã®å€ã«å€æŽããŸãã
protected override void OnUpdateDatabase(XDocument database)
{
...
foreach (var tabElement in tabElements)
{
...
//Add your own id prefix here to skip deleting your own tabs
if (id == null || id.Value.StartsWith("MyConfiguration")) continue;//Skip our tabs
å€æŽãä¿åããŠãããžã§ã¯ãããã«ãããŸããVisual Studioããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãããããžã§ã¯ããéããŸãããªãã³ã«ãTest UI Tabãã衚瀺ãããŠããããšã確èªããŸããProã®ä»ã®æšæºã¿ãããã¹ãŠãªãã³ããåé€ãããŠããããšã確èªããŸããã«ã¹ã¿ã TestUserInterfaceãã¿ã³ãã¯ãªãã¯ããŸããã¡ãã»ãŒãžããã¯ã¹ã衚瀺ãããŸãã
æ§æ管çã䜿çšããŠãArcGIS Proã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšæ©èœãå€æŽããŸãããConfigWithMap ã³ãã¥ãã㣠ãµã³ãã« ã³ãŒãããå®å šãªãµã³ãã«ãããŠã³ããŒãã§ããŸãã