Example #1
0
 def __init__(self, _logic):
     BaseEditMode.__init__(self, _logic, "Geometry edit")
     
     # last scroll position
     self.last_scroll_pos = None
     
     # grid align mode
     self.grid_align = True
     self.mouse_pos = (0, 0)
     self.objectInfoPanel = geom_controls.ObjectInfoPanel()
     
     # objects we works with
     self.highlighted_obj = None
     # current edit state
     self.state = GeometryEditMode.ES_None
     # current object we worked with
     self.active_object = None
     # candidate object to be processed with mouse
     self.candidate_object = None
     # line creation mode
     self.__pointSpirit = GeometryPoint()
     self.__pointSpirit.setState(Object.OS_Normal)
     self.__pointSpirit.setScale(ogre.Vector3(0.5, 0.5, 0.5))
     self.__lineSpirit = GeometryLineSection()
     self.__lineSpirit.setState(Object.OS_Normal)        
     self.__lineSpirit.setEnd(self.__pointSpirit) 
     self.__lineBegin = None
Example #2
0
    def __init__(self, _logic):
        BaseEditMode.__init__(self, _logic, "Geometry edit")

        # last scroll position
        self.last_scroll_pos = None

        # grid align mode
        self.grid_align = True
        self.mouse_pos = (0, 0)
        self.objectInfoPanel = geom_controls.ObjectInfoPanel()

        # objects we works with
        self.highlighted_obj = None
        # current edit state
        self.state = GeometryEditMode.ES_None
        # current object we worked with
        self.active_object = None
        # candidate object to be processed with mouse
        self.candidate_object = None
        # line creation mode
        self.__pointSpirit = GeometryPoint()
        self.__pointSpirit.setState(Object.OS_Normal)
        self.__pointSpirit.setScale(ogre.Vector3(0.5, 0.5, 0.5))
        self.__lineSpirit = GeometryLineSection()
        self.__lineSpirit.setState(Object.OS_Normal)
        self.__lineSpirit.setEnd(self.__pointSpirit)
        self.__lineBegin = None
Example #3
0
 def _unselectObject(self, _object):
     BaseEditMode._unselectObject(self, _object)
     
     selected = self._logic._getSheet().getSelected()
     if len(selected) > 0:
         self.objectInfoPanel.setObject(selected[-1])
     else:
         self.objectInfoPanel.setObject(None)
Example #4
0
    def _unselectObject(self, _object):
        BaseEditMode._unselectObject(self, _object)

        selected = self._logic._getSheet().getSelected()
        if len(selected) > 0:
            self.objectInfoPanel.setObject(selected[-1])
        else:
            self.objectInfoPanel.setObject(None)
Example #5
0
 def _onKeyReleased(self, _evt):
     """Key released event
     """
     BaseEditMode._onKeyReleased(self, _evt)
     
     key = _evt.key
     
     if key == ois.KC_LSHIFT:
         self._shift = False
            
     return False
Example #6
0
    def _onKeyReleased(self, _evt):
        """Key released event
        """
        BaseEditMode._onKeyReleased(self, _evt)

        key = _evt.key

        if key == ois.KC_LSHIFT:
            self._shift = False

        return False
Example #7
0
    def __init__(self, _logic):
        BaseEditMode.__init__(self, _logic, "Edit mode")
        
        # mouse objects for line creation mode
        self.line_mode_beg = None
        self.line_mode_obj = scg_alphabet.createSCgNode('mnode')
        self.line_mode_obj.setScale(ogre.Vector3(0.1, 0.1, 0.1))
        self.line_mode_obj.setPosition(ogre.Vector3(0, 0, 0))
        self.line_mode_line = scg_alphabet.createSCgPair('mpair')
        self.line_mode_line.setEnd(self.line_mode_obj)
        self.line_mode_line.setState(objects.Object.OS_Normal)
        # highlighted object
        self.highlighted_obj = None
        
        # widgets
        self.type_combo = None
        self.content_combo = None
        
        # object we worked on in current state
        self.object_active = None
        # current editor state
        self.state = SCgEditMode.ES_None
        # current mouse position
        self.mouse_pos = (0, 0)
        
        # visual menu
#        self.vis_menu = None
#        self._createVisualMenu()
        
        # 3d navigation mode
        self.rotX = 0.0 
        self.rotY = 0.0
        self.move = ogre.Vector3(0.0, 0.0, 0.0)
        self.moveSpeed = 5.0
        self.moveScale = 5.0
        
        self.animationState = None
        
        # tool bar
#        self.toolbar = ToolBar()
#        self.toolbar.setVisible(False)
#        self.toolbar.setEnabled(True)
#        for idx in xrange(self.EM_Count):
#            button = self.toolbar.appendButton("", "scg_toolbar_icons.png", idx, (32, 32), (0, 0, 256, 32))
#            button.setCheckable(True)
#            button.setUserData(idx)
#            button.eventPush = self._onToolBarButtonPush
#            
#        self.toolbar.setButtonSize(38)

        #contour points
        self.contour_points = []
        self.contour_lines = []
Example #8
0
 def __init__(self, _logic):
     BaseEditMode.__init__(self, _logic)
     
     self.mouse_pos = (0, 0)
     # objects we works with
     self.highlighted_obj = None
     
     # 3d navigation mode
     self.rotX = 0.0 
     self.rotY = 0.0
     self.move = ogre.Vector3(0.0, 0.0, 0.0)
     self.moveSpeed = 15.0
     self.moveScale = 1.0
     self.navigation = False
