Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
    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
Пример #9
0
    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