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.