diff --git a/apps/tetraviewer/.imgcol b/apps/tetraviewer/.imgcol new file mode 100644 index 00000000..6e0af827 --- /dev/null +++ b/apps/tetraviewer/.imgcol @@ -0,0 +1 @@ +images/editcopy images/editcut images/editpaste images/filenew images/fileopen images/filesave images/print images/redo images/searchfind images/undo images/Open64.png diff --git a/apps/tetraviewer/MainFrame.cpp b/apps/tetraviewer/MainFrame.cpp new file mode 100644 index 00000000..1cb35be5 --- /dev/null +++ b/apps/tetraviewer/MainFrame.cpp @@ -0,0 +1,258 @@ +/**************************************************************************** +** Form implementation generated from reading ui file 'MainFrame.ui' +** +** Created: Mon Oct 4 19:00:57 2004 +** by: The User Interface Compiler ($Id: MainFrame.cpp,v 1.1 2004-10-04 17:07:22 pietroni Exp $) +** +** WARNING! All changes made in this file will be lost! +****************************************************************************/ + +#include "MainFrame.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MainFrame.ui.h" +/* + * Constructs a MainFrame as a child of 'parent', with the + * name 'name' and widget flags set to 'f'. + * + */ +MainFrame::MainFrame( QWidget* parent, const char* name, WFlags fl ) + : QMainWindow( parent, name, fl ) +{ + (void)statusBar(); + if ( !name ) + setName( "MainFrame" ); + setCentralWidget( new QWidget( this, "qt_central_widget" ) ); + + file = new QGroupBox( centralWidget(), "file" ); + file->setGeometry( QRect( 70, 0, 90, 80 ) ); + + OpenButton = new QPushButton( file, "OpenButton" ); + OpenButton->setGeometry( QRect( 10, 10, 70, 60 ) ); + OpenButton->setPixmap( QPixmap::fromMimeSource( "Open64.png" ) ); + + buttonGroup1 = new QButtonGroup( centralWidget(), "buttonGroup1" ); + buttonGroup1->setGeometry( QRect( 160, 0, 470, 80 ) ); + buttonGroup1->setExclusive( TRUE ); + + BoxButton = new QPushButton( buttonGroup1, "BoxButton" ); + BoxButton->setGeometry( QRect( 10, 30, 51, 31 ) ); + BoxButton->setToggleButton( TRUE ); + + WireButton = new QPushButton( buttonGroup1, "WireButton" ); + WireButton->setGeometry( QRect( 80, 30, 40, 30 ) ); + WireButton->setToggleButton( TRUE ); + + HiddenButton = new QPushButton( buttonGroup1, "HiddenButton" ); + HiddenButton->setGeometry( QRect( 130, 30, 60, 31 ) ); + HiddenButton->setToggleButton( TRUE ); + + FlatWireButton = new QPushButton( buttonGroup1, "FlatWireButton" ); + FlatWireButton->setGeometry( QRect( 260, 30, 61, 31 ) ); + FlatWireButton->setToggleButton( TRUE ); + + SmoothButton = new QPushButton( buttonGroup1, "SmoothButton" ); + SmoothButton->setGeometry( QRect( 330, 30, 50, 30 ) ); + SmoothButton->setToggleButton( TRUE ); + + SmallTetraButton = new QPushButton( buttonGroup1, "SmallTetraButton" ); + SmallTetraButton->setGeometry( QRect( 390, 30, 60, 30 ) ); + SmallTetraButton->setToggleButton( TRUE ); + + FlatButton = new QPushButton( buttonGroup1, "FlatButton" ); + FlatButton->setGeometry( QRect( 200, 30, 50, 30 ) ); + FlatButton->setToggleButton( TRUE ); + FlatButton->setOn( TRUE ); + FlatButton->setAutoDefault( FALSE ); + FlatButton->setDefault( FALSE ); + + myGLWidget = new MyGLWidget( centralWidget(), "myGLWidget" ); + myGLWidget->setGeometry( QRect( 70, 80, 790, 720 ) ); + + buttonGroup2 = new QButtonGroup( centralWidget(), "buttonGroup2" ); + buttonGroup2->setGeometry( QRect( 630, 0, 230, 80 ) ); + buttonGroup2->setExclusive( TRUE ); + + TrackButton = new QPushButton( buttonGroup2, "TrackButton" ); + TrackButton->setGeometry( QRect( 140, 20, 61, 31 ) ); + TrackButton->setToggleButton( TRUE ); + TrackButton->setOn( TRUE ); + TrackButton->setDefault( FALSE ); + + SectionButton = new QPushButton( buttonGroup2, "SectionButton" ); + SectionButton->setGeometry( QRect( 40, 20, 71, 31 ) ); + SectionButton->setToggleButton( TRUE ); + + // actions + fileNewAction = new QAction( this, "fileNewAction" ); + fileNewAction->setIconSet( QIconSet( QPixmap::fromMimeSource( "" ) ) ); + fileOpenAction = new QAction( this, "fileOpenAction" ); + fileOpenAction->setToggleAction( FALSE ); + fileOpenAction->setOn( FALSE ); + fileOpenAction->setIconSet( QIconSet( QPixmap::fromMimeSource( "" ) ) ); + fileSaveAction = new QAction( this, "fileSaveAction" ); + fileSaveAction->setIconSet( QIconSet( QPixmap::fromMimeSource( "" ) ) ); + fileSaveAsAction = new QAction( this, "fileSaveAsAction" ); + filePrintAction = new QAction( this, "filePrintAction" ); + filePrintAction->setIconSet( QIconSet( QPixmap::fromMimeSource( "" ) ) ); + fileExitAction = new QAction( this, "fileExitAction" ); + helpContentsAction = new QAction( this, "helpContentsAction" ); + helpIndexAction = new QAction( this, "helpIndexAction" ); + helpAboutAction = new QAction( this, "helpAboutAction" ); + new_menunew_itemAction = new QAction( this, "new_menunew_itemAction" ); + infonew_itemAction = new QAction( this, "infonew_itemAction" ); + infoSimplexAction = new QAction( this, "infoSimplexAction" ); + infoSimplexAction->setToggleAction( TRUE ); + infoSimplexAction->setOn( TRUE ); + infoQualityAction = new QAction( this, "infoQualityAction" ); + infoQualityAction->setToggleAction( TRUE ); + infoPhysicsAction = new QAction( this, "infoPhysicsAction" ); + infoPhysicsAction->setToggleAction( TRUE ); + + + // toolbars + + + // menubar + MenuBar = new QMenuBar( this, "MenuBar" ); + + + File = new QPopupMenu( this ); + fileNewAction->addTo( File ); + fileOpenAction->addTo( File ); + fileSaveAction->addTo( File ); + fileSaveAsAction->addTo( File ); + File->insertSeparator(); + filePrintAction->addTo( File ); + File->insertSeparator(); + fileExitAction->addTo( File ); + MenuBar->insertItem( QString(""), File, 1 ); + + Help = new QPopupMenu( this ); + helpContentsAction->addTo( Help ); + helpIndexAction->addTo( Help ); + Help->insertSeparator(); + helpAboutAction->addTo( Help ); + MenuBar->insertItem( QString(""), Help, 2 ); + + Info_2 = new QPopupMenu( this ); + new_menunew_itemAction->addTo( Info_2 ); + infoSimplexAction->addTo( Info_2 ); + infoQualityAction->addTo( Info_2 ); + infoPhysicsAction->addTo( Info_2 ); + MenuBar->insertItem( QString(""), Info_2, 3 ); + + languageChange(); + resize( QSize(908, 846).expandedTo(minimumSizeHint()) ); + clearWState( WState_Polished ); + + // signals and slots connections + connect( fileNewAction, SIGNAL( activated() ), this, SLOT( fileNew() ) ); + connect( fileOpenAction, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); + connect( fileSaveAction, SIGNAL( activated() ), this, SLOT( fileSave() ) ); + connect( fileSaveAsAction, SIGNAL( activated() ), this, SLOT( fileSaveAs() ) ); + connect( helpAboutAction, SIGNAL( activated() ), this, SLOT( helpAbout() ) ); + connect( helpContentsAction, SIGNAL( activated() ), this, SLOT( helpContents() ) ); + connect( helpIndexAction, SIGNAL( activated() ), this, SLOT( helpIndex() ) ); + connect( BoxButton, SIGNAL( pressed() ), myGLWidget, SLOT( setBox() ) ); + connect( WireButton, SIGNAL( pressed() ), myGLWidget, SLOT( setWire() ) ); + connect( HiddenButton, SIGNAL( pressed() ), myGLWidget, SLOT( setHidden() ) ); + connect( FlatButton, SIGNAL( pressed() ), myGLWidget, SLOT( setFlat() ) ); + connect( FlatWireButton, SIGNAL( pressed() ), myGLWidget, SLOT( setFlatWire() ) ); + connect( SmoothButton, SIGNAL( pressed() ), myGLWidget, SLOT( setSmooth() ) ); + connect( SmallTetraButton, SIGNAL( pressed() ), myGLWidget, SLOT( setSmallTetra() ) ); + connect( OpenButton, SIGNAL( clicked() ), this, SLOT( fileOpen() ) ); + connect( SectionButton, SIGNAL( pressed() ), myGLWidget, SLOT( SectionMouseModality() ) ); + connect( TrackButton, SIGNAL( pressed() ), myGLWidget, SLOT( TrackMouseModality() ) ); + connect( infoPhysicsAction, SIGNAL( activated() ), myGLWidget, SLOT( SwitchTextPhysics() ) ); + connect( infoQualityAction, SIGNAL( activated() ), myGLWidget, SLOT( SwitchTextQuality() ) ); + connect( infoSimplexAction, SIGNAL( activated() ), myGLWidget, SLOT( SwitchTextSimplex() ) ); +} + +/* + * Destroys the object and frees any allocated resources + */ +MainFrame::~MainFrame() +{ + // no need to delete child widgets, Qt does it all for us +} + +/* + * Sets the strings of the subwidgets using the current + * language. + */ +void MainFrame::languageChange() +{ + setCaption( tr( "TetraView" ) ); + file->setTitle( QString::null ); + OpenButton->setText( QString::null ); + buttonGroup1->setTitle( QString::null ); + BoxButton->setText( tr( "box" ) ); + WireButton->setText( tr( "Wire" ) ); + HiddenButton->setText( tr( "Hidden" ) ); + FlatWireButton->setText( tr( "FlatWire" ) ); + SmoothButton->setText( tr( "Smooth" ) ); + SmallTetraButton->setText( tr( "SmallTetra" ) ); + FlatButton->setText( tr( "Flat" ) ); + buttonGroup2->setTitle( QString::null ); + TrackButton->setText( tr( "Trackball" ) ); + SectionButton->setText( tr( "Section" ) ); + fileNewAction->setText( tr( "New" ) ); + fileNewAction->setMenuText( tr( "&New" ) ); + fileNewAction->setAccel( tr( "Ctrl+N" ) ); + fileOpenAction->setText( tr( "Open" ) ); + fileOpenAction->setMenuText( tr( "&Open..." ) ); + fileOpenAction->setAccel( tr( "Ctrl+O" ) ); + fileSaveAction->setText( tr( "Save" ) ); + fileSaveAction->setMenuText( tr( "&Save" ) ); + fileSaveAction->setAccel( tr( "Ctrl+S" ) ); + fileSaveAsAction->setText( tr( "Save As" ) ); + fileSaveAsAction->setMenuText( tr( "Save &As..." ) ); + fileSaveAsAction->setAccel( QString::null ); + filePrintAction->setText( tr( "Print" ) ); + filePrintAction->setMenuText( tr( "&Print..." ) ); + filePrintAction->setAccel( tr( "Ctrl+P" ) ); + fileExitAction->setText( tr( "Exit" ) ); + fileExitAction->setMenuText( tr( "E&xit" ) ); + fileExitAction->setAccel( QString::null ); + helpContentsAction->setText( tr( "Contents" ) ); + helpContentsAction->setMenuText( tr( "&Contents..." ) ); + helpContentsAction->setAccel( QString::null ); + helpIndexAction->setText( tr( "Index" ) ); + helpIndexAction->setMenuText( tr( "&Index..." ) ); + helpIndexAction->setAccel( QString::null ); + helpAboutAction->setText( tr( "About" ) ); + helpAboutAction->setMenuText( tr( "&About" ) ); + helpAboutAction->setAccel( QString::null ); + new_menunew_itemAction->setText( QString::null ); + new_menunew_itemAction->setMenuText( QString::null ); + infonew_itemAction->setText( tr( "new item" ) ); + infonew_itemAction->setMenuText( tr( "new item" ) ); + infoSimplexAction->setText( tr( "Simplex" ) ); + infoSimplexAction->setMenuText( tr( "Simplex" ) ); + infoQualityAction->setText( tr( "Quality" ) ); + infoQualityAction->setMenuText( tr( "Quality" ) ); + infoPhysicsAction->setText( tr( "Physics" ) ); + infoPhysicsAction->setMenuText( tr( "Physics" ) ); + if (MenuBar->findItem(1)) + MenuBar->findItem(1)->setText( tr( "&File" ) ); + if (MenuBar->findItem(2)) + MenuBar->findItem(2)->setText( tr( "&Help" ) ); + if (MenuBar->findItem(3)) + MenuBar->findItem(3)->setText( tr( "Info" ) ); +} + diff --git a/apps/tetraviewer/MainFrame.h b/apps/tetraviewer/MainFrame.h new file mode 100644 index 00000000..ff4f304d --- /dev/null +++ b/apps/tetraviewer/MainFrame.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** Form interface generated from reading ui file 'MainFrame.ui' +** +** Created: Mon Oct 4 19:00:57 2004 +** by: The User Interface Compiler ($Id: MainFrame.h,v 1.1 2004-10-04 17:07:23 pietroni Exp $) +** +** WARNING! All changes made in this file will be lost! +****************************************************************************/ + +#ifndef MAINFRAME_H +#define MAINFRAME_H + +#include +#include +#include + +class QVBoxLayout; +class QHBoxLayout; +class QGridLayout; +class QSpacerItem; +class QAction; +class QActionGroup; +class QToolBar; +class QPopupMenu; +class MyGLWidget; +class QGroupBox; +class QPushButton; +class QButtonGroup; + +class MainFrame : public QMainWindow +{ + Q_OBJECT + +public: + MainFrame( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel ); + ~MainFrame(); + + QGroupBox* file; + QPushButton* OpenButton; + QButtonGroup* buttonGroup1; + QPushButton* BoxButton; + QPushButton* WireButton; + QPushButton* HiddenButton; + QPushButton* FlatWireButton; + QPushButton* SmoothButton; + QPushButton* SmallTetraButton; + QPushButton* FlatButton; + MyGLWidget* myGLWidget; + QButtonGroup* buttonGroup2; + QPushButton* TrackButton; + QPushButton* SectionButton; + QMenuBar *MenuBar; + QPopupMenu *File; + QPopupMenu *Help; + QPopupMenu *Info_2; + QAction* fileNewAction; + QAction* fileOpenAction; + QAction* fileSaveAction; + QAction* fileSaveAsAction; + QAction* filePrintAction; + QAction* fileExitAction; + QAction* helpContentsAction; + QAction* helpIndexAction; + QAction* helpAboutAction; + QAction* new_menunew_itemAction; + QAction* infonew_itemAction; + QAction* infoSimplexAction; + QAction* infoQualityAction; + QAction* infoPhysicsAction; + +public slots: + virtual void fileNew(); + virtual void fileOpen(); + virtual void fileSave(); + virtual void fileSaveAs(); + virtual void fileExit(); + virtual void helpIndex(); + virtual void helpContents(); + virtual void helpAbout(); + void setWire(); + +protected: + +protected slots: + virtual void languageChange(); + +private: + QPixmap image0; + +}; + +#endif // MAINFRAME_H diff --git a/apps/tetraviewer/MainFrame.ui b/apps/tetraviewer/MainFrame.ui new file mode 100644 index 00000000..54180888 --- /dev/null +++ b/apps/tetraviewer/MainFrame.ui @@ -0,0 +1,714 @@ + +MainFrame + + + MainFrame + + + + 0 + 0 + 908 + 846 + + + + TetraView + + + + file + + + + 70 + 0 + 90 + 80 + + + + + + + + OpenButton + + + + 10 + 10 + 70 + 60 + + + + + + + Open64.png + + + + + + buttonGroup1 + + + + 160 + 0 + 470 + 80 + + + + + + + true + + + + BoxButton + + + + 10 + 30 + 51 + 31 + + + + box + + + true + + + + + WireButton + + + + 80 + 30 + 40 + 30 + + + + Wire + + + true + + + + + HiddenButton + + + + 130 + 30 + 60 + 31 + + + + Hidden + + + true + + + + + FlatWireButton + + + + 260 + 30 + 61 + 31 + + + + FlatWire + + + true + + + + + SmoothButton + + + + 330 + 30 + 50 + 30 + + + + Smooth + + + true + + + + + SmallTetraButton + + + + 390 + 30 + 60 + 30 + + + + SmallTetra + + + true + + + + + FlatButton + + + + 200 + 30 + 50 + 30 + + + + Flat + + + true + + + true + + + false + + + false + + + + + + myGLWidget + + + + 70 + 80 + 790 + 720 + + + + + + buttonGroup2 + + + + 630 + 0 + 230 + 80 + + + + + + + true + + + + TrackButton + + + + 140 + 20 + 61 + 31 + + + + Trackball + + + true + + + true + + + false + + + + + SectionButton + + + + 40 + 20 + 71 + 31 + + + + Section + + + true + + + + + + + MenuBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MyGLWidget +
D:/TetraView/MyGLWidget.h
+ + -1 + -1 + + 0 + + 5 + 5 + 0 + 0 + + image0 + signal() + setBox() + setWire() + setHidden() + setFlat() + setFlatWire() + setSmallTetra() + setSmooth() + TrackMouseModality() + SectionMouseModality() + slot() + slot() + SwitchTextSimplex() + slot() + SwitchTextPhysics() + slot() + SwitchTextQuality() +
+
+ + + + fileNewAction + + + + + + New + + + &New + + + Ctrl+N + + + + + fileOpenAction + + + false + + + false + + + + + + Open + + + &Open... + + + Ctrl+O + + + + + fileSaveAction + + + + + + Save + + + &Save + + + Ctrl+S + + + + + fileSaveAsAction + + + Save As + + + Save &As... + + + + + + + + filePrintAction + + + + + + Print + + + &Print... + + + Ctrl+P + + + + + fileExitAction + + + Exit + + + E&xit + + + + + + + + helpContentsAction + + + Contents + + + &Contents... + + + + + + + + helpIndexAction + + + Index + + + &Index... + + + + + + + + helpAboutAction + + + About + + + &About + + + + + + + + new_menunew_itemAction + + + + + + + + + + + infonew_itemAction + + + new item + + + new item + + + + + infoSimplexAction + + + true + + + true + + + Simplex + + + Simplex + + + + + infoQualityAction + + + true + + + Quality + + + Quality + + + + + infoPhysicsAction + + + true + + + Physics + + + Physics + + + + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad94514c5b5518c77fe7dc4b7b4b6150bb96324418ca32358bee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d6a78d0b027b3cd07d9e68c81c625a6c139408a4384f416100aed6d4b7bdb7b8e0fc0921a70c6ed7b3ae7e43bbff3fffedfc927e2f138bbd1dbdbab7902118fc785d8058f8d8de9aeae2e72b91cb66de338ce7f82e47239666767492412b8aefbf0dcdc553a323242f4501d918e2d3a8f15a9784584100809a609526eafd1a0f54e6142e029c5c21f3ef41583bb77a805efbe1ce9d86279e32619678eaab7853fa0f02a16abb64166ad0cdac75307eb3874b84cb0a14aa5a24108cc0688c48c9a4a1e826ddbe6f0b12219678e8ace610502ccdfafe3f68d3c33bf6c01c59dcc209d472c4e0d35d2f3ba81d205d06005e4de60c77170bd2255af80150870f70e8c0eaf009260a349577714e913a4175d16925b5cbe50607931cc3b677c68ca28a5f7066f5b26f00760febec9e8f032a0e81b68a17fc0201415989647a9d8c4c498cbe8f05f5cff3a4d4bac8bfe210b290b35e01afd428257b1b875cd01aaf4bd1de5dd0fea688e1530ad1c1bab16b7af17393558cf997311c0e49bafd670d6258621f6576c9ab09a3248fe5ae6c08103f49f36517213d33070369bf8e2529ee9c90ceb2b2eef7f14617c2c48722a4b7226845143fa87622905ebeb6514253a9eb5084504a66950c88618bee0303d99217cb09e9ed71a09369538fa523d00e9a50a42eed3bc6d8f41281fa0903e8561796cac86f8f2b33c33930ea0f0fb4d5adbeb30ad22866ffbbad226d2a805d7ee0484220208925aaa50deaa67e27b97e9c90ccdcdf5c462cdd8a94d2e7e62f3603244ea410989a4ed191f52a8fd156b056d9d553a9e0bf0e7ef45c6bf7339fd5e90ec7a88575e6d20d6e6e7e2a755ec854dce7fb8885b2cd014f6f3c2714d3a550bae55ac35c1068fb7061b00b87a7995899b25ce9e0b73e24d8fae97b37c7cbe9370b499fce6066eb54adf6098f6ee2a9a7ff9c70841a5023d270deca510d746537c7e29cdf8ad20475fb4307c82d4fc324ec6859d66fdfc6381e44014b36e9fe6e572393ca54068aa22cfd0598b686b3737aeae90bc9725796f0350802414b6e81b7c9a9f7e70708a2e6e5991cfeee3f1ecec2c0b0b3e8c068142a2a8d23728397132c6dc6f2e2b8b0a8da4b5ddc7f3c735ed47146f0cb4502983693a4c25ca7b83138904fa8a412466e00f48b4271086c2901263676c4a6990b615b6ade15b85694af239984a94585bf6f606bbae5b334f1f37e4a3531e031c8fc7c5a312ff17f849c3e3f1b8f81b8be6900aca9b61c90000000049454e44ae426082 + + + + + fileNewAction + activated() + MainFrame + fileNew() + + + fileOpenAction + activated() + MainFrame + fileOpen() + + + fileSaveAction + activated() + MainFrame + fileSave() + + + fileSaveAsAction + activated() + MainFrame + fileSaveAs() + + + helpAboutAction + activated() + MainFrame + helpAbout() + + + helpContentsAction + activated() + MainFrame + helpContents() + + + helpIndexAction + activated() + MainFrame + helpIndex() + + + BoxButton + pressed() + myGLWidget + setBox() + + + WireButton + pressed() + myGLWidget + setWire() + + + HiddenButton + pressed() + myGLWidget + setHidden() + + + FlatButton + pressed() + myGLWidget + setFlat() + + + FlatWireButton + pressed() + myGLWidget + setFlatWire() + + + SmoothButton + pressed() + myGLWidget + setSmooth() + + + SmallTetraButton + pressed() + myGLWidget + setSmallTetra() + + + OpenButton + clicked() + MainFrame + fileOpen() + + + SectionButton + pressed() + myGLWidget + SectionMouseModality() + + + TrackButton + pressed() + myGLWidget + TrackMouseModality() + + + infoPhysicsAction + activated() + myGLWidget + SwitchTextPhysics() + + + infoQualityAction + activated() + myGLWidget + SwitchTextQuality() + + + infoSimplexAction + activated() + myGLWidget + SwitchTextSimplex() + + + + MainFrame.ui.h + + + fileNew() + fileOpen() + fileSave() + fileSaveAs() + fileExit() + helpIndex() + helpContents() + helpAbout() + setWire() + + + + + myglwidget.h + +
diff --git a/apps/tetraviewer/MainFrame.ui.bak b/apps/tetraviewer/MainFrame.ui.bak new file mode 100644 index 00000000..efdab51b --- /dev/null +++ b/apps/tetraviewer/MainFrame.ui.bak @@ -0,0 +1,733 @@ + +MainFrame + + + MainFrame + + + + 0 + 0 + 908 + 846 + + + + TetraView + + + + file + + + + 70 + 0 + 90 + 80 + + + + + + + + OpenButton + + + + 10 + 10 + 70 + 60 + + + + + + + Open64.png + + + + + + buttonGroup1 + + + + 160 + 0 + 470 + 80 + + + + + + + true + + + + BoxButton + + + + 10 + 30 + 51 + 31 + + + + box + + + true + + + + + WireButton + + + + 80 + 30 + 40 + 30 + + + + Wire + + + true + + + + + HiddenButton + + + + 130 + 30 + 60 + 31 + + + + Hidden + + + true + + + + + FlatWireButton + + + + 260 + 30 + 61 + 31 + + + + FlatWire + + + true + + + + + SmoothButton + + + + 330 + 30 + 50 + 30 + + + + Smooth + + + true + + + + + SmallTetraButton + + + + 390 + 30 + 60 + 30 + + + + SmallTetra + + + true + + + + + FlatButton + + + + 200 + 30 + 50 + 30 + + + + Flat + + + true + + + true + + + false + + + false + + + + + + buttonGroup2 + + + + 630 + 0 + 230 + 80 + + + + + + + true + + + + SectionButton + + + + 10 + 20 + 71 + 31 + + + + Section + + + true + + + + + TrackButton + + + + 90 + 20 + 61 + 31 + + + + Trackball + + + true + + + true + + + false + + + + + Info + + + + 160 + 19 + 61 + 31 + + + + Info + + + true + + + + + + myGLWidget + + + + 70 + 80 + 790 + 720 + + + + + + + MenuBar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MyGLWidget +
D:/TetraView/MyGLWidget.h
+ + -1 + -1 + + 0 + + 5 + 5 + 0 + 0 + + image0 + signal() + setBox() + setWire() + setHidden() + setFlat() + setFlatWire() + setSmallTetra() + setSmooth() + TrackMouseModality() + SectionMouseModality() + slot() + slot() + SwitchTextSimplex() + slot() + SwitchTextPhysics() + slot() + SwitchTextQuality() +
+
+ + + + fileNewAction + + + + + + New + + + &New + + + Ctrl+N + + + + + fileOpenAction + + + false + + + false + + + + + + Open + + + &Open... + + + Ctrl+O + + + + + fileSaveAction + + + + + + Save + + + &Save + + + Ctrl+S + + + + + fileSaveAsAction + + + Save As + + + Save &As... + + + + + + + + filePrintAction + + + + + + Print + + + &Print... + + + Ctrl+P + + + + + fileExitAction + + + Exit + + + E&xit + + + + + + + + helpContentsAction + + + Contents + + + &Contents... + + + + + + + + helpIndexAction + + + Index + + + &Index... + + + + + + + + helpAboutAction + + + About + + + &About + + + + + + + + new_menunew_itemAction + + + + + + + + + + + infonew_itemAction + + + new item + + + new item + + + + + infoSimplexAction + + + true + + + true + + + Simplex + + + Simplex + + + + + infoQualityAction + + + true + + + Quality + + + Quality + + + + + infoPhysicsAction + + + true + + + Physics + + + Physics + + + + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad94514c5b5518c77fe7dc4b7b4b6150bb96324418ca32358bee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d6a78d0b027b3cd07d9e68c81c625a6c139408a4384f416100aed6d4b7bdb7b8e0fc0921a70c6ed7b3ae7e43bbff3fffedfc927e2f138bbd1dbdbab7902118fc785d8058f8d8de9aeae2e72b91cb66de338ce7f82e47239666767492412b8aefbf0dcdc553a323242f4501d918e2d3a8f15a9784584100809a609526eafd1a0f54e6142e029c5c21f3ef41583bb77a805efbe1ce9d86279e32619678eaab7853fa0f02a16abb64166ad0cdac75307eb3874b84cb0a14aa5a24108cc0688c48c9a4a1e826ddbe6f0b12219678e8ace610502ccdfafe3f68d3c33bf6c01c59dcc209d472c4e0d35d2f3ba81d205d06005e4de60c77170bd2255af80150870f70e8c0eaf009260a349577714e913a4175d16925b5cbe50607931cc3b677c68ca28a5f7066f5b26f00760febec9e8f032a0e81b68a17fc0201415989647a9d8c4c498cbe8f05f5cff3a4d4bac8bfe210b290b35e01afd428257b1b875cd01aaf4bd1de5dd0fea688e1530ad1c1bab16b7af17393558cf997311c0e49bafd670d6258621f6576c9ab09a3248fe5ae6c08103f49f36517213d33070369bf8e2529ee9c90ceb2b2eef7f14617c2c48722a4b7226845143fa87622905ebeb6514253a9eb5084504a66950c88618bee0303d99217cb09e9ed71a09369538fa523d00e9a50a42eed3bc6d8f41281fa0903e8561796cac86f8f2b33c33930ea0f0fb4d5adbeb30ad22866ffbbad226d2a805d7ee0484220208925aaa50deaa67e27b97e9c90ccdcdf5c462cdd8a94d2e7e62f3603244ea410989a4ed191f52a8fd156b056d9d553a9e0bf0e7ef45c6bf7339fd5e90ec7a88575e6d20d6e6e7e2a755ec854dce7fb8885b2cd014f6f3c2714d3a550bae55ac35c1068fb7061b00b87a7995899b25ce9e0b73e24d8fae97b37c7cbe9370b499fce6066eb54adf6098f6ee2a9a7ff9c70841a5023d270deca510d746537c7e29cdf8ad20475fb4307c82d4fc324ec6859d66fdfc6381e44014b36e9fe6e572393ca54068aa22cfd0598b686b3737aeae90bc9725796f0350802414b6e81b7c9a9f7e70708a2e6e5991cfeee3f1ecec2c0b0b3e8c068142a2a8d23728397132c6dc6f2e2b8b0a8da4b5ddc7f3c735ed47146f0cb4502983693a4c25ca7b83138904fa8a412466e00f48b4271086c2901263676c4a6990b615b6ade15b85694af239984a94585bf6f606bbae5b334f1f37e4a3531e031c8fc7c5a312ff17f849c3e3f1b8f81b8be6900aca9b61c90000000049454e44ae426082 + + + + + fileNewAction + activated() + MainFrame + fileNew() + + + fileOpenAction + activated() + MainFrame + fileOpen() + + + fileSaveAction + activated() + MainFrame + fileSave() + + + fileSaveAsAction + activated() + MainFrame + fileSaveAs() + + + helpAboutAction + activated() + MainFrame + helpAbout() + + + helpContentsAction + activated() + MainFrame + helpContents() + + + helpIndexAction + activated() + MainFrame + helpIndex() + + + BoxButton + pressed() + myGLWidget + setBox() + + + WireButton + pressed() + myGLWidget + setWire() + + + HiddenButton + pressed() + myGLWidget + setHidden() + + + FlatButton + pressed() + myGLWidget + setFlat() + + + FlatWireButton + pressed() + myGLWidget + setFlatWire() + + + SmoothButton + pressed() + myGLWidget + setSmooth() + + + SmallTetraButton + pressed() + myGLWidget + setSmallTetra() + + + OpenButton + clicked() + MainFrame + fileOpen() + + + SectionButton + pressed() + myGLWidget + SectionMouseModality() + + + TrackButton + pressed() + myGLWidget + TrackMouseModality() + + + infoPhysicsAction + activated() + myGLWidget + SwitchTextPhysics() + + + infoQualityAction + activated() + myGLWidget + SwitchTextQuality() + + + infoSimplexAction + activated() + myGLWidget + SwitchTextSimplex() + + + + MainFrame.ui.h + + + fileNew() + fileOpen() + fileSave() + fileSaveAs() + fileExit() + helpIndex() + helpContents() + helpAbout() + setWire() + + + + + myglwidget.h + +
diff --git a/apps/tetraviewer/MainFrame.ui.h b/apps/tetraviewer/MainFrame.ui.h new file mode 100644 index 00000000..a678dc56 --- /dev/null +++ b/apps/tetraviewer/MainFrame.ui.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you want to add, delete, or rename functions or slots, use +** Qt Designer to update this file, preserving your code. +** +** You should not define a constructor or destructor in this file. +** Instead, write your code in functions called init() and destroy(). +** These will automatically be called by the form's constructor and +** destructor. +*****************************************************************************/ + + +#include +#include +#include + +extern void openTetraMesh(const char *); + +void MainFrame::fileNew() +{ + +} + + +void MainFrame::fileOpen() +{ + QString filename = QFileDialog::getOpenFileName( + "", + "Tetrahedral Meshes File (*.ts *.ply)", + this, + "open file dialog" + "Choose a TS Tetrahedral mesh file" ); + + const char *path=filename.ascii(); + openTetraMesh(path); +} + + +void MainFrame::fileSave() +{ + +} + + +void MainFrame::fileSaveAs() +{ + +} + + + +void MainFrame::fileExit() +{ + +} + + +void MainFrame::helpIndex() +{ + +} + + +void MainFrame::helpContents() +{ + +} + + +void MainFrame::helpAbout() +{ + +} + + +void MainFrame::setWire() +{ + +} diff --git a/apps/tetraviewer/MainFrame.ui.h.bak b/apps/tetraviewer/MainFrame.ui.h.bak new file mode 100644 index 00000000..f244ec1b --- /dev/null +++ b/apps/tetraviewer/MainFrame.ui.h.bak @@ -0,0 +1,80 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you want to add, delete, or rename functions or slots, use +** Qt Designer to update this file, preserving your code. +** +** You should not define a constructor or destructor in this file. +** Instead, write your code in functions called init() and destroy(). +** These will automatically be called by the form's constructor and +** destructor. +*****************************************************************************/ + + +#include +#include +#include + +extern void openTetraMesh(const char *); + +void MainFrame::fileNew() +{ + +} + + +void MainFrame::fileOpen() +{ + QString filename = QFileDialog::getOpenFileName( + "", + "TS File (*.ts)", + this, + "open file dialog" + "Choose a TS Tetrahedral mesh file" ); + + const char *path=filename.ascii(); + openTetraMesh(path); +} + + +void MainFrame::fileSave() +{ + +} + + +void MainFrame::fileSaveAs() +{ + +} + + + +void MainFrame::fileExit() +{ + +} + + +void MainFrame::helpIndex() +{ + +} + + +void MainFrame::helpContents() +{ + +} + + +void MainFrame::helpAbout() +{ + +} + + +void MainFrame::setWire() +{ + +} diff --git a/apps/tetraviewer/MyClasses.h b/apps/tetraviewer/MyClasses.h new file mode 100644 index 00000000..1808be19 --- /dev/null +++ b/apps/tetraviewer/MyClasses.h @@ -0,0 +1,13 @@ +#include +#include +#include + +class MyTetrahedron; +class DUMMYEDGETYPE; +class DUMMYFACETYPE; + +class MyVertex: public vcg::VertexATVNd{}; + +class MyTetrahedron: public vcg::TetraATAV{}; + +typedef vcg::tetra::Tetramesh< std::vector ,std::vector > MyTetraMesh; diff --git a/apps/tetraviewer/MyGLWidget.cpp b/apps/tetraviewer/MyGLWidget.cpp new file mode 100644 index 00000000..66ef5aff --- /dev/null +++ b/apps/tetraviewer/MyGLWidget.cpp @@ -0,0 +1,396 @@ +#include +#include +#include +extern MyTetraMesh *tm; +extern TetraStats Stats; + +bool MyGLWidget::ShowTextSimplex() +{ + return (_ShowBar & SIMPLEX); +} + +bool MyGLWidget::ShowTextPhysics() +{ + return (_ShowBar & PHYSICS); +} + +bool MyGLWidget::ShowTextQuality() +{ + return (_ShowBar & QUALITY); +} + + +MyGLWidget::MyGLWidget( QWidget * parent, const char * name, const QGLWidget * shareWidget, WFlags f ): +QGLWidget(parent, name) +{ + Track.Reset(); + Track.radius= 1; + WT=0; + modality=3; + mouse_modality=MMTrackball; + _ShowBar=SIMPLEX; +} + + +void MyGLWidget::DrawTextInfo() + { + glPushAttrib(0xffffffff); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA); + glEnable(GL_LIGHTING); + glEnable(GL_NORMALIZE); + glEnable(GL_COLOR_MATERIAL); + glDisable(GL_CLIP_PLANE0); + glColor4d(0.7,0,0.7,0.6); + + glDepthRange(0.0,0.1); + + glBegin(GL_QUADS); + glVertex3d(-0.5,-0.5,0); + glVertex3d(-0.5,-0.3,0); + glVertex3d(0.5,-0.3,0); + glVertex3d(0.5,-0.5,0); + glEnd(); + + if (Stats.TCurrent()!=0) + { + glBegin(GL_QUADS); + glVertex3d(0.25,0.5,0); + glVertex3d(0.5,0.5,0); + glVertex3d(0.5,0.2,0); + glVertex3d(0.25,0.2,0); + glEnd(); + } + + + renderText( (width() - 10) / 2, 15, "a" ); + + QFont f( "arial", 8 ); + QFontMetrics fmc( f ); + glColor3d(1,1,1); + + QString str=""; + int level=0; + + glDisable( GL_LIGHTING ); + glDisable( GL_TEXTURE_2D ); + + if (ShowTextSimplex()) + { + level++; + str.sprintf( "Tetrahedrons : %i Vertex: %i ",tm->tn,tm->vn); + renderText( 20, height() - level*20, str, f ); + } + if (ShowTextPhysics()) + { + level++; + str.sprintf( "Volume : %03f ",Stats.volume); + renderText( 20, height() - level*20, str, f ); + } + if (ShowTextQuality()) + { + level++; + str.sprintf( "Aspect Ratio : %03f ",Stats.ratio); + renderText( 20, height() - level*20, str, f ); + } + + //at the end i draw the window for informations about a tretrahedron + if (Stats.TCurrent()!=0) + { + str=""; + str.sprintf( "Volume : %03f ",Stats.TCurrent()->ComputeVolume()); + renderText( width()-150, 30, str, f ); + str.sprintf( "Aspect Ratio : %03f ",Stats.TCurrent()->AspectRatio()); + renderText( width()-150, 50, str, f ); + + LoadMatrix(); + glColor3d(1,0,0); + + glDisable(GL_BLEND); + //write values of the tetrahedron + glLineWidth(0.5); + glColor3d(1,0,0); + for (int i=0;i<4;i++) + { + double x=Stats.TCurrent()->V(i)->P().V(0);//x value of vertex + double y=Stats.TCurrent()->V(i)->P().V(1);//y value of vertex + double z=Stats.TCurrent()->V(i)->P().V(2);//z value of vertex + str.sprintf("%i",i); + renderText(x,y,z,str,f); + } + + //show the tetrahedron + glBegin(GL_LINE_LOOP); + for (int i=0;i<4;i++) + { + glVertex(Stats.TCurrent()->V(i)->P()); + } + glEnd(); + glBegin(GL_LINE_LOOP); + glVertex(Stats.TCurrent()->V(0)->P()); + glVertex(Stats.TCurrent()->V(2)->P()); + glEnd(); + glBegin(GL_LINE_LOOP); + glVertex(Stats.TCurrent()->V(1)->P()); + glVertex(Stats.TCurrent()->V(3)->P()); + glEnd(); + //end drawing + } + glPopAttrib(); + } + + +void MyGLWidget::DrawBox() +{ + glPushAttrib(0xffffffff); + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_LIGHT0); + glDisable(GL_LIGHTING); + glDisable(GL_NORMALIZE); + glColor3d(1,1,1); + + glBegin(GL_LINE_LOOP); + glVertex(tm->bbox.P(0)); + glVertex(tm->bbox.P(1)); + glVertex(tm->bbox.P(3)); + glVertex(tm->bbox.P(2)); + glEnd(); + + glBegin(GL_LINE_LOOP); + glVertex(tm->bbox.P(4)); + glVertex(tm->bbox.P(5)); + glVertex(tm->bbox.P(7)); + glVertex(tm->bbox.P(6)); + glEnd(); + + glBegin(GL_LINE_LOOP); + glVertex(tm->bbox.P(0)); + glVertex(tm->bbox.P(1)); + glVertex(tm->bbox.P(5)); + glVertex(tm->bbox.P(4)); + glEnd(); + + glBegin(GL_LINE_LOOP); + glVertex(tm->bbox.P(3)); + glVertex(tm->bbox.P(2)); + glVertex(tm->bbox.P(6)); + glVertex(tm->bbox.P(7)); + glEnd(); + + glPopAttrib(); +} + +void MyGLWidget::DrawTetraMesh() +{ + +switch (modality) +{ + case 0:DrawBox();break; + case 1:WT->Draw();break; + case 2:WT->Draw();break; + case 3:WT->Draw();break; + case 4:WT->Draw();break; + case 5:WT->Draw();break; + case 6:WT->Draw();break; +} +} + +void MyGLWidget::SaveMatrix() +{ + glGetDoublev(GL_PROJECTION_MATRIX ,projection); + glGetDoublev(GL_MODELVIEW_MATRIX ,modelMatrix); +} + +void MyGLWidget::LoadMatrix() +{ + glMatrixMode(GL_PROJECTION); + glLoadMatrixd(projection); + glMatrixMode(GL_MODELVIEW); + glLoadMatrixd(modelMatrix); +} + +void MyGLWidget::glDraw(){ + + glClearColor(0.2,0.2,0.2,1); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45,1,0.01,20); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(0,0,1,0,0,0,0,10,0); + + if (tm!=0){ + glPushMatrix(); + + glScalef(1/tm->bbox.Diag(),1/tm->bbox.Diag(),1/tm->bbox.Diag()); + + Track.GetView(); + Track.Apply(); + Track.Draw(); + + vcg::Point3d p=tm->bbox.Center(); + glTranslate(-p); + + + //if not exist crete an instance of wrapper + if (WT==0) + { + WT= new vcg::GLWrapTetra >(tm->tetra); + WT->SetHint(vcg::GLW::HShrinkFactor, 0.8); + } + + /*glGetDoublev(GL_PROJECTION_MATRIX,proj); + glGetDoublev(GL_mode_MATRIX,mod); + glGetDoublev(GL_PROJECTION_MATRIX,);*/ + SaveMatrix(); + DrawTetraMesh(); + glPopMatrix(); + DrawTextInfo(); + } + QGLWidget::glDraw(); +} + +void MyGLWidget::resizeGL( int w, int h ) + { + // setup viewport, projection etc.: + glMatrixMode (GL_PROJECTION); + glLoadIdentity (); + float ratio=(float)w/(float)h; + gluPerspective(45,ratio,1,20); + _W=w; + _H=h; + glViewport (0, 0, (GLsizei) w, (GLsizei) h); + glMatrixMode (GL_MODELVIEW); + repaint(); + + } + +void MyGLWidget::mousePressEvent ( QMouseEvent * e ) +{ +if (e->button()==Qt::LeftButton) +{ + if (mouse_modality==MMTrackball) + { + Track.MouseDown(e->x(),_H-e->y(),vcg::Trackball::BUTTON_LEFT); + repaint(); + } + else + if (mouse_modality==MMSection) + { + LoadMatrix(); + MyTetraMesh::TetraIterator ti; + vcg::GLPickTetra::PickNearestTetra(e->x(),_H-e->y(),*tm,ti); + if (ti!=0) + { + ///find exterbnal face + int face=0; + while (!ti->IsBorderF(face)) + face++; + + vcg::Point3d p0=ti->V(vcg::Tetra::VofF(face,0))->P(); + vcg::Point3d p1=ti->V(vcg::Tetra::VofF(face,1))->P(); + vcg::Point3d p2=ti->V(vcg::Tetra::VofF(face,2))->P(); + + MyTetraMesh::VertexType::CoordType b=(p0+p1+p2)/3.f; + + WT->AddClipSection(p0,p1,p2); + TrackClip.Reset(); + TrackClip.radius=1; + TrackClip.center.V(0)=(float)b.V(0); + TrackClip.center.V(1)=(float)b.V(1); + TrackClip.center.V(2)=(float)b.V(2); + mouse_modality=MMNavigateSection; + TrackClip.MouseDown(e->x(),_H-e->y(),vcg::Trackball::BUTTON_LEFT); + } + } +} +else if (e->button()==Qt::RightButton) +{ + MyTetraMesh::TetraIterator ti; + LoadMatrix(); + //WT->section.GlClip(); + vcg::GLPickTetra::PickNearestTetra(e->x(),_H-e->y(),*tm,ti); + if (ti!=0) + { + Stats.TetraInfo(&*ti); + } +} +} + +void MyGLWidget::mouseReleaseEvent(QMouseEvent * e ) + { + Track.MouseUp(e->x(),_H-e->y(),vcg::Trackball::BUTTON_LEFT); + repaint(); + } + +void MyGLWidget::mouseMoveEvent ( QMouseEvent * e ) + { + if (mouse_modality==MMTrackball) + { + Track.MouseMove(e->x(),_H-e->y()); + repaint(); + } + else + if (mouse_modality==MMNavigateSection) + { + LoadMatrix(); + TrackClip.MouseMove(e->x(),_H-e->y()); + TrackClip.GetView(); + TrackClip.Apply(); + WT->section.Transform(TrackClip.track.Matrix()); + repaint(); + } + } + +void MyGLWidget::wheelEvent ( QWheelEvent * e ){ + /* + if (mouse_modality==MMTrackball) + { + const int WHEEL_DELTA =120; + Track.MouseWheel( e->delta()/ float(WHEEL_DELTA) ); + repaint(); + }else*/ + if (mouse_modality==MMNavigateSection) + { + const int WHEEL_DELTA =120; + float delta= e->delta()/ float(WHEEL_DELTA); + WT->section.Translate(delta/10); + + ///for casting from double to float + TrackClip.center.V(0)=(float)WT->section.P.V(0); + TrackClip.center.V(1)=(float)WT->section.P.V(1); + TrackClip.center.V(2)=(float)WT->section.P.V(2); + + repaint(); + } + } + +void MyGLWidget::keyPressEvent(QKeyEvent *k) +{ + mouse_modality=MMTrackball; + if ((k->key()==Qt::Key_Escape)&&((mouse_modality==MMNavigateSection)||(mouse_modality==MMSection))) + mouse_modality=MMTrackball; + +} + +void MyGLWidget::initializeGL(){ + + GLfloat f[4]={0.2,0.2,0.2,1.f}; + GLfloat p[4]={3,3,5,0}; + glLightfv(GL_LIGHT0, GL_AMBIENT,f); + glLightfv(GL_LIGHT1, GL_POSITION,p); + glLightfv(GL_LIGHT1, GL_DIFFUSE,f); + glLightfv(GL_LIGHT1, GL_SPECULAR,f); + + glEnable(GL_LIGHT0); + glEnable(GL_LIGHT1); + glEnable(GL_LIGHTING); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glPolygonMode(GL_FRONT,GL_FILL); + glEnable(GL_BACK); + glCullFace(GL_BACK); + + } diff --git a/apps/tetraviewer/MyGLWidget.h b/apps/tetraviewer/MyGLWidget.h new file mode 100644 index 00000000..8e12551a --- /dev/null +++ b/apps/tetraviewer/MyGLWidget.h @@ -0,0 +1,151 @@ +#include +#include +#include +#include +#include +#include +#include + + + +class MyGLWidget: public QGLWidget{ + +Q_OBJECT + +private : + int _H; + int _W; + vcg::Trackball Track; + vcg::GLWrapTetra *WT; + + GLdouble projection[16]; + GLdouble modelMatrix[16]; + GLint viewport[4]; + + + int modality;//rendering modality + enum mousemod {MMTrackball, MMSection,MMNavigateSection};//modality of using mouse + mousemod mouse_modality; + + + vcg::Trackball TrackClip; + +/// This are the flags pf info of the mesh that we want to show + int _ShowBar; + + enum { + SIMPLEX = 0x00000001, // show vertex number and tetrahedrons number + PHYSICS = 0x00000002, // show also physical information about the mesh + QUALITY = 0x00000004, // show informations about aspect ratio + }; + + +public: + + MyGLWidget( QWidget * parent = 0, const char * name = 0, const QGLWidget * shareWidget = 0, WFlags f = 0 ); + + virtual void glDraw(); + void resizeGL( int w, int h ); + virtual void mousePressEvent ( QMouseEvent * e ); + virtual void mouseReleaseEvent(QMouseEvent * e ); + virtual void mouseMoveEvent ( QMouseEvent * e ); + virtual void wheelEvent ( QWheelEvent * e ); + virtual void keyPressEvent(QKeyEvent *k); + virtual void initializeGL(); + virtual void SaveMatrix(); + void DrawTetraMesh(); + void DrawBox(); + bool ShowTextSimplex(); + bool ShowTextPhysics(); + bool ShowTextQuality(); + void DrawTextInfo(); + void LoadMatrix(); + +public slots: + + ///bounding box visualization modality + void setBox(){ + modality=0; + repaint(); + }; + + ///wireframe modality + void setWire(){ + modality=1; + repaint(); + }; + + ///hiddenlines modality + void setHidden(){ + modality=2; + repaint(); + }; + + ///alternate wire visualization + void setFlat(){ + modality=3; + repaint(); + }; + + ///alternate wire visualization + void setFlatWire(){ + modality=4; + repaint(); + }; + + ///alternate wire visualization + void setSmooth(){ + modality=5; + repaint(); + }; + + ///alternate wire visualization + void setSmallTetra() + { + modality=6; + repaint(); + }; + + //set trackball modality + void TrackMouseModality() + { + mouse_modality=MMTrackball; + }; + + //set trackball modality + void SectionMouseModality() + { + mouse_modality=MMSection; + }; + + ///switching to modality of viewing txt info on simplex + void SwitchTextSimplex() + { + if (ShowTextSimplex()) + _ShowBar&=~SIMPLEX; + else + _ShowBar|=SIMPLEX; + repaint(); + }; + + ///switching to modality of viewing txt info on physics + void SwitchTextPhysics() + { + if (ShowTextPhysics()) + _ShowBar&=~PHYSICS; + else + _ShowBar|=PHYSICS; + repaint(); + }; + + ///switching to modality of viewing txt info on quality + void SwitchTextQuality() + { + if (ShowTextQuality()) + _ShowBar&=~QUALITY; + else + _ShowBar|=QUALITY; + repaint(); + }; + +}; \ No newline at end of file diff --git a/apps/tetraviewer/TetraStats.h b/apps/tetraviewer/TetraStats.h new file mode 100644 index 00000000..57016290 --- /dev/null +++ b/apps/tetraviewer/TetraStats.h @@ -0,0 +1,67 @@ + +template +class TetraStats +{ +typedef typename TETRA_MESH_TYPE::TetraType TetraType; + +TETRA_MESH_TYPE * Tetra; +TetraType* T; + +public: +double volume; +double ratio; + +TetraStats(){} + +~TetraStats(){} + +static double ComputeVolume(TETRA_MESH_TYPE *tm) +{ + + double total=0.f; + TETRA_MESH_TYPE::TetraIterator ti; + for (ti=tm->tetra.begin();titetra.end();ti++) + { + if (!ti->IsD()) + total+=ti->ComputeVolume(); + } + return total; +} + +static double ComputeRatioMedia(TETRA_MESH_TYPE *tm) +{ + double total=0.f; + TETRA_MESH_TYPE::TetraIterator ti; + int i=0; + for (ti=tm->tetra.begin();titetra.end();ti++) + { + if (!ti->IsD()) + { + total+=ti->AspectRatio(); + i++; + } + } + return (total/i); +} + +void SetTetraMesh(TETRA_MESH_TYPE* T) +{ + Tetra=T; +} + +void Update() +{ + ratio=ComputeRatioMedia(Tetra); + volume=ComputeVolume(Tetra); +} + +void TetraInfo(TetraType *Te) +{ + T=Te; +} + +TetraType * TCurrent() +{ + return T; +} +}; diff --git a/apps/tetraviewer/TetraView.pro b/apps/tetraviewer/TetraView.pro new file mode 100644 index 00000000..85c4dab0 --- /dev/null +++ b/apps/tetraviewer/TetraView.pro @@ -0,0 +1,343 @@ +TEMPLATE = app +LANGUAGE = C++ + +CONFIG += qt warn_on release + + +HEADERS += MyGLWidget.h +SOURCES += main.cpp +FORMS = d:\TetraView\MainFrame.ui \ + MainFrame.ui +IMAGES = images/editcopy \ + images/editcut \ + images/editpaste \ + images/filenew \ + images/fileopen \ + images/filesave \ + images/print \ + images/redo \ + images/searchfind \ + images/undo \ + images/Open64.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +unix { + UI_DIR = .ui + MOC_DIR = .moc + OBJECTS_DIR = .obj +} + + diff --git a/apps/tetraviewer/TetraView.vcproj b/apps/tetraviewer/TetraView.vcproj new file mode 100644 index 00000000..8999ea9e --- /dev/null +++ b/apps/tetraviewer/TetraView.vcproj @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/tetraviewer/main.cpp b/apps/tetraviewer/main.cpp new file mode 100644 index 00000000..d9d83cac --- /dev/null +++ b/apps/tetraviewer/main.cpp @@ -0,0 +1,60 @@ +#include +#include "MainFrame.h" + +#include +#include +#include +#include +#include + + +//#include +#include + + +MyTetraMesh TM; +MyTetraMesh *tm; +TetraStats Stats; +vcg::tetra::io::ImporterTS ImpTS; +vcg::tetra::UpdateTetraTopology UT; +vcg::tetra::UpdateNormals UN; +vcg::tetra::UpdateBounding UB; + + +void openTetraMesh(const char* filename) +{ +//opening the tetrahedral mesh + QString path=QString(filename); + QString ext =path.right(3); + TM=MyTetraMesh(); + + if (ext==".ts") + ImpTS.Open(TM,filename); + else + vcg::tetra::io::ImporterPLY ::Open(TM,filename); + + UT.TTTopology(TM.vert,TM.tetra); + UT.VTTopology(TM.vert,TM.tetra); + UN.PerVertex(TM); + UB.Box(TM); + tm=&TM; + Stats.SetTetraMesh(tm); + Stats.Update(); +} + + + +int main( int argc, char ** argv ) +{ + + tm=0; + + QApplication a( argc, argv ); + MainFrame w; + + w.show(); + + a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); + return a.exec(); +} + diff --git a/apps/tetraviewer/moc_MainFrame.cpp b/apps/tetraviewer/moc_MainFrame.cpp new file mode 100644 index 00000000..245126ea --- /dev/null +++ b/apps/tetraviewer/moc_MainFrame.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** MainFrame meta object code from reading C++ file 'MainFrame.h' +** +** Created: Mon Oct 4 19:00:57 2004 +** by: The Qt MOC ($Id: moc_MainFrame.cpp,v 1.1 2004-10-04 17:07:23 pietroni Exp $) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#undef QT_NO_COMPAT +#include "MainFrame.h" +#include +#include + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26) +#error "This file was generated using the moc from 3.3.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +const char *MainFrame::className() const +{ + return "MainFrame"; +} + +QMetaObject *MainFrame::metaObj = 0; +static QMetaObjectCleanUp cleanUp_MainFrame( "MainFrame", &MainFrame::staticMetaObject ); + +#ifndef QT_NO_TRANSLATION +QString MainFrame::tr( const char *s, const char *c ) +{ + if ( qApp ) + return qApp->translate( "MainFrame", s, c, QApplication::DefaultCodec ); + else + return QString::fromLatin1( s ); +} +#ifndef QT_NO_TRANSLATION_UTF8 +QString MainFrame::trUtf8( const char *s, const char *c ) +{ + if ( qApp ) + return qApp->translate( "MainFrame", s, c, QApplication::UnicodeUTF8 ); + else + return QString::fromUtf8( s ); +} +#endif // QT_NO_TRANSLATION_UTF8 + +#endif // QT_NO_TRANSLATION + +QMetaObject* MainFrame::staticMetaObject() +{ + if ( metaObj ) + return metaObj; + QMetaObject* parentObject = QMainWindow::staticMetaObject(); + static const QUMethod slot_0 = {"fileNew", 0, 0 }; + static const QUMethod slot_1 = {"fileOpen", 0, 0 }; + static const QUMethod slot_2 = {"fileSave", 0, 0 }; + static const QUMethod slot_3 = {"fileSaveAs", 0, 0 }; + static const QUMethod slot_4 = {"fileExit", 0, 0 }; + static const QUMethod slot_5 = {"helpIndex", 0, 0 }; + static const QUMethod slot_6 = {"helpContents", 0, 0 }; + static const QUMethod slot_7 = {"helpAbout", 0, 0 }; + static const QUMethod slot_8 = {"setWire", 0, 0 }; + static const QUMethod slot_9 = {"languageChange", 0, 0 }; + static const QMetaData slot_tbl[] = { + { "fileNew()", &slot_0, QMetaData::Public }, + { "fileOpen()", &slot_1, QMetaData::Public }, + { "fileSave()", &slot_2, QMetaData::Public }, + { "fileSaveAs()", &slot_3, QMetaData::Public }, + { "fileExit()", &slot_4, QMetaData::Public }, + { "helpIndex()", &slot_5, QMetaData::Public }, + { "helpContents()", &slot_6, QMetaData::Public }, + { "helpAbout()", &slot_7, QMetaData::Public }, + { "setWire()", &slot_8, QMetaData::Public }, + { "languageChange()", &slot_9, QMetaData::Protected } + }; + metaObj = QMetaObject::new_metaobject( + "MainFrame", parentObject, + slot_tbl, 10, + 0, 0, +#ifndef QT_NO_PROPERTIES + 0, 0, + 0, 0, +#endif // QT_NO_PROPERTIES + 0, 0 ); + cleanUp_MainFrame.setMetaObject( metaObj ); + return metaObj; +} + +void* MainFrame::qt_cast( const char* clname ) +{ + if ( !qstrcmp( clname, "MainFrame" ) ) + return this; + return QMainWindow::qt_cast( clname ); +} + +bool MainFrame::qt_invoke( int _id, QUObject* _o ) +{ + switch ( _id - staticMetaObject()->slotOffset() ) { + case 0: fileNew(); break; + case 1: fileOpen(); break; + case 2: fileSave(); break; + case 3: fileSaveAs(); break; + case 4: fileExit(); break; + case 5: helpIndex(); break; + case 6: helpContents(); break; + case 7: helpAbout(); break; + case 8: setWire(); break; + case 9: languageChange(); break; + default: + return QMainWindow::qt_invoke( _id, _o ); + } + return TRUE; +} + +bool MainFrame::qt_emit( int _id, QUObject* _o ) +{ + return QMainWindow::qt_emit(_id,_o); +} +#ifndef QT_NO_PROPERTIES + +bool MainFrame::qt_property( int id, int f, QVariant* v) +{ + return QMainWindow::qt_property( id, f, v); +} + +bool MainFrame::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; } +#endif // QT_NO_PROPERTIES diff --git a/apps/tetraviewer/moc_MyGLWidget.cpp b/apps/tetraviewer/moc_MyGLWidget.cpp new file mode 100644 index 00000000..3a0ef9a1 --- /dev/null +++ b/apps/tetraviewer/moc_MyGLWidget.cpp @@ -0,0 +1,134 @@ +/**************************************************************************** +** MyGLWidget meta object code from reading C++ file 'MyGLWidget.h' +** +** Created: Mon Oct 4 19:00:57 2004 +** by: The Qt MOC ($Id: moc_MyGLWidget.cpp,v 1.1 2004-10-04 17:07:23 pietroni Exp $) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#undef QT_NO_COMPAT +#include "MyGLWidget.h" +#include +#include + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26) +#error "This file was generated using the moc from 3.3.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +const char *MyGLWidget::className() const +{ + return "MyGLWidget"; +} + +QMetaObject *MyGLWidget::metaObj = 0; +static QMetaObjectCleanUp cleanUp_MyGLWidget( "MyGLWidget", &MyGLWidget::staticMetaObject ); + +#ifndef QT_NO_TRANSLATION +QString MyGLWidget::tr( const char *s, const char *c ) +{ + if ( qApp ) + return qApp->translate( "MyGLWidget", s, c, QApplication::DefaultCodec ); + else + return QString::fromLatin1( s ); +} +#ifndef QT_NO_TRANSLATION_UTF8 +QString MyGLWidget::trUtf8( const char *s, const char *c ) +{ + if ( qApp ) + return qApp->translate( "MyGLWidget", s, c, QApplication::UnicodeUTF8 ); + else + return QString::fromUtf8( s ); +} +#endif // QT_NO_TRANSLATION_UTF8 + +#endif // QT_NO_TRANSLATION + +QMetaObject* MyGLWidget::staticMetaObject() +{ + if ( metaObj ) + return metaObj; + QMetaObject* parentObject = QGLWidget::staticMetaObject(); + static const QUMethod slot_0 = {"setBox", 0, 0 }; + static const QUMethod slot_1 = {"setWire", 0, 0 }; + static const QUMethod slot_2 = {"setHidden", 0, 0 }; + static const QUMethod slot_3 = {"setFlat", 0, 0 }; + static const QUMethod slot_4 = {"setFlatWire", 0, 0 }; + static const QUMethod slot_5 = {"setSmooth", 0, 0 }; + static const QUMethod slot_6 = {"setSmallTetra", 0, 0 }; + static const QUMethod slot_7 = {"TrackMouseModality", 0, 0 }; + static const QUMethod slot_8 = {"SectionMouseModality", 0, 0 }; + static const QUMethod slot_9 = {"SwitchTextSimplex", 0, 0 }; + static const QUMethod slot_10 = {"SwitchTextPhysics", 0, 0 }; + static const QUMethod slot_11 = {"SwitchTextQuality", 0, 0 }; + static const QMetaData slot_tbl[] = { + { "setBox()", &slot_0, QMetaData::Public }, + { "setWire()", &slot_1, QMetaData::Public }, + { "setHidden()", &slot_2, QMetaData::Public }, + { "setFlat()", &slot_3, QMetaData::Public }, + { "setFlatWire()", &slot_4, QMetaData::Public }, + { "setSmooth()", &slot_5, QMetaData::Public }, + { "setSmallTetra()", &slot_6, QMetaData::Public }, + { "TrackMouseModality()", &slot_7, QMetaData::Public }, + { "SectionMouseModality()", &slot_8, QMetaData::Public }, + { "SwitchTextSimplex()", &slot_9, QMetaData::Public }, + { "SwitchTextPhysics()", &slot_10, QMetaData::Public }, + { "SwitchTextQuality()", &slot_11, QMetaData::Public } + }; + metaObj = QMetaObject::new_metaobject( + "MyGLWidget", parentObject, + slot_tbl, 12, + 0, 0, +#ifndef QT_NO_PROPERTIES + 0, 0, + 0, 0, +#endif // QT_NO_PROPERTIES + 0, 0 ); + cleanUp_MyGLWidget.setMetaObject( metaObj ); + return metaObj; +} + +void* MyGLWidget::qt_cast( const char* clname ) +{ + if ( !qstrcmp( clname, "MyGLWidget" ) ) + return this; + return QGLWidget::qt_cast( clname ); +} + +bool MyGLWidget::qt_invoke( int _id, QUObject* _o ) +{ + switch ( _id - staticMetaObject()->slotOffset() ) { + case 0: setBox(); break; + case 1: setWire(); break; + case 2: setHidden(); break; + case 3: setFlat(); break; + case 4: setFlatWire(); break; + case 5: setSmooth(); break; + case 6: setSmallTetra(); break; + case 7: TrackMouseModality(); break; + case 8: SectionMouseModality(); break; + case 9: SwitchTextSimplex(); break; + case 10: SwitchTextPhysics(); break; + case 11: SwitchTextQuality(); break; + default: + return QGLWidget::qt_invoke( _id, _o ); + } + return TRUE; +} + +bool MyGLWidget::qt_emit( int _id, QUObject* _o ) +{ + return QGLWidget::qt_emit(_id,_o); +} +#ifndef QT_NO_PROPERTIES + +bool MyGLWidget::qt_property( int id, int f, QVariant* v) +{ + return QGLWidget::qt_property( id, f, v); +} + +bool MyGLWidget::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; } +#endif // QT_NO_PROPERTIES diff --git a/apps/tetraviewer/ncb b/apps/tetraviewer/ncb new file mode 100644 index 00000000..dadafe46 Binary files /dev/null and b/apps/tetraviewer/ncb differ diff --git a/apps/tetraviewer/qmake_image_collection.cpp b/apps/tetraviewer/qmake_image_collection.cpp new file mode 100644 index 00000000..acf1ffbb --- /dev/null +++ b/apps/tetraviewer/qmake_image_collection.cpp @@ -0,0 +1,27 @@ +/**************************************************************************** +** Image collection for project 'TetraView'. +** +** Generated from reading image files: +** images/editcopy +** images/editcut +** images/editpaste +** images/filenew +** images/fileopen +** images/filesave +** images/print +** images/redo +** images/searchfind +** images/undo +** images/Open64.png +** +** Created: Mon Oct 4 19:00:57 2004 +** by: The User Interface Compiler ($Id: qmake_image_collection.cpp,v 1.1 2004-10-04 17:07:23 pietroni Exp $) +** +** WARNING! All changes made in this file will be lost! +****************************************************************************/ + +#include +#include +#include +#include + diff --git a/apps/tetraviewer/sphere.ts b/apps/tetraviewer/sphere.ts new file mode 100644 index 00000000..7b712489 --- /dev/null +++ b/apps/tetraviewer/sphere.ts @@ -0,0 +1,1457 @@ +288 1168 + 1.069820 1.021650 0.144960 + 1.143959 1.532189 0.051110 + 1.500000 1.888230 0.051110 + 1.500000 1.500000 0.000000 + 1.888230 1.500000 0.051110 + 1.548948 1.160718 0.051110 + 1.500000 0.750000 0.200960 + 1.108041 2.199552 0.259704 + 0.992470 0.514855 0.522546 + 2.105004 0.910336 0.291220 + 1.589616 2.431537 0.353706 + 1.715062 0.308368 0.653058 + 0.541485 1.244803 0.414906 + 2.072678 2.086017 0.273567 + 2.395550 1.601621 0.332842 + 0.531758 2.071859 0.541783 + 2.668485 2.117430 0.843512 + 1.990551 2.750483 0.882612 + 1.043964 2.736347 0.816792 + 2.781634 1.220620 0.840857 + 1.167603 0.079829 1.246746 + 0.358709 0.696067 1.001154 + 2.446040 0.515384 0.941304 + 0.400645 2.496545 1.569994 + 2.956062 1.731067 1.602682 + 0.061985 1.636652 1.188131 + 2.477109 2.579506 1.730741 + 2.783129 0.838081 1.793238 + 1.372770 2.955341 1.712001 + 2.617825 1.736238 2.424976 + 1.876712 2.527060 2.494675 + 0.237761 1.711268 2.226545 + 2.051246 0.142426 1.673684 + 1.278766 0.245967 2.260932 + 0.589931 0.359004 1.729364 + 0.130193 0.990609 1.719933 + 0.910176 2.321648 2.572988 + 2.111275 0.761920 2.621373 + 0.533509 0.810683 2.371661 + 1.766635 1.731170 2.929125 + 1.045936 1.221720 2.877132 + 1.247997 2.164887 1.325841 + 1.285212 0.823918 0.810020 + 1.729765 1.064403 2.059624 + 1.942318 0.996025 1.165173 + 1.358039 1.704737 2.132148 + 1.380005 1.749440 0.515155 + 2.115913 1.725867 1.539306 + 1.357625 0.632987 1.498132 + 1.922256 1.710467 0.832940 + 1.038546 1.338393 1.327517 + 1.471855 1.275012 0.491891 + 1.092747 1.283078 0.093669 + 1.321979 1.710209 0.051110 + 1.500000 1.694115 0.025555 + 1.694115 1.500000 0.025555 + 1.718589 1.330359 0.051110 + 1.500000 0.962862 0.112790 + 1.284910 0.885825 0.172960 + 1.321979 1.516094 0.025555 + 1.119263 1.872607 0.116968 + 1.301770 2.046142 0.142565 + 1.694115 1.694115 0.051110 + 1.308335 1.087863 0.089994 + 1.241322 0.620015 0.339514 + 1.026532 0.756598 0.312872 + 1.524474 1.330359 0.025555 + 2.001080 1.200706 0.145702 + 1.834256 1.028247 0.129624 + 1.804860 0.822701 0.228011 + 1.347870 1.345036 0.040428 + 1.374702 1.463978 2.978762 + 1.281233 2.090879 2.836206 + 0.920864 1.836177 2.810240 + 0.593229 1.447302 2.668271 + 0.333762 1.221652 2.350976 + 0.741304 0.979497 2.672816 + 1.343874 2.328059 0.284283 + 1.539316 2.165375 0.171073 + 1.601121 0.512991 0.397997 + 1.333484 0.375728 0.555559 + 1.939044 0.575878 0.411886 + 0.798046 1.130224 0.261718 + 0.835968 1.395249 0.182097 + 0.740026 0.832145 0.425880 + 1.834736 2.276721 0.290010 + 1.780888 1.992574 0.131236 + 1.990241 1.804300 0.142013 + 2.146533 1.546167 0.165483 + 2.269204 1.234140 0.272720 + 0.829266 1.810616 0.231674 + 0.812465 2.154487 0.367094 + 2.250414 1.848165 0.282015 + 2.393897 2.128626 0.510116 + 2.560574 1.867141 0.551053 + 1.795478 2.617984 0.582643 + 2.060433 2.451502 0.518236 + 1.065065 2.495580 0.488743 + 1.322771 2.613850 0.545870 + 2.623353 1.420390 0.541661 + 2.475908 1.027876 0.498355 + 1.449305 0.141614 0.910040 + 1.052603 0.248806 0.841034 + 2.793180 1.653365 0.806950 + 0.758746 2.468462 0.650173 + 0.497142 1.688259 0.438865 + 2.359868 2.501045 0.832712 + 0.647939 0.556540 0.717892 + 0.397880 0.954542 0.655812 + 0.746776 0.273290 1.107571 + 1.551497 2.819101 0.815463 + 2.300475 0.684068 0.564436 + 2.087718 0.364692 0.761345 + 2.664339 0.856393 0.864959 + 0.392458 2.340104 0.982145 + 0.685814 2.697109 1.156903 + 2.878236 1.960894 1.191337 + 2.952011 1.456726 1.178754 + 0.231418 1.419326 0.731201 + 0.253472 1.887155 0.821558 + 0.133651 1.123750 1.057715 + 2.271120 2.747425 1.269386 + 2.652034 2.392489 1.248975 + 1.929875 0.112284 1.179354 + 2.298940 0.272929 1.275855 + 2.944352 1.294491 1.707877 + 2.875515 1.007940 1.268875 + 1.175257 2.919035 1.231286 + 1.720255 2.938225 1.258713 + 0.148775 2.081064 1.364597 + 0.873130 2.828294 1.654575 + 2.012211 2.863951 1.745172 + 2.805659 2.167103 1.678527 + 2.670178 0.614862 1.332300 + 2.625227 2.243880 2.099066 + 2.854376 1.742597 2.022774 + 1.611754 2.839101 2.116325 + 2.232775 2.615073 2.127944 + 0.050197 1.691429 1.689869 + 0.242745 2.161976 1.909883 + 1.596355 0.019643 1.447146 + 2.799066 1.232132 2.130888 + 1.697501 0.115525 1.978425 + 1.210175 0.071829 1.740829 + 2.453397 0.402587 1.745848 + 0.924123 0.244969 2.021989 + 0.869476 0.154380 1.478765 + 0.434620 0.475263 1.373199 + 0.326883 0.631121 1.731284 + 0.198846 0.818002 1.338585 + 2.267579 2.214021 2.534299 + 0.489763 2.035815 2.443321 + 0.563932 2.478574 2.085386 + 2.535322 0.750817 2.226774 + 2.126398 0.342892 2.162970 + 2.420039 1.186506 2.605818 + 0.893285 0.456028 2.350035 + 0.526918 0.539021 2.057473 + 0.030587 1.325110 1.442552 + 0.121281 1.365352 2.005668 + 1.070298 2.718755 2.248500 + 0.282408 0.880224 2.052246 + 1.678915 0.413351 2.483429 + 1.347358 2.476322 2.602469 + 1.835208 2.184005 2.761527 + 2.265335 1.748700 2.733285 + 1.521072 0.969109 2.887029 + 1.110806 0.713497 2.692469 + 1.992754 1.185877 2.855376 + 0.824321 2.330716 1.447917 + 0.889877 2.118373 0.933812 + 1.145980 2.450617 1.071316 + 1.485928 1.387506 0.245946 + 1.510402 1.217865 0.271501 + 1.307907 1.403601 0.271501 + 0.654991 1.900769 1.256986 + 0.742879 1.938077 1.776193 + 1.905243 1.605233 0.442025 + 1.997467 1.898242 0.553254 + 1.651131 1.729953 0.674047 + 1.634117 1.624720 0.283132 + 1.726341 1.917728 0.394361 + 1.536343 0.470677 1.075595 + 1.704436 0.387706 1.585908 + 1.649971 0.814506 1.331652 + 1.828690 0.652196 0.909115 + 1.996782 0.569225 1.419428 + 1.198293 1.521565 1.729832 + 1.143272 1.751640 1.326679 + 1.577230 1.532130 1.433411 + 1.303018 1.934812 1.728994 + 1.736976 1.715302 1.835727 + 1.681955 1.945377 1.432574 + 0.785152 1.705126 0.934650 + 0.550266 1.487522 1.257824 + 2.194179 0.755705 1.053238 + 2.362723 0.917053 1.479205 + 2.361976 1.108323 1.003015 + 1.178019 2.182219 0.792773 + 1.378534 1.049465 0.650956 + 1.270838 1.148331 0.318426 + 1.006670 1.259907 0.453398 + 1.177516 0.922784 0.477490 + 0.913349 1.034360 0.612463 + 1.261982 1.640814 0.283132 + 0.955881 1.910650 0.528469 + 1.244023 1.974496 0.387429 + 2.535988 1.728467 1.570994 + 2.449521 1.281974 1.666272 + 2.448773 1.473244 1.190082 + 2.392199 1.921648 1.191409 + 1.440002 1.818835 0.283132 + 1.484810 2.090489 0.434430 + 1.956404 2.230475 0.857776 + 2.295371 1.913948 0.838226 + 2.019085 1.718167 1.186123 + 2.053232 2.238175 1.210959 + 1.500137 0.566143 0.731539 + 1.226407 0.451874 1.028383 + 1.138841 0.669386 0.666283 + 1.485928 1.012506 0.346426 + 1.392606 0.786959 0.505490 + 1.617375 2.115899 2.313411 + 1.562354 2.345973 1.910258 + 1.134107 2.013193 2.352568 + 1.079086 2.243267 1.949414 + 2.158903 1.656044 0.582891 + 1.697056 1.492739 0.662416 + 1.480401 1.524430 1.080228 + 1.932287 1.353246 0.999056 + 1.255201 1.306703 0.909704 + 1.707086 1.135519 0.828532 + 1.490432 1.167209 1.246345 + 1.314001 1.957163 0.920498 + 0.790016 1.291598 0.871211 + 1.161879 1.081155 1.068768 + 1.262614 0.356408 1.372439 + 1.318195 0.439477 1.879532 + 0.973778 0.495995 1.613748 + 1.755936 2.071002 0.593323 + 1.418806 2.298212 0.839773 + 1.585127 1.937677 1.079390 + 1.788429 1.092674 0.391556 + 1.695108 0.867127 0.550620 + 0.797900 1.708003 2.179346 + 0.945774 1.257710 2.251904 + 1.201988 1.463229 2.504640 + 0.858167 0.664527 1.249643 + 1.198086 0.985690 1.412824 + 0.698628 1.017230 1.164335 + 0.814238 0.848698 1.528440 + 0.638154 1.524830 1.777031 + 1.920520 0.913161 2.340498 + 1.504265 0.655185 2.160278 + 1.890506 0.603414 1.866654 + 1.440002 1.624720 0.257577 + 1.619274 2.457685 1.104227 + 1.680043 1.387506 0.271501 + 1.425930 1.512226 0.503523 + 0.945567 0.721835 1.934897 + 0.786028 1.074538 1.849589 + 0.584370 1.164501 1.523725 + 0.821961 0.759992 0.905587 + 1.310383 2.560114 1.518921 + 2.256447 0.951242 1.926431 + 1.922839 1.395135 1.799465 + 1.836041 1.030214 1.612398 + 2.029115 1.360946 1.352239 + 2.296511 2.152686 1.635024 + 1.562337 1.717953 2.530636 + 1.996312 2.126463 2.016991 + 1.862553 2.372197 1.528291 + 1.384156 1.201398 1.693570 + 1.543902 1.384570 2.095886 + 1.209276 1.543917 0.921336 + 0.960745 1.497121 0.465030 + 1.321418 0.728452 1.154076 + 1.748200 1.397786 2.494375 + 1.387851 1.143062 2.468378 + 1.613765 0.909971 0.987596 + 2.023661 0.953181 0.728197 + 2.013630 1.310402 0.562080 + 2.351945 1.465543 0.836899 + 2.173795 1.400320 2.242300 + 1.543695 0.848695 1.778878 + 1.131637 0.937543 2.215643 + 2.366869 1.731052 1.982141 + 1.987932 1.720488 2.278562 +41 169 170 171 +3 172 66 59 +25 175 138 129 +49 177 178 179 +48 182 183 184 +50 187 188 189 +15 193 119 170 +44 195 196 197 +41 170 198 171 +51 199 200 201 +1 204 90 60 +24 207 125 117 +24 207 117 116 +46 211 181 212 +49 213 214 215 +11 101 80 217 +51 220 200 199 +30 222 223 163 +14 92 94 226 +49 227 228 229 +0 202 58 65 +41 233 198 170 +50 230 234 235 +20 236 143 146 +10 239 212 240 +51 220 199 242 +31 244 75 74 +48 247 248 238 +25 175 194 138 +37 162 154 252 +11 185 112 123 +12 118 234 108 +46 255 180 211 +10 239 240 95 +4 257 180 177 +46 255 211 204 +48 259 238 248 +50 251 260 261 +42 262 203 235 +48 247 238 236 +17 128 256 110 +43 264 265 266 +43 264 266 254 +17 216 121 106 +30 222 163 164 +30 270 137 223 +45 190 224 244 +50 272 187 189 +41 271 223 263 +46 274 258 275 +48 247 236 276 +34 250 157 148 +0 202 65 82 +39 168 277 71 +15 193 170 205 +37 162 252 166 +46 274 233 179 +14 88 92 226 +17 256 216 213 +11 185 217 81 +2 211 53 61 +17 256 95 110 +25 138 194 158 +45 224 246 244 +50 194 261 249 +49 227 229 281 +4 257 177 67 +47 267 208 209 +51 220 242 173 +49 227 179 228 +34 250 148 147 +11 81 217 79 +50 232 235 248 +44 229 280 197 +51 200 174 201 +36 160 152 225 +39 168 165 277 +44 280 195 197 +50 187 260 251 +48 182 184 276 +20 236 140 143 +43 264 254 252 +10 239 95 85 +10 239 85 212 +49 281 282 226 +41 233 240 198 +13 86 181 87 +44 229 267 232 +41 198 240 171 +14 226 94 99 +51 174 258 201 +41 175 170 169 +15 193 205 105 +50 187 251 188 +30 223 136 163 +49 215 214 282 +36 225 152 151 +26 271 121 131 +48 182 276 236 +14 88 226 89 +48 182 236 183 +48 247 276 248 +51 220 173 200 +48 237 284 183 +50 272 189 232 +43 272 284 266 +43 273 277 278 +43 253 285 278 +43 273 278 285 +8 80 219 64 +28 130 263 127 +49 215 228 241 +17 256 121 216 +3 172 59 255 +2 211 61 78 +32 124 144 186 +42 243 279 199 +48 284 237 259 +43 264 252 283 +11 185 81 112 +48 284 184 183 +48 259 237 238 +4 257 67 56 +44 229 197 267 +49 213 178 214 +3 172 255 55 +47 208 265 286 +30 222 164 150 +30 270 223 222 +39 72 71 269 +43 273 283 277 +42 262 218 219 +42 262 219 203 +1 83 90 204 +15 193 105 119 +51 174 200 173 +3 172 55 66 +50 230 235 232 +48 248 284 259 +24 132 207 116 +24 135 125 207 +30 270 222 150 +29 134 286 135 +43 265 283 273 +50 272 260 187 +30 270 150 137 +169 23 114 115 +170 114 15 104 +171 115 104 18 +169 170 171 115 +169 170 115 114 +170 171 115 104 +170 114 104 115 +172 51 173 174 +66 173 5 70 +59 174 70 1 +172 66 59 174 +172 66 174 173 +66 59 174 70 +66 173 70 174 +175 41 176 169 +138 176 31 139 +129 169 139 23 +175 138 129 169 +175 138 169 176 +138 129 169 139 +138 176 139 169 +177 4 87 180 +178 87 13 181 +179 180 181 46 +177 178 179 180 +177 178 180 87 +178 179 180 181 +178 87 181 180 +182 11 123 185 +183 123 32 186 +184 185 186 44 +182 183 184 185 +182 183 185 123 +183 184 185 186 +183 123 186 185 +187 45 190 191 +188 190 41 192 +189 191 192 47 +187 188 189 191 +187 188 191 190 +188 189 191 192 +188 190 192 191 +193 50 194 188 +119 194 25 175 +170 188 175 41 +193 119 170 188 +193 119 188 194 +119 170 188 175 +119 194 175 188 +195 22 133 113 +196 133 27 126 +197 113 126 19 +195 196 197 113 +195 196 113 133 +196 197 113 126 +196 133 126 113 +170 15 91 104 +198 91 7 97 +171 104 97 18 +170 198 171 104 +170 198 104 91 +198 171 104 97 +198 91 97 104 +199 42 202 203 +200 202 0 82 +201 203 82 12 +199 200 201 203 +199 200 203 202 +200 201 203 82 +200 202 82 203 +204 46 205 206 +90 205 15 91 +60 206 91 7 +204 90 60 206 +204 90 206 205 +90 60 206 91 +90 205 91 206 +207 47 208 209 +125 208 27 126 +117 209 126 19 +207 125 117 209 +207 125 209 208 +125 117 209 126 +125 208 126 209 +207 47 209 210 +117 209 19 103 +116 210 103 16 +207 117 116 210 +207 117 210 209 +117 116 210 103 +117 209 103 210 +211 2 86 78 +181 86 13 85 +212 78 85 10 +211 181 212 78 +211 181 78 86 +181 212 78 85 +181 86 85 78 +213 17 106 216 +214 106 16 210 +215 216 210 47 +213 214 215 216 +213 214 216 106 +214 215 216 210 +214 106 210 216 +101 20 102 218 +80 102 8 219 +217 218 219 42 +101 80 217 218 +101 80 218 102 +80 217 218 219 +80 102 219 218 +220 6 58 221 +200 58 0 202 +199 221 202 42 +220 200 199 221 +220 200 221 58 +200 199 221 202 +200 58 202 221 +222 45 190 224 +223 190 41 225 +163 224 225 36 +222 223 163 224 +222 223 224 190 +223 163 224 225 +223 190 225 224 +92 13 93 178 +94 93 16 214 +226 178 214 49 +92 94 226 178 +92 94 178 93 +94 226 178 214 +94 93 214 178 +227 51 230 231 +228 230 50 232 +229 231 232 44 +227 228 229 231 +227 228 231 230 +228 229 231 232 +228 230 232 231 +202 42 221 219 +58 221 6 64 +65 219 64 8 +202 58 65 219 +202 58 219 221 +58 65 219 64 +58 221 64 219 +233 46 206 205 +198 206 7 91 +170 205 91 15 +233 198 170 205 +233 198 205 206 +198 170 205 91 +198 206 91 205 +230 51 201 199 +234 201 12 203 +235 199 203 42 +230 234 235 199 +230 234 199 201 +234 235 199 203 +234 201 203 199 +236 48 237 238 +143 237 33 145 +146 238 145 34 +236 143 146 238 +236 143 238 237 +143 146 238 145 +143 237 145 238 +239 49 179 241 +212 179 46 233 +240 241 233 41 +239 212 240 241 +239 212 241 179 +212 240 241 233 +212 179 233 241 +220 6 221 69 +199 221 42 243 +242 69 243 9 +220 199 242 69 +220 199 69 221 +199 242 69 243 +199 221 243 69 +244 45 245 246 +75 245 38 76 +74 246 76 40 +244 75 74 246 +244 75 246 245 +75 74 246 76 +75 245 76 246 +247 21 249 147 +248 249 50 250 +238 147 250 34 +247 248 238 147 +247 248 147 249 +248 238 147 250 +248 249 250 147 +175 41 188 176 +194 188 50 251 +138 176 251 31 +175 194 138 176 +175 194 176 188 +194 138 176 251 +194 188 251 176 +162 33 142 253 +154 142 32 254 +252 253 254 43 +162 154 252 253 +162 154 253 142 +154 252 253 254 +154 142 254 253 +185 44 195 186 +112 195 22 124 +123 186 124 32 +185 112 123 186 +185 112 186 195 +112 123 186 124 +112 195 124 186 +118 25 194 120 +234 194 50 249 +108 120 249 21 +118 234 108 120 +118 234 120 194 +234 108 120 249 +234 194 249 120 +255 3 55 54 +180 55 4 62 +211 54 62 2 +255 180 211 54 +255 180 54 55 +180 211 54 62 +180 55 62 54 +239 49 241 213 +240 241 41 256 +95 213 256 17 +239 240 95 213 +239 240 213 241 +240 95 213 256 +240 241 256 213 +257 51 258 227 +180 258 46 179 +177 227 179 49 +257 180 177 227 +257 180 227 258 +180 177 227 179 +180 258 179 227 +255 3 54 59 +211 54 2 53 +204 59 53 1 +255 211 204 59 +255 211 59 54 +211 204 59 53 +211 54 53 59 +259 38 157 260 +238 157 34 250 +248 260 250 50 +259 238 248 260 +259 238 260 157 +238 248 260 250 +238 157 250 260 +251 31 75 159 +260 75 38 161 +261 159 161 35 +251 260 261 159 +251 260 159 75 +260 261 159 161 +260 75 161 159 +262 21 108 249 +203 108 12 234 +235 249 234 50 +262 203 235 249 +262 203 249 108 +203 235 249 234 +203 108 234 249 +247 21 147 109 +238 147 34 146 +236 109 146 20 +247 238 236 109 +247 238 109 147 +238 236 109 146 +238 147 146 109 +128 28 263 127 +256 263 41 171 +110 127 171 18 +128 256 110 127 +128 256 127 263 +256 110 127 171 +256 263 171 127 +264 27 208 196 +265 208 47 267 +266 196 267 44 +264 265 266 196 +264 265 196 208 +265 266 196 267 +265 208 267 196 +264 27 196 144 +266 196 44 186 +254 144 186 32 +264 266 254 144 +264 266 144 196 +266 254 144 186 +266 196 186 144 +216 47 268 210 +121 268 26 122 +106 210 122 16 +216 121 106 210 +216 121 210 268 +121 106 210 122 +121 268 122 210 +222 45 224 269 +163 224 36 72 +164 269 72 39 +222 163 164 269 +222 163 269 224 +163 164 269 72 +163 224 72 269 +270 47 268 192 +137 268 26 271 +223 192 271 41 +270 137 223 192 +270 137 192 268 +137 223 192 271 +137 268 271 192 +190 41 225 176 +224 225 36 151 +244 176 151 31 +190 224 244 176 +190 224 176 225 +224 244 176 151 +224 225 151 176 +272 43 273 265 +187 273 45 191 +189 265 191 47 +272 187 189 265 +272 187 265 273 +187 189 265 191 +187 273 191 265 +271 26 137 131 +223 137 30 136 +263 131 136 28 +271 223 263 131 +271 223 131 137 +223 263 131 136 +223 137 136 131 +274 50 230 234 +258 230 51 201 +275 234 201 12 +274 258 275 234 +274 258 234 230 +258 275 234 201 +258 230 201 234 +247 21 109 262 +236 109 20 218 +276 262 218 42 +247 236 276 262 +247 236 262 109 +236 276 262 218 +236 109 218 262 +250 50 260 261 +157 260 38 161 +148 261 161 35 +250 157 148 261 +250 157 261 260 +157 148 261 161 +157 260 161 261 +202 42 219 203 +65 219 8 84 +82 203 84 12 +202 65 82 203 +202 65 203 219 +65 82 203 84 +65 219 84 203 +168 37 252 166 +277 252 43 278 +71 166 278 40 +168 277 71 166 +168 277 166 252 +277 71 166 278 +277 252 278 166 +193 50 188 274 +170 188 41 233 +205 274 233 46 +193 170 205 274 +193 170 274 188 +170 205 274 233 +170 188 233 274 +162 33 253 167 +252 253 43 278 +166 167 278 40 +162 252 166 167 +162 252 167 253 +252 166 167 278 +252 253 278 167 +274 50 188 228 +233 188 41 241 +179 228 241 49 +274 233 179 228 +274 233 228 188 +233 179 228 241 +233 188 241 228 +88 4 87 177 +92 87 13 178 +226 177 178 49 +88 92 226 177 +88 92 177 87 +92 226 177 178 +92 87 178 177 +256 41 192 241 +216 192 47 215 +213 241 215 49 +256 216 213 241 +256 216 241 192 +216 213 241 215 +216 192 215 241 +185 44 279 280 +217 279 42 243 +81 280 243 9 +185 217 81 280 +185 217 280 279 +217 81 280 243 +217 279 243 280 +211 46 204 206 +53 204 1 60 +61 206 60 7 +211 53 61 206 +211 53 206 204 +53 61 206 60 +53 204 60 206 +256 41 240 171 +95 240 10 98 +110 171 98 18 +256 95 110 171 +256 95 171 240 +95 110 171 98 +95 240 98 171 +138 31 251 159 +194 251 50 261 +158 159 261 35 +138 194 158 159 +138 194 159 251 +194 158 159 261 +194 251 261 159 +224 36 73 151 +246 73 40 74 +244 151 74 31 +224 246 244 151 +224 246 151 73 +246 244 151 74 +246 73 74 151 +194 25 158 120 +261 158 35 149 +249 120 149 21 +194 261 249 120 +194 261 120 158 +261 249 120 149 +261 158 149 120 +227 51 231 242 +229 231 44 280 +281 242 280 9 +227 229 281 242 +227 229 242 231 +229 281 242 280 +229 231 280 242 +257 51 227 242 +177 227 49 281 +67 242 281 9 +257 177 67 242 +257 177 242 227 +177 67 242 281 +177 227 281 242 +267 44 196 197 +208 196 27 126 +209 197 126 19 +267 208 209 197 +267 208 197 196 +208 209 197 126 +208 196 126 197 +220 6 69 57 +242 69 9 68 +173 57 68 5 +220 242 173 57 +220 242 57 69 +242 173 57 68 +242 69 68 57 +227 51 258 230 +179 258 46 274 +228 230 274 50 +227 179 228 230 +227 179 230 258 +179 228 230 274 +179 258 274 230 +250 50 261 249 +148 261 35 149 +147 249 149 21 +250 148 147 249 +250 148 249 261 +148 147 249 149 +148 261 149 249 +81 9 243 69 +217 243 42 221 +79 69 221 6 +81 217 79 69 +81 217 69 243 +217 79 69 221 +217 243 221 69 +232 44 279 184 +235 279 42 276 +248 184 276 48 +232 235 248 184 +232 235 184 279 +235 248 184 276 +235 279 276 184 +229 49 281 282 +280 281 9 100 +197 282 100 19 +229 280 197 282 +229 280 282 281 +280 197 282 100 +280 281 100 282 +200 0 52 82 +174 52 1 83 +201 82 83 12 +200 174 201 82 +200 174 82 52 +174 201 82 83 +174 52 83 82 +160 28 130 263 +152 130 23 169 +225 263 169 41 +160 152 225 263 +160 152 263 130 +152 225 263 169 +152 130 169 263 +168 37 155 252 +165 155 29 283 +277 252 283 43 +168 165 277 252 +168 165 252 155 +165 277 252 283 +165 155 283 252 +280 9 111 100 +195 111 22 113 +197 100 113 19 +280 195 197 100 +280 195 100 111 +195 197 100 113 +195 111 113 100 +187 45 245 244 +260 245 38 75 +251 244 75 31 +187 260 251 244 +187 260 244 245 +260 251 244 75 +260 245 75 244 +182 11 185 217 +184 185 44 279 +276 217 279 42 +182 184 276 217 +182 184 217 185 +184 276 217 279 +184 185 279 217 +236 48 183 237 +140 183 32 142 +143 237 142 33 +236 140 143 237 +236 140 237 183 +140 143 237 142 +140 183 142 237 +264 27 144 153 +254 144 32 154 +252 153 154 37 +264 254 252 153 +264 254 153 144 +254 252 153 154 +254 144 154 153 +239 49 213 178 +95 213 17 96 +85 178 96 13 +239 95 85 178 +239 95 178 213 +95 85 178 96 +95 213 96 178 +239 49 178 179 +85 178 13 181 +212 179 181 46 +239 85 212 179 +239 85 179 178 +85 212 179 181 +85 178 181 179 +281 9 100 89 +282 100 19 99 +226 89 99 14 +281 282 226 89 +281 282 89 100 +282 226 89 99 +282 100 99 89 +233 46 212 206 +240 212 10 77 +198 206 77 7 +233 240 198 206 +233 240 206 212 +240 198 206 77 +240 212 77 206 +86 2 211 62 +181 211 46 180 +87 62 180 4 +86 181 87 62 +86 181 62 211 +181 87 62 180 +181 211 180 62 +229 49 215 228 +267 215 47 189 +232 228 189 50 +229 267 232 228 +229 267 228 215 +267 232 228 189 +267 215 189 228 +198 7 77 97 +240 77 10 98 +171 97 98 18 +198 240 171 97 +198 240 97 77 +240 171 97 98 +240 77 98 97 +226 49 214 282 +94 214 16 103 +99 282 103 19 +226 94 99 282 +226 94 282 214 +94 99 282 103 +94 214 103 282 +174 1 204 83 +258 204 46 275 +201 83 275 12 +174 258 201 83 +174 258 83 204 +258 201 83 275 +258 204 275 83 +175 25 119 129 +170 119 15 114 +169 129 114 23 +175 170 169 129 +175 170 129 119 +170 169 129 114 +170 119 114 129 +193 50 274 234 +205 274 46 275 +105 234 275 12 +193 205 105 234 +193 205 234 274 +205 105 234 275 +205 274 275 234 +187 45 244 190 +251 244 31 176 +188 190 176 41 +187 251 188 190 +187 251 190 244 +251 188 190 176 +251 244 176 190 +223 41 263 225 +136 263 28 160 +163 225 160 36 +223 136 163 225 +223 136 225 263 +136 163 225 160 +136 263 160 225 +215 47 210 209 +214 210 16 103 +282 209 103 19 +215 214 282 209 +215 214 209 210 +214 282 209 103 +214 210 103 209 +225 41 169 176 +152 169 23 139 +151 176 139 31 +225 152 151 176 +225 152 176 169 +152 151 176 139 +152 169 139 176 +271 41 256 263 +121 256 17 128 +131 263 128 28 +271 121 131 263 +271 121 263 256 +121 131 263 128 +121 256 128 263 +182 11 217 101 +276 217 42 218 +236 101 218 20 +182 276 236 101 +182 276 101 217 +276 236 101 218 +276 217 218 101 +88 4 177 67 +226 177 49 281 +89 67 281 9 +88 226 89 67 +88 226 67 177 +226 89 67 281 +226 177 281 67 +182 11 101 123 +236 101 20 140 +183 123 140 32 +182 236 183 123 +182 236 123 101 +236 183 123 140 +236 101 140 123 +247 21 262 249 +276 262 42 235 +248 249 235 50 +247 276 248 249 +247 276 249 262 +276 248 249 235 +276 262 235 249 +220 6 57 58 +173 57 5 63 +200 58 63 0 +220 173 200 58 +220 173 58 57 +173 200 58 63 +173 57 63 58 +237 33 253 142 +284 253 43 254 +183 142 254 32 +237 284 183 142 +237 284 142 253 +284 183 142 254 +284 253 254 142 +272 43 265 266 +189 265 47 267 +232 266 267 44 +272 189 232 266 +272 189 266 265 +189 232 266 267 +189 265 267 266 +272 50 248 232 +284 248 48 184 +266 232 184 44 +272 284 266 232 +272 284 232 248 +284 266 232 184 +284 248 184 232 +273 45 269 246 +277 269 39 71 +278 246 71 40 +273 277 278 246 +273 277 246 269 +277 278 246 71 +277 269 71 246 +253 33 156 167 +285 156 38 76 +278 167 76 40 +253 285 278 167 +253 285 167 156 +285 278 167 76 +285 156 76 167 +273 45 246 245 +278 246 40 76 +285 245 76 38 +273 278 285 245 +273 278 245 246 +278 285 245 76 +278 246 76 245 +80 11 217 79 +219 217 42 221 +64 79 221 6 +80 219 64 79 +80 219 79 217 +219 64 79 221 +219 217 221 79 +130 23 169 115 +263 169 41 171 +127 115 171 18 +130 263 127 115 +130 263 115 169 +263 127 115 171 +263 169 171 115 +215 47 189 192 +228 189 50 188 +241 192 188 41 +215 228 241 192 +215 228 192 189 +228 241 192 188 +228 189 188 192 +256 41 271 192 +121 271 26 268 +216 192 268 47 +256 121 216 192 +256 121 192 271 +121 216 192 268 +121 271 268 192 +172 51 174 258 +59 174 1 204 +255 258 204 46 +172 59 255 258 +172 59 258 174 +59 255 258 204 +59 174 204 258 +211 46 206 212 +61 206 7 77 +78 212 77 10 +211 61 78 212 +211 61 212 206 +61 78 212 77 +61 206 77 212 +124 22 133 195 +144 133 27 196 +186 195 196 44 +124 144 186 195 +124 144 195 133 +144 186 195 196 +144 133 196 195 +243 9 280 242 +279 280 44 231 +199 242 231 51 +243 279 199 242 +243 279 242 280 +279 199 242 231 +279 280 231 242 +284 43 253 285 +237 253 33 156 +259 285 156 38 +284 237 259 285 +284 237 285 253 +237 259 285 156 +237 253 156 285 +264 27 153 141 +252 153 37 155 +283 141 155 29 +264 252 283 141 +264 252 141 153 +252 283 141 155 +252 153 155 141 +185 44 280 195 +81 280 9 111 +112 195 111 22 +185 81 112 195 +185 81 195 280 +81 112 195 111 +81 280 111 195 +284 43 266 254 +184 266 44 186 +183 254 186 32 +284 184 183 254 +284 184 254 266 +184 183 254 186 +184 266 186 254 +259 38 156 157 +237 156 33 145 +238 157 145 34 +259 237 238 157 +259 237 157 156 +237 238 157 145 +237 156 145 157 +257 51 242 173 +67 242 9 68 +56 173 68 5 +257 67 56 173 +257 67 173 242 +67 56 173 68 +67 242 68 173 +229 49 282 215 +197 282 19 209 +267 215 209 47 +229 197 267 215 +229 197 215 282 +197 267 215 209 +197 282 209 215 +213 17 96 106 +178 96 13 93 +214 106 93 16 +213 178 214 106 +213 178 106 96 +178 214 106 93 +178 96 93 106 +172 51 258 257 +255 258 46 180 +55 257 180 4 +172 255 55 257 +172 255 257 258 +255 55 257 180 +255 258 180 257 +208 27 264 141 +265 264 43 283 +286 141 283 29 +208 265 286 141 +208 265 141 264 +265 286 141 283 +265 264 283 141 +222 45 269 287 +164 269 39 165 +150 287 165 29 +222 164 150 287 +222 164 287 269 +164 150 287 165 +164 269 165 287 +270 47 192 191 +223 192 41 190 +222 191 190 45 +270 223 222 191 +270 223 191 192 +223 222 191 190 +223 192 190 191 +72 36 73 224 +71 73 40 246 +269 224 246 45 +72 71 269 224 +72 71 224 73 +71 269 224 246 +71 73 246 224 +273 45 287 269 +283 287 29 165 +277 269 165 39 +273 283 277 269 +273 283 269 287 +283 277 269 165 +283 287 165 269 +262 21 109 107 +218 109 20 102 +219 107 102 8 +262 218 219 107 +262 218 107 109 +218 219 107 102 +218 109 102 107 +262 21 107 108 +219 107 8 84 +203 108 84 12 +262 219 203 108 +262 219 108 107 +219 203 108 84 +219 107 84 108 +83 12 105 275 +90 105 15 205 +204 275 205 46 +83 90 204 275 +83 90 275 105 +90 204 275 205 +90 105 205 275 +193 50 234 194 +105 234 12 118 +119 194 118 25 +193 105 119 194 +193 105 194 234 +105 119 194 118 +105 234 118 194 +174 1 52 70 +200 52 0 63 +173 70 63 5 +174 200 173 70 +174 200 70 52 +200 173 70 63 +200 52 63 70 +172 51 257 173 +55 257 4 56 +66 173 56 5 +172 55 66 173 +172 55 173 257 +55 66 173 56 +55 257 56 173 +230 51 199 231 +235 199 42 279 +232 231 279 44 +230 235 232 231 +230 235 231 199 +235 232 231 279 +235 199 279 231 +248 50 272 260 +284 272 43 285 +259 260 285 38 +248 284 259 260 +248 284 260 272 +284 259 260 285 +284 272 285 260 +132 26 268 122 +207 268 47 210 +116 122 210 16 +132 207 116 122 +132 207 122 268 +207 116 122 210 +207 268 210 122 +135 29 141 286 +125 141 27 208 +207 286 208 47 +135 125 207 286 +135 125 286 141 +125 207 286 208 +125 141 208 286 +270 47 191 286 +222 191 45 287 +150 286 287 29 +270 222 150 286 +270 222 286 191 +222 150 286 287 +222 191 287 286 +134 26 268 132 +286 268 47 207 +135 132 207 24 +134 286 135 132 +134 286 132 268 +286 135 132 207 +286 268 207 132 +265 47 286 191 +283 286 29 287 +273 191 287 45 +265 283 273 191 +265 283 191 286 +283 273 191 287 +283 286 287 191 +272 43 285 273 +260 285 38 245 +187 273 245 45 +272 260 187 273 +272 260 273 285 +260 187 273 245 +260 285 245 273 +270 47 286 268 +150 286 29 134 +137 268 134 26 +270 150 137 268 +270 150 268 286 +150 137 268 134 +150 286 134 268 diff --git a/apps/tetraviewer/stomach.ply b/apps/tetraviewer/stomach.ply new file mode 100644 index 00000000..8829f418 Binary files /dev/null and b/apps/tetraviewer/stomach.ply differ diff --git a/apps/tetraviewer/stomach.ts b/apps/tetraviewer/stomach.ts new file mode 100644 index 00000000..ea26c186 --- /dev/null +++ b/apps/tetraviewer/stomach.ts @@ -0,0 +1,4029 @@ +838 2352 + 1.131999 1.061163 0.864034 + + 0.953259 1.081498 0.922601 + + 0.868841 1.154316 1.022535 + + 0.812846 1.261574 1.156499 + + 0.750367 1.350320 1.443415 + + 1.766597 3.465281 -0.506328 + + 1.698190 3.497278 -0.573777 + + 1.633168 3.527691 -0.637888 + + 1.632716 3.489508 -0.555852 + + 1.632259 3.450936 -0.472979 + + 1.217904 5.023386 -1.080813 + + 1.210681 5.001504 -1.081817 + + 1.200378 4.970295 -1.083250 + + 1.186290 4.927616 -1.085209 + + 1.165759 4.865422 -1.088064 + + 1.141663 4.792424 -1.091415 + + 1.138560 4.718844 -1.096902 + + 1.135562 4.645788 -1.102358 + + 1.131895 4.556424 -1.109033 + + 1.126882 4.434255 -1.118157 + + 1.145766 4.290203 -1.135738 + + 1.168784 4.170650 -1.152351 + + 1.303763 5.144269 -0.998656 + + 1.271534 5.098893 -1.029495 + + 1.251158 5.070206 -1.048993 + + 1.235263 5.047827 -1.064202 + + 1.226129 5.034966 -1.072943 + + 1.265963 5.072185 -0.984123 + + 1.243828 5.029975 -0.975614 + + 1.217682 4.980115 -0.965562 + + 1.180406 4.908776 -0.958969 + + 1.133187 4.808424 -1.016115 + + 1.126271 4.690941 -0.994708 + + 1.118320 4.555867 -0.970096 + + 1.110338 4.420260 -0.945387 + + 1.126130 1.351488 1.019272 + + 1.019453 1.283189 1.082720 + + 0.627539 -1.816458 0.052866 + + 0.592926 -1.887919 0.263600 + + 0.424831 -1.842475 0.455934 + + 0.199317 -1.955165 0.502464 + + 0.072676 -2.170689 0.412138 + + 0.082975 -2.360819 0.199199 + + 1.139879 3.831851 -1.051091 + + 1.150472 3.704567 -1.014510 + + 1.160652 3.582243 -0.979354 + + 1.169360 3.477600 -0.949280 + + 1.212923 3.372805 -0.951801 + + 1.287216 3.240344 -0.961467 + + 1.345949 3.143166 -0.963178 + + 1.409052 3.054173 -0.917884 + + 1.484120 2.948874 -0.862271 + + 1.733702 3.350502 -0.969923 + + 1.738242 3.433918 -0.912778 + + 1.712167 3.498487 -0.871840 + + 1.687450 3.580093 -0.839351 + + 1.715219 3.475964 -0.985974 + + 1.696514 3.602931 -1.002218 + + 1.677468 3.732214 -1.018758 + + 1.670456 3.849452 -1.028706 + + 1.665008 3.991172 -1.039242 + + 1.658983 4.147906 -1.050893 + + 1.653018 4.303056 -1.062427 + + 1.597778 3.676589 -0.762112 + + 1.639717 3.629828 -0.806696 + + 1.665163 3.682058 -0.849656 + + 1.638358 3.804693 -0.862050 + + 1.609104 3.938532 -0.875577 + + 1.731315 3.489354 -0.709373 + + 1.797867 3.393042 -0.784325 + + 1.827839 3.317272 -0.819407 + + 1.856950 3.230714 -0.854014 + + 1.630473 4.822415 -1.065969 + + 1.633557 4.746186 -1.054004 + + 1.637788 4.641615 -1.037591 + + 1.643621 4.497466 -1.014965 + + 1.649816 4.344360 -0.990934 + + 1.655250 4.199110 -0.975605 + + 1.661381 4.027728 -0.962255 + + 1.666437 3.886376 -0.951244 + + 1.670546 3.771525 -0.942297 + + 1.383268 4.271322 -1.230095 + + 1.414607 4.448157 -1.239536 + + 1.447403 4.633207 -1.249415 + + 1.472895 4.777049 -1.257094 + + -0.492515 0.336685 -0.096613 + + -0.428592 0.416352 0.000682 + + -0.371161 0.459482 0.099084 + + -0.704188 0.445093 -0.104717 + + -0.601856 0.392684 -0.100799 + + 0.538894 -2.002640 -0.009328 + + 0.385060 -2.005147 -0.171968 + + 0.224737 -2.025123 -0.309271 + + 0.048106 -2.129093 -0.308553 + + 0.079291 -2.229494 -0.169667 + + 0.112499 -2.336407 -0.021773 + + -0.009197 -2.252814 -0.151041 + + -0.150143 -2.155998 -0.300758 + + 1.454838 5.127727 -1.004945 + + 1.378376 5.136099 -1.001762 + + 1.526081 5.130287 -1.076272 + + 1.569957 5.132434 -1.175277 + + 1.397354 5.013646 -1.167708 + + 1.414901 5.048469 -1.118025 + + 1.432607 5.083607 -1.067892 + + 1.541764 5.061173 -1.237466 + + 1.462100 5.034955 -1.198984 + + 1.507225 4.918680 -1.247310 + + 1.552233 4.944928 -1.237227 + + 1.562618 4.829610 -1.236990 + + 1.555191 4.717649 -1.242974 + + 1.516298 4.601622 -1.260245 + + -0.063090 -2.340966 0.027229 + + -0.444333 0.252763 0.937026 + + -0.467664 0.384902 0.718182 + + -0.492673 0.491865 0.494681 + + -0.518892 0.538254 0.296181 + + -0.550236 0.515373 0.109171 + + -0.624416 0.477947 -0.009042 + + 1.565935 3.527157 -0.570800 + + 1.504783 3.597433 -0.660993 + + 1.080948 1.161874 0.963230 + + 0.333217 -2.139562 0.188145 + + 0.585510 -1.896009 -0.088864 + + 0.619172 -1.693281 0.199891 + + 0.518637 -1.601617 0.379201 + + 0.366927 -1.594577 0.498084 + + 0.135393 -1.640019 0.566776 + + -0.092733 -1.778804 0.554058 + + -0.180821 -2.008349 0.439654 + + -0.169211 -2.230094 0.257033 + + 1.640089 3.854312 -0.909223 + + 1.502054 3.702245 -0.695971 + + 1.497990 3.858306 -0.748052 + + 1.493722 4.022184 -0.802741 + + 1.431699 3.908831 -0.776229 + + 1.369255 3.794710 -0.749537 + + 1.552319 3.637895 -0.712681 + + 1.386246 4.428245 -1.216907 + + 1.389351 4.591887 -1.203154 + + 1.391670 4.714117 -1.192881 + + 1.393907 4.831982 -1.182976 + + 1.395878 4.935837 -1.174247 + + 1.503287 4.464881 -1.249300 + + 1.489978 4.325006 -1.238104 + + 1.479178 4.211499 -1.229018 + + 1.493703 4.692945 -1.258605 + + -0.358168 0.332164 -0.126670 + + -0.207556 0.327096 -0.160366 + + -0.211133 0.398397 -0.043946 + + -0.213524 0.446065 0.033887 + + 0.393466 -1.855362 -0.312631 + + 0.173148 -2.133684 -0.090715 + + -0.034774 -2.331927 -0.100162 + + 1.620994 4.854798 -1.174754 + + 1.596324 4.989001 -1.175007 + + 1.045874 0.864764 0.826923 + + 0.753304 1.096403 0.891786 + + 0.658354 1.240876 1.005933 + + 0.494578 1.360966 1.248616 + + 1.821221 3.455145 -0.638468 + + 1.245274 5.003462 -1.099020 + + 1.176362 4.921023 -1.047069 + + 1.237442 4.913893 -1.119404 + + 1.223964 4.837169 -1.133686 + + 1.207292 4.749283 -1.149467 + + 1.175924 4.664925 -1.138522 + + 1.197433 4.594074 -1.157578 + + 1.249331 4.507945 -1.178059 + + 1.105945 4.320919 -1.027732 + + 1.269704 4.231744 -1.201048 + + 1.359868 5.100323 -1.052857 + + 1.237919 5.038428 -1.026348 + + 1.301489 5.066877 -1.073952 + + 1.257773 4.936308 -0.910671 + + 1.204383 4.818752 -0.911546 + + 1.204299 4.519722 -0.853085 + + 1.095901 1.427940 1.183691 + + 1.243992 3.757965 -1.120769 + + 1.153408 3.687897 -0.874771 + + 1.239119 3.598873 -1.087219 + + 1.249137 3.460860 -1.035923 + + 1.213626 3.439069 -0.814966 + + 1.315851 3.353390 -1.039762 + + 1.316262 3.149588 -0.847060 + + 1.385805 3.223817 -1.030787 + + 1.462538 3.119129 -1.004245 + + 1.377675 3.046018 -0.774885 + + 1.540873 3.011245 -0.951757 + + 1.652383 3.395149 -1.048352 + + 1.627011 3.524986 -1.076557 + + 1.614938 3.652436 -1.095593 + + 1.609338 3.783400 -1.112569 + + 1.336741 5.088510 -0.970450 + + 1.212856 1.277479 0.833424 + + 1.601237 3.771275 -0.802545 + + 1.622618 3.622973 -0.730875 + + 1.497716 3.404218 -0.489237 + + 1.912485 3.366820 -0.698683 + + 1.966416 3.256507 -0.758605 + + 1.623420 4.773867 -1.164973 + + 1.587588 4.793003 -0.975443 + + 1.597487 4.704585 -0.972610 + + 1.590352 4.424055 -0.903599 + + 1.597439 4.288611 -0.898806 + + 0.535991 -1.650153 -0.057731 + + 0.516571 -1.529499 0.179289 + + -0.600880 0.228222 -0.145614 + + -0.026076 -1.923185 -0.492994 + + 1.410526 5.072357 -0.968942 + + 1.504345 5.059373 -1.012404 + + 1.572022 5.039195 -1.089067 + + 1.303104 5.041834 -1.099330 + + -0.747551 0.588652 -0.054261 + + -0.222105 0.215894 0.769714 + + -0.640066 0.528374 0.969053 + + -0.639116 0.624795 0.710972 + + -0.327350 0.485492 0.326660 + + -0.651791 0.700362 0.455771 + + -0.450051 0.181424 -0.159019 + + -0.675170 0.728605 0.226235 + + -0.677503 0.616038 0.057682 + + 0.390700 -1.425782 0.316310 + + 1.387698 3.635986 -0.692862 + + 0.142308 -1.404816 0.456734 + + -0.140863 -1.508437 0.506452 + + -0.363821 -1.760628 0.396032 + + -0.371883 -2.043463 0.177243 + + -0.202381 -2.230467 -0.028987 + + 1.305973 4.016219 -0.779799 + + 1.278025 4.642325 -1.173589 + + -0.287301 0.156584 -0.232942 + + -0.059153 0.487780 -0.049717 + + 0.953024 1.372812 1.321308 + + -0.213579 0.486418 0.195207 + + 1.390208 4.162780 -1.217175 + + 0.211810 -1.730478 -0.491815 + + 1.267545 0.847113 0.746540 + + 0.809724 0.910494 0.816521 + + 0.442939 1.340115 1.595957 + + 1.248808 5.026722 -1.090837 + + 1.941366 3.419410 -0.546951 + + 1.270868 1.523381 0.879785 + + 1.207105 4.992577 -1.054765 + + 1.182236 3.569859 -0.838931 + + 1.206022 4.361473 -0.836874 + + 1.111819 4.186604 -1.022224 + + 1.261161 4.365617 -1.189613 + + 1.359551 5.065112 -1.100701 + + 1.331112 1.087782 0.671514 + + 1.223466 5.022022 -1.050777 + + 1.273889 5.061057 -1.067800 + + 1.191441 4.671758 -0.887651 + + 1.129410 4.281053 -0.902692 + + 1.128022 3.802405 -0.917076 + + 1.256384 3.285884 -0.812480 + + 1.453981 2.925621 -0.690272 + + 1.629764 2.899872 -0.880331 + + 1.681748 3.239914 -1.012113 + + 1.597622 3.911315 -1.133872 + + 1.671950 3.575921 -0.747560 + + 1.920588 3.424620 -0.380459 + + 1.124812 4.043551 -1.039669 + + 1.563324 2.846954 -0.751346 + + 1.585126 4.216216 -1.170004 + + 1.419423 3.490565 -0.617425 + + 1.991582 3.105401 -0.817441 + + 1.630741 4.688316 -1.139729 + + 1.587519 4.564448 -0.926798 + + 1.613603 4.563207 -1.170396 + + 1.605006 4.401649 -1.170440 + + 1.547472 4.151559 -0.847943 + + -0.047182 0.541758 0.130333 + + 1.228016 1.598675 1.114683 + + 0.358653 -1.485321 -0.287968 + + -0.727053 0.299713 -0.161844 + + 1.867696 3.057762 -0.883806 + + 1.595898 4.057666 -1.148095 + + -0.850719 0.385673 -0.234300 + + 1.585291 3.347611 -0.350950 + + 1.000996 1.452454 1.607327 + + -0.232041 0.007168 1.044496 + + -0.248089 0.393218 0.551106 + + 1.345813 4.983536 -1.151591 + + -0.450189 0.068018 1.304029 + + -0.832818 0.556778 -0.189464 + + 1.253235 3.675337 -0.763722 + + 0.781520 1.351936 1.814964 + + 1.603006 4.940605 -1.093110 + + 1.594839 4.880435 -1.026166 + + 1.198588 3.792882 -0.804413 + + 1.263348 3.907898 -0.777741 + + 1.286887 4.944342 -1.134446 + + -0.045704 0.390782 -0.199834 + + 1.508618 4.110799 -1.204764 + + -0.618701 0.393597 1.233698 + + -0.101275 0.186944 -0.343728 + + 0.402211 -1.374463 0.040084 + + 1.745232 3.408632 -0.343519 + + 0.053111 1.387885 1.361837 + + 1.286042 3.538831 -0.717887 + + 1.318744 4.895058 -0.884744 + + 1.360117 1.379062 0.653020 + + 1.528359 3.700531 -1.147996 + + 1.341702 4.441517 -0.814988 + + 1.221799 4.011321 -1.150235 + + 1.293293 4.099974 -1.191261 + + 1.262289 5.041584 -1.081996 + + 1.322687 5.009341 -0.929424 + + 1.306889 4.766050 -0.864214 + + 1.613203 3.114743 -1.006614 + + 1.380622 3.495254 -1.116786 + + 1.388096 3.679994 -1.157325 + + -0.900446 0.186433 -0.256431 + + 1.234576 3.886679 -1.136520 + + 1.883808 3.389782 -0.186670 + + 2.082196 3.323226 -0.620851 + + 1.117591 3.926194 -0.992099 + + 1.331608 3.195939 -0.683770 + + 1.496775 3.820517 -1.172353 + + 1.568396 3.324549 -1.074500 + + 1.510900 3.577364 -1.134262 + + 1.498677 0.859232 0.545916 + + 1.529466 3.443101 -1.105945 + + 0.426125 1.367813 0.963858 + + -0.195778 -0.243292 1.429894 + + 1.345544 1.850211 0.954366 + + 1.183176 4.031267 -0.823665 + + 1.951674 2.918532 -0.830665 + + -0.585983 -1.784499 0.091035 + + 1.482803 3.964904 -1.195268 + + 1.478753 4.499897 -0.840596 + + 1.487487 4.340582 -0.828446 + + 1.309959 3.371082 -0.684559 + + -0.068941 0.487674 0.387186 + + 1.519416 4.825216 -0.919071 + + -0.741549 0.095010 -0.167919 + + 0.123165 0.028589 0.838211 + + -0.704109 0.940389 0.368538 + + -0.398545 -2.058612 -0.137766 + + -0.580125 0.026189 -0.153057 + + 2.094708 3.402763 -0.444069 + + 1.394241 4.097070 -0.790080 + + -0.031461 -1.618426 -0.699692 + + 1.252948 4.138223 -0.802091 + + 1.148620 3.967569 -1.087182 + + 1.699047 3.300798 -0.177850 + + 1.348031 4.255258 -0.800266 + + 1.161594 0.584592 0.761482 + + 0.086674 0.668232 0.003785 + + 1.282542 5.009520 -1.114895 + + 0.104810 0.578724 -0.229732 + + -0.377799 -0.040061 -0.199743 + + 1.540921 4.974575 -0.997323 + + 1.158195 1.574106 1.397971 + + 0.023961 0.315002 0.620271 + + 1.343195 4.610413 -0.837062 + + 1.530381 4.735447 -0.909574 + + 1.434547 5.010045 -0.948154 + + -0.691522 0.847758 0.939326 + + -0.698131 0.915367 0.652340 + + 1.337031 3.968424 -1.184826 + + -0.344736 -1.963774 -0.420777 + + -0.587809 -1.844622 -0.268343 + + 0.592113 1.013087 0.698914 + + 0.014953 1.228879 1.757071 + + 1.408722 4.054036 -1.205067 + + 1.410095 1.717631 0.627631 + + 1.509693 1.167603 0.448827 + + 1.386748 3.058777 -0.628801 + + 1.142195 4.157665 -0.871628 + + 1.153323 3.916395 -0.849783 + + -1.013234 0.292710 -0.411249 + + 2.090089 3.431304 -0.242022 + + 1.368115 3.840621 -1.175743 + + 1.502450 4.899853 -0.936323 + + 1.761294 3.108428 -0.950669 + + 1.528038 3.219155 -1.057269 + + 1.523716 2.810310 -0.572542 + + 2.148160 3.159319 -0.746311 + + 0.089826 -0.258199 1.139252 + + -0.395848 -0.067301 1.765757 + + 1.356428 1.878668 1.344303 + + -0.460931 -1.423318 0.352622 + + 1.380278 3.312327 -0.556688 + + 0.196015 -1.239290 0.219773 + + 1.780897 2.923263 -0.881249 + + 1.500915 4.629330 -0.869689 + + 0.159857 -1.398625 -0.565144 + + -0.528932 -1.777251 -0.531199 + + 2.126966 2.942015 -0.813915 + + 0.871001 0.630095 0.776192 + + -0.182948 -0.076127 -0.314559 + + 1.535483 3.185290 -0.226001 + + 0.435355 1.223720 2.009710 + + 1.203727 4.243269 -0.827979 + + -0.724337 0.971766 0.126395 + + 1.092760 1.477007 1.990729 + + 0.157245 0.660491 0.268282 + + -0.097815 -1.247081 0.359845 + + -0.682112 0.743689 1.217516 + + -0.843444 0.757914 -0.147543 + + 1.464970 0.568809 0.649550 + + -0.592598 0.262720 1.629395 + + 0.140333 1.452231 1.030737 + + 0.115313 0.337052 -0.445884 + + 0.527876 1.219613 0.791237 + + 1.443226 3.340477 -1.084223 + + 1.669716 3.003304 -0.951076 + + -0.962608 0.507860 -0.369487 + + 1.269043 1.682244 1.712991 + + 1.438233 2.956014 -0.500663 + + -0.752887 0.775542 0.025370 + + 1.831274 3.291157 0.021761 + + 1.399376 3.148494 -0.508738 + + 0.293382 1.386906 0.721731 + + 0.159397 0.866138 -0.158491 + + -1.059584 0.052571 -0.409942 + + -0.321774 1.216762 1.457228 + + 1.406813 4.839711 -0.878402 + + 1.713305 2.800856 -0.785714 + + -0.293613 -1.742713 -0.667577 + + 2.275855 3.371015 -0.515577 + + 1.637523 2.748051 -0.664515 + + -0.020418 -0.403460 1.860453 + + -0.740883 -1.445399 0.079107 + + 0.223688 -1.169866 -0.071979 + + 0.210580 0.876567 0.084158 + + 1.593627 2.028327 1.815182 + + 0.399587 1.160617 0.497072 + + -0.629171 1.189006 0.250794 + + -0.912753 -0.024955 -0.229784 + + 1.464235 3.258873 -0.402117 + + 1.865340 2.765627 -0.770924 + + -0.282136 -1.454820 -0.849642 + + -0.582393 -1.563365 -0.705571 + + 0.248412 0.556660 -0.493297 + + 0.828318 1.237196 2.247946 + + 1.755514 0.583742 0.452084 + + 0.044098 0.094935 -0.549405 + + 1.482241 2.228034 1.011158 + + -0.780678 1.005477 -0.134478 + + 1.369426 0.255057 0.766322 + + 0.130537 0.141895 -0.724539 + + -0.736828 -0.111063 -0.133713 + + -0.026696 -0.106498 -0.492079 + + 1.555072 1.707031 2.229766 + + 1.423917 4.732173 -0.863683 + + 0.620796 0.760902 0.675220 + + 1.633266 3.123595 0.005036 + + 1.233731 4.974246 -1.101448 + + 1.508010 1.510230 0.393965 + + 1.779603 2.658025 -0.668540 + + -0.027682 -1.049901 0.122441 + + -0.740747 -1.609789 -0.437898 + + -0.234977 -0.144332 2.156311 + + 2.315027 3.443914 -0.323682 + + -1.075937 0.444201 -0.591766 + + -1.126344 0.175072 -0.623404 + + 2.058172 2.741166 -0.797174 + + 2.051206 3.402569 -0.012596 + + 1.260983 4.983714 -1.111703 + + -0.638507 1.183036 -0.003190 + + 2.356565 3.226177 -0.664392 + + 1.414217 4.941358 -0.911649 + + -0.754290 -1.630481 -0.140022 + + -0.038974 -1.255086 -0.790407 + + -0.631529 1.178855 0.544359 + + 2.350688 3.005083 -0.787557 + + 1.450060 3.055678 -0.330441 + + 2.260759 2.786657 -0.833794 + + 0.469400 0.905432 0.527377 + + 0.921894 0.262746 0.820321 + + -0.285869 -0.303021 -0.209682 + + 0.033830 0.987902 2.185320 + + 0.050736 -0.084498 -0.719896 + + 1.477848 2.148152 0.533043 + + 1.223289 1.313934 2.490917 + + 0.211714 0.479408 0.518174 + + 1.750159 0.266898 0.627909 + + 1.674455 2.349232 1.447853 + + -0.928027 0.682179 -0.304426 + + -0.582031 1.083386 1.183506 + + -0.524568 -0.201069 -0.129192 + + 1.504069 2.790407 -0.328030 + + 0.196926 -1.170446 -0.341420 + + -0.322982 -1.081510 0.245503 + + 0.460949 0.143350 0.772737 + + 1.766692 0.960859 0.259616 + + -0.596705 1.173567 0.859914 + + 1.500448 2.954747 -0.122597 + + -0.357943 0.989453 1.848864 + + -0.917897 0.893416 -0.359771 + + 0.043390 -0.910113 -0.216266 + + 0.214293 0.764990 -0.353860 + + 0.181786 -0.421872 2.277323 + + -0.059014 1.486287 0.728511 + + 1.117827 4.043200 -0.921237 + + -0.900986 -0.240999 -0.173325 + + 0.482931 -0.266639 1.048170 + + 0.331216 0.883818 0.313001 + + 1.624669 2.643925 -0.499904 + + -0.625891 -1.191619 0.207503 + + 0.291938 -0.511670 1.475724 + + -0.248308 -0.861990 0.048654 + + 0.162013 1.117844 -0.005814 + + 2.297164 3.476041 -0.062597 + + -0.844860 -1.137919 0.010095 + + -0.508324 0.229220 2.009940 + + -0.660190 0.588794 1.486023 + + 0.368598 0.673611 0.497174 + + -0.248673 0.255456 2.357352 + + -0.593407 -0.943035 0.134391 + + 0.443234 0.988559 2.412524 + + 1.764238 3.099922 0.270383 + + 2.593226 3.356707 -0.517286 + + 1.678377 -0.131768 0.902652 + + 2.082813 2.070926 2.199923 + + 0.227806 0.354957 -0.696079 + + 1.764034 1.359092 2.736479 + + -0.577701 0.925092 1.511164 + + -1.018904 0.693131 -0.527659 + + 0.572356 0.468822 0.684320 + + -0.084511 -0.364439 -0.384524 + + 2.153882 0.333102 0.406738 + + 0.272190 0.815636 -0.594890 + + 0.287977 0.615413 -0.752079 + + -0.886282 -1.380321 -0.241200 + + -0.553851 0.618550 1.827315 + + 1.591469 1.825657 0.187237 + + 1.726017 1.368185 0.105779 + + 1.961173 2.559767 -0.716692 + + 0.156296 1.383050 0.435463 + + 0.253583 1.159553 0.226930 + + -0.288082 1.388316 1.027531 + + 1.362124 0.903341 2.928313 + + -0.463289 1.338264 0.105939 + + -0.857575 -1.370281 -0.614458 + + -0.599498 -1.303953 -0.913582 + + 1.976856 3.300712 0.229793 + + 1.549209 2.637411 -0.051214 + + 0.545870 -0.631478 1.917042 + + -0.653713 1.229085 -0.274709 + + -0.306105 0.634958 2.197435 + + -1.149991 -0.118080 -0.628907 + + 0.111967 1.111772 -0.245434 + + -0.002247 -0.353342 -0.656193 + + -1.082442 -0.204480 -0.379138 + + 2.620028 3.525434 -0.204349 + + 2.622273 3.078129 -0.735075 + + -1.043312 0.640257 -0.779989 + + -0.835422 1.091470 -0.444002 + + 0.824787 -0.585215 1.424249 + + 0.779027 0.826467 2.770816 + + -0.441844 1.377194 0.377317 + + 0.874100 -0.184224 0.989978 + + -0.309435 -1.137463 -0.982360 + + 1.649261 2.470477 -0.279626 + + 1.246240 -0.072785 0.921024 + + 0.144200 0.207784 -0.920931 + + 0.046452 0.002093 -0.944893 + + 0.206651 0.961269 -0.395817 + + 1.595785 2.882132 0.171870 + + 2.229238 1.684008 2.568088 + + 2.172693 -0.060688 0.750163 + + 1.759234 2.688703 1.045033 + + -0.708541 -0.330001 -0.087081 + + 2.028191 2.410303 1.822628 + + 2.242964 2.495502 -0.814718 + + 0.024873 1.370199 0.151299 + + 0.073431 0.000700 2.561187 + + 1.913887 0.916729 2.995597 + + -1.100139 0.343969 -0.840523 + + -0.375527 1.402172 0.685170 + + -1.022530 -1.064495 -0.382187 + + 2.522916 2.749707 -0.877280 + + 1.634770 2.240398 -0.008023 + + -0.968592 0.890908 -0.651372 + + 1.211774 -0.714901 1.953640 + + -0.172758 1.475922 0.436996 + + 1.806885 2.444623 -0.553801 + + -0.178386 -0.613481 -0.164400 + + 0.471576 -0.206099 2.651621 + + 1.088758 0.392236 3.024526 + + 0.762621 -0.540970 2.395270 + + 1.553800 2.554660 0.285927 + + 1.544264 2.504166 0.698175 + + 0.060271 1.193427 -0.498136 + + -1.145072 -0.434605 -0.556519 + + 2.595855 3.543100 0.242751 + + 0.139118 0.580032 2.607144 + + -0.515762 -0.702638 0.036514 + + -0.951160 0.518080 -1.035738 + + 3.006604 3.434056 -0.337954 + + -0.028160 -0.261876 -0.916522 + + -0.484475 -0.467445 -0.065633 + + 0.203687 0.831246 -0.869785 + + -0.088281 -0.902149 -0.853843 + + 2.227263 2.790649 1.452249 + + 2.082052 -0.457118 1.216557 + + 2.704775 0.158950 0.511098 + + 2.091259 0.702623 0.177600 + + 2.105700 1.093995 -0.107174 + + 2.238648 3.421757 0.274746 + + 0.075448 -1.024832 -0.565744 + + 0.231228 0.434978 -0.899109 + + 0.001518 -0.664825 -0.535769 + + -1.047110 -0.443285 -0.274887 + + 1.701803 2.887744 0.565702 + + -0.064008 0.172578 -1.173566 + + 2.037458 2.265400 -0.684803 + + 2.992534 3.151214 -0.636900 + + 0.552738 0.240966 2.861928 + + 1.396487 -0.541824 1.309003 + + 1.856035 1.701341 -0.229624 + + -0.879053 -0.832701 -0.036760 + + -0.586781 -1.031402 -1.047499 + + -0.441333 1.336263 -0.129197 + + -1.123361 -0.314535 -0.851931 + + 1.683885 0.420874 3.057846 + + 0.154744 1.043088 -0.676494 + + -0.048306 1.296944 -0.309700 + + -1.117038 0.018272 -0.886161 + + -0.020851 1.309489 -0.094332 + + 2.622059 0.683594 0.023139 + + 2.439653 2.098965 -0.784703 + + 2.878819 2.770457 -0.860487 + + -0.720421 -0.575657 -0.021896 + + 2.650429 2.413033 -0.878500 + + -0.904656 0.814713 -0.920051 + + 2.954388 3.581510 0.048763 + + -0.439560 1.359112 -0.386372 + + 1.814364 2.155990 -0.389203 + + 2.372431 1.156613 2.851058 + + 2.650944 -0.275367 1.050284 + + -0.648249 1.260475 -0.565912 + + 2.026793 3.210927 0.518554 + + -0.246839 1.402830 -0.022734 + + 2.811861 2.000183 2.352719 + + -0.873736 -0.435422 -0.114377 + + -0.321678 -0.785649 -1.087190 + + 0.090390 0.367874 -1.081714 + + -0.076047 -0.583148 -0.879114 + + -0.142216 -0.119756 -1.152507 + + -0.950625 0.194407 -1.112291 + + -0.271700 1.434708 0.211387 + + 2.111538 3.061055 0.984219 + + -0.084448 1.239500 -0.738597 + + -0.899900 -1.071392 -0.840085 + + 1.897673 -0.655923 1.772184 + + -0.043917 1.043806 -0.965596 + + 2.461127 3.385660 0.659849 + + 2.950970 1.414705 2.608892 + + 3.432312 3.178369 -0.412269 + + -0.238701 1.376069 -0.231295 + + -0.974979 -0.141931 -1.103529 + + 0.166478 0.624968 -1.009563 + + 3.269158 0.474167 0.283628 + + 2.425707 1.276105 -0.408012 + + -0.815692 1.051657 -0.766211 + + -1.082037 -0.739280 -0.335519 + + 2.577741 2.499631 1.937927 + + 2.154053 1.814522 -0.587267 + + -0.080395 0.483728 -1.212700 + + -1.081767 -0.745614 -0.758545 + + -0.324507 1.161479 -0.963970 + + 3.348607 2.776065 -0.718403 + + 2.946216 2.901961 1.548446 + + 0.906971 -0.101828 2.829465 + + -0.728454 -0.799573 -1.105026 + + 2.332108 0.534937 2.955940 + + 1.756083 -0.527428 2.388705 + + 1.476084 -0.060117 2.891890 + + -0.180237 1.349954 -0.487209 + + -0.214040 -0.441055 -1.115755 + + -0.682427 0.369290 -1.260537 + + 3.010528 3.510503 0.596546 + + -0.891115 -0.491378 -1.122724 + + 3.369724 3.459469 0.030923 + + 3.254816 0.034080 0.852783 + + -0.332704 0.392379 -1.299295 + + 3.179762 1.048385 -0.257105 + + 2.675880 3.219697 1.098753 + + 2.566133 -0.493238 1.662450 + + 2.958052 2.020183 -0.795390 + + 2.731343 1.596343 -0.651153 + + -0.018195 0.800603 -1.114537 + + -0.771314 0.668066 -1.127879 + + -0.372999 0.101765 -1.296534 + + 3.259681 2.436651 1.976696 + + 2.059602 -0.057221 2.819879 + + 1.221172 -0.483444 2.544264 + + 3.506289 1.755368 2.262274 + + 3.674214 2.808032 1.451806 + + -0.710601 -0.293017 -1.235914 + + 3.084599 2.429794 -0.853990 + + -0.950111 -0.624937 -0.132184 + + -0.693457 0.019155 -1.273706 + + 2.918445 0.764326 2.763239 + + -0.587622 1.193986 -0.836141 + + -0.375025 1.326831 -0.686141 + + -0.621210 0.948475 -1.059590 + + 2.373892 -0.415917 2.262097 + + -0.317483 0.915982 -1.155748 + + 3.794009 2.685946 -0.437304 + + 3.785127 0.436446 0.698312 + + -0.531948 -0.535235 -1.215348 + + 3.138972 -0.234883 1.455519 + + -0.257453 0.665833 -1.251843 + + -0.420231 -0.229063 -1.262696 + + 3.821381 0.850407 0.236249 + + 3.515036 1.012653 2.381705 + + -0.504544 0.662459 -1.240253 + + 3.581920 3.412986 0.526136 + + 3.266676 3.252185 1.054541 + + 2.733914 0.107387 2.657130 + + 3.988092 2.159931 1.669764 + + 3.501718 2.259166 -0.700577 + + 3.778421 3.152053 0.002606 + + 2.951869 -0.196784 2.102258 + + 3.446604 1.666877 -0.568640 + + 3.945632 1.413187 -0.121293 + + 3.320186 0.376132 2.394102 + + 3.865448 3.055068 0.933436 + + 4.021603 2.991775 0.507309 + + 3.998095 2.063667 -0.321477 + + 3.673909 0.159808 1.304669 + + 4.213966 2.524873 0.918416 + + 4.079925 1.318116 1.785210 + + 4.174691 2.574512 0.107999 + + 3.831974 0.587384 1.911077 + + 4.149830 0.846739 0.745223 + + 4.110273 0.679861 1.307251 + + 4.296897 1.327794 0.501040 + + 4.308063 1.213333 1.072955 + + 4.356968 1.953648 0.324507 + + 3.449495 0.065687 1.841973 + + 4.345976 1.780523 1.034092 + + 0.331322 -2.004731 0.338588 + + 1.488758 5.082470 -1.140401 + + 2.149397 0.688404 0.663418 + + 2.146086 1.290373 0.498775 + + 2.271756 1.355696 1.820745 + + 3.284629 1.266158 1.219485 + + 2.850614 2.055978 1.583808 + + 2.163783 0.357776 1.262090 + + 2.886157 0.537657 1.285558 + + 1.539652 0.458199 1.133481 + + 2.312441 0.551556 2.227595 + + 1.055424 0.447097 1.230389 + + 1.559858 0.283296 2.046721 + + 1.761132 0.737619 0.906804 + + 1.497114 1.143957 0.898697 + + 0.979988 0.923921 1.095085 + + 0.221985 0.575433 1.653633 + + 0.760789 0.029890 2.025920 + + 1.349739 0.873165 1.000702 + + 1.183397 0.984314 1.396014 + + 2.121695 1.149026 1.141635 + + 1.661548 1.521656 0.937657 + + 2.141956 2.085396 0.638765 + + 1.696571 0.978132 1.385632 + + 1.301109 1.255883 1.193382 + + 1.394205 1.221484 1.796194 + + 0.599919 1.001693 1.081814 + + 0.626286 0.586878 1.065869 + + 0.867604 0.966523 1.510846 + + 1.032469 0.784783 1.950858 + + 0.213216 0.953779 0.870039 + + -0.284038 0.708342 1.187064 + + 0.498317 0.142473 1.378201 + + 0.572602 0.839683 1.954707 + + 3.159637 2.470349 -0.014982 + + 1.892427 2.979702 -0.448952 + + 1.525374 3.581830 -0.880363 + + 1.662488 3.312521 -0.678236 + + 1.860263 2.926284 -0.069404 + + 1.275129 4.770030 -1.017335 + + 1.296117 4.918369 -1.045919 + + 1.377849 4.527941 -1.031673 + + 1.380376 4.308847 -1.030563 + + 1.366834 4.113924 -1.016221 + + 1.278097 5.004237 -1.047958 + + 2.031087 1.900021 1.219825 + + 1.699888 1.610094 1.535606 + + 3.445276 1.905928 0.604853 + + 1.395932 3.914170 -0.990571 + + 1.500241 3.387750 -0.859465 + + 1.519329 3.175183 -0.862642 + + 2.304445 3.053222 -0.478911 + + 1.496095 4.723566 -1.079247 + + -0.055336 -1.629987 -0.114352 + + -0.266620 0.218706 -0.853137 + + -0.230231 0.995693 0.003512 + + -0.730653 0.214863 -0.711579 + + -0.349564 0.731211 0.188408 + + -0.280750 0.980485 -0.415066 + + -0.087569 0.630525 -0.710737 + + -0.356223 0.548946 -0.189879 + + -0.623331 0.744131 -0.730010 + + -0.600679 -0.201341 -0.582058 + + -0.671094 0.460005 -0.274581 + + -0.614107 0.276375 -0.337334 + + -0.603867 0.797530 -0.042570 + + -0.617635 0.653339 -0.232306 + + -0.176708 0.886782 0.571775 + + -0.453053 0.503018 -0.491948 + + -0.775516 0.551172 -0.503780 + + 1.712575 3.091423 -0.635822 + + 2.683405 3.088640 -0.105299 + + 2.181614 3.136681 -0.080107 + + 2.274905 2.295104 -0.158427 + + 2.392344 2.940502 0.381401 + + 2.204466 2.666870 -0.462046 + + 2.710195 2.608464 -0.525870 + + 0.025685 0.357242 1.126853 + + 1.922916 2.560474 0.314749 + + 2.962516 1.145323 2.057295 + + 1.226213 4.639233 -1.063750 + + -0.401748 -0.637788 -0.901715 + + -0.755259 -0.500659 -0.255948 + + -0.278455 0.436556 1.766450 + + 1.543911 5.056196 -1.169577 + + -0.571603 -1.022300 -0.207254 + + -0.052532 -2.243406 -0.090519 + + -0.502470 -0.680943 -0.514865 + + 0.505503 -1.849798 0.108355 + + 1.558966 4.348793 -1.031714 + + -0.460418 -1.349728 -0.128912 + + -0.383749 -1.086242 -0.574740 + + -0.479410 -0.936414 -0.844930 + + 1.453107 4.372773 -1.208653 + + 1.368664 5.001864 -1.051327 + + 1.566478 3.445824 -0.579443 + + 1.303397 5.075299 -1.008593 + + -0.726253 -0.735500 -0.209766 + + 1.438512 5.080241 -1.017860 + + 1.488971 3.794467 -0.874846 + +775 198 199 808 +725 785 729 735 +798 351 793 796 +356 777 447 309 +649 683 750 599 +667 760 744 785 +799 712 675 792 +775 261 298 5 +351 798 232 293 +540 562 776 816 +772 812 809 676 +760 811 812 816 +611 653 809 593 +197 775 384 432 +180 312 311 774 +811 658 760 772 +797 596 656 526 +314 305 361 786 +675 799 592 687 +74 790 267 73 +811 684 772 814 +589 812 676 809 +712 708 680 792 +818 18 167 166 +795 87 234 150 +565 816 608 586 +142 154 141 289 +785 724 723 772 +823 581 504 591 +721 710 785 733 +790 109 200 154 +825 591 823 835 +716 743 737 785 +141 164 778 777 +479 745 564 516 +825 820 835 660 +287 766 771 767 +811 760 614 576 +753 766 757 749 +758 743 746 742 +633 817 698 652 +638 817 652 692 +48 49 788 185 +784 758 783 759 +763 766 767 757 +787 182 181 774 +770 487 765 815 +817 563 652 633 +763 742 784 761 +775 808 414 432 +763 766 757 280 +835 574 660 615 +741 758 752 759 +763 766 280 287 +231 296 800 392 +560 609 559 792 +765 238 764 448 +753 121 1 0 +121 753 756 0 +745 748 750 761 +398 795 793 805 +354 762 763 784 +815 765 522 487 +288 103 106 211 +785 724 772 729 +825 591 835 595 +638 563 652 817 +791 208 362 97 +708 686 663 797 +106 822 211 739 +332 780 203 331 +775 241 160 198 +140 779 777 790 +286 178 180 312 +743 624 746 657 +79 786 192 259 +716 693 689 744 +785 727 729 735 +475 594 792 800 +158 764 324 159 +799 703 797 665 +749 558 755 750 +799 703 665 701 +835 574 615 823 +749 747 558 750 +819 642 800 674 +801 409 802 807 +590 755 570 612 +59 79 259 60 +149 798 150 86 +775 68 160 6 +569 579 805 645 +798 87 150 86 +829 466 791 604 +828 454 435 537 +79 786 259 60 +122 738 152 91 +104 98 100 836 +837 63 133 195 +808 376 276 71 +342 347 344 781 +128 738 127 791 +813 809 814 811 +768 532 805 429 +77 780 271 781 +558 442 749 472 +811 625 814 813 +837 134 133 135 +810 812 811 776 +814 626 575 628 +593 809 515 548 +794 544 800 622 +386 433 808 328 +413 810 776 539 +669 830 616 648 +516 745 599 750 +63 132 137 774 +288 211 106 155 +814 684 628 625 +802 798 89 801 +771 590 553 755 +747 751 756 402 +837 136 786 135 +781 317 786 345 +747 745 516 750 +134 837 786 135 +763 742 761 748 +266 773 379 390 +795 334 217 805 +769 113 295 284 +143 139 138 82 +230 779 139 168 +826 124 206 205 +808 411 256 369 +136 837 133 135 +122 826 738 91 +286 178 312 136 +779 34 780 19 +431 547 800 417 +743 692 817 744 +228 791 339 97 +228 791 97 152 +775 197 384 265 +70 198 199 775 +407 787 185 183 +530 451 741 368 +87 798 117 86 +85 798 86 89 +253 781 780 246 +745 600 634 746 +796 620 647 797 +791 226 225 128 +122 826 38 738 +252 818 779 777 +226 791 129 128 +516 745 564 599 +106 822 739 105 +718 772 724 729 +779 34 19 33 +665 796 647 797 +795 234 272 150 +820 627 835 696 +593 611 515 809 +142 375 289 141 +745 600 746 740 +814 575 813 568 +147 85 798 86 +110 200 267 790 +182 787 333 300 +610 811 813 625 +604 606 829 597 +797 650 647 665 +163 141 778 292 +441 804 401 803 +821 508 381 403 +747 442 749 558 +779 831 780 270 +790 109 154 141 +760 658 785 772 +318 787 788 775 +325 770 754 815 +89 798 802 85 +793 396 795 803 +811 685 658 772 +287 766 280 4 +772 681 658 785 +520 418 482 769 +532 496 805 579 +808 773 261 241 +534 418 769 482 +775 9 298 279 +746 679 634 707 +805 360 359 216 +606 604 829 493 +446 477 763 397 +216 769 359 805 +785 734 731 743 +35 762 36 177 +766 765 770 749 +784 758 742 783 +211 101 100 739 +731 734 785 733 +398 795 805 334 +524 740 438 601 +350 832 778 782 +793 349 427 416 +550 807 521 799 +582 668 755 584 +778 832 350 283 +781 317 345 262 +461 450 161 782 +699 799 701 659 +297 385 791 426 +811 684 814 625 +806 792 797 799 +721 785 735 733 +15 165 777 164 +286 180 774 312 +741 751 752 758 +67 781 134 786 +296 806 797 798 +419 790 777 447 +811 658 662 614 +807 492 521 799 +801 88 285 804 +751 438 479 740 +180 244 45 179 +751 438 740 322 +178 44 179 180 +496 768 805 534 +747 756 761 757 +741 783 759 760 +614 741 760 658 +745 746 634 683 +472 770 765 749 +198 775 69 160 +68 775 54 787 +420 257 386 808 +181 244 180 774 +198 70 69 775 +775 787 53 54 +181 182 787 47 +112 95 42 152 +825 642 606 546 +805 429 533 500 +19 779 33 18 +760 743 744 785 +825 669 800 664 +57 191 774 190 +190 787 774 56 +787 407 311 183 +683 750 745 748 +589 506 809 548 +275 802 278 313 +500 768 805 429 +747 745 750 761 +666 695 814 772 +784 758 759 761 +552 541 503 755 +759 368 752 741 +397 767 287 437 +516 613 750 599 +750 668 691 755 +749 757 767 766 +798 118 86 89 +779 780 304 331 +642 825 800 546 +798 795 150 87 +66 837 67 195 +171 98 209 99 +232 795 798 793 +836 832 209 210 +777 174 30 778 +244 46 181 180 +232 795 793 272 +759 762 784 761 +511 821 455 754 +773 378 808 411 +484 773 411 378 +717 725 720 772 +747 757 750 749 +637 793 623 654 +511 821 508 455 +552 613 755 555 +688 609 643 792 +800 820 660 607 +210 832 209 358 +799 675 592 794 +638 692 689 744 +767 477 763 750 +808 411 369 414 +714 812 785 772 +318 775 414 384 +136 286 774 312 +257 788 808 51 +397 767 477 763 +186 50 49 788 +763 766 287 767 +797 525 526 436 +799 521 577 492 +287 766 4 771 +2 1 157 753 +268 387 331 779 +232 795 272 150 +764 2 157 753 +754 159 299 768 +633 742 748 817 +684 772 720 685 +128 738 791 129 +832 104 210 836 +617 793 796 542 +125 826 124 206 +398 795 334 272 +797 703 650 665 +660 825 800 664 +171 98 836 209 +209 98 836 210 +717 695 666 772 +266 773 390 328 +758 752 759 761 +762 233 36 177 +793 398 805 427 +754 755 590 771 +66 774 195 65 +828 537 823 527 +641 797 663 656 +768 478 815 522 +822 101 105 155 +818 168 18 779 +142 103 102 106 +787 265 300 774 +325 424 381 754 +783 440 480 382 +828 329 383 791 +754 365 474 491 +375 790 335 289 +32 175 31 777 +120 265 774 223 +808 266 71 276 +208 791 93 97 +825 591 595 581 +825 820 660 800 +54 57 774 53 +791 363 329 339 +660 835 615 696 +615 823 591 835 +57 55 54 774 +820 835 660 696 +12 30 778 162 +667 760 785 682 +658 741 760 785 +771 4 239 754 +792 296 445 800 +779 790 139 269 +477 519 763 750 +402 348 756 747 +799 635 796 551 +832 375 778 464 +832 308 778 782 +770 337 815 380 +550 794 572 457 +798 801 804 89 +664 677 669 800 +826 206 791 205 +794 655 800 697 +799 675 794 792 +479 747 745 516 +819 825 830 669 +500 768 429 471 +745 600 740 564 +12 778 30 243 +30 777 31 175 +775 258 787 788 +309 777 447 419 +567 598 744 661 +387 202 357 790 +269 790 110 267 +780 347 395 245 +257 788 51 188 +800 697 792 794 +250 307 240 782 +800 643 792 709 +794 675 697 792 +256 788 808 369 +697 675 794 644 +182 255 333 787 +658 741 785 624 +96 824 153 97 +430 795 338 805 +770 380 815 325 +806 792 799 794 +391 472 749 348 +151 791 236 274 +810 539 603 812 +823 574 615 507 +719 746 722 748 +832 283 102 212 +791 466 388 604 +352 231 802 800 +85 219 802 207 +231 352 802 219 +4 771 239 287 +275 89 802 207 +147 231 802 219 +806 792 794 296 +363 828 791 329 +252 818 777 32 +782 212 350 832 +786 303 319 312 +81 780 831 144 +352 340 800 802 +413 514 776 449 +143 831 270 144 +785 737 733 734 +198 775 241 808 +279 775 9 197 +413 346 776 315 +742 638 817 563 +6 775 5 160 +352 219 340 802 +453 385 791 399 +429 768 415 406 +753 3 2 36 +354 382 273 784 +128 738 129 40 +365 418 491 769 +374 178 314 786 +800 547 588 544 +323 407 787 320 +242 367 759 326 +831 780 270 144 +74 790 269 267 +403 509 295 769 +81 831 82 144 +743 692 744 716 +811 684 625 685 +250 26 10 240 +818 167 230 166 +372 807 457 794 +250 307 172 25 +831 143 82 144 +517 567 428 784 +429 768 406 364 +597 819 830 640 +257 808 263 51 +372 807 794 802 +313 794 802 372 +68 775 69 54 +123 90 91 826 +399 791 383 225 +791 343 434 421 +826 90 38 37 +797 686 663 656 +719 715 748 722 +826 791 206 738 +791 226 383 225 +88 801 89 804 +830 538 648 829 +621 793 796 654 +684 717 720 772 +640 616 830 556 +716 692 744 689 +571 633 748 670 +669 648 825 830 +802 231 806 794 +88 213 285 804 +384 787 318 775 +523 473 800 392 +285 213 401 804 +125 826 206 738 +810 773 789 373 +772 681 785 720 +757 233 766 3 +125 826 738 38 +543 590 754 511 +825 648 669 664 +256 788 369 187 +26 307 250 25 +320 407 788 377 +12 450 778 243 +51 788 187 50 +441 396 793 803 +742 638 563 517 +210 832 358 353 +754 570 590 755 +787 265 333 300 +47 787 48 255 +48 787 47 183 +770 337 380 499 +275 336 802 313 +829 830 597 825 +256 788 187 51 +369 788 808 775 +818 168 779 230 +310 377 258 788 +338 795 430 396 +519 477 763 446 +363 828 329 465 +98 210 100 836 +142 832 283 102 +417 547 800 544 +296 806 798 231 +794 544 622 458 +800 523 445 546 +560 475 792 443 +641 609 663 792 +792 405 797 443 +778 461 782 450 +793 351 798 232 +490 540 562 776 +715 690 748 670 +547 607 800 588 +474 771 590 513 +791 329 227 339 +213 803 401 804 +129 791 227 152 +389 791 421 362 +818 165 230 777 +759 382 273 326 +191 321 303 774 +775 70 69 53 +226 791 329 227 +677 618 800 664 +226 791 383 329 +768 764 754 159 +779 245 304 780 +789 341 373 773 +772 653 718 678 +797 518 443 405 +748 750 761 763 +803 441 412 401 +279 775 197 432 +1 36 121 753 +435 829 538 434 +827 76 203 75 +19 779 18 168 +792 405 443 439 +549 789 463 515 +793 545 796 416 +448 364 238 764 +351 494 416 796 +649 671 750 702 +418 520 491 769 +829 556 538 434 +384 775 414 432 +600 624 746 740 +332 780 331 304 +579 554 805 645 +751 747 745 479 +21 246 781 262 +60 781 786 277 +829 597 556 466 +525 561 494 797 +399 828 791 453 +218 795 805 338 +264 145 780 781 +823 512 504 828 +484 773 378 501 +779 245 780 34 +115 795 805 218 +760 743 785 741 +446 517 428 784 +667 760 682 598 +765 238 448 391 +191 321 774 190 +451 367 759 302 +818 777 230 779 +413 810 539 460 +399 828 453 486 +342 134 786 135 +693 667 689 744 +799 635 551 659 +512 486 504 828 +361 781 330 786 +176 356 779 304 +750 668 755 583 +496 534 805 573 +566 444 498 800 +750 757 763 767 +730 726 746 736 +583 668 755 612 +93 791 152 97 +805 815 355 214 +825 523 800 546 +750 757 761 763 +180 178 286 179 +706 694 709 800 +745 683 634 599 +835 825 660 574 +351 793 796 416 +346 773 776 315 +585 576 816 540 +829 466 604 597 +794 544 458 417 +327 371 291 786 +496 768 534 404 +788 376 808 775 +349 793 351 416 +819 825 669 800 +597 819 640 642 +771 770 767 766 +785 682 714 667 +107 154 109 141 +437 771 553 767 +228 791 152 227 +675 712 680 792 +806 796 804 799 +384 787 775 265 +28 308 782 29 +781 77 78 271 +669 830 640 616 +368 322 752 741 +363 828 465 454 +365 771 239 754 +790 109 141 84 +752 322 368 249 +815 281 325 380 +500 427 533 805 +443 797 792 559 +10 243 450 11 +307 250 172 782 +237 402 756 322 +322 756 752 751 +308 834 782 832 +756 237 249 0 +533 793 805 427 +259 277 60 786 +68 774 7 787 +739 211 103 210 +161 782 240 350 +834 27 251 23 +250 782 240 161 +178 290 179 254 +797 296 293 405 +774 68 54 787 +68 774 55 260 +149 798 232 150 +54 68 774 55 +114 769 805 214 +805 115 114 282 +264 277 294 781 +355 815 337 214 +376 775 258 71 +444 340 800 483 +789 468 549 463 +834 251 27 782 +677 655 694 800 +826 38 124 37 +85 147 802 219 +161 243 10 250 +472 442 749 348 +467 360 805 338 +275 801 802 89 +610 811 625 662 +340 352 800 483 +88 801 285 278 +693 716 785 744 +790 84 141 140 +332 780 347 271 +389 828 454 435 +351 798 293 797 +827 264 270 780 +780 332 204 271 +827 779 780 270 +770 749 767 766 +299 159 754 239 +114 115 805 216 +788 376 775 258 +186 310 788 377 +827 270 62 75 +827 779 270 75 +7 833 8 775 +451 367 529 760 +190 787 56 189 +798 149 293 148 +573 554 467 805 +186 50 788 188 +67 781 786 78 +149 798 293 232 +296 797 293 798 +496 768 404 415 +587 673 621 796 +813 809 811 810 +773 315 346 298 +609 688 680 792 +708 712 797 792 +495 455 755 570 +60 781 277 61 +726 736 707 746 +748 619 690 750 +826 123 37 205 +442 747 516 558 +747 442 516 479 +552 770 755 503 +192 786 79 131 +826 791 91 205 +426 791 274 485 +762 242 752 759 +660 825 664 574 +354 233 762 177 +567 480 784 783 +447 779 790 777 +312 321 311 774 +781 345 305 21 +347 780 304 245 +123 826 91 205 +304 332 780 347 +818 168 230 167 +785 721 720 681 +375 464 419 778 +375 790 289 141 +811 685 625 662 +824 95 153 112 +810 315 776 773 +762 242 759 273 +688 675 680 792 +125 826 38 124 +413 810 460 315 +825 523 606 581 +583 672 619 750 +389 791 435 421 +92 791 93 208 +828 435 829 537 +808 775 414 369 +810 315 773 373 +745 758 742 761 +812 811 760 772 +519 748 763 750 +48 255 787 788 +594 800 642 674 +815 487 522 478 +768 478 522 510 +519 742 763 748 +615 835 591 627 +198 773 808 241 +363 791 362 339 +825 820 800 595 +818 165 777 16 +712 708 797 703 +760 367 476 326 +512 486 828 502 +824 95 112 152 +793 441 803 796 +318 787 333 255 +690 748 750 702 +147 149 798 148 +633 519 571 748 +633 742 817 563 +817 746 742 748 +835 825 574 823 +778 12 163 450 +552 578 755 613 +816 760 476 586 +768 522 815 765 +782 28 172 27 +583 553 750 535 +268 74 790 75 +666 695 626 814 +364 406 157 764 +297 222 206 791 +393 808 432 469 +828 383 425 502 +473 523 825 581 +808 257 386 408 +676 812 589 651 +571 519 750 748 +789 468 463 379 +824 228 97 152 +773 261 315 298 +749 747 756 348 +224 791 127 738 +756 348 402 237 +583 612 755 553 +753 348 391 749 +828 829 435 791 +109 110 790 200 +253 781 246 370 +140 779 790 139 +112 824 152 228 +793 396 441 462 +668 755 584 691 +494 561 416 796 +156 756 348 753 +829 830 825 648 +762 354 763 280 +96 94 95 152 +764 766 765 754 +810 539 812 776 +512 823 615 507 +753 749 756 348 +613 649 750 599 +622 572 794 458 +690 715 748 702 +829 825 597 606 +156 756 753 0 +226 791 227 129 +791 362 339 97 +534 768 805 769 +770 337 499 487 +717 704 725 772 +619 571 535 750 +112 228 152 130 +789 549 814 809 +810 315 373 460 +819 825 800 642 +704 772 718 729 +760 812 646 816 +606 829 581 493 +140 164 777 165 +611 549 814 626 +811 658 614 760 +96 824 97 152 +224 791 225 127 +764 4 754 159 +112 824 228 153 +385 297 791 222 +823 493 581 829 +462 793 536 617 +673 621 796 654 +92 791 151 91 +536 793 637 617 +823 825 574 829 +779 143 269 139 +824 228 153 97 +512 591 615 823 +829 537 435 538 +773 789 379 390 +326 783 760 759 +409 807 481 521 +834 251 173 23 +389 828 435 791 +781 327 370 344 +497 327 370 781 +799 665 797 796 +772 812 811 809 +431 444 336 800 +828 329 465 425 +785 624 681 658 +708 797 663 792 +799 629 701 659 +784 758 761 742 +789 810 456 809 +834 173 251 782 +664 618 800 588 +817 728 730 711 +748 745 742 761 +758 743 742 783 +372 807 802 409 +793 441 796 542 +823 537 829 574 +787 53 774 56 +595 820 800 566 +511 821 543 508 +53 57 774 56 +769 754 299 768 +215 113 295 769 +834 173 171 23 +829 825 606 581 +717 704 772 666 +817 748 698 722 +390 813 789 470 +800 643 709 674 +629 799 577 659 +251 27 782 172 +652 817 698 711 +327 291 229 786 +101 211 822 739 +308 834 832 193 +799 665 796 699 +28 308 27 782 +413 810 315 776 +122 90 38 826 +755 582 570 612 +704 653 772 666 +775 279 808 432 +620 596 650 797 +785 724 729 727 +787 54 774 53 +352 231 800 392 +834 832 173 782 +775 261 5 241 +785 723 714 772 +365 771 754 474 +283 141 778 142 +211 101 822 155 +826 124 205 37 +235 145 294 781 +611 666 626 814 +826 91 791 738 +775 52 53 787 +794 655 697 644 +400 215 295 769 +787 52 56 189 +752 302 194 249 +716 743 785 744 +181 787 311 183 +106 822 105 155 +379 773 199 316 +411 773 469 808 +56 52 787 53 +585 540 816 562 +312 837 786 303 +497 327 786 371 +726 743 730 746 +773 341 241 316 +808 773 298 261 +189 323 787 320 +726 743 746 705 +178 43 786 254 +624 600 746 657 +488 741 740 322 +136 290 786 291 +342 135 786 229 +585 562 816 608 +428 382 410 784 +745 600 564 634 +758 743 783 741 +490 773 393 469 +279 808 432 393 +593 630 678 809 +553 590 771 513 +127 791 225 128 +171 832 103 248 +371 786 290 291 +210 832 353 103 +178 290 254 786 +782 243 29 778 +410 397 763 280 +397 767 437 477 +794 655 644 622 +774 286 244 180 +180 286 244 179 +750 668 583 672 +772 718 724 713 +828 425 465 527 +266 808 71 199 +671 690 750 702 +424 455 754 755 +823 527 537 574 +821 284 815 769 +821 769 815 754 +823 825 829 581 +775 808 199 71 +424 770 754 325 +765 768 754 815 +578 541 755 584 +121 753 762 756 +70 775 199 71 +768 406 364 764 +399 828 486 383 +740 488 438 601 +424 770 325 503 +821 491 754 543 +341 789 316 773 +815 754 765 770 +773 341 373 261 +424 770 503 755 +204 827 203 780 +770 380 325 503 +780 235 781 145 +558 749 755 555 +330 781 361 366 +253 781 370 395 +747 558 750 516 +138 143 82 831 +580 773 813 557 +794 807 806 802 +387 202 790 268 +508 528 821 543 +557 776 813 811 +821 491 543 528 +447 779 777 356 +793 396 462 430 +773 776 813 557 +550 807 799 794 +807 409 457 521 +779 138 139 168 +790 779 75 269 +596 525 526 797 +640 830 597 556 +760 576 816 476 +773 279 808 298 +790 289 72 201 +810 539 460 603 +651 589 603 812 +81 138 82 831 +182 787 300 774 +42 112 152 130 +41 129 152 738 +336 340 802 800 +800 296 445 392 +265 833 775 197 +800 523 825 473 +796 620 797 561 +528 508 821 403 +713 723 724 772 +296 806 231 794 +760 682 598 646 +192 79 259 59 +764 4 159 3 +275 336 207 802 +627 820 566 639 +827 779 75 203 +825 595 800 473 +299 754 769 365 +797 641 663 792 +779 270 75 269 +804 221 213 803 +264 77 781 780 +446 742 517 784 +595 800 483 566 +455 821 508 381 +210 104 100 836 +814 568 813 625 +100 739 104 210 +779 143 139 138 +779 831 270 143 +764 4 3 766 +820 696 607 639 +820 498 800 566 +766 765 749 753 +799 703 701 712 +327 497 786 781 +776 393 490 773 +793 637 617 654 +799 635 659 699 +496 573 805 579 +406 158 157 764 +0 752 756 121 +797 641 792 559 +635 700 796 631 +738 222 206 125 +233 757 36 3 +738 222 125 126 +173 782 832 212 +326 783 759 382 +404 768 159 324 +820 498 566 639 +283 778 141 292 +627 820 639 696 +774 57 80 191 +15 777 30 14 +235 781 366 306 +120 774 7 137 +802 278 313 372 +65 774 57 80 +794 544 417 800 +429 768 364 471 +66 774 65 80 +224 127 126 738 +774 55 65 57 +190 787 189 323 +614 741 658 602 +148 296 293 798 +65 55 774 64 +769 489 805 534 +189 787 258 320 +382 428 480 784 +68 774 260 7 +192 786 303 319 +415 768 404 324 +48 184 788 49 +784 480 567 428 +837 192 303 80 +420 433 808 386 +422 789 456 515 +15 30 777 31 +244 182 774 181 +781 361 366 306 +775 68 69 160 +781 361 306 305 +286 223 774 300 +594 800 475 546 +134 342 786 781 +593 630 809 548 +60 781 61 78 +706 640 819 674 +781 20 170 780 +780 235 145 81 +235 781 306 170 +783 382 480 784 +552 541 755 578 +770 487 499 555 +244 46 180 45 +308 301 778 174 +815 768 769 805 +528 509 769 520 +369 788 775 318 +211 288 103 353 +171 98 104 836 +353 142 375 289 +769 489 534 482 +118 88 89 804 +829 648 825 574 +819 669 706 800 +760 367 326 759 +541 495 424 755 +837 192 80 131 +770 380 503 499 +192 79 59 80 +332 780 204 203 +385 222 791 224 +76 827 62 75 +1 156 238 753 +719 683 748 702 +764 2 753 3 +785 737 735 733 +791 343 421 208 +448 768 471 364 +706 819 800 674 +764 2 3 158 +827 77 780 204 +345 43 317 786 +793 396 430 795 +752 242 302 759 +633 742 563 519 +0 752 121 194 +698 817 722 711 +308 834 193 27 +173 832 171 248 +828 383 502 486 +251 27 172 24 +552 770 503 499 +828 329 425 383 +212 307 251 782 +173 832 102 212 +825 820 595 835 +755 578 584 691 +781 345 786 305 +805 334 217 282 +780 169 19 34 +779 34 33 176 +805 217 115 282 +222 224 126 738 +780 81 247 170 +222 791 224 738 +173 102 832 248 +805 355 282 214 +456 789 809 515 +191 57 80 58 +309 175 252 777 +239 771 394 287 +558 613 755 750 +288 107 142 154 +779 143 270 269 +145 264 780 144 +195 837 67 133 +224 791 399 225 +818 18 33 779 +507 828 512 823 +81 780 247 138 +180 311 181 774 +33 818 16 17 +244 286 774 300 +252 818 32 33 +16 32 818 33 +837 63 195 774 +541 424 503 755 +771 437 394 287 +455 821 381 754 +738 791 152 91 +828 465 454 527 +253 780 169 246 +773 279 298 346 +782 250 29 243 +741 602 601 624 +288 154 155 108 +132 837 136 774 +345 314 786 305 +741 488 601 602 +779 247 780 138 +779 245 34 176 +288 107 154 108 +178 374 312 786 +787 258 775 52 +305 21 306 781 +721 785 725 735 +342 347 781 271 +356 387 779 331 +145 780 81 144 +781 20 780 246 +780 77 271 204 +342 134 271 781 +580 773 531 813 +120 774 132 223 +275 88 801 89 +132 774 120 137 +459 773 813 531 +695 684 772 717 +389 828 791 363 +583 619 535 750 +286 178 136 290 +71 52 775 258 +323 321 190 774 +775 52 71 70 +166 17 16 818 +44 180 45 179 +827 264 780 77 +319 330 259 786 +739 103 104 210 +314 43 345 786 +828 454 537 527 +437 771 394 513 +288 107 108 106 +827 77 204 76 +211 739 100 210 +832 104 836 171 +832 104 171 103 +807 794 806 799 +192 786 319 259 +815 281 337 214 +773 433 459 328 +312 837 303 774 +484 773 490 469 +790 200 267 73 +811 580 813 557 +790 74 269 75 +790 72 202 201 +787 48 185 183 +132 837 133 136 +140 779 139 230 +140 779 230 777 +811 580 557 632 +768 478 510 805 +624 600 524 740 +527 823 507 574 +298 9 775 5 +824 95 152 96 +653 772 809 678 +829 648 574 537 +767 477 750 553 +136 178 312 786 +781 361 305 786 +837 67 131 66 +753 3 36 757 +818 165 16 166 +301 777 175 309 +818 165 166 230 +777 818 16 32 +193 832 308 209 +801 409 278 802 +779 831 143 138 +252 818 33 779 +764 2 158 157 +139 146 790 140 +290 786 371 254 +781 330 786 277 +799 665 699 701 +466 556 829 434 +714 812 772 676 +79 786 60 78 +562 490 776 449 +248 103 102 832 +233 757 766 280 +134 67 786 837 +67 781 271 134 +16 777 32 15 +818 18 166 17 +330 277 259 786 +752 756 322 249 +574 825 664 648 +835 627 615 696 +752 121 762 756 +16 777 15 165 +156 756 0 237 +365 771 474 394 +805 360 467 489 +790 146 139 111 +497 781 370 246 +415 768 324 406 +576 760 529 476 +299 768 159 404 +313 794 372 417 +789 422 463 515 +417 431 313 800 +336 800 802 313 +376 808 386 408 +336 431 800 313 +823 493 829 828 +158 406 324 764 +704 653 718 772 +406 768 324 764 +714 812 676 682 +507 828 823 527 +773 378 423 808 +506 456 809 548 +512 828 507 502 +809 456 515 548 +828 829 823 537 +808 376 386 276 +531 580 813 610 +630 589 809 548 +198 773 241 316 +793 545 416 505 +198 773 316 199 +269 790 139 111 +832 104 103 210 +793 398 427 349 +142 832 778 283 +211 103 210 353 +129 41 152 130 +115 795 218 116 +43 254 317 786 +447 779 356 387 +109 107 141 84 +103 288 142 353 +790 154 200 72 +530 488 741 602 +269 143 111 139 +809 603 810 506 +213 803 412 401 +726 743 705 732 +719 746 683 707 +776 393 773 346 +776 393 346 449 +812 514 816 776 +261 773 315 373 +804 221 803 798 +803 795 798 221 +519 571 750 535 +718 772 678 713 +805 569 532 579 +402 751 756 322 +510 398 500 805 +269 111 110 790 +488 322 740 438 +795 217 234 87 +111 146 110 790 +755 749 770 555 +447 790 387 357 +352 473 800 483 +139 140 83 146 +447 790 357 335 +84 146 83 140 +129 791 152 738 +550 807 794 457 +550 807 457 521 +550 794 799 592 +32 31 15 777 +419 790 447 335 +146 111 82 139 +781 317 262 497 +768 532 429 415 +790 201 357 335 +365 299 754 239 +143 82 111 139 +338 360 805 218 +799 635 699 796 +790 202 357 201 +762 242 273 35 +178 44 43 254 +157 1 238 753 +762 194 121 752 +365 771 394 239 +372 807 409 457 +389 828 363 454 +573 805 467 489 +82 83 146 139 +424 455 381 754 +765 238 391 753 +762 194 752 242 +772 714 676 713 +7 833 119 8 +797 620 647 650 +156 753 1 0 +667 661 689 744 +321 312 303 774 +257 788 188 408 +543 754 474 491 +832 353 103 142 +613 558 755 555 +316 463 789 422 +182 244 774 300 +789 463 316 379 +833 8 9 119 +773 279 346 393 +790 289 201 335 +775 8 9 833 +751 758 740 745 +433 773 808 328 +255 48 184 788 +790 778 777 141 +785 693 714 723 +354 410 763 280 +318 787 255 788 +741 488 368 322 +751 438 322 402 +121 753 36 762 +673 631 796 700 +808 276 386 328 +266 808 328 276 +773 266 808 328 +726 679 705 746 +802 409 278 372 +773 459 390 328 +609 560 643 792 +233 757 280 762 +19 20 780 247 +803 220 795 221 +233 354 762 280 +768 522 765 448 +803 220 221 412 +775 279 298 808 +258 787 189 52 +775 261 241 808 +775 261 808 298 +351 494 796 797 +95 122 42 152 +620 596 797 525 +793 617 796 654 +825 595 473 581 +803 220 412 396 +793 430 462 536 +118 798 804 89 +41 42 152 130 +635 631 796 542 +529 741 760 614 +675 712 799 687 +41 122 152 42 +165 140 230 777 +356 777 309 252 +597 819 642 825 +399 828 383 791 +582 668 612 755 +590 553 755 612 +809 603 506 589 +378 808 263 423 +550 794 592 572 +813 809 810 789 +808 420 263 423 +565 598 646 760 +549 611 814 809 +773 420 433 808 +823 504 512 591 +426 791 485 493 +253 780 395 245 +640 669 819 830 +773 420 808 423 +799 550 592 629 +791 829 435 434 +799 629 687 701 +827 779 203 780 +665 796 699 700 +435 791 434 421 +663 609 680 792 +791 829 434 466 +801 409 807 285 +819 669 640 706 +655 697 694 800 +343 466 791 434 +609 641 559 792 +815 281 113 284 +393 469 773 808 +561 620 797 525 +796 620 561 587 +791 466 343 388 +60 781 78 786 +780 235 81 170 +817 730 722 711 +743 741 746 624 +472 770 749 555 +572 794 458 457 +748 619 750 571 +374 319 312 786 +576 632 614 811 +519 742 563 446 +475 800 792 445 +781 20 246 21 +233 4 766 3 +751 756 752 761 +772 676 678 713 +233 757 762 36 +752 242 194 302 +500 768 471 510 +797 605 656 641 +391 765 749 472 +326 783 382 440 +618 622 800 544 +747 751 745 761 +730 817 746 743 +445 296 792 439 +624 785 681 657 +565 783 598 760 +439 475 792 445 +170 780 20 247 +661 638 689 744 +523 825 606 546 +308 464 778 301 +815 113 769 284 +132 837 774 63 +410 446 784 763 +132 837 63 133 +642 800 594 546 +578 755 750 691 +773 420 423 452 +468 789 470 390 +545 793 623 505 +788 408 808 376 +788 408 376 310 +743 710 785 657 +257 788 408 808 +624 741 746 740 +4 233 766 280 +758 745 746 740 +763 287 280 397 +695 626 814 628 +220 116 795 117 +88 213 804 118 +72 200 790 73 +763 742 446 784 +748 683 750 702 +554 793 430 805 +514 539 812 636 +748 619 571 670 +773 501 452 423 +789 810 373 456 +789 468 379 390 +810 506 373 456 +390 813 470 459 +788 376 258 310 +789 341 456 373 +774 7 196 260 +341 789 456 422 +265 833 197 119 +192 79 80 131 +203 779 75 268 +203 779 268 331 +158 764 159 3 +600 679 634 746 +791 208 421 362 +400 359 769 482 +790 778 141 375 +193 832 209 171 +832 464 778 308 +726 743 732 730 +816 776 557 811 +554 793 805 645 +803 220 396 795 +255 182 47 787 +218 795 338 220 +320 787 258 788 +811 760 576 816 +804 221 798 118 +812 810 811 809 +232 795 150 798 +803 213 412 221 +218 795 220 116 +187 184 788 318 +50 184 49 788 +51 788 50 188 +398 795 272 793 +265 833 119 7 +787 48 788 185 +187 50 788 184 +523 800 445 392 +773 789 316 379 +253 781 395 780 +693 785 714 667 +779 247 138 168 +545 587 621 796 +596 686 650 797 +552 770 499 555 +686 596 656 797 +472 765 487 522 +832 375 464 353 +797 525 436 494 +714 723 713 772 +534 573 489 805 +769 489 482 359 +509 400 295 769 +256 788 51 808 +477 519 750 535 +553 477 750 535 +4 239 754 159 +360 805 359 489 +797 518 436 526 +775 70 53 52 +771 437 553 513 +171 834 23 99 +237 756 249 322 +764 4 766 754 +369 788 318 187 +777 174 778 301 +827 264 77 62 +171 193 99 209 +92 791 208 236 +533 793 427 505 +29 250 782 172 +778 461 450 292 +797 605 526 656 +129 41 40 738 +507 828 527 425 +385 791 399 224 +274 791 388 485 +605 797 526 518 +791 151 205 274 +573 554 805 579 +407 787 788 185 +764 766 3 753 +257 420 263 808 +795 334 272 234 +754 570 755 455 +378 411 256 808 +598 783 744 760 +764 766 753 765 +814 772 811 809 +646 651 636 812 +754 570 455 511 +29 778 308 782 +308 778 29 174 +742 638 517 744 +312 837 774 136 +164 778 13 163 +23 22 99 834 +419 790 335 375 +760 743 741 783 +676 772 678 809 +737 785 735 727 +450 292 163 778 +795 217 87 116 +532 429 533 805 +777 174 301 175 +128 738 40 127 +824 95 96 153 +777 174 175 30 +97 94 96 152 +87 795 116 117 +202 268 74 790 +101 822 105 739 +812 646 608 636 +671 672 691 750 +115 795 116 217 +142 154 289 288 +30 778 14 777 +540 576 816 557 +518 797 443 559 +400 520 482 769 +118 798 117 221 +618 800 588 544 +125 39 38 738 +501 773 580 557 +750 668 672 691 +479 751 740 745 +789 470 813 575 +778 461 292 350 +356 176 779 252 +660 800 607 588 +779 831 138 780 +441 804 803 796 +812 539 603 636 +751 758 745 761 +799 492 577 551 +660 800 588 664 +511 821 754 543 +631 673 796 654 +472 770 555 487 +647 796 700 673 +803 396 412 441 +56 57 774 190 +472 770 487 765 +774 55 260 64 +638 817 692 744 +773 279 393 808 +791 604 485 493 +266 773 199 379 +743 692 728 817 +751 758 761 752 +782 28 29 172 +820 498 639 607 +820 498 607 800 +780 253 34 245 +760 440 476 586 +272 793 232 349 +534 768 769 299 +509 528 769 403 +505 793 427 416 +768 532 415 496 +773 266 199 808 +795 334 234 217 +821 769 528 403 +774 260 196 64 +509 400 769 520 +495 582 755 584 +541 495 755 584 +550 799 521 577 +74 202 790 73 +81 780 138 831 +799 550 629 577 +600 740 564 524 +671 578 750 691 +812 646 816 608 +823 493 828 504 +792 405 439 296 +768 478 805 815 +828 453 486 504 +265 833 7 775 +457 794 458 372 +661 598 744 667 +418 299 534 769 +528 520 769 491 +642 597 825 606 +829 648 537 538 +745 750 683 599 +690 672 750 619 +830 538 829 556 +821 491 769 754 +677 706 669 800 +699 796 635 700 +775 833 9 197 +39 127 40 738 +765 768 448 764 +771 755 770 754 +649 578 613 750 +624 740 524 601 +613 578 755 750 +649 671 578 750 +565 783 760 440 +450 243 782 778 +647 796 673 587 +22 834 23 27 +769 489 359 805 +140 164 141 777 +568 610 813 625 +556 597 829 830 +433 773 531 452 +390 813 459 773 +837 131 67 786 +773 433 531 459 +810 773 776 813 +79 786 78 131 +607 696 820 660 +777 356 779 252 +627 595 566 820 +835 627 820 595 +398 510 478 805 +830 538 556 616 +607 547 800 498 +741 751 758 740 +444 431 498 800 +114 769 214 113 +768 522 448 510 +191 303 192 80 +431 547 498 800 +778 13 14 164 +250 10 161 240 +823 493 504 581 +834 832 193 171 +131 786 78 67 +135 136 786 291 +796 620 587 647 +384 787 265 333 +797 605 641 559 +264 270 780 144 +67 781 78 271 +781 330 277 294 +736 719 746 722 +730 736 746 722 +829 791 493 604 +551 635 796 542 +743 692 716 728 +517 567 744 661 +817 743 744 742 +743 783 744 742 +784 762 763 761 +690 671 750 672 +746 719 683 748 +583 755 750 553 +745 746 683 748 +748 619 670 690 +801 807 806 804 +798 118 117 86 +631 617 796 542 +817 730 746 722 +356 779 304 331 +813 809 789 814 +576 816 557 811 +203 779 331 780 +564 745 634 599 +677 706 800 694 +828 453 493 791 +622 618 800 655 +618 655 677 800 +63 774 196 64 +785 710 731 733 +768 815 769 754 +836 832 171 209 +653 593 678 809 +106 822 155 211 +413 539 776 514 +610 531 568 813 +812 816 811 776 +704 725 772 729 +531 459 568 813 +540 816 776 557 +746 817 722 748 +706 800 709 674 +785 693 723 727 +737 785 727 716 +473 352 800 392 +638 517 744 661 +565 783 440 480 +227 129 152 130 +495 582 570 755 +743 737 785 734 +768 448 764 364 +683 649 750 702 +743 737 734 728 +552 770 555 755 +561 545 416 796 +791 222 206 738 +442 747 749 348 +753 766 3 757 +1 36 753 2 +519 742 446 763 +391 348 753 156 +716 743 728 737 +757 753 756 762 +646 565 816 608 +757 753 749 756 +829 791 828 493 +5 8 9 775 +757 749 747 756 +216 769 805 114 +760 682 646 812 +816 585 608 586 +411 808 469 414 +558 613 750 516 +766 765 754 770 +115 795 217 805 +793 621 623 654 +507 828 425 502 +742 567 517 784 +351 797 293 405 +760 812 772 785 +791 297 426 274 +791 604 388 485 +830 538 616 648 +742 638 744 817 +758 743 741 746 +742 563 446 517 +753 757 36 762 +589 630 809 676 +821 491 528 769 +554 430 467 805 +598 783 480 567 +376 775 71 808 +160 241 775 5 +789 341 316 422 +323 407 311 787 +235 294 366 781 +781 330 294 366 +775 54 53 69 +630 676 678 809 +665 796 700 647 +514 812 608 636 +714 812 682 785 +651 682 676 812 +785 724 727 723 +600 657 679 746 +767 477 553 437 +751 747 479 402 +747 442 479 402 +178 314 786 43 +598 783 567 744 +5 8 775 6 +808 432 469 414 +790 778 375 419 +799 712 792 797 +644 572 592 794 +263 808 256 51 +742 567 784 783 +453 791 426 493 +799 629 592 687 +488 741 601 740 +384 787 333 318 +288 142 353 289 +281 815 337 380 +336 444 340 800 +313 794 417 800 +799 703 712 797 +313 794 800 802 +797 351 436 405 +475 439 792 443 +464 301 419 778 +814 789 813 575 +562 514 816 608 +633 670 698 748 +557 776 484 773 +794 655 622 800 +800 643 674 594 +484 776 557 540 +827 77 76 62 +728 817 692 711 +765 768 764 754 +811 684 685 772 +632 576 557 811 +743 710 705 731 +514 539 776 812 +821 284 381 815 +768 532 496 805 +670 715 698 748 +334 398 478 805 +817 633 698 748 +742 567 783 744 +815 355 337 487 +742 567 744 517 +748 715 698 722 +770 337 487 815 +475 800 445 546 +391 156 753 238 +694 697 709 800 +792 688 709 643 +762 194 242 35 +697 688 709 792 +758 741 783 759 +747 757 761 750 +754 570 511 590 +506 810 460 603 +397 767 763 287 +22 193 834 27 +800 643 594 792 +797 686 650 703 +827 264 62 270 +346 413 776 449 +800 697 709 792 +611 549 515 809 +810 506 456 809 +809 603 589 812 +506 810 373 460 +771 437 287 767 +633 742 519 748 +529 741 614 530 +594 475 792 560 +693 785 667 744 +725 785 720 772 +684 695 814 628 +789 549 809 515 +684 695 772 814 +683 746 634 707 +483 800 595 473 +741 624 601 740 +97 94 152 93 +818 18 17 33 +296 231 800 794 +443 560 559 792 +793 545 623 621 +721 785 720 725 +4 771 766 754 +732 743 705 731 +667 760 598 744 +692 817 652 711 +801 807 804 285 +743 732 734 731 +675 644 592 794 +806 792 296 797 +80 837 774 303 +296 800 792 794 +834 22 99 193 +799 701 687 712 +297 791 205 274 +837 192 786 303 +297 791 206 205 +151 791 205 91 +610 811 662 632 +543 474 754 590 +765 391 749 753 +773 580 531 452 +743 710 731 785 +789 468 470 575 +819 640 642 674 +761 756 747 751 +818 168 167 18 +719 736 746 707 +756 762 752 761 +594 560 792 643 +757 762 756 761 +708 663 680 792 +785 716 693 727 +446 428 410 784 +564 479 524 740 +814 628 568 625 +741 743 785 624 +746 745 742 748 +758 745 742 746 +659 799 577 551 +708 686 797 703 +231 800 794 802 +658 741 624 602 +0 752 194 249 +391 765 472 522 +518 797 436 405 +156 756 237 348 +651 682 812 646 +759 368 741 451 +483 444 566 800 +762 354 177 273 +743 785 624 657 +500 768 510 805 +462 793 617 542 +793 441 542 462 +459 470 568 813 +90 123 37 826 +549 626 575 814 +757 762 761 763 +785 725 729 772 +741 751 740 322 +741 751 322 752 +817 728 743 730 +730 728 743 732 +479 740 438 524 +732 728 743 734 +679 657 705 746 +765 238 753 764 +743 710 657 705 +743 657 746 705 +397 446 410 763 +832 464 308 358 +760 743 783 744 +810 776 811 813 +762 194 35 121 +679 726 707 746 +745 479 564 740 +759 368 451 302 +510 768 471 448 +14 778 30 162 +354 762 784 273 +762 759 784 273 +451 741 759 760 +242 759 273 326 +173 212 251 782 +805 334 355 478 +171 193 834 99 +382 759 273 784 +645 793 805 569 +251 27 24 23 +576 585 816 476 +534 768 299 404 +815 325 381 754 +815 325 284 381 +35 121 36 762 +721 710 681 785 +326 783 440 760 +114 769 113 215 +781 20 21 170 +514 562 776 449 +809 603 812 810 +514 562 816 776 +181 787 774 311 +760 682 812 785 +220 795 221 117 +367 451 759 760 +793 349 351 232 +558 472 749 555 +807 799 806 804 +793 545 621 796 +190 787 323 774 +500 398 427 805 +396 220 338 795 +762 757 280 763 +514 812 816 608 +651 812 603 636 +565 760 646 816 +772 681 720 685 +749 755 767 750 +529 741 530 451 +749 755 770 767 +815 805 355 478 +301 777 419 778 +58 191 192 80 +755 771 770 767 +553 755 750 767 +15 777 14 164 +832 308 209 358 +288 106 108 155 +771 755 553 767 +776 393 449 490 +30 29 778 174 +59 58 192 80 +834 832 171 173 +821 284 769 403 +774 63 196 137 +336 340 207 802 +44 178 179 254 +484 490 776 540 +815 355 487 478 +310 186 788 188 +780 20 19 169 +468 789 549 575 +303 191 774 80 +265 223 300 774 +307 782 172 251 +775 787 7 265 +154 107 109 108 +80 837 131 66 +147 231 148 798 +231 147 802 798 +343 791 388 236 +268 779 75 790 +484 773 776 490 +773 484 557 501 +216 769 114 215 +113 815 769 214 +382 354 410 784 +264 77 62 61 +815 805 769 214 +163 141 164 778 +278 801 802 275 +804 221 118 213 +806 796 799 797 +821 815 381 754 +821 284 403 381 +365 754 769 491 +400 215 769 359 +340 219 207 802 +391 448 765 522 +382 783 759 784 +565 783 480 598 +715 719 748 702 +828 453 504 493 +794 417 458 372 +785 710 681 657 +741 758 746 740 +749 757 750 767 +572 622 794 644 +832 375 353 142 +614 741 602 530 +772 681 685 658 +529 741 451 760 +775 6 7 68 +804 801 798 806 +120 265 119 7 +136 132 774 223 +7 6 775 8 +806 796 797 798 +751 438 402 479 +163 12 778 13 +790 778 419 777 +84 790 146 140 +781 317 497 786 +142 154 107 141 +140 777 141 790 +351 494 797 436 +146 790 84 110 +790 154 72 289 +549 789 814 575 +832 375 142 778 +254 371 317 786 +142 375 141 778 +299 418 365 769 +92 791 91 152 +302 368 249 752 +764 157 238 753 +228 791 227 339 +123 151 205 91 +367 760 476 529 +788 408 310 188 +198 773 199 808 +605 797 518 559 +779 247 168 19 +780 235 170 781 +774 787 265 7 +632 662 614 811 +807 492 799 804 +774 137 196 7 +775 68 7 787 +807 481 804 285 +481 285 401 804 +481 492 804 401 +804 551 796 441 +772 611 809 814 +176 33 779 252 +779 247 19 780 +447 779 387 790 +772 611 814 666 +142 832 102 103 +175 32 252 777 +803 793 798 795 +790 154 289 141 +772 611 666 653 +802 801 806 798 +760 576 529 614 +231 802 806 798 +243 250 161 782 +363 791 389 362 +791 274 388 236 +450 243 161 782 +782 307 240 350 +772 611 653 809 +228 227 152 130 +107 105 108 106 +204 827 76 203 +30 243 778 29 +424 455 755 495 +105 155 108 106 +773 484 411 469 +197 833 9 119 +807 492 804 481 +801 807 802 806 +403 769 295 284 +149 147 798 86 +793 430 805 795 +14 13 778 162 +377 320 258 788 +184 255 788 318 +764 364 238 157 +114 805 282 214 +565 760 816 586 +164 777 14 778 +779 245 176 304 +798 795 117 221 +792 405 296 797 +497 781 246 262 +120 774 265 7 +147 85 802 798 +342 781 229 786 +780 169 34 253 +387 268 790 779 +597 819 825 830 +773 420 452 433 +127 39 126 738 +351 798 797 796 +126 738 39 125 +385 453 791 426 +798 803 804 796 +793 803 798 796 +551 441 542 796 +752 762 759 761 +64 195 63 774 +211 739 103 106 +65 774 195 64 +804 551 441 492 +778 13 12 162 +697 675 688 792 +804 551 492 799 +804 551 799 796 +377 407 788 185 +286 178 290 179 +378 808 256 263 +202 72 790 73 +441 804 492 401 +565 440 760 586 +810 773 813 789 +801 409 285 278 +585 816 476 586 +136 178 786 290 +88 275 801 278 +762 35 273 177 +793 398 349 272 +122 90 826 91 +811 580 632 610 +321 323 311 774 +92 791 152 93 +323 787 311 774 +122 41 152 738 +181 787 183 47 +774 837 66 195 +805 360 216 218 +807 492 481 521 +554 793 645 536 +533 793 505 569 +286 136 774 223 +244 46 182 181 +46 182 181 47 +497 371 786 317 +805 569 533 532 +773 378 501 423 +533 793 569 805 +770 771 754 766 +424 770 755 754 +0 752 249 756 +815 281 284 325 +764 768 324 159 +410 354 763 784 +367 242 759 302 +26 307 240 250 +450 243 10 161 +771 474 394 513 +561 797 796 494 +106 103 288 142 +778 461 350 782 +241 341 773 261 +747 442 402 348 +569 793 505 623 +837 192 131 786 +645 793 569 637 +308 834 27 782 +488 530 741 368 +759 368 302 752 +377 186 185 788 +430 338 467 805 +474 771 754 590 +645 793 637 536 +587 561 796 545 +569 793 623 637 +554 793 536 430 +814 628 575 568 +575 470 813 568 +288 107 106 142 +11 450 12 243 +390 813 773 789 +790 110 109 84 +369 775 414 318 +395 781 347 780 +777 301 419 309 +832 464 358 353 +347 781 395 344 +296 231 798 148 +811 685 662 658 +781 342 229 344 +169 780 20 246 +395 781 370 344 +781 327 229 786 +807 409 481 285 +281 815 113 214 +811 580 610 813 +291 135 229 786 +330 319 374 786 +347 780 781 271 +78 77 781 61 +145 264 294 781 +817 743 742 746 +327 781 229 344 +781 345 21 262 +773 501 580 452 +795 798 117 87 +374 314 361 786 +787 407 788 320 +806 796 798 804 +781 21 306 170 +595 591 835 627 +307 212 350 782 +825 591 581 823 +617 631 796 654 +216 769 215 359 +330 374 361 786 +115 805 216 218 +283 292 350 778 +186 49 185 788 +805 334 282 355 +782 461 350 161 +212 283 350 832 +24 25 172 251 +791 343 208 236 +25 307 172 251 +67 134 133 837 +61 277 264 781 +791 92 151 236 +264 77 61 781 +89 85 802 207 +440 760 476 326 +312 837 136 786 +80 837 66 774 diff --git a/apps/tetraviewer/vc70.idb b/apps/tetraviewer/vc70.idb new file mode 100644 index 00000000..f873514a Binary files /dev/null and b/apps/tetraviewer/vc70.idb differ diff --git a/apps/tetraviewer/vc70.pdb b/apps/tetraviewer/vc70.pdb new file mode 100644 index 00000000..3aae1adf Binary files /dev/null and b/apps/tetraviewer/vc70.pdb differ diff --git a/wrap/gl/pick.h b/wrap/gl/pick.h index d8d05bc7..17de430d 100644 --- a/wrap/gl/pick.h +++ b/wrap/gl/pick.h @@ -38,7 +38,7 @@ class GLPickTetra typedef typename TETRA_MESH_TYPE::VertexType VertexType; public: -static bool PickNearestTetra(int x, int y,TETRA_MESH_TYPE &m, TetraIterator &ti, int width=4, int height=4) +static bool PickNearestTetra(int x, int y,TETRA_MESH_TYPE &m, TetraIterator &ti,int width=4, int height=4) { std::vector result; int val=PickTetra(x,y,m,result,width,height); @@ -88,12 +88,14 @@ static int PickTetra(int x, int y, TETRA_MESH_TYPE &m, std::vector glBegin(GL_TRIANGLES); for (int face=0;face<4;face++) { + //glLoadName(tetracnt); VertexType *v0=ti->V(Tetra::VofF(face,0)); VertexType *v1=ti->V(Tetra::VofF(face,1)); VertexType *v2=ti->V(Tetra::VofF(face,2)); glVertex(v0->P()); glVertex(v1->P()); glVertex(v2->P()); + } glEnd(); tetracnt++;