diff --git a/src/data/coords/ellipseCoords.ts b/src/data/coords/ellipseCoords.ts index e285bd37ee67eec74c09e289d0501915ad837b0d..92025155237baa53cb102272e3c9f6463ad235f1 100644 --- a/src/data/coords/ellipseCoords.ts +++ b/src/data/coords/ellipseCoords.ts @@ -6,7 +6,7 @@ import * as paper from "paper"; export class EllipseCoords implements Coords { - public constructor(public center : paper.Point, public radiusX : number, public radiusY : number, public angle : number) { + public constructor(public center : paper.Point, public radiusX : number, public radiusY : number, public angle : number = 0) { } bounds(): paper.Rectangle { @@ -14,13 +14,14 @@ export class EllipseCoords implements Coords { } toPath(): paper.Path { - let fittingEllipse = new paper.Path.Ellipse(new paper.Rectangle( + let path = new paper.Path.Ellipse(new paper.Rectangle( new paper.Point(this.center.x - this.radiusX, this.center.y - this.radiusY), new paper.Size(2 * this.radiusX, 2 * this.radiusY) ) ); - fittingEllipse.rotate(-this.angle); - return fittingEllipse; + path.rotate(this.angle); + path.remove(); + return path; } /** diff --git a/src/instruments/petriDish.ts b/src/instruments/petriDish.ts index 7b2e2f38f9c98649ab190bb2d8ba08c1a4c7d73c..197e49b9d1ca2bd5f6f43b085790ecca9c7fc933 100644 --- a/src/instruments/petriDish.ts +++ b/src/instruments/petriDish.ts @@ -2,13 +2,14 @@ import * as paper from "paper"; import {AbstractInstrument, Handle, Instrument} from "./instrument"; import {CircleCoords} from "../data/coords/circleCoords"; import {Lab} from "../lab"; +import {EllipseCoords} from "../data/coords/ellipseCoords"; /** * Représente la boîte de Petri */ -export class PetriDish extends AbstractInstrument<CircleCoords> implements Instrument { +export class PetriDish extends AbstractInstrument<EllipseCoords> implements Instrument { - public constructor(protected lab : Lab, coords : CircleCoords) { + public constructor(protected lab : Lab, coords : EllipseCoords) { super(lab, coords, [ new Handle("rightHandle", true), new Handle("bottomHandle", true), @@ -16,11 +17,11 @@ export class PetriDish extends AbstractInstrument<CircleCoords> implements Instr ]) } - drawIn(coords : CircleCoords, group: paper.Group) { - group.addChild(new paper.Path.Circle(coords.center, coords.radius)); + drawIn(coords : EllipseCoords, group: paper.Group) { + group.addChild(coords.toPath()); } - onHandleMove(coords: CircleCoords, handle: Handle, point: paper.Point, delta: paper.Point): void { + onHandleMove(coords: EllipseCoords, handle: Handle, point: paper.Point, delta: paper.Point): void { switch (handle.name) { case "centerHandle" : coords.center = coords.center.add(delta); @@ -28,34 +29,34 @@ export class PetriDish extends AbstractInstrument<CircleCoords> implements Instr case "rightHandle": let newRadiusX = point.x - coords.center.x; - let deltaRadiusX = newRadiusX - coords.radius; + let deltaRadiusX = newRadiusX - coords.radiusX; if(newRadiusX > 10) { - coords.radius = coords.radius + deltaRadiusX / 2; - coords.center = coords.center.add(new paper.Point(deltaRadiusX, 0)); + coords.radiusX = coords.radiusX + deltaRadiusX / 2; + coords.center = coords.center.add(new paper.Point(deltaRadiusX / 2, 0)); } break; case "bottomHandle": let newRadiusY = point.y - coords.center.y; - let deltaRadiusY = newRadiusY - coords.radius; + let deltaRadiusY = newRadiusY - coords.radiusY; if(newRadiusY > 10) { - coords.radius = coords.radius + deltaRadiusY / 2; - coords.center = coords.center.add(new paper.Point(0, deltaRadiusY)); + coords.radiusY = coords.radiusY + deltaRadiusY / 2; + coords.center = coords.center.add(new paper.Point(0, deltaRadiusY / 2)); } break; } } - locateHandle(coords: CircleCoords, handle: Handle): paper.Point { + locateHandle(coords: EllipseCoords, handle: Handle): paper.Point { switch (handle.name) { case "centerHandle" : return coords.center; case "rightHandle": - return coords.center.add(new paper.Point(coords.radius, 0)); + return coords.center.add(new paper.Point(coords.radiusX, 0)); case "bottomHandle": - return coords.center.add(new paper.Point(0, coords.radius)); + return coords.center.add(new paper.Point(0, coords.radiusY)); default: throw new Error("Unknown handle"); diff --git a/src/lab.tsx b/src/lab.tsx index d9190bcd3efe45a2402140e38a0e59acd2e15c69..59ad974bd74a0b1cfe36e16026194b370fc729cf 100644 --- a/src/lab.tsx +++ b/src/lab.tsx @@ -14,6 +14,7 @@ import {CircleCoords} from "./data/coords/circleCoords"; import {PathCoords} from "./data/coords/pathCoords"; import {DownloadStep} from "./steps/downloadStep"; import {PaperUtils} from "./utils/paperUtils"; +import {EllipseCoords} from "./data/coords/ellipseCoords"; export interface LabData { @@ -25,7 +26,7 @@ export interface LabData { rulerCoords : VectorCoords, - petriDishCoords : CircleCoords, + petriDishCoords : EllipseCoords, blobMaskCoords : PathCoords } @@ -148,7 +149,7 @@ export class Lab extends React.Component<{}> { rulerCoords: new VectorCoords(new paper.Point(width * 0.25, height / 2), new paper.Point(width * 0.75, height / 2)), - petriDishCoords: new CircleCoords(new paper.Point(width / 2, height / 2), width * 0.75 / 2), + petriDishCoords: new EllipseCoords(new paper.Point(width / 2, height / 2), width * 0.75 / 2, width * 0.75 / 2, 0), blobMaskCoords: new PathCoords(new paper.Path()),