Example #9
0
    def delete(self):
        """Deletion message
        """
        BaseEditMode.delete(self)
        
#        self.vis_menu.delete()
        
        self.line_mode_beg = None
        
        self.line_mode_line.delete()
        self.line_mode_line = None
        self.line_mode_obj.delete()
        self.line_mode_obj = None
        
        self.object_active = None
Example #10
0
    def delete(self):
        """Deletion message
        """
        BaseEditMode.delete(self)

        self.vis_menu.delete()

        self.line_mode_beg = None

        self.line_mode_line.delete()
        self.line_mode_line = None
        self.line_mode_obj.delete()
        self.line_mode_obj = None

        self.object_active = None
Example #11
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 #12
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 #13
0
 def _onMouseReleased(self, _evt, _id):
     """Mouse button released event
     """
     if BaseEditMode._onMouseReleased(self, _evt, _id):  return True
     
     if _id == ois.MB_Left and self.navigation:
         self.navigation = False
     
     return False
Example #14
0
    def _onKeyReleased(self, _evt):
        """Key released event
        """
        BaseEditMode._onKeyReleased(self, _evt)
        
        key = _evt.key
        
        if key == ois.KC_LSHIFT:
            self._shift = False
            
        elif key == ois.KC_B:
            if self.state == SCgEditMode.ES_BusCreate:
                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 False
Example #15
0
    def _onKeyReleased(self, _evt):
        """Key released event
        """
        BaseEditMode._onKeyReleased(self, _evt)

        key = _evt.key

        if key == ois.KC_LSHIFT:
            self._shift = False

        elif key == ois.KC_B:
            if self.state == SCgEditMode.ES_BusCreate:
                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 False
Example #16
0
 def __init__(self, _logic):
     BaseEditMode.__init__(self, _logic, "Graph edit")
     
     # last scroll position
     self.last_scroll_pos = None
     
     # grid align mode
     self.mouse_pos = (0, 0)
     
     # objects we works with
     self.highlighted_obj = None
     # current edit state
     self.state = GraphEditMode.ES_None
     # current object we worked with
     self.active_object = None
     # line creation mode
     self.__pointSpirit = GraphVertex()
     self.__pointSpirit.setState(Object.OS_Normal)
     self.__pointSpirit.setScale(ogre.Vector3(0.5, 0.5, 0.5))
     self.__lineSpirit = GraphLink()
     self.__lineSpirit.setState(Object.OS_Normal)        
     self.__lineSpirit.setEnd(self.__pointSpirit) 
     self.__lineBegin = None
Example #17
0
 def __init__(self, _logic):
     BaseEditMode.__init__(self, _logic, "Graph edit")
     
     # last scroll position
     self.last_scroll_pos = None
     
     # grid align mode
     self.mouse_pos = (0, 0)
     
     # objects we works with
     self.highlighted_obj = None
     # current edit state
     self.state = GraphEditMode.ES_None
     # current object we worked with
     self.active_object = None
     # line creation mode
     self.__pointSpirit = GraphVertex()
     self.__pointSpirit.setState(Object.OS_Normal)
     self.__pointSpirit.setScale(ogre.Vector3(0.5, 0.5, 0.5))
     self.__lineSpirit = GraphLink()
     self.__lineSpirit.setState(Object.OS_Normal)        
     self.__lineSpirit.setEnd(self.__pointSpirit) 
     self.__lineBegin = None
Example #18
0
    def __init__(self, _logic):
        BaseEditMode.__init__(self, _logic, "Edit mode")

        # mouse objects for line creation mode
        self.line_mode_beg = None
        self.line_mode_obj = scg_alphabet.createSCgNode('mnode')
        self.line_mode_obj.setScale(ogre.Vector3(0.1, 0.1, 0.1))
        self.line_mode_obj.setPosition(ogre.Vector3(0, 0, 0))
        self.line_mode_line = scg_alphabet.createSCgPair('mpair')
        self.line_mode_line.setEnd(self.line_mode_obj)
        self.line_mode_line.setState(objects.Object.OS_Normal)
        # highlighted object
        self.highlighted_obj = None

        # widgets
        self.type_combo = None
        self.content_combo = None

        # object we worked on in current state
        self.object_active = None
        # current editor state
        self.state = SCgEditMode.ES_None
        # current mouse position
        self.mouse_pos = (0, 0)

        # visual menu
        self.vis_menu = None
        self._createVisualMenu()

        # 3d navigation mode
        self.rotX = 0.0
        self.rotY = 0.0
        self.move = ogre.Vector3(0.0, 0.0, 0.0)
        self.moveSpeed = 5.0
        self.moveScale = 5.0

        self.animationState = None
Example #19
0
    def __init__(self, _logic):
        BaseEditMode.__init__(self, _logic, "Edit mode")
        
        # mouse objects for line creation mode
        self.line_mode_beg = None
        self.line_mode_obj = scg_alphabet.createSCgNode('mnode')
        self.line_mode_obj.setScale(ogre.Vector3(0.1, 0.1, 0.1))
        self.line_mode_obj.setPosition(ogre.Vector3(0, 0, 0))
        self.line_mode_line = scg_alphabet.createSCgPair('mpair')
        self.line_mode_line.setEnd(self.line_mode_obj)
        self.line_mode_line.setState(objects.Object.OS_Normal)
        # highlighted object
        self.highlighted_obj = None
        
        # widgets
        self.type_combo = None
        self.content_combo = None
        
        # object we worked on in current state
        self.object_active = None
        # current editor state
        self.state = SCgEditMode.ES_None
        # current mouse position
        self.mouse_pos = (0, 0)
        
        # visual menu
