如何在PaperJS中绘制一个简单的2D网格(非交互式)?

时间:2011-10-28 10:12:55

标签: javascript html5-canvas

我有一个使用PaperJS制作的交互式应用程序模型,但它仍然缺少一个小功能。我需要绘制一个2D网格(你知道......在表面上无限重复的均匀线条网格),当在屏幕上拖动东西时,它将被用作用户交互的指南(但网格本身可以是完全静态的) )。

我只是不知道如何在PaperJS中实现它。它不能只是一个背景图像,因为它将以不同的比例呈现,我也希望它能够非常快速地呈现,因为它总是可见的。

我想绘制的网格类型是以2D网格为中心的网格,如此图片的示例(a)所示:

2D basic grid types

欢迎任何启示。

1 个答案:

答案 0 :(得分:3)

如果你想要的只是行:

var drawGridLines = function(num_rectangles_wide, num_rectangles_tall, boundingRect) {
    var width_per_rectangle = boundingRect.width / num_rectangles_wide;
    var height_per_rectangle = boundingRect.height / num_rectangles_tall;
    for (var i = 0; i <= num_rectangles_wide; i++) {
        var xPos = boundingRect.left + i * width_per_rectangle;
        var topPoint = new paper.Point(xPos, boundingRect.top);
        var bottomPoint = new paper.Point(xPos, boundingRect.bottom);
        var aLine = new paper.Path.Line(topPoint, bottomPoint);
        aLine.strokeColor = 'black';
    }
    for (var i = 0; i <= num_rectangles_tall; i++) {
        var yPos = boundingRect.top + i * height_per_rectangle;
        var leftPoint = new paper.Point(boundingRect.left, yPos);
        var rightPoint = new paper.Point(boundingRect.right, yPos);
        var aLine = new paper.Path.Line(leftPoint, rightPoint);
        aLine.strokeColor = 'black';
    }
}

drawGridLines(4, 4, paper.view.bounds);

如果您希望每个矩形成为单个矩形的hitTest的单独路径:

var drawGridRects = function(num_rectangles_wide, num_rectangles_tall, boundingRect) {
    var width_per_rectangle = boundingRect.width / num_rectangles_wide;
    var height_per_rectangle = boundingRect.height / num_rectangles_tall;
    for (var i = 0; i < num_rectangles_wide; i++) {
        for (var j = 0; j < num_rectangles_tall; j++) {
            var aRect = new paper.Path.Rectangle(boundingRect.left + i * width_per_rectangle, boundingRect.top + j * height_per_rectangle, width_per_rectangle, height_per_rectangle);
            aRect.strokeColor = 'white';
            aRect.fillColor = 'black';
        }
    }
}

drawGridRects(4, 4, paper.view.bounds);