Switch + REFACTOR: moved circuit modifiers to Circuit instead of CircuitComponent
This commit is contained in:
parent
c9d0a36f92
commit
8a3a31e0c0
@ -1,25 +1,25 @@
|
|||||||
import {Part} from "../parts/Part";
|
import {Part} from "../parts/Part";
|
||||||
import {Wire} from "../wire/Wire";
|
import {Wire} from "../wire/Wire";
|
||||||
import {Calculation} from './Calculation';
|
import {Calculation, RESISTANCE_MIN} from './Calculation';
|
||||||
|
import {Battery} from '../parts/battery/Battery';
|
||||||
|
import {Light} from '../parts/light/Light';
|
||||||
|
import {Relay} from '../parts/relay/Relay';
|
||||||
|
import {Junction} from '../junction/Junction';
|
||||||
|
import {Switch} from '../parts/switch/Switch';
|
||||||
|
|
||||||
export class Circuit {
|
export class Circuit {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly uuid: string,
|
readonly uuid: string,
|
||||||
public name: string,
|
public name: string,
|
||||||
readonly parts: Part[],
|
readonly parts: Part[] = [],
|
||||||
readonly wires: Wire[],
|
readonly wires: Wire[] = [],
|
||||||
) {
|
) {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
static new() {
|
static new() {
|
||||||
return new Circuit(
|
return new Circuit(self.crypto.randomUUID(), "Unbenannt");
|
||||||
self.crypto.randomUUID(),
|
|
||||||
"Unbenannt",
|
|
||||||
[],
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
calculate() {
|
calculate() {
|
||||||
@ -45,4 +45,57 @@ export class Circuit {
|
|||||||
this.wires.forEach(wire => wire.resetCalculations());
|
this.wires.forEach(wire => wire.resetCalculations());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newBattery(rasterX: number, rasterY: number, name: string | undefined = undefined, voltage: number = 1.5, resistance: number = 0.5): Battery {
|
||||||
|
name = this.generateName(name, "Batterie");
|
||||||
|
return this.add(new Battery(this, rasterX, rasterY, name, voltage, resistance));
|
||||||
|
}
|
||||||
|
|
||||||
|
newLight(rasterX: number, rasterY: number, name: string | undefined = undefined, voltageMax: number = 3, resistance: number = 100): Light {
|
||||||
|
name = this.generateName(name, "Licht");
|
||||||
|
return this.add(new Light(this, rasterX, rasterY, name, voltageMax, resistance));
|
||||||
|
}
|
||||||
|
|
||||||
|
newRelay(rasterX: number, rasterY: number, name: string | undefined = undefined, voltageMin: number = 1.0, voltageMax: number = 3, resistance: number = 150): Relay {
|
||||||
|
name = this.generateName(name, "Relais");
|
||||||
|
return this.add(new Relay(this, rasterX, rasterY, name, voltageMin, voltageMax, resistance));
|
||||||
|
}
|
||||||
|
|
||||||
|
newSwitch(rasterX: number, rasterY: number, name: string | undefined = undefined, momentary: boolean = false): Switch {
|
||||||
|
name = this.generateName(name, "Relais");
|
||||||
|
return this.add(new Switch(this, rasterX, rasterY, name, momentary));
|
||||||
|
}
|
||||||
|
|
||||||
|
private generateName(name: string | undefined, baseName: string) {
|
||||||
|
if (name !== undefined) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
let counter = 1;
|
||||||
|
while (true) {
|
||||||
|
name = `${baseName} #${counter++}`;
|
||||||
|
if (!this.parts.some(p => p.name === name)) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private add<T extends Part>(part: T): T {
|
||||||
|
this.parts.push(part);
|
||||||
|
return part;
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(start: Junction, end: Junction) {
|
||||||
|
const wire = new Wire(start, end, RESISTANCE_MIN);
|
||||||
|
this.wires.push(wire);
|
||||||
|
console.log(`Wire connected: ${wire}`);
|
||||||
|
this.calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnect(wire: Wire) {
|
||||||
|
this.wires.splice(this.wires.indexOf(wire), 1);
|
||||||
|
wire.disconnect();
|
||||||
|
console.log("Wire disconnected: ", wire);
|
||||||
|
this.calculate();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,19 +1,14 @@
|
|||||||
import {Circuit} from "./Circuit";
|
import {Circuit} from "./Circuit";
|
||||||
import {Battery} from '../parts/battery/Battery';
|
|
||||||
import {Light} from '../parts/light/Light';
|
|
||||||
import {Wire} from '../wire/Wire';
|
|
||||||
import {RESISTANCE_MIN} from './Calculation';
|
|
||||||
|
|
||||||
const battery = new Battery(1, 3, "Batterie");
|
export const DEMO_001 = create();
|
||||||
|
|
||||||
const light = new Light(1, 1, "Licht");
|
function create() {
|
||||||
|
const circuit = new Circuit("DEMO_001", "1. Batterie und Licht");
|
||||||
export const DEMO_001 = new Circuit(
|
const battery = circuit.newBattery(1, 3);
|
||||||
"DEMO_001",
|
const light = circuit.newLight(1, 1);
|
||||||
"1. Batterie und Licht",
|
circuit.parts.push(battery);
|
||||||
[battery, light],
|
circuit.parts.push(light);
|
||||||
[
|
circuit.connect(battery.minus, light.a);
|
||||||
new Wire(battery.minus, light.a, RESISTANCE_MIN, ""),
|
circuit.connect(battery.plus, light.b);
|
||||||
new Wire(battery.plus, light.b, RESISTANCE_MIN, ""),
|
return circuit;
|
||||||
],
|
}
|
||||||
);
|
|
||||||
|
|||||||
@ -1,25 +1,19 @@
|
|||||||
import {Circuit} from "./Circuit";
|
import {Circuit} from "./Circuit";
|
||||||
import {Battery} from '../parts/battery/Battery';
|
|
||||||
import {Light} from '../parts/light/Light';
|
|
||||||
import {Wire} from '../wire/Wire';
|
|
||||||
import {RESISTANCE_MIN} from './Calculation';
|
|
||||||
|
|
||||||
const battery0 = new Battery(1, 3, "Batterie 1", 1.5, 0.5);
|
export const DEMO_002 = create();
|
||||||
const battery1 = new Battery(3, 3, "Batterie 2", 1.5, 0.5);
|
|
||||||
const light0 = new Light(1, 1, "Licht 1");
|
|
||||||
const light1 = new Light(3, 1, "Licht 2");
|
|
||||||
const light2 = new Light(2, 5, "Licht 3");
|
|
||||||
|
|
||||||
export const DEMO_002 = new Circuit(
|
function create() {
|
||||||
"DEMO_002",
|
const circuit = new Circuit("DEMO_002", "2. Reihe und Parallel");
|
||||||
"2. Reihe und Parallel",
|
const battery0 = circuit.newBattery(1, 3);
|
||||||
[battery0, battery1, light0, light1, light2],
|
const battery1 = circuit.newBattery(3, 3);
|
||||||
[
|
const light0 = circuit.newLight(1, 1);
|
||||||
new Wire(light0.a, battery0.minus, RESISTANCE_MIN, ""),
|
const light1 = circuit.newLight(3, 1);
|
||||||
new Wire(light0.b, light1.a, RESISTANCE_MIN, ""),
|
const light2 = circuit.newLight(2, 5);
|
||||||
new Wire(light1.b, battery1.plus, RESISTANCE_MIN, ""),
|
circuit.connect(light0.a, battery0.minus);
|
||||||
new Wire(battery0.plus, battery1.minus, RESISTANCE_MIN, ""),
|
circuit.connect(light0.b, light1.a);
|
||||||
new Wire(light2.a, battery0.minus, RESISTANCE_MIN, ""),
|
circuit.connect(light1.b, battery1.plus);
|
||||||
new Wire(light2.b, battery1.plus, RESISTANCE_MIN, ""),
|
circuit.connect(battery0.plus, battery1.minus);
|
||||||
],
|
circuit.connect(light2.a, battery0.minus);
|
||||||
);
|
circuit.connect(light2.b, battery1.plus);
|
||||||
|
return circuit;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,28 +1,22 @@
|
|||||||
import {Circuit} from "./Circuit";
|
import {Circuit} from "./Circuit";
|
||||||
import {Battery} from '../parts/battery/Battery';
|
|
||||||
import {Light} from '../parts/light/Light';
|
|
||||||
import {Wire} from '../wire/Wire';
|
|
||||||
import {RESISTANCE_MIN} from './Calculation';
|
|
||||||
import {Relay} from '../parts/relay/Relay';
|
|
||||||
|
|
||||||
const batteryLight = new Battery(1, 1, "Licht Batterie");
|
export const DEMO_003 = create();
|
||||||
|
|
||||||
const light = new Light(2, 1, "Licht");
|
function create() {
|
||||||
|
const circuit = new Circuit("DEMO_003", "3. Relais");
|
||||||
const relay = new Relay(1, 2, "Relais");
|
const batteryLight = circuit.newBattery(2, 0, "Licht Batterie");
|
||||||
|
const lightInactive = circuit.newLight(2, 1, "Licht Inaktiv");
|
||||||
const batteryRelay = new Battery(1, 3, "Relais Batterie");
|
const lightActive = circuit.newLight(3, 2, "Licht Aktiv");
|
||||||
|
const relay = circuit.newRelay(1, 2, "Relais");
|
||||||
export const DEMO_003 = new Circuit(
|
const relaySwitch = circuit.newSwitch(0, 3, "Taster", true);
|
||||||
"DEMO_003",
|
const batteryRelay = circuit.newBattery(1, 4, "Relais Batterie");
|
||||||
"3. Relais",
|
circuit.connect(batteryLight.plus, lightActive.b);
|
||||||
[batteryRelay, relay, batteryLight, light],
|
circuit.connect(batteryLight.plus, lightInactive.b);
|
||||||
[
|
circuit.connect(batteryLight.minus, relay.common);
|
||||||
new Wire(batteryLight.plus, light.a, RESISTANCE_MIN, ""),
|
circuit.connect(lightInactive.a, relay.inactive);
|
||||||
new Wire(batteryLight.minus, relay.common, RESISTANCE_MIN, ""),
|
circuit.connect(lightActive.a, relay.active);
|
||||||
new Wire(light.b, relay.active, RESISTANCE_MIN, ""),
|
circuit.connect(batteryRelay.minus, relaySwitch.common);
|
||||||
|
circuit.connect(relaySwitch.active, relay.coilA);
|
||||||
new Wire(batteryRelay.minus, relay.coilA, RESISTANCE_MIN, ""),
|
circuit.connect(batteryRelay.plus, relay.coilB);
|
||||||
new Wire(batteryRelay.plus, relay.coilB, RESISTANCE_MIN, ""),
|
return circuit;
|
||||||
],
|
}
|
||||||
);
|
|
||||||
|
|||||||
@ -1,8 +1,5 @@
|
|||||||
import {Point} from '../Point';
|
import {Point} from '../Point';
|
||||||
import {Part, RASTER} from '../parts/Part';
|
import {Part, RASTER} from '../parts/Part';
|
||||||
import {Battery} from '../parts/battery/Battery';
|
|
||||||
import {Light} from '../parts/light/Light';
|
|
||||||
import {Relay} from '../parts/relay/Relay';
|
|
||||||
import {Circuit} from './Circuit';
|
import {Circuit} from './Circuit';
|
||||||
|
|
||||||
export class Parts {
|
export class Parts {
|
||||||
@ -42,33 +39,4 @@ export class Parts {
|
|||||||
this.dragCursor = Point.fromEvent($event);
|
this.dragCursor = Point.fromEvent($event);
|
||||||
}
|
}
|
||||||
|
|
||||||
newBattery(rasterX: number, rasterY: number): Battery {
|
|
||||||
return this.add(new Battery(rasterX, rasterY, this.generateName("Batterie")));
|
|
||||||
}
|
|
||||||
|
|
||||||
newLight(rasterX: number, rasterY: number): Light {
|
|
||||||
return this.add(new Light(rasterX, rasterY, this.generateName("Licht")));
|
|
||||||
}
|
|
||||||
|
|
||||||
newRelay(rasterX: number, rasterY: number): Relay {
|
|
||||||
return this.add(new Relay(rasterX, rasterY, this.generateName("Relais")));
|
|
||||||
}
|
|
||||||
|
|
||||||
private generateName(baseName: string) {
|
|
||||||
let counter = 1;
|
|
||||||
let name: string;
|
|
||||||
while (true) {
|
|
||||||
name = `${baseName} #${counter++}`;
|
|
||||||
if (!this.circuit.parts.some(p => p.name === name)) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
private add<T extends Part>(part: T): T {
|
|
||||||
this.circuit.parts.push(part);
|
|
||||||
return part;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import {Point} from '../Point';
|
import {Point} from '../Point';
|
||||||
import {Junction} from '../junction/Junction';
|
import {Junction} from '../junction/Junction';
|
||||||
import {Wire} from '../wire/Wire';
|
|
||||||
import {MessageService} from '../message/message.service';
|
import {MessageService} from '../message/message.service';
|
||||||
|
|
||||||
import {Circuit} from './Circuit';
|
import {Circuit} from './Circuit';
|
||||||
@ -68,7 +67,15 @@ export class Wires {
|
|||||||
this.updateDragCursor($event);
|
this.updateDragCursor($event);
|
||||||
if ($event.button === 0) {
|
if ($event.button === 0) {
|
||||||
if (this.dragStartJunction !== null && this.dragEndJunction !== null) {
|
if (this.dragStartJunction !== null && this.dragEndJunction !== null) {
|
||||||
this.connect(this.dragStartJunction, this.dragEndJunction);
|
if (this.dragStartJunction !== this.dragEndJunction) {
|
||||||
|
if (!this.dragEndDuplicate) {
|
||||||
|
this.circuit.connect(this.dragStartJunction, this.dragEndJunction);
|
||||||
|
} else {
|
||||||
|
this.messageService.warn("Diese Verbindung existiert bereits.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log("Not connecting junction with itself.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.dragReset();
|
this.dragReset();
|
||||||
}
|
}
|
||||||
@ -90,26 +97,4 @@ export class Wires {
|
|||||||
this.dragEndDuplicate = false;
|
this.dragEndDuplicate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(start: Junction, end: Junction) {
|
|
||||||
if (start === end) {
|
|
||||||
console.log("Not connecting junction with itself.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this.dragEndDuplicate) {
|
|
||||||
this.messageService.warn("Diese Verbindung existiert bereits.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const wire = new Wire(start, end, 0);
|
|
||||||
this.circuit.wires.push(wire);
|
|
||||||
console.log(`Wire connected: ${wire}`);
|
|
||||||
this.circuit.calculate();
|
|
||||||
}
|
|
||||||
|
|
||||||
disconnect(wire: Wire) {
|
|
||||||
this.circuit.wires.splice(this.circuit.wires.indexOf(wire), 1);
|
|
||||||
wire.disconnect();
|
|
||||||
console.log("Wire disconnected: ", wire);
|
|
||||||
this.circuit.calculate();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import {PartType} from './PartType';
|
|
||||||
import {Junction} from '../junction/Junction';
|
import {Junction} from '../junction/Junction';
|
||||||
|
import {Circuit} from '../circuit/Circuit';
|
||||||
|
import {PartType} from './PartType';
|
||||||
|
|
||||||
export const RASTER = 50;
|
export const RASTER = 50;
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ export abstract class Part {
|
|||||||
private readonly _h: number;
|
private readonly _h: number;
|
||||||
|
|
||||||
protected constructor(
|
protected constructor(
|
||||||
|
readonly circuit: Circuit,
|
||||||
readonly type: PartType,
|
readonly type: PartType,
|
||||||
readonly name: string,
|
readonly name: string,
|
||||||
rasterX: number,
|
rasterX: number,
|
||||||
@ -74,6 +76,14 @@ export abstract class Part {
|
|||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mouseDown() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseUp() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
abstract get junctions(): Junction[];
|
abstract get junctions(): Junction[];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
export enum PartType {
|
export enum PartType {
|
||||||
Battery = 'Battery',
|
Battery = 'Battery',
|
||||||
Light = 'Light',
|
Light = 'Light',
|
||||||
|
Relay = 'Relay',
|
||||||
|
Switch = 'Switch',
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import {Junction} from '../../junction/Junction';
|
|||||||
import {PartType} from '../PartType';
|
import {PartType} from '../PartType';
|
||||||
import {siPrefix} from '../../siPrefix';
|
import {siPrefix} from '../../siPrefix';
|
||||||
import {Wire} from '../../wire/Wire';
|
import {Wire} from '../../wire/Wire';
|
||||||
|
import {Circuit} from '../../circuit/Circuit';
|
||||||
|
|
||||||
export class Battery extends Part {
|
export class Battery extends Part {
|
||||||
|
|
||||||
@ -11,13 +12,14 @@ export class Battery extends Part {
|
|||||||
readonly plus: Junction = new Junction(this, 85, 50, "+");
|
readonly plus: Junction = new Junction(this, 85, 50, "+");
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
circuit: Circuit,
|
||||||
rasterX: number,
|
rasterX: number,
|
||||||
rasterY: number,
|
rasterY: number,
|
||||||
name: string,
|
name: string,
|
||||||
public voltage: number = 3,
|
public voltage: number,
|
||||||
public resistance: number = 0.5,
|
public resistance: number,
|
||||||
) {
|
) {
|
||||||
super(PartType.Battery, name, rasterX, rasterY);
|
super(circuit, PartType.Battery, name, rasterX, rasterY);
|
||||||
new Wire(this.minus, this.plus, resistance, "Innenwiderstand");
|
new Wire(this.minus, this.plus, resistance, "Innenwiderstand");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import {siPrefix} from '../../siPrefix';
|
|||||||
|
|
||||||
import {fadeColor} from '../../colorHelpers';
|
import {fadeColor} from '../../colorHelpers';
|
||||||
import {Wire} from '../../wire/Wire';
|
import {Wire} from '../../wire/Wire';
|
||||||
|
import {Circuit} from '../../circuit/Circuit';
|
||||||
|
|
||||||
export class Light extends Part {
|
export class Light extends Part {
|
||||||
|
|
||||||
@ -13,13 +14,14 @@ export class Light extends Part {
|
|||||||
readonly b = new Junction(this, 85, 50, "B");
|
readonly b = new Junction(this, 85, 50, "B");
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
circuit: Circuit,
|
||||||
rasterX: number,
|
rasterX: number,
|
||||||
rasterY: number,
|
rasterY: number,
|
||||||
name: string,
|
name: string,
|
||||||
public voltageMax: number = 3,
|
public voltageMax: number,
|
||||||
public resistance: number = 100,
|
public resistance: number,
|
||||||
) {
|
) {
|
||||||
super(PartType.Light, name, rasterX, rasterY);
|
super(circuit, PartType.Light, name, rasterX, rasterY);
|
||||||
new Wire(this.a, this.b, resistance, "Glühdraht");
|
new Wire(this.a, this.b, resistance, "Glühdraht");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
(mousedown)="parts.mouseDown(part, $event)"
|
(mousedown)="parts.mouseDown(part, $event)"
|
||||||
>
|
>
|
||||||
|
|
||||||
<rect class="background" height="100%" width="100%" x="0" y="0"></rect>
|
<rect class="background" height="100%" width="100%" x="0" y="0" (mousedown)="part.mouseDown()" (mouseup)="part.mouseUp()"></rect>
|
||||||
|
|
||||||
<g inner-part-battery *ngIf="isBattery(part)" [battery]="asBattery(part)"></g>
|
<g inner-part-battery *ngIf="isBattery(part)" [battery]="asBattery(part)"></g>
|
||||||
|
|
||||||
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
<g inner-part-relay *ngIf="isRelay(part)" [relay]="asRelay(part)"></g>
|
<g inner-part-relay *ngIf="isRelay(part)" [relay]="asRelay(part)"></g>
|
||||||
|
|
||||||
|
<g inner-part-switch *ngIf="isSwitch(part)" [switch]="asSwitch(part)"></g>
|
||||||
|
|
||||||
<g inner-junction *ngFor="let junction of part.junctions" [junction]="junction" [wires]="wires"></g>
|
<g inner-junction *ngFor="let junction of part.junctions" [junction]="junction" [wires]="wires"></g>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 831 B |
@ -10,6 +10,8 @@ import {LightComponent} from './light/light.component';
|
|||||||
import {JunctionComponent} from '../junction/junction.component';
|
import {JunctionComponent} from '../junction/junction.component';
|
||||||
import {Relay} from './relay/Relay';
|
import {Relay} from './relay/Relay';
|
||||||
import {RelayComponent} from './relay/relay.component';
|
import {RelayComponent} from './relay/relay.component';
|
||||||
|
import {SwitchComponent} from './switch/switch.component';
|
||||||
|
import {Switch} from './switch/Switch';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'g[inner-part]',
|
selector: 'g[inner-part]',
|
||||||
@ -19,7 +21,8 @@ import {RelayComponent} from './relay/relay.component';
|
|||||||
NgForOf,
|
NgForOf,
|
||||||
LightComponent,
|
LightComponent,
|
||||||
JunctionComponent,
|
JunctionComponent,
|
||||||
RelayComponent
|
RelayComponent,
|
||||||
|
SwitchComponent
|
||||||
],
|
],
|
||||||
templateUrl: './part.component.svg',
|
templateUrl: './part.component.svg',
|
||||||
styleUrl: './part.component.less',
|
styleUrl: './part.component.less',
|
||||||
@ -59,4 +62,12 @@ export class PartComponent {
|
|||||||
return part instanceof Relay;
|
return part instanceof Relay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asSwitch(part: Part): Switch {
|
||||||
|
return part as Switch;
|
||||||
|
}
|
||||||
|
|
||||||
|
isSwitch(part: Part): boolean {
|
||||||
|
return part instanceof Switch;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import {PartType} from '../PartType';
|
|||||||
import {siPrefix} from '../../siPrefix';
|
import {siPrefix} from '../../siPrefix';
|
||||||
import {Wire} from '../../wire/Wire';
|
import {Wire} from '../../wire/Wire';
|
||||||
import {RESISTANCE_MIN} from '../../circuit/Calculation';
|
import {RESISTANCE_MIN} from '../../circuit/Calculation';
|
||||||
|
import {Circuit} from '../../circuit/Circuit';
|
||||||
|
|
||||||
export class Relay extends Part {
|
export class Relay extends Part {
|
||||||
|
|
||||||
@ -22,14 +23,15 @@ export class Relay extends Part {
|
|||||||
contact: Wire = new Wire(this.common, this.inactive, RESISTANCE_MIN, "Schaltkontakt");
|
contact: Wire = new Wire(this.common, this.inactive, RESISTANCE_MIN, "Schaltkontakt");
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
circuit: Circuit,
|
||||||
rasterX: number,
|
rasterX: number,
|
||||||
rasterY: number,
|
rasterY: number,
|
||||||
name: string,
|
name: string,
|
||||||
public voltageMin: number = 1.5,
|
public voltageMin: number,
|
||||||
public voltageMax: number = 3,
|
public voltageMax: number,
|
||||||
public resistance: number = 150,
|
public resistance: number,
|
||||||
) {
|
) {
|
||||||
super(PartType.Light, name, rasterX, rasterY);
|
super(circuit, PartType.Relay, name, rasterX, rasterY);
|
||||||
this.coil = new Wire(this.coilA, this.coilB, resistance, "Spule");
|
this.coil = new Wire(this.coilA, this.coilB, resistance, "Spule");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,6 @@
|
|||||||
[attr.x2]="50 + '%'"
|
[attr.x2]="50 + '%'"
|
||||||
[attr.y2]="65 + '%'"
|
[attr.y2]="65 + '%'"
|
||||||
></line>
|
></line>
|
||||||
<g inner-wire [partWire]="relay.contact"></g>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container *ngIf="relay.isCoilActive">
|
<ng-container *ngIf="relay.isCoilActive">
|
||||||
@ -20,9 +19,10 @@
|
|||||||
[attr.x2]="50 + '%'"
|
[attr.x2]="50 + '%'"
|
||||||
[attr.y2]="65 + '%'"
|
[attr.y2]="65 + '%'"
|
||||||
></line>
|
></line>
|
||||||
<g inner-wire [partWire]="relay.contact"></g>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
<g inner-wire [partWire]="relay.contact"></g>
|
||||||
|
|
||||||
<g inner-wire [partWire]="relay.coil" extraClassesBack="partWireBack"></g>
|
<g inner-wire [partWire]="relay.coil" extraClassesBack="partWireBack"></g>
|
||||||
|
|
||||||
<rect class="coil" [class.coilActive]="relay.isCoilActive" [class.defect]="relay.defect" x="40%" y="65%" width="20%" height="30%"></rect>
|
<rect class="coil" [class.coilActive]="relay.isCoilActive" [class.defect]="relay.defect" x="40%" y="65%" width="20%" height="30%"></rect>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 975 B |
@ -1,6 +1,5 @@
|
|||||||
import {Component, Input} from '@angular/core';
|
import {Component, Input} from '@angular/core';
|
||||||
import {Relay} from './Relay';
|
import {Relay} from './Relay';
|
||||||
import {JUNCTION_RADIUS_PERCENT} from '../../junction/Junction';
|
|
||||||
import {NgIf} from '@angular/common';
|
import {NgIf} from '@angular/common';
|
||||||
import {WireComponent} from '../../part-wire/wire.component';
|
import {WireComponent} from '../../part-wire/wire.component';
|
||||||
|
|
||||||
@ -18,6 +17,4 @@ export class RelayComponent {
|
|||||||
@Input()
|
@Input()
|
||||||
relay!: Relay;
|
relay!: Relay;
|
||||||
|
|
||||||
protected readonly JUNCTION_RADIUS_PERCENT = JUNCTION_RADIUS_PERCENT;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
66
src/main/angular/src/app/editor/parts/switch/Switch.ts
Normal file
66
src/main/angular/src/app/editor/parts/switch/Switch.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import {Part} from "../Part";
|
||||||
|
import {Junction} from '../../junction/Junction';
|
||||||
|
import {PartType} from '../PartType';
|
||||||
|
import {Wire} from '../../wire/Wire';
|
||||||
|
import {RESISTANCE_MIN} from '../../circuit/Calculation';
|
||||||
|
import {Circuit} from '../../circuit/Circuit';
|
||||||
|
|
||||||
|
export class Switch extends Part {
|
||||||
|
|
||||||
|
readonly common = new Junction(this, 15, 50, "COM");
|
||||||
|
|
||||||
|
readonly active = new Junction(this, 85, 50, "NO");
|
||||||
|
|
||||||
|
readonly inactive = new Junction(this, 85, 15, "NC");
|
||||||
|
|
||||||
|
contact: Wire = new Wire(this.common, this.inactive, RESISTANCE_MIN, "Schaltkontakt");
|
||||||
|
|
||||||
|
isActive: boolean = false;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
circuit: Circuit,
|
||||||
|
rasterX: number,
|
||||||
|
rasterY: number,
|
||||||
|
name: string,
|
||||||
|
readonly momentary: boolean,
|
||||||
|
) {
|
||||||
|
super(circuit, PartType.Switch, name, rasterX, rasterY);
|
||||||
|
}
|
||||||
|
|
||||||
|
override get junctions(): Junction[] {
|
||||||
|
return [this.common, this.active, this.inactive];
|
||||||
|
}
|
||||||
|
|
||||||
|
override resetCalculations2() {
|
||||||
|
this.contact.resetCalculations();
|
||||||
|
}
|
||||||
|
|
||||||
|
override mouseDown() {
|
||||||
|
if (this.momentary) {
|
||||||
|
this.setIsActive(true);
|
||||||
|
} else {
|
||||||
|
this.setIsActive(!this.isActive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override mouseUp() {
|
||||||
|
if (this.momentary) {
|
||||||
|
this.setIsActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setIsActive(isActive: boolean) {
|
||||||
|
if (this.isActive === isActive) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.isActive = isActive;
|
||||||
|
this.contact.disconnect();
|
||||||
|
if (this.isActive) {
|
||||||
|
this.contact = new Wire(this.common, this.active, RESISTANCE_MIN, "Schaltkontakt (Aktiv)");
|
||||||
|
} else {
|
||||||
|
this.contact = new Wire(this.common, this.inactive, RESISTANCE_MIN, "Schaltkontakt (Inaktiv)");
|
||||||
|
}
|
||||||
|
this.circuit.calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
@import "../part.component.less";
|
||||||
|
|
||||||
|
.defect {
|
||||||
|
filter: drop-shadow(0 0 30px black);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mechanic {
|
||||||
|
stroke-width: 3px;
|
||||||
|
stroke: dimgray;
|
||||||
|
stroke-dasharray: 5 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coil {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 1px;
|
||||||
|
fill: darkgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coilActive {
|
||||||
|
fill: dodgerblue;
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="100%" height="100%">
|
||||||
|
<g inner-wire [partWire]="switch.contact"></g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 89 B |
@ -0,0 +1,18 @@
|
|||||||
|
import {Component, Input} from '@angular/core';
|
||||||
|
import {Switch} from './Switch';
|
||||||
|
import {WireComponent} from '../../part-wire/wire.component';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'g[inner-part-switch]',
|
||||||
|
imports: [
|
||||||
|
WireComponent
|
||||||
|
],
|
||||||
|
templateUrl: './switch.component.svg',
|
||||||
|
styleUrl: './switch.component.less',
|
||||||
|
})
|
||||||
|
export class SwitchComponent {
|
||||||
|
|
||||||
|
@Input()
|
||||||
|
switch!: Switch;
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user