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 = []
def _createPair(self, _beg, _end, _type = "pair/pos/-/orient/const"): """Creates pair with begin and end. @param _beg: begin object @type _beg: object.Object @param _end: end object @type _end: object.Object @param _type: pair type @type _type: str @return: created pair """ pair = scg_alphabet.createSCgPair(_type) sheet = self._getSheet() sheet.addChild(pair) pair.setBegin(_beg) pair.setEnd(_end) pair.setState(objects.Object.OS_Normal) return pair
def _createPair(self, _beg, _end, _type="pair/pos/-/orient/const"): """Creates pair with begin and end. @param _beg: begin object @type _beg: object.Object @param _end: end object @type _end: object.Object @param _type: pair type @type _type: str @return: created pair """ pair = scg_alphabet.createSCgPair(_type) sheet = self._getSheet() sheet.addChild(pair) pair.setBegin(_beg) pair.setEnd(_end) pair.setState(objects.Object.OS_Normal) return pair
def build_pair(_session, _el, _type): """Builds SCgPair based on sc-element """ type_name = "pair/-/-/-/-" _const = getConstStr(_type) _pos = getPosStr(_type) _orient = "orient" assert _pos is not None and _const is not None if _type & sc.SC_TEMPORARY: type_name = "pair/%s/time/%s/%s" % (_pos, _orient, _const) else: type_name = "pair/%s/-/%s/%s" % (_pos, _orient, _const) obj = scg_alphabet.createSCgPair(type_name) obj._setScAddr(_el) return obj
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
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
def translate_impl(self, _input, _output): """Translator implementation @param _input: input data set @type _input: sc_global_addr @param _output: output window (must be created) @type _output: sc_global_addr @return: list of errors each element of list is a tuple(object, error) @rtype: list """ errors = [] # FIXME: think about multiply windows for one sc-element objs = objects.ScObject._sc2Objects(_output) assert len(objs) > 0 sheet = objs[0] assert type(sheet) is objects.ObjectSheet session = core.Kernel.session() trans_objs = [] result_objs = [] # creating list of element to translate it = session.create_iterator(session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a, _input, sc.SC_A_CONST | sc.SC_POS, 0), True) list_of_addrs = [] while not it.is_over(): trans_objs.append(it.value(2)) list_of_addrs.append(str(it.value(2).this)) it.next() # getting objects on sheet childs = sheet.getChilds() sc_scg = {} object_types = {} for obj in childs: addr = obj._getScAddr() if addr is not None: s_addr = str(addr.this) sc_scg[s_addr] = obj object_types[s_addr] = session.get_type(addr) list_of_addrs.append(s_addr) ignore_list = [] process_pairs = [] # translating binary and noorient pairs and store types for obj in trans_objs: _type = session.get_type(obj) object_types[str(obj.this)] = _type if str(obj.this) in ignore_list: continue # checking for sheaf nodes if _type & sc.SC_NODE and sc_utils.isNodeSheaf(session, obj): res = get_pair_binary(session, obj, list_of_addrs) if res is not None: for idx in xrange(len(res[0])): if idx != 0 and idx != 4: ignore_list.append(str(res[0][idx].this)) #ignore_list.extend(res[0]) # creating pair _const = "const" if _type & sc.SC_VAR: _const = "var" elif _type & sc.SC_METAVAR: _const = "meta" _orient = "-" if res[1]: _orient = "orient" type_name = "pair/-/-/%s/%s" % (_orient, _const) # creating pair scg_obj = scg_alphabet.createSCgPair(type_name) scg_obj._setScAddr(obj) sc_scg[str(obj.this)] = scg_obj # append additional sc-addrs for addr in res[0]: if addr.this != obj.this: scg_obj.additionalScAddrs.append(addr) #scg_obj.setWasInMemory(True) # appending to sheet #sheet.addChild(scg_obj) result_objs.append(scg_obj) process_pairs.append( (res[0][2], res[0][0], res[0][4]) ) # translating objects for obj in trans_objs: if sc_scg.has_key(str(obj.this)) or (str(obj.this) in ignore_list): continue _type = object_types[str(obj.this)] # checking pairs if _type & sc.SC_ARC: beg = session.get_beg(obj) end = session.get_end(obj) if (beg is not None) and (end is not None): if (str(beg.this) in list_of_addrs) and (str(end.this) in list_of_addrs): process_pairs.append((obj, beg, end)) else: continue # skipping dead (haven't begin or end element) pairs # translating sc-element to scg-object scg_obj = translate_obj(session, obj, object_types[str(obj.this)]) sc_scg[str(obj.this)] = scg_obj # translating identificators # idtf = session.get_idtf(obj) # if not sc_utils.isSystemId(idtf): # scg_obj.setText(idtf) #scg_obj.setWasInMemory(True) # adding to window #sheet.addChild(scg_obj) result_objs.append(scg_obj) # linking pairs for pair, beg, end in process_pairs: scg_pair = sc_scg[str(pair.this)] if sc_scg.has_key(str(beg.this)) and sc_scg.has_key(str(end.this)): scg_beg = sc_scg[str(beg.this)] scg_end = sc_scg[str(end.this)] assert scg_end is not None and scg_beg is not None scg_pair.setBegin(scg_beg) scg_pair.setEnd(scg_end) # get all pairs from sheet and link them to begin and end object if they are present in translated set for obj in sheet.getChilds(): if isinstance(obj, scg_objects.SCgPair): addr = obj._getScAddr() if addr is not None: beg_addr = session.get_beg(addr) end_addr = session.get_end(addr) if (beg_addr is not None) and sc_scg.has_key(str(beg_addr.this)): obj.setBegin(sc_scg[str(beg_addr.this)]) if (end_addr is not None) and sc_scg.has_key(str(end_addr.this)): obj.setEnd(sc_scg[str(end_addr.this)]) # append into sheet for obj in result_objs: obj.setWasInMemory(True) sheet.addChild(obj) return errors
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
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
def translate_impl(self, _input, _output): """Translator implementation @param _input: input data set @type _input: sc_global_addr @param _output: output window (must be created) @type _output: sc_global_addr @return: list of errors each element of list is a tuple(object, error) @rtype: list """ errors = [] # FIXME: think about multiply windows for one sc-element objs = objects.ScObject._sc2Objects(_output) assert len(objs) > 0 sheet = objs[0] assert type(sheet) is objects.ObjectSheet session = core.Kernel.session() trans_objs = [] # creating list of element to translate it = session.create_iterator(session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a, _input, sc.SC_A_CONST | sc.SC_POS, 0), True) list_of_addrs = [] while not it.is_over(): trans_objs.append(it.value(2)) list_of_addrs.append(str(it.value(2).this)) it.next() # getting objects on sheet childs = sheet.getChilds() sc_scg = {} object_types = {} for obj in childs: addr = obj._getScAddr() if addr is not None: s_addr = str(addr.this) sc_scg[s_addr] = obj object_types[s_addr] = session.get_type(addr) list_of_addrs.append(s_addr) ignore_list = [] process_pairs = [] # translating binary and noorient pairs and store types for obj in trans_objs: _type = session.get_type(obj) object_types[str(obj.this)] = _type if str(obj.this) in ignore_list: continue # checking for sheaf nodes if _type & sc.SC_NODE and sc_utils.isNodeSheaf(session, obj): res = get_pair_binary(session, obj, list_of_addrs) if res is not None: for idx in xrange(len(res[0])): if idx != 0 and idx != 4: ignore_list.append(str(res[0][idx].this)) #ignore_list.extend(res[0]) # creating pair _const = "const" if _type & sc.SC_VAR: _const = "var" elif _type & sc.SC_METAVAR: _const = "meta" _orient = "-" if res[1]: _orient = "orient" type_name = "pair/-/-/%s/%s" % (_orient, _const) # creating pair scg_obj = scg_alphabet.createSCgPair(type_name) scg_obj._setScAddr(obj) sc_scg[str(obj.this)] = scg_obj # append additional sc-addrs for addr in res[0]: if addr.this != obj.this: scg_obj.additionalScAddrs.append(addr) scg_obj.setWasInMemory(True) # appending to sheet sheet.addChild(scg_obj) process_pairs.append( (res[0][2], res[0][0], res[0][4]) ) # translating objects for obj in trans_objs: if sc_scg.has_key(str(obj.this)) or (str(obj.this) in ignore_list): continue _type = object_types[str(obj.this)] # checking pairs if _type & sc.SC_ARC: beg = session.get_beg(obj) end = session.get_end(obj) if (beg is not None) and (end is not None): if (str(beg.this) in list_of_addrs) and (str(end.this) in list_of_addrs): process_pairs.append((obj, beg, end)) else: continue # skipping dead (haven't begin or end element) pairs # translating sc-element to scg-object scg_obj = translate_obj(session, obj, object_types[str(obj.this)]) sc_scg[str(obj.this)] = scg_obj # translating identificators idtf = session.get_idtf(obj) if not sc_utils.isSystemId(idtf): scg_obj.setText(idtf) scg_obj.setWasInMemory(True) # adding to window sheet.addChild(scg_obj) # linking pairs for pair, beg, end in process_pairs: scg_pair = sc_scg[str(pair.this)] if sc_scg.has_key(str(beg.this)) and sc_scg.has_key(str(end.this)): scg_beg = sc_scg[str(beg.this)] scg_end = sc_scg[str(end.this)] assert scg_end is not None and scg_beg is not None scg_pair.setBegin(scg_beg) scg_pair.setEnd(scg_end) # get all pairs from sheet and link them to begin and end object if they are present in translated set for obj in sheet.getChilds(): if isinstance(obj, scg_objects.SCgPair): addr = obj._getScAddr() if addr is not None: beg_addr = session.get_beg(addr) end_addr = session.get_end(addr) if (beg_addr is not None) and sc_scg.has_key(str(beg_addr.this)): obj.setBegin(sc_scg[str(beg_addr.this)]) if (end_addr is not None) and sc_scg.has_key(str(end_addr.this)): obj.setEnd(sc_scg[str(end_addr.this)]) return errors