2014-09-04 69 views
3

我有一个页面,您可以在其上绘制正方形。该广场将代表一个房间,让你有一个正方形,那么你再拍了第一方阵,然后两人将加入HTML5画布合并到矩形以形成新形状

它会看起来像这样 http://puu.sh/bllo7/95e2112d79.png

功能类似于这样http://jsfiddle.net/bLenxexL/

我需要弄清楚如何让他们做出正确的形状,使其看起来像上图中右侧的图像。

如果这会有所帮助,方信息存储在points这种格式

[ 
    { 
     start: {x: 312, y: 164}, 
     end: {x: 734, y: 371} 
    }, 
    { 
     start: {x: 696, y: 304}, 
     end: {x: 1060, y: 561} 
    } 
] 

资源的任何链接,这将有助于我做这将是有很大帮助谢谢

回答

6

可以使用合成在组合矩形周围创建单个笔划。

  • 画出所有的矩形连招

  • 集合成以 '目的地去'。这会导致新图形“擦除”两个重叠的现有图形。

  • 填写你所有的反应。这将删除组合矩形的所有轮廓。

这工作,因为笔划绘制半内&半外矩形边框。当您删除组合矩形的内部时,您将剩下半外侧笔划。

enter image description here

实施例的代码和一个演示:http://jsfiddle.net/m1erickson/m5jg92wd/

<!doctype html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css --> 
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> 
<style> 
    body{ background-color: ivory; } 
    canvas{border:1px solid red;} 
</style> 
<script> 
$(function(){ 

    var canvas=document.getElementById("canvas"); 
    var ctx=canvas.getContext("2d"); 

    // draw all rects with strokes 
    ctx.strokeRect(20,20,100,200); 
    ctx.strokeRect(90,110,75,50); 

    // set compositing to erase existing drawings 
    // new drawings will erase existing drawings where the two overlap 
    ctx.globalCompositeOperation='destination-out'; 

    // fill all rects 
    // This "erases" all but the outline stroke 
    ctx.fillRect(20,20,100,200); 
    ctx.fillRect(90,110,75,50); 

    // reset compositing to its default mode 
    ctx.globalCompositeOperation='source-over'; 

}); // end $(function(){}); 
</script> 
</head> 
<body> 
    <canvas id="canvas" width=300 height=300></canvas> 
</body> 
</html>