def add_dc_line(self, branch: DcLine): """ Add branch to the schematic :param branch: Branch object """ terminal_from = branch.bus_from.graphic_obj.terminal terminal_to = branch.bus_to.graphic_obj.terminal graphic_obj = DcLineGraphicItem(terminal_from, terminal_to, self.diagramScene, branch=branch) graphic_obj.diagramScene.circuit = self.circuit # add pointer to the circuit terminal_from.hosting_connections.append(graphic_obj) terminal_to.hosting_connections.append(graphic_obj) graphic_obj.redraw() branch.graphic_obj = graphic_obj
def add_api_dc_line(self, branch: DcLine): """ add API branch to the Scene :param branch: Branch instance """ terminal_from = branch.bus_from.graphic_obj.terminal terminal_to = branch.bus_to.graphic_obj.terminal graphic_obj = DcLineGraphicItem(terminal_from, terminal_to, self.diagramScene, branch=branch) graphic_obj.diagramScene.circuit = self.circuit # add pointer to the circuit terminal_from.hosting_connections.append(graphic_obj) terminal_to.hosting_connections.append(graphic_obj) graphic_obj.redraw() return graphic_obj
def scene_mouse_release_event(self, event): """ Finalize the branch creation if its drawing ends in a terminal @param event: @return: """ # Clear or finnish the started connection: if self.started_branch: pos = event.scenePos() items = self.diagramScene.items(pos) # get the item (the terminal) at the mouse position for item in items: if type(item) is TerminalItem: # connect only to terminals if item.parent is not self.started_branch.fromPort.parent: # forbid connecting to itself self.started_branch.setToPort(item) item.hosting_connections.append(self.started_branch) self.started_branch.bus_to = item.parent if self.started_branch.bus_from.api_object.is_dc != self.started_branch.bus_to.api_object.is_dc: # different DC status -> VSC name = 'VSC ' + str(len(self.circuit.vsc_devices) + 1) obj = VSC(bus_from=self.started_branch.bus_from.api_object, bus_to=self.started_branch.bus_to.api_object, name=name) obj.graphic_obj = VscGraphicItem(fromPort=self.started_branch.fromPort, toPort=self.started_branch.toPort, diagramScene=self.diagramScene, branch=obj) elif self.started_branch.bus_from.api_object.is_dc and self.started_branch.bus_to.api_object.is_dc: # both buses are DC name = 'Dc line ' + str(len(self.circuit.dc_lines) + 1) obj = DcLine(bus_from=self.started_branch.bus_from.api_object, bus_to=self.started_branch.bus_to.api_object, name=name) obj.graphic_obj = DcLineGraphicItem(fromPort=self.started_branch.fromPort, toPort=self.started_branch.toPort, diagramScene=self.diagramScene, branch=obj) else: # Same DC status -> line / trafo v1 = self.started_branch.bus_from.api_object.Vnom v2 = self.started_branch.bus_to.api_object.Vnom if abs(v1 - v2) > 1.0: name = 'Transformer ' + str(len(self.circuit.transformers2w) + 1) obj = Transformer2W(bus_from=self.started_branch.bus_from.api_object, bus_to=self.started_branch.bus_to.api_object, name=name) obj.graphic_obj = TransformerGraphicItem(fromPort=self.started_branch.fromPort, toPort=self.started_branch.toPort, diagramScene=self.diagramScene, branch=obj) else: name = 'Line ' + str(len(self.circuit.lines) + 1) obj = Line(bus_from=self.started_branch.bus_from.api_object, bus_to=self.started_branch.bus_to.api_object, name=name) obj.graphic_obj = LineGraphicItem(fromPort=self.started_branch.fromPort, toPort=self.started_branch.toPort, diagramScene=self.diagramScene, branch=obj) # add the new object to the circuit self.circuit.add_branch(obj) # update the connection placement obj.graphic_obj.fromPort.update() obj.graphic_obj.toPort.update() # set the connection placement obj.graphic_obj.setZValue(-1) # if self.started_branch.toPort is None: self.started_branch.remove_widget() # release this pointer self.started_branch = None