Situation
- We have multiple 3D polygon shapefiles that represents rock formation boundaries. Quite detailed as they go up to 800,00 vertices.
- We want to be able to view a solid cross-sectional slice of it, based on a 2D line. Below is what I managed to do eventually. The different sections represent different rock formations
- End result needs to be shown on a web application built using ArcGIS Javascript.
Challenges
- Early on, we identified that Intersect 3D was likely the tool we needed to generate the output we wanted. However, Intersect 3D requires both inputs (In our case, 1. the 3D polygon rock formation, 2. the 2D line) to be closed multipatches.
- Trying to generate a closed multipatch from the 3D polygon shapefile was not possible through a combination of "Layer 3D To Feature Class" and "Enclose 3D". It kept giving me a open multipatch (Is Closed 3D returns false)
- It turns out the 3D polygon shapefile vertices were not snapped to one another, even if it looked like it. Post-processing the raw 3D polygon files to get a closed 3D object, the vertices dropped from 800k to ~200k. I'm not sure if its a precision limitation of shapefile, just the nature of working in 3D or inaccurate raw data.
- From the 2D polyline, generating a closed multipatch that can meet my requirements was challenging as it was not clear which tool gave a closed multipatch. Only Buffer 3D explicitly stated that it produced a closed multipatch
My solution
1. Import the 3D polygon shapefile into Blender using a custom add-on. (Credit to https://github.com/domlysz/BlenderGIS this solution wouldnt be possible otherwise)
2. Use Blender tools to merge all close-by vertices. This will generate a truly closed 3D model
3. Export as COLLADA .dae file. Import into ArcGIS Pro. Gives a 3D rock formation as a closed multipatch.
4. From the 2D polyline, use arcpy to create a 3D vertical slice shell around it.
5. Use Step 4 output as input to Minimum Bounding Volume. Gives a 3D vertical plane as a closed multipatch.
6. Run Intersect 3D, using Step 3 output and Step 5 output.
7. Publish to ArcGIS Enterprise
Question
Is there a better way of doing things?
Can I achieve what I want purely in ArcGIS Pro? Currently, I have to pre-process the rock formation model in Blender (using a custom add-on) before importing back into ArcGIS Pro. If Blender or the custom add-on no longer works, my current solution is no longer valid.
I looked into ArcGIS Javascript 4.x, but could not find something suitable.
Other things I've tried
Extract Multipatch from Mesh: gives a cross-sectional slice, but it has a hollow outline instead of being solid, filled-in
Buffer 3D: gives a closed multipatch around the user drawn line, which I managed to use in Intersect 3D. Which results in a cross-sectional tunnel (since min. buffer quality is 6, which gives a 6 sided buffer). This is useful in another use-case, just not this one.
Layer 3D To Feature Class, Interpolate Polygon To Multipatch: Neither gives a closed multipatch. Which means they cannot be used in Intersect 3D.
Enclose 3D: Tried using it to close my multipatches generated through other ArcGIS tools. Did not work for my situation, even after running 13hrs.
Solved! Go to Solution.
Hello,
I suggest that you check out a mining/geology/mapping software system such as Maptek's Vulcan Software. It's designed for this sort of work and has been around for 40+ years. ArcGIS is beginning to catch up on some of the 3-D stuff but still has a ways to go relative to systems such as Vulcan.
Regards, Bob
Hello,
I suggest that you check out a mining/geology/mapping software system such as Maptek's Vulcan Software. It's designed for this sort of work and has been around for 40+ years. ArcGIS is beginning to catch up on some of the 3-D stuff but still has a ways to go relative to systems such as Vulcan.
Regards, Bob