///
/// This file is part of ILNumerics Community Edition.
///
/// ILNumerics Community Edition - high performance computing for applications.
/// Copyright (C) 2006 - 2012 Haymo Kutschbach, http://ilnumerics.net
///
/// ILNumerics Community Edition is free software: you can redistribute it and/or modify
/// it under the terms of the GNU General Public License version 3 as published by
/// the Free Software Foundation.
///
/// ILNumerics Community Edition is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/// GNU General Public License for more details.
///
/// You should have received a copy of the GNU General Public License
/// along with ILNumerics Community Edition. See the file License.txt in the root
/// of your distribution package. If not, see .
///
/// In addition this software uses the following components and/or licenses:
///
/// =================================================================================
/// The Open Toolkit Library License
///
/// Copyright (c) 2006 - 2009 the Open Toolkit library.
///
/// Permission is hereby granted, free of charge, to any person obtaining a copy
/// of this software and associated documentation files (the "Software"), to deal
/// in the Software without restriction, including without limitation the rights to
/// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
/// the Software, and to permit persons to whom the Software is furnished to do
/// so, subject to the following conditions:
///
/// The above copyright notice and this permission notice shall be included in all
/// copies or substantial portions of the Software.
///
/// =================================================================================
///
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using ILNumerics.Drawing.Graphs;
using ILNumerics.Drawing;
using ILNumerics.Drawing.Interfaces;
namespace ILNumerics.Drawing.Labeling {
///
/// a label used for labeling shapes (screen coords, defined via world coords)
///
public class ILShapeLabel : ILLabelingElement {
#region attributes
ILPanel m_panel;
CoordSystem m_coordSystem;
Color m_fringeColor = Color.LightGray;
ILArray m_fringeOffsets = ILMath.returnType();
#endregion
#region properties
///
/// get/set the color used for drawing a fringe around glyphs, empty: no fringe
///
public Color FringeColor {
get { return m_fringeColor; }
set { m_fringeColor = value; }
}
#endregion
#region constructors
public ILShapeLabel(ILPanel panel) : base(panel, null, Color.Black) {
m_panel = panel;
m_coordSystem = CoordSystem.Screen;
m_anchor = new PointF(.5f,.5f); // TickLabelAlign.center | TickLabelAlign.vertCenter;
m_fringeOffsets.a = new int[,]{
{ -1, -1 },
{ -1, 0 },
{ -1, 1 },
{ 0, -1 },
{ 0, 1 },
{ 1, -1 },
{ 1, 0 },
{ 1, 1 }};
m_fringeOffsets.a = m_fringeOffsets.T;
}
public ILShapeLabel(ILPanel panel, CoordSystem coordSystem)
: base(panel, null, Color.Black) {
m_panel = panel;
m_coordSystem = CoordSystem.Screen;
m_anchor = new PointF(.5f, .5f); // TickLabelAlign.center | TickLabelAlign.vertCenter;
m_renderer.CacheCleared -= new EventHandler(m_renderer_CacheCleared);
m_renderer = panel.TextRendererManager.GetDefault(coordSystem);
m_renderer.CacheCleared += new EventHandler(m_renderer_CacheCleared);
m_fringeOffsets.a = new int[,]{
{ -1, -1 },
{ -1, 0 },
{ -1, 1 },
{ 0, -1 },
{ 0, 1 },
{ 1, -1 },
{ 1, 0 },
{ 1, 1 }};
m_fringeOffsets.a = m_fringeOffsets.T;
}
#endregion
#region public interface
///
/// (internal use)
///
/// render properties
/// center position for the label
public void Draw(ILRenderProperties p, ILPoint3Df center ) {
if (!String.IsNullOrEmpty(Text)) {
if (m_expression != m_cachedExpression)
interprete(m_expression);
double[] modelview = null;
m_renderer.Begin(p, ref modelview);
Point dest = m_panel.World2Screen(center, modelview);
offsetAlignment(m_size, ref dest);
if (m_fringeColor.IsEmpty) {
m_renderer.Draw(m_renderQueue, dest, TextOrientation.Horizontal, m_color);
} else {
drawFringed(m_renderer, m_renderQueue, dest, TextOrientation.Horizontal, m_color);
}
m_renderer.End(p);
}
}
///
/// draws a fringe around the render output in fringe color
///
///
///
///
///
///
private void drawFringed(IILTextRenderer m_renderer, object m_rendererQueue, Point dest, TextOrientation textOrientation, Color m_color) {
m_renderer.ColorOverride = m_fringeColor;
for (int i = 0; i < m_fringeOffsets.Size[0]; i++) {
m_renderer.Draw(m_renderQueue
, new Point(dest.X + m_fringeOffsets.GetValue(i,0), dest.Y + m_fringeOffsets.GetValue(i,1))
, TextOrientation.Horizontal, m_fringeColor);
}
m_renderer.ColorOverride = Color.Empty;
m_renderer.Draw(m_renderQueue, dest, TextOrientation.Horizontal, m_color);
}
///
/// (internal use)
///
/// render properties
/// minimum coord for label area
/// maximum coord for label area
public void Draw(ILRenderProperties p, ILPoint3Df min, ILPoint3Df max) {
if (!String.IsNullOrEmpty(Text)) {
if (m_expression != m_cachedExpression)
interprete(m_expression);
m_renderer.Begin(p);
m_renderer.Draw(m_renderQueue,min.X,min.Y,min.Z,max.X,max.Y,max.Z, m_color);
m_renderer.End(p);
}
}
#endregion
}
}