QTransferFunction& QTransferFunction::operator = (const QTransferFunction& Other) { QPresetXML::operator=(Other); blockSignals(true); m_Nodes = Other.m_Nodes; m_pSelectedNode = Other.m_pSelectedNode; // Notify us when the nodes change for (int i = 0; i < m_Nodes.size(); i++) connect(&m_Nodes[i], SIGNAL(NodeChanged(QNode*)), this, SLOT(OnNodeChanged(QNode*))); m_DensityScale = Other.m_DensityScale; m_ShadingType = Other.m_ShadingType; m_GradientFactor = Other.m_GradientFactor; // Update node's range UpdateNodeRanges(); blockSignals(false); // Notify others that the function has changed selection has changed emit Changed(); SetSelectedNode(NULL); return *this; }
void QTransferFunction::RemoveNode(QNode* pNode) { if (!pNode) return; // Remove the connection disconnect(pNode, SIGNAL(NodeChanged(QNode*)), this, SLOT(OnNodeChanged(QNode*))); // Node index of the to be removed node int NodeIndex = m_Nodes.indexOf(*pNode); // Remove from list and memory m_Nodes.remove(*pNode); // Update ID's for (int i = 0; i < m_Nodes.size(); i++) m_Nodes[i].m_ID = i; // Update node's range UpdateNodeRanges(); // Select the previous node NodeIndex = qMax(0, NodeIndex - 1); SetSelectedNode(NodeIndex); // Inform others that the transfer function has changed emit Changed(); Log("Removed node", "layer-select-point"); }
void QTransferFunction::AddNode(const QNode& Node) { // Add the node to the list m_Nodes.append(Node); // Cache node QNode& CacheNode = m_Nodes.back(); // Sort the transfer function nodes based on intensity qSort(m_Nodes.begin(), m_Nodes.end(), CompareNodes); // Update ID's for (int i = 0; i < m_Nodes.size(); i++) m_Nodes[i].m_ID = i; // Update ranges UpdateNodeRanges(); // Notify us when the node changes connect(&CacheNode, SIGNAL(NodeChanged(QNode*)), this, SLOT(OnNodeChanged(QNode*))); for (int i = 0; i < m_Nodes.size(); i++) { if (Node.GetIntensity() == m_Nodes[i].GetIntensity()) SetSelectedNode(&m_Nodes[i]); } // Inform others that the transfer function has changed emit Changed(); if (!signalsBlocked()) Log("Inserted node", "layer-select-point"); }
void QTransferFunction::SelectLastNode(void) { if (m_Nodes.size() == 0) return; SetSelectedNode(&m_Nodes[m_Nodes.size() - 1]); }
void QTransferFunction::SelectNextNode(void) { if (!m_pSelectedNode) return; int Index = m_Nodes.indexOf(*GetSelectedNode()); if (Index < 0) return; // Compute new index const int NewIndex = qMin(m_Nodes.size() - 1, qMax(0, Index + 1)); // Set selected node SetSelectedNode(&m_Nodes[NewIndex]); }
void touchmind::win::CanvasPanel::CancelSelectedNode() { SetSelectedNode(nullptr); }