EverGiver

Path 본문

웹 디자인/CANVAS

Path

친절한개발초보자 2022. 1. 24. 23:18
728x90
Path

 

  • fill()
    - 정의한 패스 면을 채우는 메소드
    - fillStyle 속성으로 색상, 그라디언트, 패턴을 정의할 수 있다.
    - 지정한 패스가 닫혀있지 않을 경우 fill() 메소드가 마지막 점과 시작점을 이어서 닫힌 패스로 만든 후 면을 채운다.
    - 기본값 #000000
    const canvas15 = document.getElementById('canvas15');
    const ctx15 = canvas15.getContext('2d');
    ctx15.beginPath();
    ctx15.rect(50,50,300,200);
    ctx15.fillStyle = gra1;
    ctx15.fill();
    
    ctx15.beginPath();
    ctx15.moveTo(250,150);ctx15.lineTo(500,150);ctx15.lineTo(300,350);
    ctx15.fillStyle = gra2;
    ctx15.fill();​
  • stroke()
    - 정의한 패스를 선의 형태로 그리는 메소드
    - fillStyle 속성으로 색상, 그라디언트, 패턴을 정의할 수 있다.
    - 기본값 #000000
  • beginPath()
    - 패스를 시작하거나 최근 패스를 초기화하고자 할 때 사용하는 메소드
    - moveTo(), lineTo(), ... 메소드를 새로 생성할 때도 사용한다.
  • moveTo(x,y)
    - 명시된 위치로 선의 생성 없이 패스의 점을 이동시키는 메소드
  • lineTo(x,y)
    - 마지막 점으로부터 지정한 점으로 새로운 라인을 지정하는 메소드
  • closePath()
    - 현재까지 그린 패스의 끝점과 첫 점을 이어서 닫힌 패스로 만드는 메소드
    const canvas16 = document.getElementById('canvas16');
    const ctx16 = canvas16.getContext('2d');
    ctx16.lineWidth=8;ctx16.lineCap='round';ctx16.lineJoin='round';
    ctx16.setLineDash([15]);
    
    ctx16.beginPath();
    ctx16.moveTo(50,50);ctx16.lineTo(50,350);ctx16.lineTo(250,350);
    ctx16.strokeStyle = 'coral';
    ctx16.stroke();
    
    ctx16.beginPath();
    ctx16.moveTo(350,50);ctx16.lineTo(350,350);ctx16.lineTo(550,350);
    ctx16.closePath();
    ctx16.strokeStyle = 'cornflowerblue';
    ctx16.stroke();​
  • clip()
    - 하위 도형을 clip() 적용된 도형에 귀속시키는 메소드

    - 한번 clip()된 영역의 이후 모든 도형은 크리핑 영역에 포함된다.
    ctx17.moveTo(300,50);ctx17.lineTo(50,350);ctx17.lineTo(550,350);
    ctx17.closePath();
    ctx17.stroke();
    ctx17.clip();
    
    ctx17.globalAlpha = .5;
    ctx17.fillStyle  = gra3;
    ctx17.fillRect(0,0,600,200);
    ctx17.fillStyle= myPat1;
    ctx17.fillRect(0,200,600,200);​
     
  • quadraticCurveTo(cpx,cpy,x,y)
    - 2차 베지에 곡선을 드로잉하는 메소드
    - 2개의 점이 필요하다.
    - 첫 번째 점은 조절점(Control Point)이고, 마지막 점은 곡선의 끝점이다.
    - 곡선의 시작점은 현재 경로의 마지막 점이다.
    - 경로가 존재하지 않으면 beginPath()나 moveTo() 메소드를 사용하여 시작점을 정의해야 한다.
    const canvas19 = document.getElementById('canvas19');
    const ctx19 = canvas19.getContext('2d');
    ctx19.beginPath();
    ctx19.moveTo(50,100);ctx19.lineTo(150,100);
    ctx19.quadraticCurveTo(350,350,450,100);ctx19.lineTo(550,100);
    ctx19.lineTo(550,350);ctx19.lineTo(50,350);
    ctx19.closePath();
    ctx19.lineWidth=5;ctx19.lineJoin='round';ctx19.lineCap='round';
    ctx19.setLineDash([10]);
    ctx19.strokeStyle = gra2;
    ctx19.stroke();​
  • bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y)
    - 3차 베지에 곡선을 드로잉하는 메소드
    - 3개의 점이 필요하다.
    - 처음 2개의 점은 조절점(Control Point)이고, 마지막 점은 곡선의 끝점이다.
    - 곡선의 시작점은 현재 경로의 마지막 점이다.
    - 경로가 존재하지 않으면 beginPath()나 moveTo() 메소드를 사용하여 시작점을 정의해야 한다.
    const canvas20 = document.getElementById('canvas20');
    const ctx20 = canvas20.getContext('2d');
    ctx20.beginPath();
    ctx20.moveTo(50,100);
    ctx20.bezierCurveTo(50,450,550,450,550,100);
    ctx20.bezierCurveTo(550,250,50,250,50,100);
    ctx20.fillStyle = gra2;
    ctx20.fill();​
  • arc(x,y,r,sAngle,eAngle,counterclockwise)
    - 원이나 원을 기반으로 한 곡선인 원호를 드로잉하는 메소드
    - 원을 그리기 위해서는 시작 각도에 0을, 종료 각도에 2*Math.PI를 지정한다.
    - arc의 원의 각도 0은 3시의 위치이다.
    - 종료 각도 뒤에 시계 방향 드로잉 여부를 추가로 지정할 수 있다.
    - counterclockwise의 기본 값은 false으로서 시계방향으로 그려지면, true로 지정할 경우 반시계 방향으로 그려진다.
    - 부채꼴을 그리는 경우 moveTo(x,y) 경로와 arc()의 중심 좌표를 동일하게 한 후 그려준 후 closePath()로 시작점을 이어 그린다.
    const canvas22 = document.getElementById('canvas22');
    const ctx22 = canvas22.getContext('2d');
    ctx22.beginPath();
    ctx22.arc(300,200,100,0,Math.PI*1.5);
    ctx22.stroke();
    
    // 부채꼴
    const canvas23 = document.getElementById('canvas23');
    const ctx23 = canvas23.getContext('2d');
    ctx23.beginPath();
    ctx23.moveTo(300,200);
    ctx23.arc(300,200,100,0,Math.PI*1.5,true);
    ctx23.closePath();
    ctx23.stroke();​
  • arcTo(x1,y1,x2,y2,r)
    - 두 개의 점 사이를 잇는 곡선을 드로잉하는 메소드
    const canvas25 = document.getElementById('canvas25');
    const ctx25 = canvas25.getContext('2d');
    ctx25.beginPath();
    ctx25.moveTo(150,100);
    ctx25.lineTo(450,100);ctx25.arcTo(500,100,500,150,50);
    ctx25.lineTo(500,250);ctx25.arcTo(500,300,450,300,50);
    ctx25.lineTo(150,300);ctx25.arcTo(100,300,100,250,50);
    ctx25.lineTo(100,150);ctx25.arcTo(100,100,150,100,50);
    ctx25.lineWidth=50;ctx25.strokeStyle=gra21;
    ctx25.stroke();​
  • isPointInPath(x,y)
    - 지정된 경로에 존재하는 점인 true, 그렇지 않은 경우 false를 반환하는 메소드
    const canvas26 = document.getElementById('canvas26');
    const ctx26 = canvas26.getContext('2d');
    ctx26.rect(100,100,400,200);
    ctx26.strokeStyle = gra2;ctx26.lineWidth=50;ctx26.lineJoin='round';
    if(ctx26.isPointInPath(150,150)){
        ctx26.stroke();
    }​
  • 반복문을 활용한 도형 그리기
    const canvas27 = document.getElementById('canvas27');
    const ctx27 = canvas27.getContext('2d');
    const w27 = canvas27.width;
    const h27 = canvas27.height;
    
    ctx27.fillStyle='#153B40';ctx27.fillRect(0,0,w27/2,h27/2);
    ctx27.fillStyle='#1E5359';ctx27.fillRect(w27/2,0,w27/2,h27/2);
    ctx27.fillStyle='#77A1A6';ctx27.fillRect(0,h27/2,w27/2,h27/2);
    ctx27.fillStyle='#8C4E03';ctx27.fillRect(w27/2,h27/2,w27/2,h27/2);
    
    ctx27.fillStyle='#fff';ctx27.globalAlpha=0.2;
    for(let i=1;i<7;i++){
        ctx27.beginPath();
        ctx27.arc(w27/2,h27/2,30*i,0,Math.PI*2);
        ctx27.fill();
    }
    
    const canvas28 = document.getElementById('canvas28');
    const ctx28 = canvas28.getContext('2d');
    
    ctx28.lineCap='round';ctx28.strokeStyle=gra3;
    for(let i=0;i<10;i++){
        ctx28.lineWidth=2+i;ctx28.setLineDash([i*6]);
        ctx28.beginPath();
        ctx28.moveTo(100+i*50,50);
        ctx28.lineTo(50+i*50,350);
        ctx28.stroke();
    }
728x90

'웹 디자인 > CANVAS' 카테고리의 다른 글

Canvas Text  (0) 2022.01.24
Transformations  (0) 2022.01.24
Rectangles  (0) 2022.01.24
Line Style  (0) 2022.01.24
Pattern  (0) 2022.01.24
Comments