#        self.vis_menu = None
#        self._createVisualMenu()
        
        # 3d navigation mode
        self.rotX = 0.0 
        self.rotY = 0.0
        self.move = ogre.Vector3(0.0, 0.0, 0.0)
        self.moveSpeed = 5.0
        self.moveScale = 5.0
        
        self.animationState = None
Example #20
0
 def _onMouseMoved(self, _evt):
     """Mouse moved event
     """
     
     if BaseEditMode._onMouseMoved(self, _evt):  return True
     mstate = _evt.get_state()
     self.mouse_pos = (mstate.X.abs, mstate.Y.abs)
     
     self._highlight()
     
     if self.navigation:
         self.rotX = ogre.Degree(-mstate.X.rel * 0.13)
         self.rotY = ogre.Degree(-mstate.Y.rel * 0.13)
     
     return False
Example #21
0
    def _onKeyPressed(self, _evt):
        """Keyboard button pressed event
        """
        if BaseEditMode._onKeyPressed(self, _evt):  return True
        
        if _evt.key == ois.KC_F9:
            
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self._logic._getSheet().changeMode(render_engine.Mode_Perspective)
            else:
                self._logic._getSheet().changeMode(render_engine.Mode_Isometric)
            self.navigation = False
            
        # create link between objects    
        if _evt.key == ois.KC_SPACE:
            _args = self._logic._getSheet().getSelected()
            if len(_args) == 2 and isinstance(_args[0], chem_objects.ChemistryAtom) and isinstance(_args[1], chem_objects.ChemistryAtom):
                self._logic.addLink(_args[0], _args[1])
                
        # create random element
        if _evt.key == ois.KC_F1:
            import random
            atoms_num = random.randint(50, 100)
            links_num = random.randint(0, atoms_num)
            names = self.type_bindings.values()
            atoms = []
            for a in xrange(atoms_num):
                _atom = self._logic.addAtom(ogre.Vector3(float(random.randint(-10, 10)), float(random.randint(-10, 10)), 0.0), 'C')
                if len(atoms) > 0:
                    a1 = random.randint(0, len(atoms) - 1)
                    self._logic.addLink(atoms[a1], _atom)
                    
                atoms.append(_atom)
                
#            for l in xrange(links_num):
#                a1 = random.randint(0, atoms_num - 1)
#                a2 = random.randint(0, atoms_num - 1)
#                while a1 == a2:
#                    a2 = random.randint(0, atoms_num - 1)
#                self._logic.addLink(atoms[a1], atoms[a2])
        
        # test type changing
        if self.type_bindings.has_key(_evt.key):
            self.setSelectionName(self.type_bindings[_evt.key])
        
        
        return False
Example #22
0
    def _onMouseReleased(self, _evt, _id):
        """Event on mouse button released
        """
        if BaseEditMode._onMouseReleased(self, _evt, _id):  return True
        
        mstate = _evt.get_state()
        mpos = self._getMousePos(mstate)
        
        if _id == ois.MB_Left:
            
            # moving state finishing
            if self.state is GeometryEditMode.ES_Move:
                self.state = GeometryEditMode.ES_None
#                self._selectObject(self.active_object)
                self.active_object = None                
        
        return False
Example #23
0
    def _onMouseReleased(self, _evt, _id):
        """Event on mouse button released
        """
        if BaseEditMode._onMouseReleased(self, _evt, _id):  return True
        
        mstate = _evt.get_state()
        mpos = self._getMousePos(mstate)
        
        if _id == ois.MB_Left:
            
            # moving state finishing
            if self.state is GeometryEditMode.ES_Move:
                self.state = GeometryEditMode.ES_None
#                self._selectObject(self.active_object)
                self.active_object = None                
        
        return False
Example #24
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 #25
0
 def _onKeyPressed(self, _evt):
     """Event on key pressed
     """
     if _evt.key == ois.KC_DELETE:
         return True
     
     if BaseEditMode._onKeyPressed(self, _evt):  return True
     
     key = _evt.key
     
     if key == ois.KC_C and isinstance(self._logic._getSheet().getSelected()[0], GeometryPoint):
         self.state = GeometryEditMode.ES_CircleCreate
         self.active_object = self._logic.createCircle(self._logic._getSheet().getSelected()[0], 3.0)
         self._logic._getSheet().addChild(self.active_object)     
         
     if key == ois.KC_T:
         selected = self._logic._getSheet().getSelected()
            
         if len(selected) == 3:
             # check if selected objects are lines
             lines = True
             for obj in selected:
                 if not isinstance(obj, GeometryLineSection):
                     lines = False
         
             if lines:
                 triangle = self._logic.createTriangle(selected)
                 self._logic._getSheet().addChild(triangle)
                 
     if key == ois.KC_L:
         selected = self._logic._getSheet().getSelected()
         if len(selected) > 0 and isinstance(selected[0], GeometryLineSection):
             self.state = GeometryEditMode.ES_LengthChange
             self.length_changer = TextInput(selected[0], self._length_change_callback, str(selected[0].getLength()))                
     
     return False
Example #26
0
 def delete(self):
     self.objectInfoPanel.delete()
     BaseEditMode.delete(self)
