def mouseReleaseEvent(self, event): ''' Inform the scene viewer of a mouse release event. ''' event.accept() if not self._ignore_mouse_events and self._selection_mode != SelectionMode.NONE: x = event.x() y = event.y() # Construct a small frustum to look for nodes in. top_region = self._sceneviewer.getScene().getRegion() top_region.beginHierarchicalChange() self._selection_box.setVisibilityFlag(False) if (x != self._selection_position_start[0] and y != self._selection_position_start[1]): left = min(x, self._selection_position_start[0]) right = max(x, self._selection_position_start[0]) bottom = min(y, self._selection_position_start[1]) top = max(y, self._selection_position_start[1]) self._scenepicker.setSceneviewerRectangle( self._sceneviewer, SCENECOORDINATESYSTEM_LOCAL, left, bottom, right, top) if self._selection_mode == SelectionMode.EXCLUSIVE: self._selectionGroup.clear() if self._nodeSelectMode or self._dataSelectMode: self._scenepicker.addPickedNodesToFieldGroup( self._selectionGroup) if self._elemSelectMode: self._scenepicker.addPickedElementsToFieldGroup( self._selectionGroup) else: self._scenepicker.setSceneviewerRectangle( self._sceneviewer, SCENECOORDINATESYSTEM_LOCAL, x - 3.5, y - 3.5, x + 3.5, y + 3.5) if self._nodeSelectMode and self._elemSelectMode and self._selection_mode == SelectionMode.EXCLUSIVE and not self._scenepicker.getNearestGraphics( ).isValid(): self._selectionGroup.clear() if self._nodeSelectMode and ( self._scenepicker.getNearestGraphics( ).getFieldDomainType() == Field.DOMAIN_TYPE_NODES): node = self._scenepicker.getNearestNode() nodeset = node.getNodeset() nodegroup = self._selectionGroup.getFieldNodeGroup(nodeset) if not nodegroup.isValid(): nodegroup = self._selectionGroup.createFieldNodeGroup( nodeset) group = nodegroup.getNodesetGroup() if self._selection_mode == SelectionMode.EXCLUSIVE: remove_current = group.getSize( ) == 1 and group.containsNode(node) self._selectionGroup.clear() if not remove_current: group.addNode(node) elif self._selection_mode == SelectionMode.ADDITIVE: if group.containsNode(node): group.removeNode(node) else: group.addNode(node) if self._elemSelectMode and ( self._scenepicker.getNearestGraphics( ).getFieldDomainType() in [ Field.DOMAIN_TYPE_MESH1D, Field.DOMAIN_TYPE_MESH2D, Field.DOMAIN_TYPE_MESH3D, Field.DOMAIN_TYPE_MESH_HIGHEST_DIMENSION ]): elem = self._scenepicker.getNearestElement() mesh = elem.getMesh() elementgroup = self._selectionGroup.getFieldElementGroup( mesh) if not elementgroup.isValid(): elementgroup = self._selectionGroup.createFieldElementGroup( mesh) group = elementgroup.getMeshGroup() if self._selection_mode == SelectionMode.EXCLUSIVE: remove_current = group.getSize( ) == 1 and group.containsElement(elem) self._selectionGroup.clear() if not remove_current: group.addElement(elem) elif self._selection_mode == SelectionMode.ADDITIVE: if group.containsElement(elem): group.removeElement(elem) else: group.addElement(elem) top_region.endHierarchicalChange() self._selection_mode = SelectionMode.NONE elif not self._ignore_mouse_events and self._handle_mouse_events: SceneviewerWidget.mouseReleaseEvent(self, event) self._selection_mode = SelectionMode.NONE
def mouseReleaseEvent(self, event): ''' Inform the scene viewer of a mouse release event. ''' event.accept() if not self._ignore_mouse_events and self._selection_mode != SelectionMode.NONE: x = event.x() y = event.y() # Construct a small frustum to look for nodes in. top_region = self._sceneviewer.getScene().getRegion() top_region.beginHierarchicalChange() self._selection_box.setVisibilityFlag(False) if (x != self._selection_position_start[0] and y != self._selection_position_start[1]): left = min(x, self._selection_position_start[0]) right = max(x, self._selection_position_start[0]) bottom = min(y, self._selection_position_start[1]) top = max(y, self._selection_position_start[1]) self._scenepicker.setSceneviewerRectangle(self._sceneviewer, SCENECOORDINATESYSTEM_LOCAL, left, bottom, right, top); if self._selection_mode == SelectionMode.EXCLUSIVE: self._selectionGroup.clear() if self._nodeSelectMode or self._dataSelectMode: self._scenepicker.addPickedNodesToFieldGroup(self._selectionGroup) if self._elemSelectMode: self._scenepicker.addPickedElementsToFieldGroup(self._selectionGroup) else: self._scenepicker.setSceneviewerRectangle(self._sceneviewer, SCENECOORDINATESYSTEM_LOCAL, x - 3.5, y - 3.5, x + 3.5, y + 3.5) if self._nodeSelectMode and self._elemSelectMode and self._selection_mode == SelectionMode.EXCLUSIVE and not self._scenepicker.getNearestGraphics().isValid(): self._selectionGroup.clear() if self._nodeSelectMode and (self._scenepicker.getNearestGraphics().getFieldDomainType() == Field.DOMAIN_TYPE_NODES): node = self._scenepicker.getNearestNode() nodeset = node.getNodeset() nodegroup = self._selectionGroup.getFieldNodeGroup(nodeset) if not nodegroup.isValid(): nodegroup = self._selectionGroup.createFieldNodeGroup(nodeset) group = nodegroup.getNodesetGroup() if self._selection_mode == SelectionMode.EXCLUSIVE: remove_current = group.getSize() == 1 and group.containsNode(node) self._selectionGroup.clear() if not remove_current: group.addNode(node) elif self._selection_mode == SelectionMode.ADDITIVE: if group.containsNode(node): group.removeNode(node) else: group.addNode(node) if self._elemSelectMode and (self._scenepicker.getNearestGraphics().getFieldDomainType() in [Field.DOMAIN_TYPE_MESH1D, Field.DOMAIN_TYPE_MESH2D, Field.DOMAIN_TYPE_MESH3D, Field.DOMAIN_TYPE_MESH_HIGHEST_DIMENSION]): elem = self._scenepicker.getNearestElement() mesh = elem.getMesh() elementgroup = self._selectionGroup.getFieldElementGroup(mesh) if not elementgroup.isValid(): elementgroup = self._selectionGroup.createFieldElementGroup(mesh) group = elementgroup.getMeshGroup() if self._selection_mode == SelectionMode.EXCLUSIVE: remove_current = group.getSize() == 1 and group.containsElement(elem) self._selectionGroup.clear() if not remove_current: group.addElement(elem) elif self._selection_mode == SelectionMode.ADDITIVE: if group.containsElement(elem): group.removeElement(elem) else: group.addElement(elem) top_region.endHierarchicalChange() self._selection_mode = SelectionMode.NONE elif not self._ignore_mouse_events and self._handle_mouse_events: SceneviewerWidget.mouseReleaseEvent(self, event) self._selection_mode = SelectionMode.NONE