taxplot3d_widget.cpp
来自「ncbi源码」· C++ 代码 · 共 285 行
CPP
285 行
/* * =========================================================================== * PRODUCTION $Log: taxplot3d_widget.cpp,v $ * PRODUCTION Revision 1000.1 2004/06/01 21:13:47 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7 * PRODUCTION * =========================================================================== *//* $Id: taxplot3d_widget.cpp,v 1000.1 2004/06/01 21:13:47 gouriano Exp $ * =========================================================================== * * PUBLIC DOMAIN NOTICE * National Center for Biotechnology Information * * This software/database is a "United States Government Work" under the * terms of the United States Copyright Act. It was written as part of * the author's official duties as a United States Government employee and * thus cannot be copyrighted. This software/database is freely available * to the public for use. The National Library of Medicine and the U.S. * Government have not placed any restriction on its use or reproduction. * * Although all reasonable efforts have been taken to ensure the accuracy * and reliability of the software and data, the NLM and the U.S. * Government do not and cannot warrant the performance or results that * may be obtained by using this software or data. The NLM and the U.S. * Government disclaim all warranties, express or implied, including * warranties of performance, merchantability or fitness for any particular * purpose. * * Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors: Vladimir Tereshkov * * File Description: * Taxplot 3-dimensional widget */#include <ncbi_pch.hpp>#include <gui/opengl/glfont.hpp>#include <gui/graph/igraph_utils.hpp>#include <gui/widgets/taxplot3d/taxplot3d_widget.hpp>#include <gui/types.hpp>#include <FL/Fl.H>#include "taxplot3d_pane.hpp"BEGIN_NCBI_SCOPEFl_Menu_Item pulldown[] = { {"&View",0,0,0,FL_SUBMENU}, {"Perspective", 0, 0, (void*)CMD_PERSP_PROJECTION}, {"Orthographic (XY)", 0, 0, (void*)CMD_ORTOXY_PROJECTION}, {"Orthographic (YZ)", 0, 0, (void*)CMD_ORTOYZ_PROJECTION}, {"Orthographic (XZ)", 0, 0, (void*)CMD_ORTOXZ_PROJECTION}, {0}, {"&Objects",0,0,0,FL_SUBMENU}, {"Show",0,0,0,FL_SUBMENU}, {"Axes", 0, 0, (void*)CMD_VIEW_AXES, FL_MENU_TOGGLE|FL_MENU_VALUE}, {"Grid", 0, 0, (void*)CMD_VIEW_GRID, FL_MENU_TOGGLE|FL_MENU_VALUE}, {"Arrows", 0, 0, (void*)CMD_VIEW_ARROWS, FL_MENU_TOGGLE|FL_MENU_VALUE}, {"Labels", 0, 0, (void*)CMD_VIEW_LABELS, FL_MENU_TOGGLE|FL_MENU_VALUE}, {"Scale", 0, 0, (void*)CMD_VIEW_SCALE, FL_MENU_TOGGLE|FL_MENU_VALUE}, {0}, {"Shape",0,0,0,FL_SUBMENU}, {"Sphere", 0,0, (void*)CMD_SHAPE_SPHERE, FL_MENU_RADIO|FL_MENU_VALUE}, {"Cube", 0,0, (void*)CMD_SHAPE_CUBE, FL_MENU_RADIO}, {"Cross", 0,0, (void*)CMD_SHAPE_CROSS, FL_MENU_RADIO}, {0}, {0}, {"&Pivot Point", 0,0,0,FL_SUBMENU}, {"&Position",0,0,0, FL_SUBMENU}, {"Floating",0,0, (void*)CMD_PIVOT_FLOATING, FL_MENU_RADIO|FL_MENU_VALUE}, {"Fixed",0,0, (void*)CMD_PIVOT_FIXED, FL_MENU_RADIO}, {0}, {"&Attach to selected object",0,0, (void*)CMD_PIVOT_ATTACHED, FL_MENU_TOGGLE|FL_MENU_VALUE}, {0}, {"Color scheme", 0,0,0,FL_SUBMENU|FL_MENU_DIVIDER}, {"Scheme 1", 0, 0, (void*)CMD_COLOR_SCHEME1, FL_MENU_RADIO}, {"Scheme 2", 0, 0, (void*)CMD_COLOR_SCHEME2, FL_MENU_RADIO}, {"Scheme 3", 0, 0, (void*)CMD_COLOR_SCHEME3, FL_MENU_RADIO}, {0}, {"&Refresh",0,0,(void*)CMD_REFRESH_VIEW}, {0} };void cb_Popup(Fl_Widget * widget, void * data){ Fl_Menu_* mw = (Fl_Menu_*)widget; const Fl_Menu_Item* m = mw->mvalue(); switch (m->argument()){ case CMD_REFRESH_VIEW: ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_PERSP_PROJECTION: ((CTaxplot3dWidget*)data)->SetViewMode(CTaxplot3dPanel::eCamera); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_ORTOXY_PROJECTION: ((CTaxplot3dWidget*)data)->SetViewMode(CTaxplot3dPanel::eViewZ); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_ORTOYZ_PROJECTION: ((CTaxplot3dWidget*)data)->SetViewMode(CTaxplot3dPanel::eViewX); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_ORTOXZ_PROJECTION: ((CTaxplot3dWidget*)data)->SetViewMode(CTaxplot3dPanel::eViewY); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_VIEW_AXES: ((CTaxplot3dWidget*)data)->getPanel()->setVisible(CTaxplot3dPanel::eAxes, !((CTaxplot3dWidget*)data)->getPanel()->getVisible(CTaxplot3dPanel::eAxes)); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_VIEW_GRID: ((CTaxplot3dWidget*)data)->getPanel()->setVisible(CTaxplot3dPanel::eGrid, !((CTaxplot3dWidget*)data)->getPanel()->getVisible(CTaxplot3dPanel::eGrid)); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_VIEW_ARROWS: ((CTaxplot3dWidget*)data)->getPanel()->setVisible(CTaxplot3dPanel::eArrows, !((CTaxplot3dWidget*)data)->getPanel()->getVisible(CTaxplot3dPanel::eArrows)); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_VIEW_LABELS: ((CTaxplot3dWidget*)data)->getPanel()->setVisible(CTaxplot3dPanel::eLabels, !((CTaxplot3dWidget*)data)->getPanel()->getVisible(CTaxplot3dPanel::eLabels)); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_VIEW_SCALE: ((CTaxplot3dWidget*)data)->getPanel()->setVisible(CTaxplot3dPanel::eScale, !((CTaxplot3dWidget*)data)->getPanel()->getVisible(CTaxplot3dPanel::eScale)); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; break; case CMD_SHAPE_SPHERE: ((CTaxplot3dWidget*)data)->getPanel()->setPrimitiveShape(CTaxplot3dPanel::eSphere); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_SHAPE_CUBE: ((CTaxplot3dWidget*)data)->getPanel()->setPrimitiveShape(CTaxplot3dPanel::eCube); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_SHAPE_CROSS: ((CTaxplot3dWidget*)data)->getPanel()->setPrimitiveShape(CTaxplot3dPanel::eCross); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_PIVOT_FLOATING: ((CTaxplot3dWidget*)data)->getPanel()->setPivotPoint(CTaxplot3dPanel::eFloating); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_PIVOT_FIXED: ((CTaxplot3dWidget*)data)->getPanel()->setPivotPoint(CTaxplot3dPanel::eFixed); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; break; case CMD_PIVOT_ATTACHED: ((CTaxplot3dWidget*)data)->getPanel()->setPivotAttach(!((CTaxplot3dWidget*)data)->getPanel()->getPivotAttach()); ((CTaxplot3dWidget*)data)->SlowRedraw(); break; case CMD_COLOR_SCHEME1: case CMD_COLOR_SCHEME2: case CMD_COLOR_SCHEME3: break; } }CTaxplot3dWidget::CTaxplot3dWidget(int x, int y, int w, int h, const char* label) : Fl_Group(x, y, w, h, label){ m_3DPanel = new CTaxplot3dPanel(x, y, w, h, label); m_3DPanel->box(FL_DOWN_BOX); m_3DPanel->labeltype(FL_NORMAL_LABEL); m_3DPanel->align(FL_ALIGN_CLIP); Fl_Group::current()->resizable(m_3DPanel); end(); m_Event.StandardConfig(); }CTaxplot3dWidget::~CTaxplot3dWidget(){ if (m_3DPanel) delete m_3DPanel;}void CTaxplot3dWidget::SetDataSource(CTaxplot3dDataSource * ds){ m_3DPanel->SetDataSource(ds); }void CTaxplot3dWidget::SetViewMode(int mode){ m_3DPanel->setViewMode(static_cast<CTaxplot3dPanel::EViewMode>(mode));}void CTaxplot3dWidget::SlowRedraw(void){ m_3DPanel->slowRedraw();}int CTaxplot3dWidget::handle(int event){ m_Event.OnFLTKEvent(event); switch(event) { case FL_RELEASE: { if(m_Event.GetGUISignal() == CGUIEvent::ePopupSignal) { fl_cursor(FL_CURSOR_DEFAULT, FL_BLACK, FL_WHITE); Fl_Menu_Button popup(x(), y(), w(), h(), NULL); popup.type(Fl_Menu_Button::POPUP3); popup.box(FL_NO_BOX); popup.menu(pulldown); popup.callback(cb_Popup, (void*)this); popup.popup(); /* CMenuItem* root = new CMenuItem("root"); root->AddSubItem("1", 2); root->AddSubItem("2", 2); root->AddSubItem("3", 2); CPopupMenu Popup(x(), y(), w(), h()); Fl_Group::add(&Popup); //Popup.SetCmdTarget(this); Popup.SetItems(root); Popup.popup(); Fl_Group::remove(Popup); */ } } } Fl_Group::handle(event); return 1; // event handled}END_NCBI_SCOPE/* * =========================================================================== * $Log: taxplot3d_widget.cpp,v $ * Revision 1000.1 2004/06/01 21:13:47 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7 * * Revision 1.7 2004/05/21 22:27:55 gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.6 2004/03/11 17:54:04 dicuccio * Deprecated typedefs TDimension, TPosition * * Revision 1.5 2004/01/28 17:39:42 tereshko * Fixed popup menu * * Revision 1.4 2004/01/28 16:13:47 tereshko * Eliminated padding to work correctly with CSplitter * * Revision 1.3 2004/01/15 13:04:44 ucko * Tweak to work on 64-bit systems. * * Revision 1.2 2004/01/14 16:39:23 tereshko * Minor changes due to integration with Taxplot viewer * * Revision 1.1 2004/01/05 16:20:50 tereshko * Initial revision * * =========================================================================== */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?