Example #27
0
    def _onKeyPressed(self, _evt):
        """Key pressed event
        """
        BaseEditMode._onKeyPressed(self, _evt)
        
        key = _evt.key
        
        if key == ois.KC_LSHIFT:
            self._shift = True
                    
        elif key == ois.KC_T:
            self._handlerChangeType()
            
        elif key == ois.KC_C:
            self._handlerChangeContent()
            
        elif key == ois.KC_H:
            self._handlerContentToogle()
           
        elif key == ois.KC_SPACE:
            layout_group = self._logic._getSheet().getLayoutGroup()
            if layout_group is not None:
                if layout_group.isPlaying():
                    layout_group.stop()
                else:
                    layout_group.play()
                    
        elif _evt.key == ois.KC_F9:
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self._logic._getSheet().changeMode(render_engine.Mode_Perspective)
            else:
                self._logic._getSheet().changeMode(render_engine.Mode_Isometric)
            self.line_mode_line._needModeUpdate()
            
        # test code
        elif _evt.key == ois.KC_F3:# and 0:
            
            self._logic._getSheet().setLayoutGroup(None)
            
            elements = []
            node_center = scg_alphabet.createSCgNode("node/const/binary")
            node_center.setText(u"центр*")
            elements.append(node_center)
            
            node_tchk_O = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_O.setText(u"Тчк О")
            elements.append(node_tchk_O)
            
            node_tchk_A = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_A.setText(u"Тчк А")
            elements.append(node_tchk_A)
            
            node_tchk_B = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_B.setText(u"Тчк B")
            elements.append(node_tchk_B)
            
            node_tchk_C = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_C.setText(u"Тчк C")
            elements.append(node_tchk_C)
            
            node_tchk_A1 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_A1.setText(u"Тчк А1")
            elements.append(node_tchk_A1)
            
            node_tchk_B1 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_B1.setText(u"Тчк B1")
            elements.append(node_tchk_B1)
            
            node_tchk_C1 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_C1.setText(u"Тчк C1")
            elements.append(node_tchk_C1)
            
            node_tchk_A2 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_A2.setText(u"Тчк А2")
            elements.append(node_tchk_A2)
            
            node_tchk_B2 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_B2.setText(u"Тчк B2")
            elements.append(node_tchk_B2)
            
            node_tchk_C2 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_C2.setText(u"Тчк C2")
            elements.append(node_tchk_C2)
            
            node_okr_OA2 = scg_alphabet.createSCgNode("node/const/struct")
            node_okr_OA2.setText(u"Окр(ТчкO;ТчкA2)")
            elements.append(node_okr_OA2)
            
            node_okr = scg_alphabet.createSCgNode("node/const/term")
            node_okr.setText(u"окружность")
            elements.append(node_okr)
            
            node_otr = scg_alphabet.createSCgNode("node/const/term")
            node_otr.setText(u"отрезок")
            elements.append(node_otr)
            
            node_otr_AA1 = scg_alphabet.createSCgNode("node/const/struct")
            node_otr_AA1.setText(u"Отр(ТчкА;ТчкА1)")
            elements.append(node_otr_AA1)
            
            node_otr_BB1 = scg_alphabet.createSCgNode("node/const/struct")
            node_otr_BB1.setText(u"Отр(ТчкB;ТчкB1)")
            elements.append(node_otr_BB1)
            
            node_otr_CC1 = scg_alphabet.createSCgNode("node/const/struct")
            node_otr_CC1.setText(u"Отр(ТчкC;ТчкC1)")
            elements.append(node_otr_CC1)
            
            node_biss = scg_alphabet.createSCgNode("node/const/binary")
            node_biss.setText(u"биссектриса*")
            elements.append(node_biss)
            
            node_trian = scg_alphabet.createSCgNode("node/const/term")
            node_trian.setText(u"треугольник")
            elements.append(node_trian) 
            
            node_trian_ABC = scg_alphabet.createSCgNode("node/const/struct")
            node_trian_ABC.setText(u"Треугк(ТчкА;ТчкB;ТчкC)")
            elements.append(node_trian_ABC)
            
            node_vpis = scg_alphabet.createSCgNode("node/const/binary")
            node_vpis.setText(u"быть вписанным*")
            elements.append(node_vpis)
            
            node_versh_ = scg_alphabet.createSCgNode("node/const/role")
            node_versh_.setText(u"вершина_")
            elements.append(node_versh_)
            
            node_point = scg_alphabet.createSCgNode("node/const/term")
            node_point.setText(u"точка")
            elements.append(node_point)
            
            # link nodes
            points = [node_tchk_O, node_tchk_A, node_tchk_B, node_tchk_C, 
                      node_tchk_A1, node_tchk_B1, node_tchk_C1,
                      node_tchk_A2, node_tchk_B2, node_tchk_C2]
            for pt in points:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_point)
                arc.setEnd(pt)
                elements.append(arc)
                
            otrs = [node_otr_AA1, node_otr_BB1, node_otr_CC1]
            for otr in otrs:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_otr)
                arc.setEnd(otr)
                
                arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc2.setBegin(otr)
                arc2.setEnd(node_tchk_O)
                
                arc3 = scg_alphabet.createSCgPair("pair/-/-/orient/const")
                arc3.setBegin(node_trian_ABC)
                arc3.setEnd(otr)
                
                arc4 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc4.setBegin(node_biss)
                arc4.setEnd(arc3)
                
                elements.append(arc)
                elements.append(arc2)
                elements.append(arc3)
                elements.append(arc4)
                
            vershs = [node_tchk_A, node_tchk_B, node_tchk_C]
            for ver in vershs:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_trian_ABC)
                arc.setEnd(ver)
                
                arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc2.setBegin(node_versh_)
                arc2.setEnd(arc)
                
                elements.append(arc)
                elements.append(arc2)
                
            points = [node_tchk_A2, node_tchk_B2, node_tchk_C2]
            for pt in points:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_okr_OA2)
                arc.setEnd(pt)
                
                elements.append(arc)
                
            arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc.setBegin(node_trian)
            arc.setEnd(node_trian_ABC)
            elements.append(arc)
            
            arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc.setBegin(node_okr)
            arc.setEnd(node_okr_OA2)
            elements.append(arc)
            
            arc = scg_alphabet.createSCgPair("pair/-/-/orient/const")
            arc.setBegin(node_trian_ABC)
            arc.setEnd(node_okr_OA2)
            elements.append(arc)
            
            arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc2.setBegin(node_vpis)
            arc2.setEnd(arc)
            elements.append(arc2)
            
            arc = scg_alphabet.createSCgPair("pair/-/-/orient/const")
            arc.setBegin(node_okr_OA2)
            arc.setEnd(node_tchk_O)
            elements.append(arc)
            
            arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc2.setBegin(node_center)
            arc2.setEnd(arc)
            elements.append(arc2)
            
            
            self._logic._getSheet().addChildList(elements)
            
            # go to 3d mode
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self._logic._getSheet().changeMode(render_engine.Mode_Perspective)
            
            # disable layout
