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
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)
def _onKeyReleased(self, _evt): """Key released event """ BaseEditMode._onKeyReleased(self, _evt) key = _evt.key if key == ois.KC_LSHIFT: self._shift = False return False
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 __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
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
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
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
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
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
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
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
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 _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
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
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
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
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
def delete(self): self.objectInfoPanel.delete() BaseEditMode.delete(self)
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): """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
def _onRootChanged(self, _isRoot): BaseEditMode._onRootChanged(self, _isRoot) self.objectInfoPanel.setVisible(_isRoot)
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
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
def deactivate(self): """Deactivation message """ BaseEditMode.deactivate(self) self._updateVisualMenu()
def _onKeyReleased(self, _evt): """Keyboard button released event """ if BaseEditMode._onKeyReleased(self, _evt): return True return False
def activate(self): """Activation message """ BaseEditMode.activate(self) self._updateVisualMenu()
def __del__(self): BaseEditMode.__del__(self)
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
def _onKeyPressed(self, _evt): """Event on key pressed """ if BaseEditMode._onKeyPressed(self, _evt): return True 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 deactivate(self): BaseEditMode.deactivate(self)
def _selectObject(self, _object): BaseEditMode._selectObject(self, _object) self.objectInfoPanel.setObject(_object)
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
def activate(self): BaseEditMode.activate(self)
def activate(self): """Activation message """ BaseEditMode.activate(self)
def _onKeyReleased(self, _evt): """Event key released """ if BaseEditMode._onKeyReleased(self, _evt): return True return False
def deactivate(self): """Deactivation message """ BaseEditMode.deactivate(self)
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