void LabelCollapsedNodesTreeDrawingListener::afterDrawNode(const DrawNodeEvent& event) { try { //Pointer-based event (efficient): const DrawINodeEvent& eventC = dynamic_cast<const DrawINodeEvent&>(event); if (eventC.getINode()->getInfos().isCollapsed()) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); size_t size = TreeTemplateTools::getNumberOfLeaves(*eventC.getINode()); string text = ""; if (eventC.getINode()->hasName()) text += eventC.getINode()->getName() + " "; text += "(" + TextTools::toString(size) + " leaves)"; gd->drawText(cursor.getX(), cursor.getY(), text, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); } } catch(std::bad_cast& e) { //Id-based event (less-efficient): const TreeDrawing* td = event.getTreeDrawing(); if (td->isNodeCollapsed(event.getNodeId())) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); size_t size = TreeTools::getNumberOfLeaves(*td->getTree(), event.getNodeId()); string text = ""; if (td->getTree()->hasNodeName(event.getNodeId())) text += td->getTree()->getNodeName(event.getNodeId()) + " "; text += "(" + TextTools::toString(size) + " leaves)"; gd->drawText(cursor.getX(), cursor.getY(), text, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); } } }
void LeafNamesTreeDrawingListener::afterDrawNode(const DrawNodeEvent& event) { try { //Pointer-based event (efficient): const DrawINodeEvent& eventC = dynamic_cast<const DrawINodeEvent&>(event); if (eventC.getINode()->isLeaf()) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontLeafNames); string name = eventC.getINode()->getName(); gd->drawText(cursor.getX(), cursor.getY(), name, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); gd->setCurrentFont(fontBck); } } catch (bad_cast& e) { //Id-based event (less-efficient): const TreeDrawing* td = event.getTreeDrawing(); if (td->getTree()->isLeaf(event.getNodeId())) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontLeafNames); string name = td->getTree()->getNodeName(event.getNodeId()); gd->drawText(cursor.getX(), cursor.getY(), name, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); gd->setCurrentFont(fontBck); } } }
void LabelInnerNodesTreeDrawingListener::afterDrawNode(const DrawNodeEvent& event) { try { //Pointer-based event (efficient): const DrawINodeEvent& eventC = dynamic_cast<const DrawINodeEvent&>(event); if (!eventC.getINode()->getInfos().isCollapsed()) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); if (eventC.getINode()->hasName()) { string name = eventC.getINode()->getName(); gd->drawText(cursor.getX(), cursor.getY(), name, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); } } } catch(std::bad_cast& e) { //Id-based event (less-efficient): const TreeDrawing* td = event.getTreeDrawing(); if (! td->isNodeCollapsed(event.getNodeId())) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); if (td->getTree()->hasNodeName(event.getNodeId())) { string name = td->getTree()->getNodeName(event.getNodeId()); gd->drawText(cursor.getX(), cursor.getY(), name, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); } } } }
void NodeClickableAreasTreeDrawingListener::afterDrawNode(const DrawNodeEvent& event) { const TreeDrawing* td = event.getTreeDrawing(); double r = td->getDisplaySettings().pointArea; GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); gd->drawRect(cursor.getX() - r, cursor.getY() - r, 2 * r, 2 * r); }
void NodesIdTreeDrawingListener::afterDrawNode(const DrawNodeEvent& event) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontNodesId); string name = "#" + TextTools::toString(event.getNodeId()); gd->drawText(cursor.getX(), cursor.getY(), name, cursor.getHPos(), cursor.getVPos(), cursor.getAngle()); gd->setCurrentFont(fontBck); }
void BootstrapValuesTreeDrawingListener::afterDrawBranch(const DrawBranchEvent& event) { try { //Pointer-based event (efficient): const DrawINodeEvent& eventC = dynamic_cast<const DrawINodeEvent&>(event); if (eventC.getINode()->hasBranchProperty(TreeTools::BOOTSTRAP)) { const Clonable* b = eventC.getINode()->getBranchProperty(TreeTools::BOOTSTRAP); GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontBranchLengths); gd->drawText(cursor.getX(), cursor.getY(), TextTools::toString(dynamic_cast<const Number<double> *>(b)->getValue()), cursor.getHPos(), GraphicDevice::TEXT_VERTICAL_CENTER, cursor.getAngle()); gd->setCurrentFont(fontBck); } } catch (std::bad_cast& e) { //Id-based event (less-efficient): const TreeDrawing* td = event.getTreeDrawing(); if (td->getTree()->hasBranchProperty(event.getNodeId(), TreeTools::BOOTSTRAP)) { const Clonable* b = td->getTree()->getBranchProperty(event.getNodeId(), TreeTools::BOOTSTRAP); GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getCursor(); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontLeafNames); gd->drawText(cursor.getX(), cursor.getY(), TextTools::toString(dynamic_cast<const Number<double> *>(b)->getValue()), cursor.getHPos(), GraphicDevice::TEXT_VERTICAL_CENTER, cursor.getAngle()); gd->setCurrentFont(fontBck); } } }
void BranchLengthsTreeDrawingListener::afterDrawBranch(const DrawBranchEvent& event) { try { //Pointer-based event (efficient): const DrawINodeEvent& eventC = dynamic_cast<const DrawINodeEvent&>(event); if (eventC.getINode()->hasDistanceToFather()) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getBranchCursor(0.5); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontBranchLengths); gd->drawText(cursor.getX(), cursor.getY(), TextTools::toString(eventC.getINode()->getDistanceToFather()), GraphicDevice::TEXT_HORIZONTAL_CENTER, GraphicDevice::TEXT_VERTICAL_BOTTOM, cursor.getAngle()); gd->setCurrentFont(fontBck); } } catch (std::bad_cast& e) { //Id-based event (less-efficient): const TreeDrawing* td = event.getTreeDrawing(); if (td->getTree()->hasDistanceToFather(event.getNodeId())) { GraphicDevice* gd = event.getGraphicDevice(); Cursor cursor = event.getBranchCursor(0.5); Font fontBck = gd->getCurrentFont(); if (settings_) gd->setCurrentFont(settings_->fontLeafNames); gd->drawText(cursor.getX(), cursor.getY(), TextTools::toString(td->getTree()->getDistanceToFather(event.getNodeId())), GraphicDevice::TEXT_HORIZONTAL_CENTER, GraphicDevice::TEXT_VERTICAL_BOTTOM, cursor.getAngle()); gd->setCurrentFont(fontBck); } } }
void AntTweakBarSystem::feedInput() { GraphicsWrapper* gfx = m_gfxBackend->getGfxWrapper(); AntTweakBarWrapper* antTweakBar = AntTweakBarWrapper::getInstance(); // mouse pos Cursor* cursor = m_inputBackend->getCursor(); pair<int,int> mousePos = gfx->getScreenPixelPosFromNDC( (float)cursor->getX(), (float)cursor->getY() ); int mouseX = mousePos.first; int mouseY = mousePos.second; antTweakBar->setMousePos(mouseX,mouseY); // mouse key if (!antTweakBar->shouldOnlyListenToMouseMovement()) { double l_btn = cursor->getPrimaryDelta(); double r_btn = cursor->getSecondaryDelta(); if( l_btn<-0.5f || l_btn>0.5f) antTweakBar->setMouseBtn( (int)(l_btn+1.0)/2, TW_MOUSE_LEFT ); if( r_btn<-0.5f || r_btn>0.5f) antTweakBar->setMouseBtn( (int)(r_btn+1.0)/2, TW_MOUSE_RIGHT ); // keyboard A-Z Control* kb_control=NULL; for ( int letterIdx=InputHelper::KeyboardKeys_A; letterIdx<=InputHelper::KeyboardKeys_Z; letterIdx++ ) { kb_control = m_inputBackend->getControlByEnum( (InputHelper::KeyboardKeys)letterIdx ); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed(letterIdx+'A',0); } } // keyboard 0-9 kb_control=NULL; for ( int keyNumIdx=InputHelper::KeyboardKeys_0; keyNumIdx<=InputHelper::KeyboardKeys_9; keyNumIdx++ ) { kb_control = m_inputBackend->getControlByEnum( (InputHelper::KeyboardKeys)keyNumIdx ); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed( keyNumIdx-(int)InputHelper::KeyboardKeys_0+'0', 0 ); } } // keyboard numpad 0-9 kb_control=NULL; for (int numPadIdx=InputHelper::KeyboardKeys_NUMPAD_0; numPadIdx<=InputHelper::KeyboardKeys_NUMPAD_9; numPadIdx++) { kb_control = m_inputBackend->getControlByEnum( (InputHelper::KeyboardKeys)numPadIdx ); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed( numPadIdx-(int)InputHelper::KeyboardKeys_NUMPAD_0+'0', 0 ); } } // space kb_control = m_inputBackend->getControlByEnum( InputHelper::KeyboardKeys_SPACE ); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed( TW_KEY_SPACE, 0 ); // Space in ASCII = 32 } // backspace kb_control = m_inputBackend->getControlByEnum( InputHelper::KeyboardKeys_BACKSPACE ); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed( TW_KEY_BACKSPACE, 0 ); // Backspace in ASCII = 8 } // return kb_control = m_inputBackend->getControlByEnum( InputHelper::KeyboardKeys_RETURN ); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed( TW_KEY_RETURN, 0 ); // Return in ASCII = 13 } // F4 kb_control = m_inputBackend->getControlByEnum( InputHelper::KeyboardKeys_F4); if ( kb_control && kb_control->getDelta() > 0.5f ) { antTweakBar->setKeyPressed( TW_KEY_F4, 0 ); } } }