Advertisement
Guest User

Untitled

a guest
Jun 13th, 2022
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let _arrayOfFigures=new WeakMap();
  2. let _canvasID=new WeakMap();
  3. let _ctx=new WeakMap();
  4. let _selectedFigure=new WeakMap();
  5. class GeometryDraw{
  6.    
  7.     constructor(arrayOfFigures,canvasID, selectedFigure='-1'){
  8.         _arrayOfFigures.set(this,arrayOfFigures)
  9.         _canvasID.set(this,canvasID)
  10.         _selectedFigure.set(this,selectedFigure)
  11.        
  12.     }
  13.     set selectedFigure(value){
  14.         _selectedFigure.set(this,value)
  15.     }
  16.     get selectedFigure(){
  17.         return _selectedFigure.get(this)
  18.     }
  19.     set arrayOfFigures(value){
  20.         _arrayOfFigures.set(this,value)
  21.     }
  22.     get arrayOfFigures(){
  23.         return _arrayOfFigures.get(this)
  24.     }
  25.     set canvasID(value){
  26.         _canvasID.set(this,value)
  27.     }
  28.     get canvasID(){
  29.         return _canvasID.get(this);
  30.     }
  31.    makeFigurePropertiesInvisible(...resources){
  32.     for (let key in resources){
  33.         resources[key].style.visibility='hidden'
  34.     }
  35.    }
  36.    makeFigurePropertiesVisible(...resources){
  37.     for (let key in resources){
  38.         resources[key].style.visibility='visible'
  39.     }
  40.    }
  41.    visualizeForm(){
  42.         let x1,x2,x3,y1,y2,y3,width,heigth,color,radius,type;    
  43.         x1=document.getElementById('x1')
  44.         x2=document.getElementById('x2')
  45.         x3=document.getElementById('x3')
  46.         y1=document.getElementById('y1')
  47.         y2=document.getElementById('y2')
  48.         y3=document.getElementById('y3')
  49.         width=document.getElementById('width')
  50.         heigth=document.getElementById('heigth')
  51.         radius=document.getElementById('radius')
  52.         type=document.getElementById('type').value
  53.         this.makeFigurePropertiesInvisible(x1,x2,x3,y1,y2,y3,width,heigth,radius)
  54.         switch (type){
  55.             case "point":
  56.                 this.makeFigurePropertiesVisible(x1,y1)
  57.             break
  58.             case "line":
  59.                 this.makeFigurePropertiesVisible(x1,y1,x2,y2)
  60.             break
  61.             case "triangle":
  62.                 this.makeFigurePropertiesVisible(x1,y1,x2,y2,x3,y3)
  63.             break
  64.             case "rectangle":
  65.                 this.makeFigurePropertiesVisible(x1,y1,width,heigth)
  66.             break
  67.             case "circle":
  68.                 this.makeFigurePropertiesVisible(x1,y1,radius)
  69.             break
  70.             default:
  71.                 throw Error('Wrong figure')
  72.                 break
  73.         }
  74.    }
  75.     parseForm(){
  76.         let x1,x2,x3,y1,y2,y3,width,heigth,color,radius,type;
  77.         x1=Number(document.getElementById('x1').value)
  78.         x2=Number(document.getElementById('x2').value)
  79.         x3=Number(document.getElementById('x3').value)
  80.         y1=Number(document.getElementById('y1').value)
  81.         y2=Number(document.getElementById('y2').value)
  82.         y3=Number(document.getElementById('y3').value)
  83.         width=Number(document.getElementById('width').value)
  84.         heigth=Number(document.getElementById('heigth').value)
  85.         color=document.getElementById('color').value
  86.         radius=Number(document.getElementById('radius').value)
  87.         type=document.getElementById('type').value
  88.         switch (type){
  89.             case "point":
  90.                 return new Point(x1,y1,color)
  91.             break
  92.             case "line":
  93.                 return new Sector(x1,y1,x2,y2,color)
  94.             break
  95.             case "triangle":
  96.                 return new Triangle(x1,y1,x2,y2,x3,y3,color)
  97.             break
  98.             case "rectangle":
  99.                 return new Rectangle(x1,y1,color,width,heigth)
  100.             break
  101.             case "circle":
  102.                 return new Circle(x1,y1,color,radius)
  103.             break
  104.             default:
  105.                 throw Error('Wrong figure')
  106.                 break
  107.         }
  108.     }
  109.     addFigure(){
  110.         this.arrayOfFigures.push(this.parseForm());
  111.     }
  112.     removeFigure(){
  113.         let idToRemove=this.selectedFigure
  114.         this.arrayOfFigures.splice(Number(idToRemove),1)
  115.        
  116.         this.selectedFigure=-1;
  117.        
  118.     }
  119.     moveUpFigure(){
  120.         let idToMoveUp=this.selectedFigure
  121.         if(idToMoveUp>0){
  122.             let intermediateVariable=this.arrayOfFigures[Number(idToMoveUp)-1]
  123.             this.arrayOfFigures[Number(idToMoveUp)-1]=this.arrayOfFigures[Number(idToMoveUp)]
  124.             this.arrayOfFigures[Number(idToMoveUp)]=intermediateVariable;
  125.             this.selectedFigure=idToMoveUp-1
  126.         }else if(idToMoveUp===0){
  127.             let intermediateVariable=this.arrayOfFigures[Number(idToMoveUp)]
  128.             this.arrayOfFigures.shift();
  129.             this.arrayOfFigures.push(intermediateVariable);
  130.             this.selectedFigure=this.arrayOfFigures.length-1;
  131.         }
  132.  
  133.     }
  134.     moveDownFigure(){
  135.         let idToMoveDown=this.selectedFigure
  136.         if(idToMoveDown<this.arrayOfFigures.length-1){
  137.             let intermediateVariable=this.arrayOfFigures[Number(idToMoveDown)+1]
  138.             this.arrayOfFigures[Number(idToMoveDown)+1]=this.arrayOfFigures[Number(idToMoveDown)]
  139.             this.arrayOfFigures[Number(idToMoveDown)]=intermediateVariable;
  140.             this.selectedFigure=idToMoveDown+1
  141.         }else if (idToMoveDown===this.arrayOfFigures.length-1){
  142.             let intermediateVariable=this.arrayOfFigures[Number(idToMoveDown)]
  143.             this.arrayOfFigures.pop();
  144.             this.arrayOfFigures.unshift(intermediateVariable);
  145.             this.selectedFigure=0;
  146.         }
  147.  
  148.     }
  149.    
  150.     selectFigure(domElementID){
  151.         this.initializeAllFigures()
  152.         if (this.selectedFigure>=0){
  153.         let domElementOld=document.getElementById(this.selectedFigure);
  154.         domElementOld.style.color ='#000000';
  155.     }
  156.         if (domElementID!=='information'){
  157.             let domElement=document.getElementById(domElementID);
  158.             domElement.style.color = '#ff0000'
  159.             this.selectedFigure = Number(domElement.id)
  160.         }
  161.  
  162.     }
  163.     drawCanvas(){
  164.         let canvas=document.getElementById(this.canvasID)
  165.         let ctx=canvas.getContext("2d");
  166.         ctx.clearRect(0, 0, canvas.width, canvas.height)
  167.         for (let i in this.arrayOfFigures){
  168.             this.arrayOfFigures[i].draw(ctx);
  169.         }
  170.  
  171.     }
  172.     initializeAllFigures(){
  173.         let infoDiv=document.getElementById('information')
  174.         infoDiv.innerHTML=''
  175.         infoDiv.innerText='Figures drawn:'
  176.         for (let i in this.arrayOfFigures){
  177.             let logParagraph = document.createElement('p');
  178.             logParagraph.setAttribute("id", i);
  179.  
  180.             logParagraph.innerText='Type: '+this.arrayOfFigures[i].constructor.name+'Color: '+this.arrayOfFigures[i].color+`X1,Y1: ${this.arrayOfFigures[i].x1},${this.arrayOfFigures[i].y1}`
  181.             infoDiv.appendChild(logParagraph)
  182.         }
  183.         if (this.selectedFigure>=0){
  184.         let domElement=document.getElementById(this.selectedFigure);
  185.         domElement.style.color = '#ff0000'
  186.         }
  187.  
  188.     }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement