コード例 #1
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
コード例 #2
0
    def _getObjectsUnderMouse(self,
                              sortDistance=True,
                              forced=False,
                              mpos=None):
        """Returns objects under mouse. By default it's caching results for frame, but
        if you need to find objects anyway, then set forced parameter to True.
        @warning: You must be accurate with using this function. It's not thread safe, because
        it gets mouse state
        @param forced: flag to force finding
        @type forced: bool  
        @param sortDistance: flag to sort founded object by distance from near to far
        @type sortDistance: bool 
        @param mpos: mouse position. If you set it to None, then mouse position will be given for
        current mouse state. If you set parameters to None, then it will be work in forced mode
        automatically.
        @type mpos: tuple (x, y)  
        @return: list of tuples (distance, object)
        @rtype: tuple
        """
        founded = []
        if forced or mpos is not None:
            # building intersection ray
            if mpos is None:
                mstate = render_engine._getMouseState()
                self.ray = render_engine.pos2dToViewPortRay(
                    (mstate.X.abs, mstate.Y.abs))
            else:
                self.ray = render_engine.pos2dToViewPortRay(mpos)
            #x = mstate.X.abs / float(mstate.width)
            #y = mstate.Y.abs / float(mstate.height)
            # iterating through objects and finding intersections

            for child in self.__childObjects:
                founded = founded + child._getObjectsUnderMouse(True, True)
                res, dist = child._checkRayIntersect(self.ray)
                if res:
                    founded.append((dist, child))

            if sortDistance:
                founded.sort()

        return founded
コード例 #3
0
ファイル: scg_modes.py プロジェクト: herasimchuk-aa/pyUI
    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
コード例 #4
0
ファイル: scg_editor.py プロジェクト: Alexandra-H/pyUI
    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
コード例 #5
0
ファイル: scg_editor.py プロジェクト: titenkov/OSTIS-NUMSYS
    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
コード例 #6
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