laptop and a wrench

Bug

Nodes do not snap when using ce.move() in the CityEngine PyDev window.

Last Published: August 16, 2017 ArcGIS CityEngine
Bug ID Number BUG-000106176
SubmittedJune 28, 2017
Last ModifiedJune 5, 2024
Applies toArcGIS CityEngine
Version found2016.1
StatusNon-Reproducible

Additional Information

When moving a node in python it is not expected, that it snaps to a neighboring node. When snapping is desired, please use the following commands: graphlayer = ce.getObjectsFrom(ce.scene(),ce.withName("Streetnetwork"),ce.isLayer)[0] cleanupSettings = CleanupGraphSettings() cleanupSettings.setSnapNodesToSegments(True) cleanupSettings.setSnappingDist(20) ce.cleanupGraph(graphlayer,cleanupSettings) Known limitation: This is applied to the whole Streetnetwork. To overcome this, I once made as script, that only merges nodes in a selectionfrom scripting import * # get a CityEngine instance ce = CE() def getAdjacentSegments(nodes): segments = [] for n in nodes: seg = ce.getObjectsFrom(n, ce.isGraphSegment) for s in seg: if (s not in segments): segments.append(s) return segments def getCleanupGraphSettings(default = True, dist = 10): cleanupSettings = CleanupGraphSettings() cleanupSettings.setIntersectSegments(default) cleanupSettings.setMergeNodes(default) cleanupSettings.setMergingDist(dist) cleanupSettings.setSnapNodesToSegments(default) cleanupSettings.setSnappingDist(10) cleanupSettings.setResolveConflictShapes(default) return cleanupSettings def mergeNodes(segments): # get graph layer and create tmp layer graphLayer = ce.getLayer(segments[0]) graphLayerTmp = ce.addGraphLayer('tmp_streets') # do merging of segments in tmp layer ce.copy ( ce.getObjectsFrom(ce.selection), True, graphLayerTmp ) cleanupSettings = getCleanupGraphSettings(False) cleanupSettings.setMergeNodes(True) ce.cleanupGraph(graphLayerTmp, cleanupSettings) result = ce.copy (ce.getObjectsFrom(graphLayerTmp), True, graphLayer) # integrate merged segments back into graph cleanupSettings = getCleanupGraphSettings(False) cleanupSettings.setSnapNodesToSegments(True) cleanupSettings.setSnappingDist(0) ce.cleanupGraph(graphLayer, cleanupSettings) # cleanup ce.delete(graphLayerTmp) if __name__ == '__main__': nodes = ce.getObjectsFrom(ce.selection, ce.isGraphNode) segments = getAdjacentSegments(nodes) mergeNodes(segments):

Steps to Reproduce

Bug ID: BUG-000106176

Software:

  • ArcGIS CityEngine

Get notified when the status of a bug changes

Download the Esri Support App

Discover more on this topic

Get help from ArcGIS experts

Contact technical support

Download the Esri Support App

Go to download options