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"); }
// Compare two transfer function nodes by intensity bool CompareNodes(QNode NodeA, QNode NodeB) { return NodeA.GetIntensity() < NodeB.GetIntensity(); }