#            layout_group = self._logic._getSheet().getLayoutGroup()
#            layout_group.stop()
            
            # setup node positions manualy
            node_trian.setPosition(ogre.Vector3(0.0, 0.0, 3.0))
            
            node_otr_AA1.setPosition(ogre.Vector3(-5.0, 0.0, 2.0))
            node_otr_BB1.setPosition(ogre.Vector3(-5.0, 0.0, 0.0))
            node_otr_CC1.setPosition(ogre.Vector3(-5.0, 0.0, -2.0))
            node_otr.setPosition(ogre.Vector3(-8.0, 0.0, -2.0))
            node_biss.setPosition(ogre.Vector3(-1.0, 0.0, -2.0))
            
            node_tchk_O.setPosition(ogre.Vector3(-10.0, 0.0, 0.0))
            
            node_okr_OA2.setPosition(ogre.Vector3(-5, 3.0, 0.0))
            node_okr.setPosition(ogre.Vector3(-5, 6.0, 0.0))
            node_center.setPosition(ogre.Vector3(-8.0, 3.0, 0.0))
            node_vpis.setPosition(ogre.Vector3(-2.0, 3.0, 0.0))
            
            node_point.setPosition(ogre.Vector3(3.0, 2.0, -7.0))
            
            node_tchk_A.setPosition(ogre.Vector3(5.0, 3.0, 0.0))
            node_tchk_B.setPosition(ogre.Vector3(5.0, 0.0, 0.0))
            node_tchk_C.setPosition(ogre.Vector3(5.0, -3.0, 0.0))
            
            node_versh_.setPosition(ogre.Vector3(5.0, 2.0, 3.0))
            
            node_tchk_A2.setPosition(ogre.Vector3(1.0, 3.0, -8.0))
            node_tchk_B2.setPosition(ogre.Vector3(1.0, 0.0, -8.0))
            node_tchk_C2.setPosition(ogre.Vector3(1.0, -3.0, -8.0))
            
            node_tchk_A1.setPosition(ogre.Vector3(5.0, 3.0, -4.0))
            node_tchk_B1.setPosition(ogre.Vector3(5.0, 0.0, -4.0))
            node_tchk_C1.setPosition(ogre.Vector3(5.0, -3.0, -4.0))
            
            # configure camera
            camera = render_engine._ogreCamera
            cameraNode = render_engine._ogreCameraNode
            sceneManager = render_engine._ogreSceneManager
            
             # set up spline animation of node
            animation = sceneManager.createAnimation('CameraTrack', 23)
            animation.interpolationMode = ogre.Animation.IM_SPLINE
            
            animationTrack = animation.createNodeTrack(0, cameraNode)
            
            key = animationTrack.createNodeKeyFrame(0)
            key.setTranslate((0.441312, -0.0484183, 15.4575))
            key.setRotation((0.999381, 1.45161e-009, 0.0351611, 0.0))
            
            key = animationTrack.createNodeKeyFrame(3)
            key.setTranslate((-3.84972, -9.9938, 1.59091))
            key.setRotation((0.731662, 0.669154, 0.0960006, -0.0877989))
            
            key = animationTrack.createNodeKeyFrame(7)
            key.setTranslate((-3.84972, -9.9938, 1.59091))
            key.setRotation((0.731662, 0.669154, 0.0960006, -0.0877989))
            
            key = animationTrack.createNodeKeyFrame(10)
            key.setTranslate((-4.48132, 4.00986, 9.80443))
            key.setRotation((0.997827, -0.0657508, -0.00452801, -0.00029836))
            
            key = animationTrack.createNodeKeyFrame(14)
            key.setTranslate((-4.48132, 4.00986, 9.80443))
            key.setRotation((0.997827, -0.0657508, -0.00452801, -0.00029836))
            
            key = animationTrack.createNodeKeyFrame(17)
            key.setTranslate((-0.88816, 1.8146, 6.93933))
            key.setRotation((0.929973, -0.102752, -0.350851, -0.0387652))
            
            key = animationTrack.createNodeKeyFrame(20)
            key.setTranslate((-0.88816, 1.8146, 6.93933))
            key.setRotation((0.929973, -0.102752, -0.350851, -0.0387652))
            
            self.animationState = sceneManager.createAnimationState('CameraTrack')
            self.animationState.setEnabled (True)
            
        #test           
         
        elif key == ois.KC_F:
            # make selected sheet as root
            if self.state == SCgEditMode.ES_None:
                sheet = self._logic._getSheet()
                objs = sheet.getSelected()
                # getting object for making root
                if len(objs) == 1:
                    obj = objs[0]
                    if type(obj) == objects.ObjectSheet:
                        render_engine._kernel.setRootSheet(obj)
        
        elif key == ois.KC_ESCAPE:
            # revert state to default
            self.revertState()
            
        elif key == ois.KC_1:
            import suit.core.layout.LayoutGroupForceDirected as layout
            self._logic._getSheet().setLayoutGroup(layout.LayoutGroupForceSimple())
        elif key == ois.KC_2:
            import suit.core.layout.LayoutGroupForceDirected2 as layout
            self._logic._getSheet().setLayoutGroup(layout.LayoutGroupForceSimple())
            
