POST
|
We are creating a combined CoreHost / Python app that needs to place a variety of elements onto a Layout's MapFrame. This MapFrame already exists in a PAGX file, which will be imported and modified using ArcPy. Since this is a CoreHost app, we won't have access to the Layout namespace, so the actual modifications will have to occur in Python. Thus far, the only properties I've found to modify the focus of a MapFrame (or its camera) deal with extents (x and y min and max) and camera heading. The problem here is that we have a geographically defined rectangle (with the same aspect ratio as the map frame) that we want to focus on. If this rectangle was perfectly oriented with true north, that would be fine - but that is almost never the case. In the C# SDK, you can use the LayoutElementFactory to create a map frame using an Envelope, which is defined based on lower left and upper right coordinates, rather than min / max x and y. This is essentially how I need to be able to define the portion of my map I want the map frame to focus on. Right now, however, it looks like I'll need to figure out the exact angle of rotation I'll need for the camera (based on the rectangular area of interest's orientation to north), as well as the exact scale. That would mean a very precise rotate and zoom-in set of operations, all done to focus the map frame on a certain rectangular area of the map. Is there a simpler way to do this in ArcPy? Something akin to the C# SDK's use of an Envelope to create a specifically focused map frame?
... View more
03-30-2020
11:49 AM
|
0
|
0
|
398
|
POST
|
I'm working with several custom settings pages in an ArcGIS Pro add-in. Most of these pages subscribe to events on other pages. I have a case where the initialization of one page should be complete before the initialization of a dependent page proceeds. Within its InitializeAsync() method, the dependent page subscribes to an event on the dependency page. The line responsible for the subscription kicks off the initialization of the dependency page (with a call to PropertySheet.Page("MY_DEPENDENCY_PAGE")). Unfortunately, I can't simply await that call to PropertySheet.Page(), and so the rest of the dependent page's initialization keeps on going. I tried to wrap the subscription in a QueuedTask.Run() call, and that "worked" as far as the dependent page was concerned - but then the initialization of the dependency page's UI fails because it's running on the MCT. Is there any way to force this initialization to occur in order?
... View more
02-25-2020
07:57 AM
|
0
|
0
|
295
|
POST
|
Hi Uma Harano, I eventually figured this out. Back in ArcObjects, things just seemed to work differently. What I am trying to do is set the ROTATION of an 'end of line' point feature so that things look proper when mapping. After lots of messing about, I finally figured out that if I just applied a * -1 to my formula and then everything worked. var lineBuilder = new LineBuilder(fromPoint, toPoint); var line = lineBuilder.ToSegment(); double Rad2Degrees = 180 / Math.PI; var degrees = (line.Angle * Rad2Degrees) * -1; return degrees; Thanks for getting back to me.
... View more
08-13-2020
07:08 AM
|
0
|
0
|
887
|
POST
|
Transformation functions have been added to LayoutView for the ArcGIS Pro 2.7 release. Jeff - Layout / arcpy.mp Teams
... View more
08-27-2020
10:53 AM
|
0
|
0
|
854
|
POST
|
Having fixed the Geodatabase instantiation to occur within a QueuedTask, I am encountering a new problem - If I connect to an unfederated, non-Portal feature service, I get a couple of dialogs asking whether I want to proceed using an unsecure connection. In certain contexts, these dialogs make sense to the user (when they're actually configuring the feature service connection). In other contexts, validation is happening behind the scenes, and the same dialogs pop up at times that will probably make much less sense to a user. For instance, when a Project is opening: These pop up in the process of Geodatabase object instantiation using a ServiceConnectionProperties object. If the user selects No, the Geodatabase constructor throws an exception (which I've handled). If they select yes, instantiation proceeds normally. Is there some way to actually "catch" these popups, so that we can at least present an additional dialog box of our own explaining the issue? I'm hoping to be able to call MessageBox.Show() when this happens, so we can tell the user which feature service connection needs their authority to proceed.
... View more
01-28-2020
10:38 AM
|
0
|
0
|
642
|
POST
|
My issue is that I don't want the Layout to become a part of the Project at all - I just want the in-memory Layout object.
... View more
01-10-2020
01:29 PM
|
0
|
0
|
695
|
POST
|
Hi David, If you are using traditional versioning, the feature service does not support versioning functionality, as you have pointed out. You can connect to a particular version by passing that into the connection properties, but there is no way to iterate through what versions are available. If you set up your enterprise geodatabase to use branch versioning, and enable the Version Management Service when you publish to a feature service, this story changes. IsVersioningSupported() returns true, GetVersionManager() returns an object, and all of the routines on that class work as you would expect. I hope this helps, --Rich
... View more
12-17-2019
08:35 AM
|
2
|
0
|
1370
|
POST
|
You could listen to the Project Items changed event: ProjectItemsChangedEvent.Subscribe((args) =>
{
System.Diagnostics.Debug.WriteLine($@"{args.Action.ToString()} {args.ProjectItem.Title}");
}, false); the 'Action' is 'Add' and 'args.ProjectItem' should be your newly added LayoutProjectItem.
... View more
12-05-2019
10:43 AM
|
0
|
0
|
477
|
POST
|
The ArcPy documentation specifies methods for importing a PAGX file and converting a PAGX to a Layout. Is there a way to export an existing Layout as a PAGX file?
... View more
10-31-2019
07:56 AM
|
0
|
0
|
339
|
POST
|
Is it possible to create new elements using ArcPy, and to add them to a layout? All I've seen so far are methods that allow for cloning and deletion, but intuitively it seems like this should be doable. If this isn't possible through ArcPy, what would be the best way? -David
... View more
10-31-2019
07:42 AM
|
0
|
0
|
267
|
POST
|
David, In the example they are 'hard-coding' the path to the default environment which is pretty safe to assume to exist. However, ArcGIS Pro can be configured to run using different CONDA environments as well, so the assumption that the default environment is used might not hold up. How about you write your custom code in a custom Python toolbox which is getting deployed along your add-in? Essentially I am suggesting having your python code in what appears to be a regular python tool to be executed via the GeoProcessing class and it would automagically work using the active Python environment. Things like the name or path location can be retrieved via Project.Current; in C# and passed as arguments into the geoprocessing tool. The side benefit is that you are getting a GP tool for free which then even could executed outside your add-in just a regular Python tool in Pro by itself. Calling C# functionality from Python is more of a generic question and maybe something like PyDotnet could be worth exploring. I haven't used the module myself but it certainly looks interesting. Hope this helps, - Thomas
... View more
10-30-2019
02:37 PM
|
0
|
0
|
2030
|
POST
|
Thanks! We ended up doing something similar by calling PropertySheet.Page(_pageID) from various Page view models that needed to access one another. Along with some logic to ensure certain view models were already initialized and subscribed to certain events, it's working as needed.
... View more
10-30-2019
11:45 AM
|
0
|
0
|
3345
|
POST
|
I had some luck with this format. Not sure what to put in for the public key but a single p seems to work (so did other letters). This is assuming your referenced dll has a version of 1.0.0.0 and no public key. <Image Source="/ResourceDLL;v1.0.0.0;p;component/MyImages/BexDog32.png"/>
... View more
09-20-2019
04:05 PM
|
0
|
0
|
1117
|
POST
|
Hi David, your add-in Module still loads even if you have not enabled your add-in (via, I am assuming, an IExtensionConfig implementation?). Assuming you are using IExtensionConfig, your module always needs to load to allow you, the add-in developer, to respond to a licensing check from the Pro app (which is usually triggered when the user attempts to "check" or enable your extension via the licensing tab on the Pro backstage). This means that your add-in will autoload as normal, if that is what you specified in your config.daml, and can listen to the OnReadSettingsAsync callback regardless of its "State" returned from IExtensionConfig. Therefore, the add-in module can retrieve the stored defaults via the callback "as usual" whenever a project opens - even though, to the "outside" world, you may be showing its capabilities (tools, buttons, etc) as disabled.
... View more
09-16-2019
04:13 PM
|
0
|
0
|
782
|
POST
|
Hi David, The Add To Favorites, Remove From favorites menuitems are buttons we have written to add or remove the highlighted Edit tool from the Editing Tools Favorites group. Rather than placing them on the ribbon we have written them as a context driven button and use them within a dynamic menu object showing or hiding the appropriate menu item according to the whether the gallery item clicked on is in the favorites group. The gallery template we use for displaying the items has a standard WPF Grid control which uses the ContextMenu property to bind to this dynamic menu object. You could implement the exact same mechanism with your custom gallery. If you're not familiar with dynamic menus, here is a sample that illustrates the concept of dynamic menus arcgis-pro-sdk-community-samples/Framework/DynamicMenu at master · Esri/arcgis-pro-sdk-community-samples · GitHub Re your second question - can gallery items belong to more than one group. No, they cannot. If you want your gallery item to belong to a second group, then you will need to create a new gallery item with the same properties apart from the Group Name and add it to your gallery collection. I will make a note to update the Gallery sample to illustrate the concepts you've been asking about. That sample was originally written in 2017 so it's a few years old now. Hope this helps. Feel free to ask more questions if you get stuck. Narelle
... View more
09-05-2019
01:20 PM
|
0
|
0
|
613
|
Title | Kudos | Posted |
---|---|---|
1 | 01-07-2021 06:11 AM | |
1 | 07-01-2020 12:23 PM | |
1 | 12-30-2020 01:45 PM | |
2 | 10-08-2020 07:49 AM |