<html>
<head>
<title>
</title>
<style>
.header_box {
margin-top: 40px;
text-align: center;
}
.header_box input{
60px;
height:30px;
border: 1px solid #666;
margin-left: 8px;
}
.header_box span{
margin-left: 8px;
}
.header_box select{
60px;
height:30px;
margin-left: 8px;
color:#444;
font-size: 16px;
}
.header_box button{
60px;
height:30px;
margin-left: 8px;
color:#fff;
border-radius: 4px;
background-color: #444;
border: 0;
cursor: pointer;
}
.header_box button:hover,.footer_box button:hover{
background-color: #000;
}
.canvas_background{
660px;
height:660px;
background-color: #333;
margin: 40px auto;
position: relative;
}
.footer_box{
text-align: center;
}
.footer_box button{
80px;
height:30px;
margin-left: 8px;
color:#fff;
border-radius: 4px;
background-color: #444;
border: 0;
cursor: pointer;
}
.point_box{
9px;
height:9px;
position: absolute;
z-index: 1001;
}
.point{
position: absolute;
left:0;
top:0;
9px;
height:9px;
background-color: #F9F900;
border-radius: 9px;
cursor: pointer;
display:block;
z-index: 1003;
}
.point:hover{
box-shadow: 0 0 15px #FFFF37;
}
.line{
position: absolute;
left:0;
top:0;
background-color: #ff00ff;
100px;
height:0px;
border: 1px solid #ff00ff;
transform:rotate(0deg);
transform-origin:0% 0%;/*定义动画的旋转中心点*/
}
.line:hover{
box-shadow: 0 0 6px #ff00ff;
cursor: pointer;
}
.rect{
margin-top: 50px;
background-color: #ff00ff;
100px;
height:0px;
border: 1px solid #ff00ff;
transform:rotate(50deg);
transform-origin:0% 0%;/*定义动画的旋转中心点*/
}
.rect:hover{
box-shadow: 0 0 6px #ff00ff;
cursor: pointer;
}
</style>
</head>
<body>
<div class="rect"></div>
<div class="header_box">
<span>网格大小:</span><input type="text" id="grid_rows"><span>行</span><input type="text" id="grid_cols"><span>列</span>
<span>单位长度:</span><input type="text">
<select>
<option>cm</option>
<option>m</option>
</select>
<button id="size_btn">确定</button>
</div>
<div class="canvas_background" id="canvas_background">
<canvas id="canvas_grid">
</canvas>
</div>
<div class="footer_box">
<button id="reset_btn">重置</button>
<button id="excute_btn">计算</button>
<button id="export_btn">导出</button>
</div>
</body>
<script src="../static/jquery-1.8.3.min.js"></script>
<script>
//600
var canvasGridWidth = 600;
var canvasWidth = 660;
var canvasHeight = 660;
var points_list = [];
var map = {};
$('#canvas_grid').attr('width',canvasWidth);
$('#canvas_grid').attr('height',canvasHeight);
var ctx=$('#canvas_grid')[0].getContext("2d");
var imgData=ctx.createImageData(canvasWidth,canvasHeight);
for(var i=0;i<canvasHeight;i++)
{
for(var j=0;j<canvasWidth;j++)
{
var x = i*4*canvasWidth + j*4;
imgData.data[x] = 80;
imgData.data[x+1] = 80;
imgData.data[x+2] = 80;
imgData.data[x+3]= 255;
}
}
ctx.putImageData(imgData,0,0);
drawGrid(9,9);
$('#size_btn').on('click',function(){
ctx.clearRect(0,0,canvasWidth,canvasHeight);
var rows = parseInt($('#grid_rows').val());
var cols = parseInt($('#grid_cols').val());
points_list = [];
drawGrid(rows,cols);
})
function drawGrid(rows,cols){
var val = 0;
if(rows > cols){
val = canvasGridWidth*1.0/(rows-1);
}else{
val = canvasGridWidth*1.0/(cols-1);
}
var left = 30;
var right = left+(cols-1)*val;
var top = 30;
var bottom = top+(rows-1)*val;
for(var i=0;i<rows;i++){
var x1 = parseInt(left);
var y1 = parseInt(top+i*val);
var x2 = parseInt(right);
var y2 = parseInt(top+i*val);
drawLine(x1,y1,x2,y2);
}
for(var j=0;j<cols;j++){
var x1 = parseInt(left+j*val);
var y1 = parseInt(top);
var x2 = parseInt(left+j*val);
var y2 = parseInt(bottom);
drawLine(x1,y1,x2,y2);
}
drawGridPoints(rows,cols,val);
}
function drawGridPoints(rows,cols,val){
var left = 30;
var top = 30;
for(var i=0;i<rows;i++)
{
for(var j=0;j<cols;j++){
var _left = left + j*val;
var _top = top + i*val;
points_list.push({
'x':_left,
'y':_top
})
}
}
}
$('#canvas_background').click(function(event){
var _x = event.offsetX;
var _y = event.offsetY;
console.log(_x,_y);
var esp = 10;
for(var i=0;i<points_list.length;i++){
var pos = points_list[i];
if(_x > pos.x-esp && _x < pos.x+esp && _y > pos.y-esp && _y < pos.y + esp){
if(typeof map[pos.x+'_'+pos.y] === 'undefined'){
//drawCircle(pos.x,pos.y);
var _id = pos.x+'_'+pos.y;
$(this).append('<div id="'+_id+'" class="point"></div>');
drawPointEx($('#'+_id),pos.x,pos.y);
map[pos.x+'_'+pos.y] = 1;
console.log('add');
}
}
}
})
$('#canvas_background').dblclick(function(event){
for(var i=0;i<points_list.length;i++){
var pos = points_list[i];
if(_x > pos.x-esp && _x < pos.x+esp && _y > pos.y-esp && _y < pos.y + esp){
if(typeof map[pos.x+'_'+pos.y] === 'undefined'){
drawCircle(pos.x,pos.y);
map[pos.x+'_'+pos.y] = 1;
console.log('add');
}
}
}
})
function drawCircle(x1,y1){
ctx.beginPath();
ctx.arc(x1,y1,5,0,2*Math.PI,true);
ctx.fillStyle = '#ff0000';
ctx.strokeStyle = '#ff0000';
ctx.fill();
ctx.closePath();
ctx.stroke();
}
function drawLine(x1,y1,x2,y2){
ctx.beginPath();
ctx.strokeStyle= '#888';
ctx.lineWidth = 1;
ctx.moveTo(x1+0.5,y1+0.5);
ctx.lineTo(x2+0.5,y2+0.5);
ctx.closePath();
ctx.stroke();
}
function drawPointEx(ele,x1,y1){
ele.css({
'left':(x1-4)+'px',
'top':(y1-4)+'px'
})
}
function drawLineEx(ele,x1,y1,x2,y2){
}
$('#export_btn').click(function(){
saveAsLocalImage();
})
function saveAsLocalImage () {
var myCanvas = document.getElementById('canvas_grid');
var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
window.location.href=image;
}
</script>
</html>