def _onMousePressed(self, _evt, _id): """Mouse button pressed event """ mstate = _evt.get_state() # self._createNode((mstate.X.abs, mstate.Y.abs)) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True) # * if pressed left button and there is any object under mouse, then # start move it if _id == ois.MB_Left: # check objects under mouse if self.state is SCgEditMode.ES_None: if self._ctrl: sheet = comutils._getFirstObjectTypeFromList(mobjects, [objects.ObjectSheet]) if sheet is not None: addr = sheet._getScAddr() kernel = core.Kernel.getSingleton() if sheet is not None and addr is not None and not kernel.haveOutputWindow(addr): kernel.addOutputWindow(sheet._getScAddr()) else: if len(mobjects) is not 0: self.move_obj = comutils._getFirstObjectTypeFromList(mobjects, [scg_objects.SCgNode, objects.ObjectSheet, scg_objects.SCgContour]) if self.move_obj is not None: self.state = SCgEditMode.ES_Move render_engine._gui_ignore_input_proc_result = True # selecting movable object self._selectObject(self.move_obj) return True # selecting first object under mouse self._selectObject(mobjects[0][1]) return True # * if pressed left button and there are no objects under mouse, then # creating new scg-node elif _id == ois.MB_Right: # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is 0: self._logic._createNode((mstate.X.abs, mstate.Y.abs)) self.state = SCgEditMode.ES_None return True else: if self.line_mode_beg is None: self.state = SCgEditMode.ES_LineCreate # setting begin object self.line_mode_beg = mobjects[0][1] self.line_mode_line.setBegin(self.line_mode_beg) self.line_mode_obj.setPosition(render_engine.pos2dTo3dIsoPos((mstate.X.abs, mstate.Y.abs))) # adding to scene sheet = self._logic._getSheet() render_engine.SceneNode.addChild(sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self._updateLineCreationObjects() return True # line creation state elif (self.state is SCgEditMode.ES_LineCreate) and (self.line_mode_beg is not None): # check if is there if len(mobjects) is not 0: self._logic._createPair(self.line_mode_beg, mobjects[0][1]) sheet = self._logic._getSheet() render_engine.SceneNode.removeChild(sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self.line_mode_line.setBegin(None) self.line_mode_beg = None self.state = SCgEditMode.ES_None return True elif _id == ois.MB_Middle: if self.state == SCgEditMode.ES_None: self.state = SCgEditMode.ES_Translate render_engine.Gui.setPointer("hand") return True if self._logic._getSheet().haveSelected() and self.state is SCgEditMode.ES_None: # removing selection from all nodes self._logic._getSheet().unselectAll() return True return False
def _onMousePressed(self, _evt, _id): """Event on mouse button pressed """ if BaseEditMode._onMousePressed(self, _evt, _id): return True mstate = _evt.get_state() original_mpos = (mstate.X.abs, mstate.Y.abs) mpos = self._getMousePos(mstate) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True, True, self.mouse_pos) if _id == ois.MB_Right: # none any mode if self.state is GeometryEditMode.ES_None: # creating point if there is no any objects under mouse if len(mobjects) is 0: obj = self._logic.createPoint(mpos) sheet = self._logic._getSheet() sheet.addChild(obj) return True else: # get line sections line = comutils._getFirstObjectTypeFromList(mobjects, [GeometryLineSection, GeometryCircle]) if line is not None: # create point point = self._logic.createPoint(original_mpos) sheet = self._logic._getSheet() sheet.addChild(point) # append it into line section line.addPoint(point, line._calculatePointRelPosition(render_engine.pos2dTo3dIsoPos(original_mpos))) self.objectInfoPanel.update() return True obj = comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) if obj is not None: self.state = GeometryEditMode.ES_LineCreate self.__lineSpirit.setBegin(obj) sheet = self._logic._getSheet() sheet.sceneNodeChilds.addChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.addChild(self.__pointSpirit.sceneNode) self.__lineBegin = obj self.__pointSpirit.setPosition(render_engine.pos2dTo3dIsoPos(mpos)) self._updateLineSpirits() self.objectInfoPanel.update() return True # on line creation mode finishing line elif self.state is GeometryEditMode.ES_LineCreate: obj = comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) sheet = self._logic._getSheet() if obj is not None: # creating line line = self._logic.createLineSection(self.__lineBegin, obj) sheet.addChild(line) # removing state self.state = GeometryEditMode.ES_None sheet.sceneNodeChilds.removeChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.removeChild(self.__pointSpirit.sceneNode) self.__lineBegin = None elif _id == ois.MB_Left: # if there is an any object under mouse, then starts moving if len(mobjects) > 0 and self.state is GeometryEditMode.ES_None: if self.candidate_object is not None and self.candidate_object._getSelected() and not self._shift: self._unselectObject(self.candidate_object) self._next_candidate() self.active_object = self.candidate_object#comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) if self.active_object is not None: self.state = GeometryEditMode.ES_Move self._selectObject(self.active_object) else: # selecting first object under mouse self._selectObject(mobjects[0][1]) return True elif self.state is GeometryEditMode.ES_CircleCreate: _point = comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) if _point is not None: self.active_object.setRadiusPoint(_point) self.active_object = None self.state = GeometryEditMode.ES_None return False
def _onMousePressed(self, _evt, _id): """Event on mouse button pressed """ if BaseEditMode._onMousePressed(self, _evt, _id): return True mstate = _evt.get_state() mpos = self._getMousePos(mstate) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True, True, self.mouse_pos) if _id == ois.MB_Right: # none any mode if self.state is GeometryEditMode.ES_None: # creating point if there is no any objects under mouse if len(mobjects) is 0: obj = self._logic.createPoint(mpos) sheet = self._logic._getSheet() sheet.addChild(obj) return True else: obj = comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) if obj is not None: self.state = GeometryEditMode.ES_LineCreate self.__lineSpirit.setBegin(obj) sheet = self._logic._getSheet() sheet.sceneNodeChilds.addChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.addChild(self.__pointSpirit.sceneNode) self.__lineBegin = obj self.__pointSpirit.setPosition(render_engine.pos2dTo3dIsoPos(mpos)) self._updateLineSpirits() return True # on line creation mode finishing line elif self.state is GeometryEditMode.ES_LineCreate: obj = comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) sheet = self._logic._getSheet() if obj is not None: # creating line line = self._logic.createLineSection(self.__lineBegin, obj) sheet.addChild(line) # removing state self.state = GeometryEditMode.ES_None sheet.sceneNodeChilds.removeChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.removeChild(self.__pointSpirit.sceneNode) self.__lineBegin = None elif _id == ois.MB_Left: # if there is an any object under mouse, then starts moving if len(mobjects) > 0 and self.state is GeometryEditMode.ES_None: self.active_object = comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) if self.active_object is not None: self.state = GeometryEditMode.ES_Move self._selectObject(self.active_object) else: # selecting first object under mouse self._selectObject(mobjects[0][1]) return True elif self.state is GeometryEditMode.ES_CircleCreate: self.active_object = None self.state = GeometryEditMode.ES_None return False
def _onMousePressed(self, _evt, _id): """Mouse button pressed event """ mstate = _evt.get_state() # self._createNode((mstate.X.abs, mstate.Y.abs)) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True) # * if pressed left button and there is any object under mouse, then # start move it if _id == ois.MB_Left: # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is not 0: self.move_obj = comutils._getFirstObjectTypeFromList( mobjects, [ scg_objects.SCgNode, objects.ObjectSheet, scg_objects.SCgContour ]) if self.move_obj is not None: self.state = SCgEditMode.ES_Move render_engine._gui_ignore_input_proc_result = True # selecting movable object self._selectObject(self.move_obj) return True # selecting first object under mouse self._selectObject(mobjects[0][1]) return True # * if pressed left button and there are no objects under mouse, then # creating new scg-node elif _id == ois.MB_Right: # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is 0: self._logic._createNode((mstate.X.abs, mstate.Y.abs)) self.state = SCgEditMode.ES_None return True else: if self.line_mode_beg is None: self.state = SCgEditMode.ES_LineCreate # setting begin object self.line_mode_beg = mobjects[0][1] self.line_mode_line.setBegin(self.line_mode_beg) self.line_mode_obj.setPosition( render_engine.pos2dTo3dIsoPos( (mstate.X.abs, mstate.Y.abs))) # adding to scene sheet = self._logic._getSheet() render_engine.SceneNode.addChild( sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self._updateLineCreationObjects() return True # line creation state elif (self.state is SCgEditMode.ES_LineCreate) and ( self.line_mode_beg is not None): # check if is there if len(mobjects) is not 0: self._logic._createPair(self.line_mode_beg, mobjects[0][1]) sheet = self._logic._getSheet() render_engine.SceneNode.removeChild( sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self.line_mode_line.setBegin(None) self.line_mode_beg = None self.state = SCgEditMode.ES_None return True elif _id == ois.MB_Middle: if self.state == SCgEditMode.ES_None: self.state = SCgEditMode.ES_Translate render_engine.Gui.setPointer("hand") return True if self._logic._getSheet().haveSelected( ) and self.state is SCgEditMode.ES_None: # removing selection from all nodes self._logic._getSheet().unselectAll() return True return False
def _onMousePressed(self, _evt, _id): """Event on mouse button pressed """ if BaseEditMode._onMousePressed(self, _evt, _id): return True mstate = _evt.get_state() mpos = self._getMousePos(mstate) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True, True, self.mouse_pos) if _id == ois.MB_Right: # none any mode if self.state is GraphEditMode.ES_None: # creating point if there is no any objects under mouse if len(mobjects) is 0: obj = self._logic.createVertex(mpos) sheet = self._logic._getSheet() sheet.addChild(obj) return True else: obj = comutils._getFirstObjectTypeFromList(mobjects, [GraphVertex]) if obj is not None: self.state = GraphEditMode.ES_LineCreate self.__lineSpirit.setBegin(obj) sheet = self._logic._getSheet() sheet.sceneNodeChilds.addChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.addChild(self.__pointSpirit.sceneNode) self.__lineBegin = obj self.__pointSpirit.setPosition(render_engine.pos2dTo3dIsoPos(mpos)) self._updateLineSpirits() return True # on line creation mode finishing line elif self.state is GraphEditMode.ES_LineCreate: obj = comutils._getFirstObjectTypeFromList(mobjects, [GraphVertex]) sheet = self._logic._getSheet() if obj is not None: # creating line line = self._logic.createLink(self.__lineBegin, obj) sheet.addChild(line) # removing state self.state = GraphEditMode.ES_None sheet.sceneNodeChilds.removeChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.removeChild(self.__pointSpirit.sceneNode) self.__lineBegin = None elif _id == ois.MB_Left: # if there is an any object under mouse, then starts moving if len(mobjects) > 0 and self.state is GraphEditMode.ES_None: self.active_object = comutils._getFirstObjectTypeFromList(mobjects, [GraphVertex]) if self.active_object is not None: self.state = GraphEditMode.ES_Move self._selectObject(self.active_object) else: # selecting first object under mouse self.active_object = comutils._getFirstObjectTypeFromList(mobjects, [GraphLink]) self._selectObject(mobjects[0][1]) return True return False
def _onMousePressed(self, _evt, _id): """Event on mouse button pressed """ if BaseEditMode._onMousePressed(self, _evt, _id): return True mstate = _evt.get_state() original_mpos = (mstate.X.abs, mstate.Y.abs) mpos = self._getMousePos(mstate) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse( True, True, self.mouse_pos) if _id == ois.MB_Right: # none any mode if self.state is GeometryEditMode.ES_None: # creating point if there is no any objects under mouse if len(mobjects) is 0: obj = self._logic.createPoint(mpos) sheet = self._logic._getSheet() sheet.addChild(obj) return True else: # get line sections line = comutils._getFirstObjectTypeFromList( mobjects, [GeometryLineSection, GeometryCircle]) if line is not None: # create point point = self._logic.createPoint(original_mpos) sheet = self._logic._getSheet() sheet.addChild(point) # append it into line section line.addPoint( point, line._calculatePointRelPosition( render_engine.pos2dTo3dIsoPos(original_mpos))) self.objectInfoPanel.update() return True obj = comutils._getFirstObjectTypeFromList( mobjects, [GeometryPoint]) if obj is not None: self.state = GeometryEditMode.ES_LineCreate self.__lineSpirit.setBegin(obj) sheet = self._logic._getSheet() sheet.sceneNodeChilds.addChild( self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.addChild( self.__pointSpirit.sceneNode) self.__lineBegin = obj self.__pointSpirit.setPosition( render_engine.pos2dTo3dIsoPos(mpos)) self._updateLineSpirits() self.objectInfoPanel.update() return True # on line creation mode finishing line elif self.state is GeometryEditMode.ES_LineCreate: obj = comutils._getFirstObjectTypeFromList( mobjects, [GeometryPoint]) sheet = self._logic._getSheet() if obj is not None: # creating line line = self._logic.createLineSection(self.__lineBegin, obj) sheet.addChild(line) # removing state self.state = GeometryEditMode.ES_None sheet.sceneNodeChilds.removeChild(self.__lineSpirit.sceneNode) sheet.sceneNodeChilds.removeChild(self.__pointSpirit.sceneNode) self.__lineBegin = None elif _id == ois.MB_Left: # if there is an any object under mouse, then starts moving if len(mobjects) > 0 and self.state is GeometryEditMode.ES_None: if self.candidate_object is not None and self.candidate_object._getSelected( ) and not self._shift: self._unselectObject(self.candidate_object) self._next_candidate() self.active_object = self.candidate_object #comutils._getFirstObjectTypeFromList(mobjects, [GeometryPoint]) if self.active_object is not None: self.state = GeometryEditMode.ES_Move self._selectObject(self.active_object) else: # selecting first object under mouse self._selectObject(mobjects[0][1]) return True elif self.state is GeometryEditMode.ES_CircleCreate: _point = comutils._getFirstObjectTypeFromList( mobjects, [GeometryPoint]) if _point is not None: self.active_object.setRadiusPoint(_point) self.active_object = None self.state = GeometryEditMode.ES_None return False
def _onKeyPressed(self, _evt): """Event on key pressed """ if BaseEditMode._onKeyPressed(self, _evt): return True key = _evt.key if key == ois.KC_C: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createCircle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_A: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createAngle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_T: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createTriangle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_Q: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createQuadrangle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_L: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(selected[0], (GeometryLineSection, GeometryCircle)): self.state = GeometryEditMode.ES_LengthChange self.length_changer = TextInput(obj, self._length_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropLength)) if key == ois.KC_E: selected = self._logic._getSheet().getSelected() if len(selected) == 2: if isinstance(selected[0], selected[1].__class__): selected[0].setEqualTo(selected[1]) if self.objectInfoPanel.getObject() is selected[0] or self.objectInfoPanel.getObject() is selected[1]: self.objectInfoPanel.update() if key == ois.KC_S: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(obj, (GeometryCircle, GeometryTriangle, GeometryQuadrangle)): self.state = GeometryEditMode.ES_SquareChange self.square_changer = TextInput(obj, self._square_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropSquare)) if key == ois.KC_P: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(obj, (GeometryTriangle, GeometryQuadrangle)): self.state = GeometryEditMode.ES_PerimeterChange self.perimetr_changer = TextInput(obj, self._perimeter_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropPerimeter)) if key == ois.KC_V: selected = self._logic._getSheet().getSelected() for obj in selected: if isinstance(obj, (GeometryTriangle)): incirclePoints = obj._calculateIncirclePoints() # create center point incenterPointCoord = incirclePoints[0] incenter = self._logic.createPoint(incenterPointCoord) sheet = self._logic._getSheet() sheet.addChild(incenter) incenter._updateView() # create tangent point tangentPointCoord = incirclePoints[1] # get tangent point base side line sideObjects = self._logic._getSheet()._getObjectsUnderMouse(True, True, tangentPointCoord) line = comutils._getFirstObjectTypeFromList(sideObjects, [GeometryLineSection]) tangent = self._logic.createPoint(tangentPointCoord) sheet = self._logic._getSheet() sheet.addChild(tangent) tangent._updateView() _selected = incenter, tangent obj._setIncenterPoints(_selected) # draw incircle self.active_object = self._logic.createCircle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) obj._setIsIncircleDrawed(True) else: self.active_object.delete() self.active_object = None return False
def _onMousePressed(self, _evt, _id): """Mouse button pressed event """ mstate = _evt.get_state() # self._createNode((mstate.X.abs, mstate.Y.abs)) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True) # * if pressed left button and there is any object under mouse, then # start move it if _id == ois.MB_Left: # check objects under mouse if self.state is SCgEditMode.ES_None: if self._ctrl: sheet = comutils._getFirstObjectTypeFromList(mobjects, [objects.ObjectSheet]) if sheet is not None: addr = sheet._getScAddr() kernel = core.Kernel.getSingleton() if sheet is not None and addr is not None and not kernel.haveOutputWindow(addr): kernel.addOutputWindow(sheet._getScAddr()) else: if len(mobjects) is not 0: self.move_obj = comutils._getFirstObjectTypeFromList(mobjects, [scg_objects.SCgNode, objects.ObjectSheet, scg_objects.SCgContour]) if self.move_obj is not None: self.state = SCgEditMode.ES_Move render_engine._gui_ignore_input_proc_result = True # selecting movable object self._selectObject(self.move_obj) return True # selecting first object under mouse self._selectObject(mobjects[0][1]) return True # * if pressed left button and there are no objects under mouse, then # creating new scg-node elif _id == ois.MB_Right: #check if modifire key pressed is_modifire_down = render_engine._oisKeyboard.isModifierDown(render_engine._oisKeyboard.Modifier.Shift) # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is 0: #check if contour draw mode if is_modifire_down: self.contour_points.append(render_engine.pos2dTo3dIsoPos([mstate.X.abs, mstate.Y.abs])) self.state = SCgEditMode.ES_ContourCreate else: self._logic._createNode((mstate.X.abs, mstate.Y.abs)) self.state = SCgEditMode.ES_None return True else: if self.line_mode_beg is None: self.state = SCgEditMode.ES_LineCreate # setting begin object self.line_mode_beg = mobjects[0][1] self.line_mode_line.setBegin(self.line_mode_beg) self.line_mode_obj.setPosition(render_engine.pos2dTo3dIsoPos((mstate.X.abs, mstate.Y.abs))) # adding to scene sheet = self._logic._getSheet() render_engine.SceneNode.addChild(sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self._updateLineCreationObjects() return True # contour creation state elif self.state is SCgEditMode.ES_ContourCreate: sheet=self._logic._getSheet() self.contour_points.append(render_engine.pos2dTo3dIsoPos(((mstate.X.abs, mstate.Y.abs)))) self.contour_lines.append(self._logic._createLine(self.contour_points[-1],self.contour_points[-2])) if is_modifire_down and len(self.contour_points)>2: contour = self._logic._createContour(self.contour_points) for line in self.contour_lines: render_engine._ogreSceneManager.getRootSceneNode().removeChild(line) self.contour_lines = [] sheet.removeChild(contour) childs = sheet.getChilds() for i in range(len(childs)): current = childs[0] if scg_utils.checkOnPointInContour(current.position,self.contour_points): sheet.removeChild(current) render_engine.SceneNode.addChild(contour.sceneNode, current.sceneNode) self._logic._getSheet().addChild(contour) self.contour_points = [] self.state = SCgEditMode.ES_None # line creation state elif (self.state is SCgEditMode.ES_LineCreate) and (self.line_mode_beg is not None): # check if is there if len(mobjects) is not 0: self._logic._createPair(self.line_mode_beg, mobjects[0][1]) sheet = self._logic._getSheet() render_engine.SceneNode.removeChild(sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self.line_mode_line.setBegin(None) self.line_mode_beg = None self.state = SCgEditMode.ES_None return True elif _id == ois.MB_Middle: if self.state == SCgEditMode.ES_None: self.state = SCgEditMode.ES_Translate render_engine.Gui.setPointer("hand") return True if self._logic._getSheet().haveSelected() and self.state is SCgEditMode.ES_None: # removing selection from all nodes self._logic._getSheet().unselectAll() return True return False
def _onKeyPressed(self, _evt): """Event on key pressed """ if BaseEditMode._onKeyPressed(self, _evt): return True key = _evt.key if key == ois.KC_C: _selected = self._logic._getSheet().getSelected() if len(_selected) == 1 and isinstance(_selected[0], GeometryTriangle): obj = _selected[0] circlePoints = obj._calculateCirclePoints() CoordinateC = circlePoints[0] center = self._logic.createPoint(CoordinateC) sheet = self._logic._getSheet() sheet.addChild(center) center._updateView() CoordinateT = circlePoints[1] sideObjects = self._logic._getSheet()._getObjectsUnderMouse(True, True, CoordinateT) line = comutils._getFirstObjectTypeFromList(sideObjects, [GeometryLineSection]) tangent = self._logic.createPoint(CoordinateT) sheet = self._logic._getSheet() sheet.addChild(tangent) tangent._updateView() _selected = center, tangent obj._setCenterPoints(_selected) obj._setIsCircleDrawed(True) self.active_object = self._logic.createCircle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_A: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createAngle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_T: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createTriangle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_Q: _selected = self._logic._getSheet().getSelected() self.active_object = self._logic.createQuadrangle() if self.active_object.makeBasedOnObjects(_selected): self._logic._getSheet().addChild(self.active_object) else: self.active_object.delete() self.active_object = None if key == ois.KC_L: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(selected[0], (GeometryLineSection, GeometryCircle)): self.state = GeometryEditMode.ES_LengthChange self.length_changer = TextInput(obj, self._length_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropLength)) if key == ois.KC_E: selected = self._logic._getSheet().getSelected() if len(selected) == 2: if isinstance(selected[0], selected[1].__class__): selected[0].setEqualTo(selected[1]) if self.objectInfoPanel.getObject() is selected[0] or self.objectInfoPanel.getObject() is selected[1]: self.objectInfoPanel.update() #remove figure's congruence property if key == ois.KC_W: selected = self._logic._getSheet().getSelected() if len(selected) == 2: if isinstance(selected[0], selected[1].__class__): selected[0].removeCongruency(selected[1]) if self.objectInfoPanel.getObject() is selected[0] or self.objectInfoPanel.getObject() is selected[1]: self.objectInfoPanel.update() if key == ois.KC_S: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(obj, (GeometryCircle, GeometryTriangle, GeometryQuadrangle)): self.state = GeometryEditMode.ES_SquareChange self.square_changer = TextInput(obj, self._square_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropSquare)) if key == ois.KC_P: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(obj, (GeometryTriangle, GeometryQuadrangle)): self.state = GeometryEditMode.ES_PerimeterChange self.perimetr_changer = TextInput(obj, self._perimeter_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropPerimeter)) if key == ois.KC_R: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(obj, GeometryCircle): self.state = GeometryEditMode.ES_RadiusChange self.radius_changer = TextInput(obj, self._radius_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropRadius)) if key == ois.KC_D: selected = self._logic._getSheet().getSelected() if len(selected) == 1: obj = selected[0] if isinstance(obj, GeometryCircle): self.state = GeometryEditMode.ES_DiameterChange self.diameter_changer = TextInput(obj, self._diameter_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropDiameter)) return False