void DrawBBox(const BBoxf& box, const LineSet::LineColor& color, bool nativeCoords = false) { irr::core::vector3df verts[8]; if (nativeCoords) { BBoxf onBox( ConvertIrrlichtToNeroPosition(box.MinEdge), ConvertIrrlichtToNeroPosition(box.MaxEdge)); onBox.getEdges(verts); } else { box.getEdges(verts); } LineSet::instance().AddSegment( verts[0], verts[1], color ); LineSet::instance().AddSegment( verts[1], verts[3], color ); LineSet::instance().AddSegment( verts[3], verts[2], color ); LineSet::instance().AddSegment( verts[2], verts[0], color ); LineSet::instance().AddSegment( verts[4], verts[5], color ); LineSet::instance().AddSegment( verts[5], verts[7], color ); LineSet::instance().AddSegment( verts[7], verts[6], color ); LineSet::instance().AddSegment( verts[6], verts[4], color ); LineSet::instance().AddSegment( verts[4], verts[0], color ); LineSet::instance().AddSegment( verts[5], verts[1], color ); LineSet::instance().AddSegment( verts[6], verts[2], color ); LineSet::instance().AddSegment( verts[7], verts[3], color ); }
Window::Window() { glWidget = new GLWidget; QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(glWidget); openAct = new QAction(tr("Abrir..."), this); openAct->setShortcut(tr("Ctrl+A")); openAct->setStatusTip(tr("Abrir Archivo")); connect(openAct, SIGNAL(triggered()), glWidget, SLOT(onVentanaAbrir())); connect(openAct, SIGNAL(triggered()), glWidget, SLOT(onAbrir())); closeAct = new QAction(tr("Cerrar..."), this); closeAct->setShortcut(tr("Ctrl+C")); closeAct->setStatusTip(tr("Cerrar Archivo")); connect(closeAct, SIGNAL(triggered()), this, SLOT(close())); escalAct = new QAction(tr("Escalar..."), this); escalAct->setShortcut(tr("Ctrl+E")); escalAct->setStatusTip(tr("Escalar objeto")); connect(escalAct, SIGNAL(triggered()), glWidget, SLOT(onEscalar())); trasAct = new QAction(tr("Trasladar..."), this); trasAct->setShortcut(tr("Ctrl+T")); trasAct->setStatusTip(tr("Trasladar objeto")); connect(trasAct, SIGNAL(triggered()), glWidget, SLOT(onTrasladar())); rotAct = new QAction(tr("Rotar..."), this); rotAct->setShortcut(tr("Ctrl+R")); rotAct->setStatusTip(tr("Rotar objeto")); connect(rotAct, SIGNAL(triggered()), glWidget, SLOT(onRotar())); zBufAct = new QAction(tr("On/Off Z-Buffer..."), this); zBufAct->setShortcut(tr("Ctrl+Z")); zBufAct->setStatusTip(tr("Habilitar/Deshabilitar ZBuffer")); connect(zBufAct, SIGNAL(triggered()), glWidget, SLOT(onZBuffer())); fogAct = new QAction(tr("On/Off Niebla..."), this); fogAct->setShortcut(tr("Ctrl+F")); fogAct->setStatusTip(tr("Habilitar/Deshabilitar Niebla")); connect(fogAct, SIGNAL(triggered()), glWidget, SLOT(onFog())); colFogAct = new QAction(tr("Color Niebla..."), this); colFogAct->setStatusTip(tr("Cambiar Color Niebla")); connect(colFogAct, SIGNAL(triggered()), glWidget, SLOT(onColorFog())); planoAct = new QAction(tr("On/Off Plano de Corte..."), this); planoAct->setShortcut(tr("Ctrl+P")); planoAct->setStatusTip(tr("Habilitar/Deshabilitar Plano de Corte")); connect(planoAct, SIGNAL(triggered()), glWidget, SLOT(onPlano())); meshAct = new QAction(tr("On/Off Mallado..."), this); meshAct->setShortcut(tr("Ctrl+M")); meshAct->setStatusTip(tr("Mostrar/Ocultar Mallado")); connect(meshAct, SIGNAL(triggered()), glWidget, SLOT(onMalla())); colMeshAct = new QAction(tr("Color Mallado..."), this); colMeshAct->setStatusTip(tr("Cambiar Color Mallado")); connect(colMeshAct, SIGNAL(triggered()), glWidget, SLOT(onColorMalla())); boxAct = new QAction(tr("On/Off Bounding Box..."), this); boxAct->setShortcut(tr("Ctrl+B")); boxAct->setStatusTip(tr("Mostrar/Ocultar Bounding Box")); connect(boxAct, SIGNAL(triggered()), glWidget, SLOT(onBox())); colBoxAct = new QAction(tr("Color Bounding Box..."), this); colBoxAct->setStatusTip(tr("Cambiar Color Bounding Box")); connect(colBoxAct, SIGNAL(triggered()), glWidget, SLOT(onColorBox())); fillAct = new QAction(tr("On/Off Relleno..."), this); fillAct->setShortcut(tr("Ctrl+R")); fillAct->setStatusTip(tr("Mostrar/Ocultar Relleno")); connect(fillAct, SIGNAL(triggered()), glWidget, SLOT(onRelleno())); colFillAct = new QAction(tr("Color Relleno..."), this); colFillAct->setStatusTip(tr("Cambiar Color Relleno")); connect(colFillAct, SIGNAL(triggered()), glWidget, SLOT(onColorRelleno())); edgeAct = new QAction(tr("On/Off Vertices..."), this); edgeAct->setShortcut(tr("Ctrl+V")); edgeAct->setStatusTip(tr("Mostrar/Ocultar Vertices")); connect(edgeAct, SIGNAL(triggered()), glWidget, SLOT(onVertices())); colEdgeAct = new QAction(tr("Color Vertices..."), this); colEdgeAct->setStatusTip(tr("Cambiar Color Vertices")); connect(colEdgeAct, SIGNAL(triggered()), glWidget, SLOT(onColorVertices())); fileMenu = new QMenu; QMenuBar *m = new QMenuBar; fileMenu = m->addMenu(tr("&Archivo")); fileMenu->addAction(openAct); fileMenu->addAction(closeAct); editMenu = new QMenu; editMenu = m->addMenu(tr("&Editar")); editMenu->addAction(escalAct); editMenu->addAction(rotAct); editMenu->addAction(trasAct); editMenu->addAction(colFogAct); editMenu->addAction(colMeshAct); editMenu->addAction(colBoxAct); editMenu->addAction(colFillAct); editMenu->addAction(colEdgeAct); toolMenu = new QMenu; toolMenu = m->addMenu(tr("&Herramientas")); toolMenu->addAction(zBufAct); toolMenu->addAction(fogAct); toolMenu->addAction(planoAct); toolMenu->addAction(meshAct); toolMenu->addAction(boxAct); toolMenu->addAction(fillAct); toolMenu->addAction(edgeAct); setLayout(mainLayout); setWindowTitle(tr("3D SCAN")); mainLayout->setMenuBar(m); }
void buildIndex_mpi(ADIOS_FILE* f, ADIOS_VARINFO* v, int rank, int size) { adios_inq_var_blockinfo(f, v); int i=0; int j=0; int k=0; printf("building index on variable %d, binning op=%s\n", v->varid, gBinningOption); int blockCounter = -1; FastBitDataType ft = fastbit_adios_util_getFastbitDataType(v->type); #ifdef SINGLE_BLOCK for (i=0; i < v->nsteps; i++) { int nblocks = v->nblocks[i]; for (j=0; j < nblocks; j++) { blockCounter++; if (blockCounter % size == rank) { onBlock(rank, f, v, i, j, blockCounter, ft); fastbit_cleanup(); } } printf(" rank %d, varid %d, timestep %d total index created = %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", \n", rank, v->varid, i, sum_nb, sum_nk, sum_no); printf(" rank %d, varid %d, timestep %d total bytes = %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", \n", rank, v->varid, i, adios_type_size(adios_unsigned_integer , NULL)*sum_nb, adios_type_size(adios_double, NULL)*sum_nk, adios_type_size(adios_long, NULL)*sum_no); printf("\n"); } #endif #ifdef MULTI_BLOCK for (i=0; i<v->nsteps; i++) { int nblocks = v->nblocks[i]; int blockStart = 0; int blockEnd = blockStart+pack; while (blockStart < nblocks) { if (blockEnd > nblocks) { blockEnd = nblocks; } printf("block start=%d, end=%d, max=%d\n", blockStart, blockEnd, nblocks); if (workCounter % size == rank) { printf("%ld mod %ld == %d \n", workCounter, size, rank); onMultiBlock(rank, f, v, i, blockStart, blockEnd, ft); fastbit_cleanup(); } workCounter ++; blockStart += pack; blockEnd = blockStart+pack; } fastbit_cleanup(); } #endif #ifdef BOX for (i=0; i<v->nsteps; i++) { uint64_t s = 0; uint64_t dataSize = 1; uint64_t start[v->ndim]; for (s=0; s<v->ndim; s++) { dataSize *= v->dims[s]; start[s] = 0; } uint64_t split = dataSize/recommended_index_ele; uint64_t startRef = 0; if (split == 0) { if (rank == 0) { onBox(rank, f, v, i, start, v->dims, ft); } } else { while (startRef < v->dims[0]) { uint64_t count[v->ndim]; start[0] = startRef; startRef += v->dims[0]/split; if (startRef >= v->dims[0]) { startRef = v->dims[0]; } count[0] = startRef - start[0]; for (s=1; s<v->ndim; s++) { start[s] = 0; count[s] = v->dims[s]; } if (workCounter % size == rank) { onBox(rank, f, v, i, start, count, ft); } workCounter ++; } } } #endif }