#        elif key == ois.KC_K:
#            self._logic._createContour([ogre.Vector3(-3, -2, 0),
#                                        ogre.Vector3(0, -3, 0),
#                                        ogre.Vector3(3, -1, 0),
#                                        ogre.Vector3(-3, 2, 0)
#                                        ])
        return False
Example #28
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()

        #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
Example #29
0
 def _onRootChanged(self, _isRoot):
     BaseEditMode._onRootChanged(self, _isRoot)
     self.objectInfoPanel.setVisible(_isRoot)
Example #30
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()

        #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
Example #31
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 #32
0
 def deactivate(self):
     """Deactivation message
     """
     BaseEditMode.deactivate(self)
     self._updateVisualMenu()
Example #33
0
 def _onRootChanged(self, _isRoot):
     BaseEditMode._onRootChanged(self, _isRoot)
     self.objectInfoPanel.setVisible(_isRoot)
Example #34
0
 def _onKeyReleased(self, _evt):
     """Keyboard button released event
     """
     if BaseEditMode._onKeyReleased(self, _evt): return True
     
     return False
Example #35
0
 def activate(self):
     """Activation message
     """
     BaseEditMode.activate(self)
     self._updateVisualMenu()
Example #36
0
 def __del__(self):
     BaseEditMode.__del__(self)
Example #37
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 #38
0
 def _onKeyPressed(self, _evt):
     """Event on key pressed
     """
     if BaseEditMode._onKeyPressed(self, _evt):  return True
             
     return False
Example #39
0
 def delete(self):
     self.objectInfoPanel.delete()
     BaseEditMode.delete(self)
