protected virtual void RenderToolCircle(Viewport viewport, Component_Terrain terrain, Vector2 center) { var radius = Component_Scene_DocumentWindow.TerrainToolRadius; const double step = Math.PI / 32; Vector3 lastPos = Vector3.Zero; for (double angle = 0; angle <= Math.PI * 2 + step / 2; angle += step) { var pos = new Vector3( center.X + Math.Cos(angle) * radius, center.Y + Math.Sin(angle) * radius, 0); pos.Z = terrain.GetHeight(pos.ToVector2(), false); if (angle != 0) { viewport.Simple3DRenderer.AddLine(lastPos + new Vector3(0, 0, toolRenderOffset), pos + new Vector3(0, 0, toolRenderOffset)); } lastPos = pos; } }
protected virtual void RenderToolLine(Viewport viewport, Component_Terrain terrain, Vector2 start, Vector2 end, int stepCount) { Vector2 diff = end - start; Vector2 dir = diff; var len = dir.Normalize(); Vector3 lastPos = Vector3.Zero; for (int n = 0; n <= stepCount; n++) { Vector3 pos = new Vector3( start.X + dir.X * ((float)n / stepCount * len), start.Y + dir.Y * ((float)n / stepCount * len), 0); pos.Z = terrain.GetHeight(pos.ToVector2(), false); //if( selectedTerrain.HeightmapTerrainManager != null && HeightmapTerrainManager.Instance != null ) //{ // float z; // if( HeightmapTerrainManager.Instance.GetHeight( pos.ToVector2(), false, out z ) ) // pos.Z = z; // else // pos.Z = float.MinValue; //} //else // pos.Z = selectedTerrain.GetHeight( pos.ToVector2(), false ); if (n != 0) { if (lastPos.Z != double.MinValue && pos.Z != double.MinValue) { viewport.Simple3DRenderer.AddLine(lastPos + new Vector3(0, 0, toolRenderOffset), pos + new Vector3(0, 0, toolRenderOffset)); } } lastPos = pos; } }