Ejemplo n.º 1
0
def build_node(_session, _el, _type):
    """Builds SCgNode based on sc-element
    """
    
    # check if it isn't content node
    _cnt_type = sc_utils.getContentFormat(_session, _el)
    
    
    if _cnt_type is not None:
        obj = objects.ObjectSheet()
        obj.hideContent()
        obj._setScAddr(_el)
        
        # creating viewer
        try:
            logic = core.Kernel.getSingleton().createViewer(_cnt_type)
            obj.setLogic(logic)
        except exceptions.UnsupportedFormatError:
            core.Kernel.getSingleton().logManager.logWarning("Format %s not supported for viewing" % (_session.get_idtf(_cnt_type)))
        
        return obj
    else:
        type_name = "node/const/elem"
        
        # creating type name based on element type    
        _const = getConstStr(_type)
                
        _stype = "elem"
        if sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_sheaf], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "sheaf"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_ext_obj_abstract], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "abstract"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_bin_orient_norole_rel], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "binary"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_ext_obj_real], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "real"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_bin_orient_role_rel], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "role"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_struct], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "struct"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_concept_norel], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "term"
        
        if _const is not None:
            type_name = "node/%s/%s" % (_const, _stype)
        else:
            type_name = "node/elem"
        
        obj = scg_alphabet.createSCgNode(type_name)
        obj._setScAddr(_el)
        return obj
    
    return None
Ejemplo n.º 2
0
def build_node(_session, _el, _type):
    """Builds SCgNode based on sc-element
    """
    
    # check if it isn't content node
    _cnt_type = sc_utils.getContentFormat(_session, _el)
    
    
    if _cnt_type is not None:
        obj = objects.ObjectSheet()
        obj.hideContent()
        obj._setScAddr(_el)
        
        # creating viewer
        try:
            logic = core.Kernel.getSingleton().createViewer(_cnt_type)
            obj.setLogic(logic)
        except exceptions.UnsupportedFormatError:
            core.Kernel.getSingleton().logManager.logWarning("Format %s not supported for viewing" % (_session.get_idtf(_cnt_type)))
        
        return obj
    else:
        type_name = "node/const/elem"
        
        # creating type name based on element type    
        _const = getConstStr(_type)
                
        _stype = "elem"
        if sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_sheaf], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "sheaf"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_ext_obj_abstract], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "abstract"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_bin_orient_norole_rel], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "binary"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_ext_obj_real], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "real"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_bin_orient_role_rel], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "role"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_struct], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "struct"
        elif sc_utils.checkIncToSets(_session, _el, [keynodes.info.stype_concept_norel], sc.SC_A_CONST | sc.SC_POS | sc.SC_PERMANENT):
            _stype = "term"
        
        if _const is not None:
            type_name = "node/%s/%s" % (_const, _stype)
        else:
            type_name = "node/elem"
        
        obj = scg_alphabet.createSCgNode(type_name)
        obj._setScAddr(_el)
        return obj
    
    return None
Ejemplo n.º 3
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 = []
Ejemplo n.º 4
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
Ejemplo n.º 5
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
Ejemplo n.º 6
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
Ejemplo n.º 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
Ejemplo n.º 8
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
Ejemplo n.º 9
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