Example #1
0
 def _onMouseMoved(self, _evt):
     """Mouse moved notification event
     """
     if BaseEditMode._onMouseMoved(self, _evt):  return True
   
     mstate = _evt.get_state()
     mpos = self._getMousePos(mstate)
     self.mouse_pos = (mstate.X.abs, mstate.Y.abs)
     
     if self.state is GeometryEditMode.ES_Move:
         self.active_object.setPosition(render_engine.pos2dTo3dIsoPos(mpos))
         return True
     
     elif self.state is GeometryEditMode.ES_LineCreate:
         self.__pointSpirit.setPosition(render_engine.pos2dTo3dIsoPos(mpos))
         self._updateLineSpirits()
         self._highlight()
         return True
     elif self.state is GeometryEditMode.ES_CircleCreate:
         radius = self.active_object.getPosition().distance(render_engine.pos2dTo3dIsoPos(mpos))
         self.active_object.setRadius(radius)
     
     self._highlight()
     
     return False
Example #2
0
 def _onMouseMoved(self, _evt):
     """Mouse moved notification event
     """
     if BaseEditMode._onMouseMoved(self, _evt):  return True
   
     mstate = _evt.get_state()
     mpos = self._getMousePos(mstate)
     self.mouse_pos = (mstate.X.abs, mstate.Y.abs)
     
     if self.state is GeometryEditMode.ES_Move:
         self.active_object.setPosition(render_engine.pos2dTo3dIsoPos(mpos))
         return True
     
     elif self.state is GeometryEditMode.ES_LineCreate:
         self.__pointSpirit.setPosition(render_engine.pos2dTo3dIsoPos(mpos))
         self._updateLineSpirits()
         self._highlight()
         return True
     elif self.state is GeometryEditMode.ES_CircleCreate:
         radius = self.active_object.getPosition().distance(render_engine.pos2dTo3dIsoPos(mpos))
         self.active_object.setRadius(radius)
     
     self._highlight()
     
     return False
Example #3
0
    def _onMouseMoved(self, _evt):
        """Mouse moved event
        """
        mstate = _evt.get_state()
        prev_pos = self.mouse_pos
        self.mouse_pos = (mstate.X.abs, mstate.Y.abs)

        # move object
        if self.state is SCgEditMode.ES_Move:
            pos = self.move_obj.getPosition()
            #self.move_obj.setPosition((pos[0] + dpos[0], pos[1] + dpos[1]))
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self.move_obj.setPosition(
                    render_engine.pos2dTo3dIsoPos(self.mouse_pos))
            else:
                self.move_obj.setPosition(
                    render_engine.pos2dToViewPortRay(
                        self.mouse_pos).getPoint(25.0))
#            if self.vis_menu.isShow():  self.vis_menu.move(self.mouse_pos)
            return True

        elif self.state is SCgEditMode.ES_LineCreate:
            pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos)
            self.line_mode_obj.setPosition(pos)
            self._updateLineCreationObjects()
            self._highlight()
            return True

        elif self.state is SCgEditMode.ES_BusCreate:
            pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos)
            self.line_mode_obj.setPosition(pos)
            self._updateLineCreationObjects()
            self._highlight()
            return True

        elif self.state is SCgEditMode.ES_Translate:
            if render_engine.viewMode is render_engine.Mode_Isometric:
                render_engine._ogreCameraNode.translate(
                    -mstate.X.rel / float(render_engine.scale2d),
                    mstate.Y.rel / float(render_engine.scale2d), 0.0)
                self._logic._getSheet()._updateChildTexts()
            else:
                self.rotX = ogre.Degree(-mstate.X.rel * 0.13)
                self.rotY = ogre.Degree(-mstate.Y.rel * 0.13)
            #FIXME:    add perspective mode

        # scaling
        if self._ctrl and mstate.Z.rel != 0 and render_engine.viewMode == render_engine.Mode_Isometric:
            sc = 1.0 + mstate.Z.rel / 1200.0
            sheet = self._logic._getSheet()
            sheet.setScale(sheet.getScale() * sc)

        self._highlight()

        return False
Example #4
0
    def _onMouseMoved(self, _evt):
        """Mouse moved event
        """
        mstate = _evt.get_state()
        prev_pos = self.mouse_pos
        self.mouse_pos = (mstate.X.abs, mstate.Y.abs)
        
        
        # move object
        if self.state is SCgEditMode.ES_Move:
            pos = self.move_obj.getPosition()
            #self.move_obj.setPosition((pos[0] + dpos[0], pos[1] + dpos[1]))
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self.move_obj.setPosition(render_engine.pos2dTo3dIsoPos(self.mouse_pos))
            else:
                self.move_obj.setPosition(render_engine.pos2dToViewPortRay(self.mouse_pos).getPoint(25.0))
