Whenever a user is digitizing a polygon, he expects feedback when moving the cursor before actually adding a point, the system should ‘rubberband’ the position under the cursor and only add it to a collection of points after the user left-mouse clicks in the Window. Key to rubberbending in G/Technology is responding to three events :
- CustomCommandHelper_Click
- CustomCommandHelper_MouseMove
- CustomCommandHelper_DblClick
CustomCommandHelper_Click
private void CustomCommandHelper_Click( object sender, GTMouseEventArgs e ) { if( this.PntCnt == 0) { this.PntCnt++; this.Idx = this.GeometryCreationService.AddGeometry( GTClassFactory.Create<IGTPolygonGeometry>(), StyleId); this.GeometryCreationService.AppendPoint( this.Idx, e.WorldPoint); return; } this.GeometryCreationService.AppendPoint( this.Idx, e.WorldPoint); }
CustomCommandHelper_MouseMove
private void CustomCommandHelper_MouseMove( object sender, GTMouseEventArgs e ) { if( this.PntCnt == 0) { this.setGtStatusBar( "Click to start digitizing"); return; } if( this.PntCnt == 1) { this.setGtStatusBar( "Click to add point"); this.GeometryCreationService.SetDynamicPoint( this.Idx, e.WorldPoint); return; } this.setGtStatusBar( "Click to add point, Doubleclick to end"); this.GeometryCreationService.SetDynamicPoint( this.Idx, e.WorldPoint); }
CustomCommandHelper_DblClick
private void CustomCommandHelper_DblClick( object sender, GTMouseEventArgs e ) { this.PntCnt = 0; }
Besides these 3 events, the following general code is used:
general code
private IGTApplication _GTApp = null; private IGTApplication GTApp { get { if( this._GTApp == null) { this._GTApp = GTClassFactory.Create<IGTApplication>(); } return( this._GTApp); } } private IGTGeometryCreationService GeometryCreationService { get; set; } = GTClassFactory.Create<IGTGeometryCreationService>(); private void setGtStatusBar( string message) { this.GTApp.SetStatusBarText( GTStatusPanelConstants.gtaspcMessage, message); } private int Idx { get; set; } private const int StyleId = 5010;
The complete code can be downloaded from here.