def mre(self, event): # функция отпускания мыши im_width, im_height = int(self.im.size[0]), int( self.im.size[1]) # ширина и высота изображения gv_width = list(QRect.getRect(self.ui.graphicsView.geometry()))[ 2] # ширина обозревателя graphicsView gv_height = list(QRect.getRect(self.ui.graphicsView.geometry()))[ 3] # высота обозревателя graphicsView self.rect = self.rubberBand.geometry() self.coords = list(QRect.getCoords( self.rect)) # координаты выделенного прямоугольника self.coords[2] = self.borders(self.coords[2], gv_width) self.coords[3] = self.borders(self.coords[3], gv_height) c = self.coords self.rubberBand.hide() # скрыть прямоугольник self.ui.label_7.setText("select coords: {} ".format(str(self.coords))) scr_v = int(self.ui.graphicsView.verticalScrollBar().sliderPosition() ) # позиция вертикального скрола scr_h = int(self.ui.graphicsView.horizontalScrollBar().sliderPosition( )) # позиция горизонтального скрола self.real_coords = [ c[0] + scr_h, c[1] + scr_v, c[2] + scr_h, c[3] + scr_v ] # реальные координаты self.real_coords[2] = self.borders(self.real_coords[2], im_width) self.real_coords[3] = self.borders(self.real_coords[3], im_height) self.ui.label_8.setText("real coords: {} ".format(str( self.real_coords)))
class Objekt(): def __init__(self, form): # self.velocity = 0 self.mass = 500 self.radius = round(self.mass / 20) self.position = (30, 30) if form == "Rechteck": self.velocity = (0, 0) self.rect = QRect(self.position[0], self.position[1], self.radius, self.radius) self.vec_x = 30 self.vec_y = 30 self.force = 0 self.gforce = (0, 0) def gravitation(self, obj, gkonst): vector = mathe.normalize( (obj.vec_x - self.vec_x, obj.vec_y - self.vec_y)) try: gforce = vector * abs(gkonst * (self.mass * obj.mass) / math.sqrt((self.vec_x - obj.vec_x)**2 + (self.vec_y - obj.vec_y)**2)) except: gforce = (0, 0) vector = (vector[0] * gforce, vector[1] * gforce) # print(mathe.normalize(vector),",",self) # print(self, " ", "x:", mathe.normalize(vector)[0], "y: ", mathe.normalize(vector)[1]) return (vector, gforce) def check_size(self): self.rect = QRect(self.rect.getCoords()[0], self.rect.getCoords()[1], self.radius, self.radius) def check_forces(self): self.force = self.gforce # addition aller wirkenden kräfte (als vector!) def check_vel(self): # print(self.force, " check_vel") self.velocity = (self.velocity[0] + self.force[0] / self.mass, self.velocity[1] + self.force[1] / self.mass ) # v = a*t a = F/m def changepos(self): current_coords = self.position # !gibt nur INTs aus. Unterscheide zwischen Pixel und Koordinaten! # print(current_coords[0]) self.vec_x = current_coords[0] + self.velocity[0] self.vec_y = current_coords[1] + self.velocity[1] self.position = (self.vec_x, self.vec_y) # print(self, " ", "x:", self.vec_x, "y: ", self.vec_y, "vec_x:", self.direction[0], "vec_y:", self.direction[1], "vel", self.velocity, "cur: ", current_coords) def draw(self): try: # print(round(self.vec_x, 0)) self.rect.moveTo(round((self.vec_x)), round(float(self.vec_y))) except: pass def update(self): self.check_forces() self.check_vel() self.changepos() self.draw() self.check_size()
def _setRect(self, selection: QRect, do_emit=True): self.selection = selection l,t,r,b = selection.getCoords() self.lbl.setText(f'From ({l},{t}) to ({r},{b})') if do_emit: self.selectionChanged.emit()