#            if self.vis_menu.isShow():  self.vis_menu.move(self.mouse_pos)
            return True
                
        elif self.state is SCgEditMode.ES_LineCreate:
            pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos)
            self.line_mode_obj.setPosition(pos)
            self._updateLineCreationObjects()
            self._highlight()
            return True
            
        elif self.state is SCgEditMode.ES_BusCreate:
            pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos)
            self.line_mode_obj.setPosition(pos)
            self._updateLineCreationObjects()
            self._highlight()
            return True
        
        elif self.state is SCgEditMode.ES_Translate:
            if render_engine.viewMode is render_engine.Mode_Isometric:
                render_engine._ogreCameraNode.translate(-mstate.X.rel / float(render_engine.scale2d),
                                                         mstate.Y.rel / float(render_engine.scale2d),
                                                         0.0)
                self._logic._getSheet()._updateChildTexts()
            else:
                self.rotX = ogre.Degree(-mstate.X.rel * 0.13)
                self.rotY = ogre.Degree(-mstate.Y.rel * 0.13)
            #FIXME:    add perspective mode
        
        # scaling
        if self._ctrl and mstate.Z.rel != 0 and render_engine.viewMode == render_engine.Mode_Isometric:
            sc = 1.0 + mstate.Z.rel / 1200.0            
            sheet = self._logic._getSheet()
            sheet.setScale(sheet.getScale() * sc)
        
        self._highlight()
        
        return False
Example #5
0
 def createPoint(self, _pos):
     """Creates point based on mouse position
     @param _pos: mouse coordinates
     @type _pos: tuple 
     
     @return: created geometry point object
     @rtype: GeometryPoint
     """
     point_obj = gobjects.GeometryPoint()
     point_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos))
     point_obj.setState(Object.OS_Normal)
     
     return point_obj
Example #6
0
 def createVertex(self, _pos):
     """Creates vertex based on mouse position
     @param _pos: mouse coordinates
     @type _pos: tuple 
     
     @return: created graph vertex object
     @rtype: GraphPoint
     """
     vertex_obj = gobjects.GraphVertex()
     vertex_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos))
     vertex_obj.setState(Object.OS_Normal)
     
     return vertex_obj
Example #7
0
    def createVertex(self, _pos):
        """Creates vertex based on mouse position
        @param _pos: mouse coordinates
        @type _pos: tuple 
        
        @return: created graph vertex object
        @rtype: GraphPoint
        """
        vertex_obj = gobjects.GraphVertex()
        vertex_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos))
        vertex_obj.setState(Object.OS_Normal)

        return vertex_obj
Example #8
0
 def createPoint(self, _pos):
     """Creates point based on mouse position
     @param _pos: mouse coordinates
     @type _pos: tuple 
     
     @return: created geometry point object
     @rtype: GeometryPoint
     """
     point_obj = gobjects.GeometryPoint()
     point_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos))
     point_obj.setState(Object.OS_Normal)
     
     point_obj.setText(point_obj.getAvailableName())
     
     return point_obj
Example #9
0
    def _createNode(self, _pos, _type = "node/const/elem"):
        """Creates node in specified position
        @param _pos: position tuple (x,y)
        @type _pos: tuple  
        @param _type: node type
        @type _type: str
        
        @return: created node  
        """
        node = scg_alphabet.createSCgNode(_type)
        node.setState(objects.Object.OS_Normal)
        sheet = self._getSheet()
        sheet.addChild(node)
        if render_engine.viewMode == render_engine.Mode_Isometric:
            node.setPosition(render_engine.pos2dTo3dIsoPos(_pos))
        else:
#            raise RuntimeError("Not implemented 3d mode in scg editor")
            node.setPosition(render_engine.pos2dToViewPortRay(_pos).getPoint(25.0))
        
        return node
Example #10
0
    def _createNode(self, _pos, _type = "node/const/elem"):
        """Creates node in specified position
        @param _pos: position tuple (x,y)
        @type _pos: tuple  
        @param _type: node type
        @type _type: str
        
        @return: created node  
        """
        node = scg_alphabet.createSCgNode(_type)
        node.setState(objects.Object.OS_Normal)
        sheet = self._getSheet()
        sheet.addChild(node)
        if render_engine.viewMode == render_engine.Mode_Isometric:
            node.setPosition(render_engine.pos2dTo3dIsoPos(_pos))
        else:
#            raise RuntimeError("Not implemented 3d mode in scg editor")
            node.setPosition(render_engine.pos2dToViewPortRay(_pos).getPoint(25.0))
        
        return node
Example #11
0
 def _onMousePressed(self, _evt, _id):
     """Mouse button pressed event
     """
     if BaseEditMode._onMousePressed(self, _evt, _id):   return True
     
     # getting objects under mouse
     mobjects = self._logic._getSheet()._getObjectsUnderMouse(True, True, self.mouse_pos)
     
     if _id == ois.MB_Right:
         if len(mobjects) == 0:
             if render_engine.viewMode is render_engine.Mode_Perspective:
                 self._logic.addAtom(render_engine.pos2dToViewPortRay(self.mouse_pos).getPoint(10.0), "H")
             else:
                 self._logic.addAtom(render_engine.pos2dTo3dIsoPos(self.mouse_pos), "H")
              
      
     elif _id == ois.MB_Left:
         if len(mobjects) > 0:
             self._selectObject(mobjects[0][1])
         else:
             if render_engine.viewMode is render_engine.Mode_Perspective:
                 self.navigation = True
     
     return False
Example #12
0
 def setEndPointPos(self, end_point_pos):
     self.end_pos = render_engine.pos2dTo3dIsoPos(end_point_pos)
     self.orient = self.attachedNode.getPosition() - self.end_pos
Example #13
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
Example #14
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
Example #15
0
 def setEndPointPos(self, end_point_pos):
     self.end_pos = render_engine.pos2dTo3dIsoPos(end_point_pos)
     self.orient = self.attachedNode.getPosition() - self.end_pos
Example #16
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
Example #17
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
Example #18
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
Example #19
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
Example #20
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