Example #40
0
    def _onKeyPressed(self, _evt):
        """Key pressed event
        """
        BaseEditMode._onKeyPressed(self, _evt)

        key = _evt.key

        if key == ois.KC_LSHIFT:
            self._shift = True

        elif key == ois.KC_T:
            self._handlerChangeType()

        elif key == ois.KC_SPACE:
            layout_group = self._logic._getSheet().getLayoutGroup()
            if layout_group is not None:
                if layout_group.isPlaying():
                    layout_group.stop()
                else:
                    layout_group.play()

        elif _evt.key == ois.KC_F9:
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self._logic._getSheet().changeMode(
                    render_engine.Mode_Perspective)
            else:
                self._logic._getSheet().changeMode(
                    render_engine.Mode_Isometric)
            self.line_mode_line._needModeUpdate()

        # test code
        elif _evt.key == ois.KC_F3 and 0:

            self._logic._getSheet().setLayoutGroup(None)

            elements = []
            node_center = scg_alphabet.createSCgNode("node/const/binary")
            node_center.setText(u"центр*")
            elements.append(node_center)

            node_tchk_O = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_O.setText(u"Тчк О")
            elements.append(node_tchk_O)

            node_tchk_A = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_A.setText(u"Тчк А")
            elements.append(node_tchk_A)

            node_tchk_B = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_B.setText(u"Тчк B")
            elements.append(node_tchk_B)

            node_tchk_C = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_C.setText(u"Тчк C")
            elements.append(node_tchk_C)

            node_tchk_A1 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_A1.setText(u"Тчк А1")
            elements.append(node_tchk_A1)

            node_tchk_B1 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_B1.setText(u"Тчк B1")
            elements.append(node_tchk_B1)

            node_tchk_C1 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_C1.setText(u"Тчк C1")
            elements.append(node_tchk_C1)

            node_tchk_A2 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_A2.setText(u"Тчк А2")
            elements.append(node_tchk_A2)

            node_tchk_B2 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_B2.setText(u"Тчк B2")
            elements.append(node_tchk_B2)

            node_tchk_C2 = scg_alphabet.createSCgNode("node/const/real")
            node_tchk_C2.setText(u"Тчк C2")
            elements.append(node_tchk_C2)

            node_okr_OA2 = scg_alphabet.createSCgNode("node/const/struct")
            node_okr_OA2.setText(u"Окр(ТчкO;ТчкA2)")
            elements.append(node_okr_OA2)

            node_okr = scg_alphabet.createSCgNode("node/const/term")
            node_okr.setText(u"окружность")
            elements.append(node_okr)

            node_otr = scg_alphabet.createSCgNode("node/const/term")
            node_otr.setText(u"отрезок")
            elements.append(node_otr)

            node_otr_AA1 = scg_alphabet.createSCgNode("node/const/struct")
            node_otr_AA1.setText(u"Отр(ТчкА;ТчкА1)")
            elements.append(node_otr_AA1)

            node_otr_BB1 = scg_alphabet.createSCgNode("node/const/struct")
            node_otr_BB1.setText(u"Отр(ТчкB;ТчкB1)")
            elements.append(node_otr_BB1)

            node_otr_CC1 = scg_alphabet.createSCgNode("node/const/struct")
            node_otr_CC1.setText(u"Отр(ТчкC;ТчкC1)")
            elements.append(node_otr_CC1)

            node_biss = scg_alphabet.createSCgNode("node/const/binary")
            node_biss.setText(u"биссектриса*")
            elements.append(node_biss)

            node_trian = scg_alphabet.createSCgNode("node/const/term")
            node_trian.setText(u"треугольник")
            elements.append(node_trian)

            node_trian_ABC = scg_alphabet.createSCgNode("node/const/struct")
            node_trian_ABC.setText(u"Треугк(ТчкА;ТчкB;ТчкC)")
            elements.append(node_trian_ABC)

            node_vpis = scg_alphabet.createSCgNode("node/const/binary")
            node_vpis.setText(u"быть вписанным*")
            elements.append(node_vpis)

            node_versh_ = scg_alphabet.createSCgNode("node/const/role")
            node_versh_.setText(u"вершина_")
            elements.append(node_versh_)

            node_point = scg_alphabet.createSCgNode("node/const/term")
            node_point.setText(u"точка")
            elements.append(node_point)

            # link nodes
            points = [
                node_tchk_O, node_tchk_A, node_tchk_B, node_tchk_C,
                node_tchk_A1, node_tchk_B1, node_tchk_C1, node_tchk_A2,
                node_tchk_B2, node_tchk_C2
            ]
            for pt in points:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_point)
                arc.setEnd(pt)
                elements.append(arc)

            otrs = [node_otr_AA1, node_otr_BB1, node_otr_CC1]
            for otr in otrs:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_otr)
                arc.setEnd(otr)

                arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc2.setBegin(otr)
                arc2.setEnd(node_tchk_O)

                arc3 = scg_alphabet.createSCgPair("pair/-/-/orient/const")
                arc3.setBegin(node_trian_ABC)
                arc3.setEnd(otr)

                arc4 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc4.setBegin(node_biss)
                arc4.setEnd(arc3)

                elements.append(arc)
                elements.append(arc2)
                elements.append(arc3)
                elements.append(arc4)

            vershs = [node_tchk_A, node_tchk_B, node_tchk_C]
            for ver in vershs:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_trian_ABC)
                arc.setEnd(ver)

                arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc2.setBegin(node_versh_)
                arc2.setEnd(arc)

                elements.append(arc)
                elements.append(arc2)

            points = [node_tchk_A2, node_tchk_B2, node_tchk_C2]
            for pt in points:
                arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
                arc.setBegin(node_okr_OA2)
                arc.setEnd(pt)

                elements.append(arc)

            arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc.setBegin(node_trian)
            arc.setEnd(node_trian_ABC)
            elements.append(arc)

            arc = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc.setBegin(node_okr)
            arc.setEnd(node_okr_OA2)
            elements.append(arc)

            arc = scg_alphabet.createSCgPair("pair/-/-/orient/const")
            arc.setBegin(node_trian_ABC)
            arc.setEnd(node_okr_OA2)
            elements.append(arc)

            arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc2.setBegin(node_vpis)
            arc2.setEnd(arc)
            elements.append(arc2)

            arc = scg_alphabet.createSCgPair("pair/-/-/orient/const")
            arc.setBegin(node_okr_OA2)
            arc.setEnd(node_tchk_O)
            elements.append(arc)

            arc2 = scg_alphabet.createSCgPair("pair/pos/-/orient/const")
            arc2.setBegin(node_center)
            arc2.setEnd(arc)
            elements.append(arc2)

            self._logic._getSheet().addChildList(elements)

            # go to 3d mode
            if render_engine.viewMode is render_engine.Mode_Isometric:
                self._logic._getSheet().changeMode(
                    render_engine.Mode_Perspective)

            # disable layout
#            layout_group = self._logic._getSheet().getLayoutGroup()
#            layout_group.stop()

