65.9K
CodeProject 正在变化。 阅读更多。
Home

绘图库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (61投票s)

2006年9月14日

CPOL

3分钟阅读

viewsIcon

312828

downloadIcon

12987

用于创建形状和开发工具的库。

Screenshot - Painter.JPG

引言

这是一个用于绘图的通用库(正在开发中)。它由一些基本工具和形状组成。它允许您绘制您想要创建的形状,并开发用于管理图形的工具。

使用代码

这段代码描述了从 Shape 派生的类和从 Tool 派生的类的实现。

public class Ellipse : Shape
{
    public Ellipse()
    {
        Geometric.AddEllipse(new System.Drawing.Rectangle(0, 0, 1, 1));
    }

    public Ellipse(Ellipse ellipse) : base(ellipse)
    {
    }

    public override object Clone()
    {
        return new Ellipse(this);
    }
}
// ....


public class Select : Tool    
{
    .....

    // Override IActions Interface functions

    public override void MouseDown(IDocument document, MouseEventArgs e)
    {
        base.MouseDown(document, e);

        if (SelectShape(document.Shapes, e.Location) == HitPositions.None)
            Select.UnselectAll(document.Shapes);

        if (SelectedShapes != null)
            SelectedShapes(this, Select.GetSelectedShapes(document.Shapes));
    }

    public override void MouseUp(IDocument document, MouseEventArgs e)
    {
        base.MouseUp(document, e);

        document.ActiveCursor = Cursors.Default;
    }
    
    .....
}

对于每个新形状,实现复制构造函数和函数 Clone 非常重要,而在实现新工具时重写 IActions 接口很方便。

主要方案

在文档中,有这些方案

  • 橙色表示热点类(通常是接口或抽象类)。
  • 黄色表示活动类。
  • 蓝色表示被动类(通常是数据容器或结构体)。
  • 浅灰色表示框架中的类,但在当前方案中不重要。
  • 深灰色表示框架外部的类。

此方案表示实际的形状层次结构

Shapes hierarchy

此方案表示实际的工具层次结构

Tools hierarchy

此方案表示绘图面板、工具和形状之间的通信通道

Hooking Tools-Shapes

IActions 接口包含工具使用的所有面板操作;例如,鼠标按下和鼠标移动,以及绘制函数。IDocument 是一个接口,但它是蓝色的,因为它只是工具和形状之间的连接点,因此它是一个被动类。

以下方案表示转换器和形状之间的关系。转换器用于处理形状移动,因此如果您想添加任何新的移动,您只需派生两个类,TransformerCompositeTransformer,而不是形状层次结构中的所有类。

Hooking Transformers-Shapes

此方案表示实际的外观层次结构

Appearances hierarchy

文档中还提供其他方案。

关注点

要旋转形状,请选择旋转工具并选择形状。鼠标点击并移动。要相对于非中心点旋转,请选择一个形状,单击 Ctrl 键,鼠标点击并移动。

Rotate example

要变形形状,将属性 Marked 更改为 true,然后选择变形工具,在标记上单击鼠标,并移动。尝试组合形状并执行上述相同操作。

Deform example

序列化

序列化操作由 XmlSerializer 完成。性能不是很好。

更新

  • 缩放功能。
  • 面板上的网格。
  • DrawFreeLine 工具,可以决定两个连续点之间的最小偏移量。

Grid example and DrawFreeLine tool

请参阅“布局”选项,了解“置于顶层”和“置于底层”功能。

最近更新

增加了使用箭头和 Control 键移动形状的可能性。

Bug 修复

修改了 Text 形状的 setter 方法,以在旋转后保持文本状态。

已知错误

  • 变形工具在形状边界标记上不精确。
  • 调整大小工具和启用网格的问题。
  • 撤销-重做机制不精确。

未来发展

  • 改进工具(例如,调整大小)。
  • 提高性能。
  • 开发其他工具。

参考文献

对于文档

有关面向对象和色彩理论以及其他软件开发信息

© . All rights reserved.