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 _onMouseMoved(self, _evt): """Mouse moved event """ mstate = _evt.get_state() prev_pos = self.mouse_pos self.mouse_pos = (mstate.X.abs, mstate.Y.abs) # move object if self.state is SCgEditMode.ES_Move: pos = self.move_obj.getPosition() #self.move_obj.setPosition((pos[0] + dpos[0], pos[1] + dpos[1])) if render_engine.viewMode is render_engine.Mode_Isometric: self.move_obj.setPosition( render_engine.pos2dTo3dIsoPos(self.mouse_pos)) else: self.move_obj.setPosition( render_engine.pos2dToViewPortRay( self.mouse_pos).getPoint(25.0)) # if self.vis_menu.isShow(): self.vis_menu.move(self.mouse_pos) return True elif self.state is SCgEditMode.ES_LineCreate: pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos) self.line_mode_obj.setPosition(pos) self._updateLineCreationObjects() self._highlight() return True elif self.state is SCgEditMode.ES_BusCreate: pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos) self.line_mode_obj.setPosition(pos) self._updateLineCreationObjects() self._highlight() return True elif self.state is SCgEditMode.ES_Translate: if render_engine.viewMode is render_engine.Mode_Isometric: render_engine._ogreCameraNode.translate( -mstate.X.rel / float(render_engine.scale2d), mstate.Y.rel / float(render_engine.scale2d), 0.0) self._logic._getSheet()._updateChildTexts() else: self.rotX = ogre.Degree(-mstate.X.rel * 0.13) self.rotY = ogre.Degree(-mstate.Y.rel * 0.13) #FIXME: add perspective mode # scaling if self._ctrl and mstate.Z.rel != 0 and render_engine.viewMode == render_engine.Mode_Isometric: sc = 1.0 + mstate.Z.rel / 1200.0 sheet = self._logic._getSheet() sheet.setScale(sheet.getScale() * sc) self._highlight() return False
def _onMouseMoved(self, _evt): """Mouse moved event """ mstate = _evt.get_state() prev_pos = self.mouse_pos self.mouse_pos = (mstate.X.abs, mstate.Y.abs) # move object if self.state is SCgEditMode.ES_Move: pos = self.move_obj.getPosition() #self.move_obj.setPosition((pos[0] + dpos[0], pos[1] + dpos[1])) if render_engine.viewMode is render_engine.Mode_Isometric: self.move_obj.setPosition(render_engine.pos2dTo3dIsoPos(self.mouse_pos)) else: self.move_obj.setPosition(render_engine.pos2dToViewPortRay(self.mouse_pos).getPoint(25.0)) # if self.vis_menu.isShow(): self.vis_menu.move(self.mouse_pos) return True elif self.state is SCgEditMode.ES_LineCreate: pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos) self.line_mode_obj.setPosition(pos) self._updateLineCreationObjects() self._highlight() return True elif self.state is SCgEditMode.ES_BusCreate: pos = render_engine.pos2dTo3dIsoPos(self.mouse_pos) self.line_mode_obj.setPosition(pos) self._updateLineCreationObjects() self._highlight() return True elif self.state is SCgEditMode.ES_Translate: if render_engine.viewMode is render_engine.Mode_Isometric: render_engine._ogreCameraNode.translate(-mstate.X.rel / float(render_engine.scale2d), mstate.Y.rel / float(render_engine.scale2d), 0.0) self._logic._getSheet()._updateChildTexts() else: self.rotX = ogre.Degree(-mstate.X.rel * 0.13) self.rotY = ogre.Degree(-mstate.Y.rel * 0.13) #FIXME: add perspective mode # scaling if self._ctrl and mstate.Z.rel != 0 and render_engine.viewMode == render_engine.Mode_Isometric: sc = 1.0 + mstate.Z.rel / 1200.0 sheet = self._logic._getSheet() sheet.setScale(sheet.getScale() * sc) self._highlight() return False
def createPoint(self, _pos): """Creates point based on mouse position @param _pos: mouse coordinates @type _pos: tuple @return: created geometry point object @rtype: GeometryPoint """ point_obj = gobjects.GeometryPoint() point_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos)) point_obj.setState(Object.OS_Normal) return point_obj
def createVertex(self, _pos): """Creates vertex based on mouse position @param _pos: mouse coordinates @type _pos: tuple @return: created graph vertex object @rtype: GraphPoint """ vertex_obj = gobjects.GraphVertex() vertex_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos)) vertex_obj.setState(Object.OS_Normal) return vertex_obj
def createPoint(self, _pos): """Creates point based on mouse position @param _pos: mouse coordinates @type _pos: tuple @return: created geometry point object @rtype: GeometryPoint """ point_obj = gobjects.GeometryPoint() point_obj.setPosition(render_engine.pos2dTo3dIsoPos(_pos)) point_obj.setState(Object.OS_Normal) point_obj.setText(point_obj.getAvailableName()) return point_obj
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
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 setEndPointPos(self, end_point_pos): self.end_pos = render_engine.pos2dTo3dIsoPos(end_point_pos) self.orient = self.attachedNode.getPosition() - self.end_pos
def _onMousePressed(self, _evt, _id): """Mouse button pressed event """ mstate = _evt.get_state() # self._createNode((mstate.X.abs, mstate.Y.abs)) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True) # * if pressed left button and there is any object under mouse, then # start move it if _id == ois.MB_Left: # check objects under mouse if self.state is SCgEditMode.ES_None: if self._ctrl: sheet = comutils._getFirstObjectTypeFromList(mobjects, [objects.ObjectSheet]) if sheet is not None: addr = sheet._getScAddr() kernel = core.Kernel.getSingleton() if sheet is not None and addr is not None and not kernel.haveOutputWindow(addr): kernel.addOutputWindow(sheet._getScAddr()) else: if len(mobjects) is not 0: self.move_obj = comutils._getFirstObjectTypeFromList(mobjects, [scg_objects.SCgNode, objects.ObjectSheet, scg_objects.SCgContour]) if self.move_obj is not None: self.state = SCgEditMode.ES_Move render_engine._gui_ignore_input_proc_result = True # selecting movable object self._selectObject(self.move_obj) return True # selecting first object under mouse self._selectObject(mobjects[0][1]) return True # * if pressed left button and there are no objects under mouse, then # creating new scg-node elif _id == ois.MB_Right: # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is 0: self._logic._createNode((mstate.X.abs, mstate.Y.abs)) self.state = SCgEditMode.ES_None return True else: if self.line_mode_beg is None: self.state = SCgEditMode.ES_LineCreate # setting begin object self.line_mode_beg = mobjects[0][1] self.line_mode_line.setBegin(self.line_mode_beg) self.line_mode_obj.setPosition(render_engine.pos2dTo3dIsoPos((mstate.X.abs, mstate.Y.abs))) # adding to scene sheet = self._logic._getSheet() render_engine.SceneNode.addChild(sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self._updateLineCreationObjects() return True # line creation state elif (self.state is SCgEditMode.ES_LineCreate) and (self.line_mode_beg is not None): # check if is there if len(mobjects) is not 0: self._logic._createPair(self.line_mode_beg, mobjects[0][1]) 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 True elif _id == ois.MB_Middle: if self.state == SCgEditMode.ES_None: self.state = SCgEditMode.ES_Translate render_engine.Gui.setPointer("hand") return True if self._logic._getSheet().haveSelected() and self.state is SCgEditMode.ES_None: # removing selection from all nodes self._logic._getSheet().unselectAll() return True return False
def _onMousePressed(self, _evt, _id): """Mouse button pressed event """ mstate = _evt.get_state() # self._createNode((mstate.X.abs, mstate.Y.abs)) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True) # * if pressed left button and there is any object under mouse, then # start move it if _id == ois.MB_Left: # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is not 0: self.move_obj = comutils._getFirstObjectTypeFromList( mobjects, [ scg_objects.SCgNode, objects.ObjectSheet, scg_objects.SCgContour ]) if self.move_obj is not None: self.state = SCgEditMode.ES_Move render_engine._gui_ignore_input_proc_result = True # selecting movable object self._selectObject(self.move_obj) return True # selecting first object under mouse self._selectObject(mobjects[0][1]) return True # * if pressed left button and there are no objects under mouse, then # creating new scg-node elif _id == ois.MB_Right: # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is 0: self._logic._createNode((mstate.X.abs, mstate.Y.abs)) self.state = SCgEditMode.ES_None return True else: if self.line_mode_beg is None: self.state = SCgEditMode.ES_LineCreate # setting begin object self.line_mode_beg = mobjects[0][1] self.line_mode_line.setBegin(self.line_mode_beg) self.line_mode_obj.setPosition( render_engine.pos2dTo3dIsoPos( (mstate.X.abs, mstate.Y.abs))) # adding to scene sheet = self._logic._getSheet() render_engine.SceneNode.addChild( sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self._updateLineCreationObjects() return True # line creation state elif (self.state is SCgEditMode.ES_LineCreate) and ( self.line_mode_beg is not None): # check if is there if len(mobjects) is not 0: self._logic._createPair(self.line_mode_beg, mobjects[0][1]) 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 True elif _id == ois.MB_Middle: if self.state == SCgEditMode.ES_None: self.state = SCgEditMode.ES_Translate render_engine.Gui.setPointer("hand") return True if self._logic._getSheet().haveSelected( ) and self.state is SCgEditMode.ES_None: # removing selection from all nodes self._logic._getSheet().unselectAll() return True return False
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 _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 _onMousePressed(self, _evt, _id): """Mouse button pressed event """ mstate = _evt.get_state() # self._createNode((mstate.X.abs, mstate.Y.abs)) # getting objects under mouse mobjects = self._logic._getSheet()._getObjectsUnderMouse(True) # * if pressed left button and there is any object under mouse, then # start move it if _id == ois.MB_Left: # check objects under mouse if self.state is SCgEditMode.ES_None: if self._ctrl: sheet = comutils._getFirstObjectTypeFromList(mobjects, [objects.ObjectSheet]) if sheet is not None: addr = sheet._getScAddr() kernel = core.Kernel.getSingleton() if sheet is not None and addr is not None and not kernel.haveOutputWindow(addr): kernel.addOutputWindow(sheet._getScAddr()) else: if len(mobjects) is not 0: self.move_obj = comutils._getFirstObjectTypeFromList(mobjects, [scg_objects.SCgNode, objects.ObjectSheet, scg_objects.SCgContour]) if self.move_obj is not None: self.state = SCgEditMode.ES_Move render_engine._gui_ignore_input_proc_result = True # selecting movable object self._selectObject(self.move_obj) return True # selecting first object under mouse self._selectObject(mobjects[0][1]) return True # * if pressed left button and there are no objects under mouse, then # creating new scg-node elif _id == ois.MB_Right: #check if modifire key pressed is_modifire_down = render_engine._oisKeyboard.isModifierDown(render_engine._oisKeyboard.Modifier.Shift) # check objects under mouse if self.state is SCgEditMode.ES_None: if len(mobjects) is 0: #check if contour draw mode if is_modifire_down: self.contour_points.append(render_engine.pos2dTo3dIsoPos([mstate.X.abs, mstate.Y.abs])) self.state = SCgEditMode.ES_ContourCreate else: self._logic._createNode((mstate.X.abs, mstate.Y.abs)) self.state = SCgEditMode.ES_None return True else: if self.line_mode_beg is None: self.state = SCgEditMode.ES_LineCreate # setting begin object self.line_mode_beg = mobjects[0][1] self.line_mode_line.setBegin(self.line_mode_beg) self.line_mode_obj.setPosition(render_engine.pos2dTo3dIsoPos((mstate.X.abs, mstate.Y.abs))) # adding to scene sheet = self._logic._getSheet() render_engine.SceneNode.addChild(sheet.sceneNodeChilds, self.line_mode_line.sceneNode) self._updateLineCreationObjects() return True # contour creation state elif self.state is SCgEditMode.ES_ContourCreate: sheet=self._logic._getSheet() self.contour_points.append(render_engine.pos2dTo3dIsoPos(((mstate.X.abs, mstate.Y.abs)))) self.contour_lines.append(self._logic._createLine(self.contour_points[-1],self.contour_points[-2])) if is_modifire_down and len(self.contour_points)>2: contour = self._logic._createContour(self.contour_points) for line in self.contour_lines: render_engine._ogreSceneManager.getRootSceneNode().removeChild(line) self.contour_lines = [] sheet.removeChild(contour) childs = sheet.getChilds() for i in range(len(childs)): current = childs[0] if scg_utils.checkOnPointInContour(current.position,self.contour_points): sheet.removeChild(current) render_engine.SceneNode.addChild(contour.sceneNode, current.sceneNode) self._logic._getSheet().addChild(contour) self.contour_points = [] self.state = SCgEditMode.ES_None # line creation state elif (self.state is SCgEditMode.ES_LineCreate) and (self.line_mode_beg is not None): # check if is there if len(mobjects) is not 0: self._logic._createPair(self.line_mode_beg, mobjects[0][1]) 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 True elif _id == ois.MB_Middle: if self.state == SCgEditMode.ES_None: self.state = SCgEditMode.ES_Translate render_engine.Gui.setPointer("hand") return True if self._logic._getSheet().haveSelected() and self.state is SCgEditMode.ES_None: # removing selection from all nodes self._logic._getSheet().unselectAll() return True 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 _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