# setup node positions manualy
            node_trian.setPosition(ogre.Vector3(0.0, 0.0, 3.0))

            node_otr_AA1.setPosition(ogre.Vector3(-5.0, 0.0, 2.0))
            node_otr_BB1.setPosition(ogre.Vector3(-5.0, 0.0, 0.0))
            node_otr_CC1.setPosition(ogre.Vector3(-5.0, 0.0, -2.0))
            node_otr.setPosition(ogre.Vector3(-8.0, 0.0, -2.0))
            node_biss.setPosition(ogre.Vector3(-1.0, 0.0, -2.0))

            node_tchk_O.setPosition(ogre.Vector3(-10.0, 0.0, 0.0))

            node_okr_OA2.setPosition(ogre.Vector3(-5, 3.0, 0.0))
            node_okr.setPosition(ogre.Vector3(-5, 6.0, 0.0))
            node_center.setPosition(ogre.Vector3(-8.0, 3.0, 0.0))
            node_vpis.setPosition(ogre.Vector3(-2.0, 3.0, 0.0))

            node_point.setPosition(ogre.Vector3(3.0, 2.0, -7.0))

            node_tchk_A.setPosition(ogre.Vector3(5.0, 3.0, 0.0))
            node_tchk_B.setPosition(ogre.Vector3(5.0, 0.0, 0.0))
            node_tchk_C.setPosition(ogre.Vector3(5.0, -3.0, 0.0))

            node_versh_.setPosition(ogre.Vector3(5.0, 2.0, 3.0))

            node_tchk_A2.setPosition(ogre.Vector3(1.0, 3.0, -8.0))
            node_tchk_B2.setPosition(ogre.Vector3(1.0, 0.0, -8.0))
            node_tchk_C2.setPosition(ogre.Vector3(1.0, -3.0, -8.0))

            node_tchk_A1.setPosition(ogre.Vector3(5.0, 3.0, -4.0))
            node_tchk_B1.setPosition(ogre.Vector3(5.0, 0.0, -4.0))
            node_tchk_C1.setPosition(ogre.Vector3(5.0, -3.0, -4.0))

            # configure camera
            camera = render_engine._ogreCamera
            cameraNode = render_engine._ogreCameraNode
            sceneManager = render_engine._ogreSceneManager

            # set up spline animation of node
            animation = sceneManager.createAnimation('CameraTrack', 23)
            animation.interpolationMode = ogre.Animation.IM_SPLINE

            animationTrack = animation.createNodeTrack(0, cameraNode)

            key = animationTrack.createNodeKeyFrame(0)
            key.setTranslate((0.441312, -0.0484183, 15.4575))
            key.setRotation((0.999381, 1.45161e-009, 0.0351611, 0.0))

            key = animationTrack.createNodeKeyFrame(3)
            key.setTranslate((-3.84972, -9.9938, 1.59091))
            key.setRotation((0.731662, 0.669154, 0.0960006, -0.0877989))

            key = animationTrack.createNodeKeyFrame(7)
            key.setTranslate((-3.84972, -9.9938, 1.59091))
            key.setRotation((0.731662, 0.669154, 0.0960006, -0.0877989))

            key = animationTrack.createNodeKeyFrame(10)
            key.setTranslate((-4.48132, 4.00986, 9.80443))
            key.setRotation((0.997827, -0.0657508, -0.00452801, -0.00029836))

            key = animationTrack.createNodeKeyFrame(14)
            key.setTranslate((-4.48132, 4.00986, 9.80443))
            key.setRotation((0.997827, -0.0657508, -0.00452801, -0.00029836))

            key = animationTrack.createNodeKeyFrame(17)
            key.setTranslate((-0.88816, 1.8146, 6.93933))
            key.setRotation((0.929973, -0.102752, -0.350851, -0.0387652))

            key = animationTrack.createNodeKeyFrame(20)
            key.setTranslate((-0.88816, 1.8146, 6.93933))
            key.setRotation((0.929973, -0.102752, -0.350851, -0.0387652))

            self.animationState = sceneManager.createAnimationState(
                'CameraTrack')
            self.animationState.setEnabled(True)

        #test

        elif key == ois.KC_F:
            # make selected sheet as root
            if self.state == SCgEditMode.ES_None:
                sheet = self._logic._getSheet()
                objs = sheet.getSelected()
                # getting object for making root
                if len(objs) == 1:
                    obj = objs[0]
                    if type(obj) == objects.ObjectSheet:
                        render_engine._kernel.setRootSheet(obj)
        elif key == ois.KC_ESCAPE:
            # revert state to default
            self.revertState()

        elif key == ois.KC_K:
            self._logic._createContour([
                ogre.Vector3(-3, -2, 0),
                ogre.Vector3(0, -3, 0),
                ogre.Vector3(3, -1, 0),
                ogre.Vector3(-3, 2, 0)
            ])
        return False
Example #41
0
 def deactivate(self):
     BaseEditMode.deactivate(self)
Example #42
0
 def _onKeyPressed(self, _evt):
     """Event on key pressed
     """
     if BaseEditMode._onKeyPressed(self, _evt):  return True
             
     return False
Example #43
0
 def _selectObject(self, _object):
     BaseEditMode._selectObject(self, _object)
     
     self.objectInfoPanel.setObject(_object)
Example #44
0
 def deactivate(self):
     BaseEditMode.deactivate(self)
Example #45
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 #46
0
 def activate(self):
     BaseEditMode.activate(self)
Example #47
0
    def _selectObject(self, _object):
        BaseEditMode._selectObject(self, _object)

        self.objectInfoPanel.setObject(_object)
Example #48
0
 def activate(self):
     """Activation message
     """
     BaseEditMode.activate(self)
Example #49
0
 def _onKeyReleased(self, _evt):
     """Event key released
     """
     if BaseEditMode._onKeyReleased(self, _evt): return True
     
     return False
Example #50
0
 def deactivate(self):
     """Deactivation message
     """
     BaseEditMode.deactivate(self)
Example #51
0
 def __del__(self):
     BaseEditMode.__del__(self)
Example #52
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
Example #53
0
 def activate(self):
     BaseEditMode.activate(self)
Example #54
0
 def _onKeyReleased(self, _evt):
     """Event key released
     """
     if BaseEditMode._onKeyReleased(self, _evt): return True
     
     return False