Пример #1
0
void GlyphCustom::initWidget() {
	PipelineManager* pm = m_mainWnd->getPipelineManager();
	Pipeline* pl = pm->getPipeline(m_pipelineID);

	// Get the instance of OkcVisualMap
	VisualMap* visMap = pl->getVisualMap();
	assert( typeid(*visMap)==typeid(OkcVisualMap) );
	OkcVisualMap* okcVisMap = dynamic_cast<OkcVisualMap*>(visMap);

	// Get the instance of GlyphPlace
	GlyphPlace* place = okcVisMap->getGlyphPlace();
	XmdvTool::GLYPHPLACE_MODE mode = place->getGlyphPlaceMode();

	// Check one radio button about sorting mode in terms of
	// the OkcVisualMap configuration
	switch (mode) {
	case XmdvTool::GLYPHPLACE_ORIGINAL :
		ui.radioButton_orig->setChecked(true);
		changeToOriginal();
		break;
	case XmdvTool::GLYPHPLACE_ORDERED :
		ui.radioButton_order->setChecked(true);
		changeToOrdered();
		break;
	case XmdvTool::GLYPHPLACE_DATA_DRIVEN	:
		ui.radioButton_datadriven->setChecked(true);
		changeToDatadriven();
		break;
	case XmdvTool::GLYPHPLACE_DERIVED :
		ui.radioButton_derived->setChecked(true);
		changeToDerived();
		break;
	}

}
Пример #2
0
void OkcViewDisplay::refreshBrush() {
	OkcVisualMapResult* okvVMR = getOkcVisualMapResult();
	Operator* brushQ = (Operator*)(okvVMR->getBrushOperator());
	PipelineManager* pm = getPipelineManager();
	Brush *brush = okvVMR->getBrush();

	//If the maximum and minimum values for one dimension has the exact same value,
	//they should be adjusted to a little different values,
	//otherwise, some records having the same value as this max/min value
	//cannot be highlighted.

	int i;
	for (i=0; i<brush->getDimSize(); i++) {
		brush->max[i] += XMDV_DBL_EPSILON;
		brush->min[i] -= XMDV_DBL_EPSILON;
	}

	OkcData* brushStorage = brush->toOkcDataStorage();
	std::vector<double> buf;
	brushStorage->getData(buf, 3);
	int pID = getPipelineID();
	// update the assistant input by the reverse pipeline
	pm->updateAssisInput(pID, brushStorage, XmdvTool::ASSISDATA_BRUSH);

	delete brushStorage;
	pm->assemble(pID, brushQ);
	getViewManager()->refreshDisplayByPID(pID);
}
Пример #3
0
TEST(FerryFilterTest, test_ferry_copy_xml)
{
    PipelineManager mgr;
    mgr.readPipeline(Support::configuredpath("filters/ferry.xml"));

    mgr.execute();
    ConstPointTableRef table(mgr.pointTable());

    PointViewSet viewSet = mgr.views();

    EXPECT_EQ(viewSet.size(), 1u);
    PointViewPtr view = *viewSet.begin();
    EXPECT_EQ(view->size(), 1065u);

    Dimension::Id::Enum state_plane_x = table.layout()->findDim("StatePlaneX");
    Dimension::Id::Enum state_plane_y = table.layout()->findDim("StatePlaneY");

    double lon = view->getFieldAs<double>(Dimension::Id::X, 0);
    double lat = view->getFieldAs<double>(Dimension::Id::Y, 0);

    double x = view->getFieldAs<double>(state_plane_x, 0);
    double y = view->getFieldAs<double>(state_plane_y, 0);

    EXPECT_DOUBLE_EQ(-117.2501328350574, lon);
    EXPECT_DOUBLE_EQ(49.341077824192915, lat);
    EXPECT_DOUBLE_EQ(637012.24, x);
    EXPECT_DOUBLE_EQ(849028.31, y);
}
Пример #4
0
TEST_F(PredicateFilterTest, PredicateFilterTest_EmbedJSON)
{
    PipelineManager mgr;

    mgr.readPipeline(Support::configuredpath("plang/predicate-embed.json"));
    point_count_t cnt = mgr.execute();
    EXPECT_EQ(cnt, 1u);
}
Пример #5
0
TEST(PredicateFilterTest, PredicateFilterTest_Embed)
{
    PipelineManager mgr;
    PipelineReader reader(mgr);

    reader.readPipeline(Support::configuredpath("plang/predicate-embed.xml"));
    point_count_t cnt = mgr.execute();
    EXPECT_EQ(cnt, 1u);
}
Пример #6
0
TEST(SbetReaderTest, testPipeline)
{
    PipelineManager manager;
    PipelineReader reader(manager);
    reader.readPipeline(Support::configuredpath("sbet/pipeline.xml"));

    point_count_t numPoints = manager.execute();
    EXPECT_EQ(numPoints, 2u);
    FileUtils::deleteFile(Support::datapath("sbet/outfile.txt"));
}
Пример #7
0
TEST(IcebridgeReaderTest, testPipeline)
{
    PipelineManager manager;

    manager.readPipeline(Support::configuredpath("icebridge/pipeline.xml"));

    point_count_t numPoints = manager.execute();
    EXPECT_EQ(numPoints, 2u);
    FileUtils::deleteFile(Support::datapath("icebridge/outfile.txt"));
}
Пример #8
0
int SmoothKernel::execute()
{
    PointTable table;

    Stage& readerStage(makeReader(m_inputFile, ""));

    // go ahead and prepare/execute on reader stage only to grab input
    // PointViewSet, this makes the input PointView available to both the
    // processing pipeline and the visualizer
    readerStage.prepare(table);
    PointViewSet viewSetIn = readerStage.execute(table);

    // the input PointViewSet will be used to populate a BufferReader that is
    // consumed by the processing pipeline
    PointViewPtr input_view = *viewSetIn.begin();

    PipelineManager manager;
    manager.commonOptions() = m_manager.commonOptions();
    manager.stageOptions() = m_manager.stageOptions();

    BufferReader& bufferReader =
        static_cast<BufferReader&>(manager.makeReader("", "readers.buffer"));
    bufferReader.addView(input_view);

    std::ostringstream ss;
    ss << "{";
    ss << "  \"pipeline\": {";
    ss << "    \"filters\": [{";
    ss << "      \"name\": \"MovingLeastSquares\"";
    ss << "      }]";
    ss << "    }";
    ss << "}";

    Options smoothOptions;
    smoothOptions.add("json", ss.str());

    Stage& smoothStage = manager.makeFilter("filters.pclblock", bufferReader);
    smoothStage.addOptions(smoothOptions);

    Stage& writer(Kernel::makeWriter(m_outputFile, smoothStage, ""));

    writer.prepare(table);

    // process the data, grabbing the PointViewSet for visualization of the
    // resulting PointView
    PointViewSet viewSetOut = writer.execute(table);

    if (isVisualize())
        visualize(*viewSetOut.begin());
    //visualize(*viewSetIn.begin(), *viewSetOut.begin());

    return 0;
}
Пример #9
0
TIndexKernel::FileInfo TIndexKernel::getFileInfo(KernelFactory& factory,
    const std::string& filename)
{
    FileInfo fileInfo;

    PipelineManager manager;
    manager.commonOptions() = m_manager.commonOptions();
    manager.stageOptions() = m_manager.stageOptions();

    // Need to make sure options get set.
    Stage& reader = manager.makeReader(filename, "");

    if (m_fastBoundary)
    {
        QuickInfo qi = reader.preview();

        std::stringstream polygon;
        polygon << "POLYGON ((";

        polygon <<         qi.m_bounds.minx << " " << qi.m_bounds.miny;
        polygon << ", " << qi.m_bounds.maxx << " " << qi.m_bounds.miny;
        polygon << ", " << qi.m_bounds.maxx << " " << qi.m_bounds.maxy;
        polygon << ", " << qi.m_bounds.minx << " " << qi.m_bounds.maxy;
        polygon << ", " << qi.m_bounds.minx << " " << qi.m_bounds.miny;
        polygon << "))";
        fileInfo.m_boundary = polygon.str();
        if (!qi.m_srs.empty())
            fileInfo.m_srs = qi.m_srs.getWKT();
    }
    else
    {
        Stage& hexer = manager.makeFilter("filters.hexbin", reader);

        PointTable table;
        hexer.prepare(table);
        PointViewSet set = hexer.execute(table);

        MetadataNode m = table.metadata();
        m = m.findChild("filters.hexbin:boundary");
        fileInfo.m_boundary = m.value();

        PointViewPtr v = *set.begin();
        if (!v->spatialReference().empty())
            fileInfo.m_srs = v->spatialReference().getWKT();
    }

    FileUtils::fileTimes(filename, &fileInfo.m_ctime, &fileInfo.m_mtime);
    fileInfo.m_filename = filename;

    return fileInfo;
}
Пример #10
0
TEST(MergeTest, test4)
{
    using namespace pdal;

    PipelineManager mgr;
    mgr.readPipeline(Support::configuredpath("filters/merge.json"));
    mgr.execute();

    PointViewSet viewSet = mgr.views();

    EXPECT_EQ(1u, viewSet.size());
    PointViewPtr view = *viewSet.begin();
    EXPECT_EQ(2130u, view->size());
}
Пример #11
0
TEST(MergeTest, test2)
{
    using namespace pdal;

    PipelineManager mgr;
    PipelineReader specReader(mgr);
    specReader.readPipeline(Support::configuredpath("filters/merge2.xml"));
    mgr.execute();

    PointViewSet viewSet = mgr.views();

    EXPECT_EQ(viewSet.size(), 1u);
    PointViewPtr view = *viewSet.begin();
    EXPECT_EQ(view->size(), 2130u);
}
Пример #12
0
void Kernel::visualize(PointViewPtr view)
{
    PipelineManager manager;

    manager.commonOptions() = m_manager.commonOptions();
    manager.stageOptions() = m_manager.stageOptions();

    BufferReader& reader =
        static_cast<BufferReader&>(manager.makeReader("", "readers.buffer"));
    reader.addView(view);

    Stage& writer = manager.makeWriter("", "writers.pclvisualizer", reader);

    PointTable table;
    writer.prepare(table);
    writer.execute(table);
}
Пример #13
0
TEST_F(PythonFilterTest, pipelineJSON)
{
    PipelineManager manager;

    manager.readPipeline(
        Support::configuredpath("plang/programmable-update-y-dims.json"));
    manager.execute();
    PointViewSet viewSet = manager.views();
    EXPECT_EQ(viewSet.size(), 1u);
    PointViewPtr view = *viewSet.begin();

    for (PointId idx = 0; idx < 10; ++idx)
    {
        int32_t y = view->getFieldAs<int32_t>(Dimension::Id::Y, idx);
        EXPECT_EQ(y, 314);
    }
}
Пример #14
0
TEST(SortFilterTest, pipeline)
{
    PipelineManager mgr;
    PipelineReader reader(mgr);

    reader.readPipeline(Support::configuredpath("filters/sort.xml"));
    mgr.execute();

    PointBufferSet pbSet = mgr.buffers();

    EXPECT_EQ(pbSet.size(), 1u);
    PointBufferPtr buf = *pbSet.begin();

    for (PointId i = 1; i < buf->size(); ++i)
    {
        double d1 = buf->getFieldAs<double>(Dimension::Id::X, i - 1);
        double d2 = buf->getFieldAs<double>(Dimension::Id::X, i);
        EXPECT_TRUE(d1 <= d2);
    }
}
Пример #15
0
TEST(json, tags)
{
    PipelineManager manager;

    manager.readPipeline(Support::configuredpath("pipeline/tags.json"));
    std::vector<Stage *> stages = manager.m_stages;

    EXPECT_EQ(stages.size(), 4u);
    size_t totalInputs(0);
    for (Stage *s : stages)
    {
        std::vector<Stage *> inputs = s->getInputs();
        if (inputs.empty())
            EXPECT_EQ(s->getName(), "readers.las");
        if (inputs.size() == 1 || inputs.size() == 2)
            EXPECT_EQ(s->getName(), "writers.las");
        totalInputs += inputs.size();
    }
    EXPECT_EQ(totalInputs, 3U);
}
Пример #16
0
TEST(MergeTest, test3)
{
    using namespace pdal;

    PipelineManager mgr;
    mgr.readPipeline(Support::configuredpath("filters/merge3.xml"));

    std::ostringstream oss;
    std::ostream& o = std::clog;
    auto ctx = Utils::redirect(o, oss);

    mgr.execute();
    std::string s = oss.str();
    EXPECT_TRUE(s.find("inconsistent spatial references") != s.npos);
    Utils::restore(o, ctx);

    PointViewSet viewSet = mgr.views();

    EXPECT_EQ(1u, viewSet.size());
    PointViewPtr view = *viewSet.begin();
    EXPECT_EQ(2130u, view->size());
}
Пример #17
0
// Make sure we handle repeated options properly
TEST(json, issue_1941)
{
    PipelineManager manager;
    std::string file;

    file = Support::configuredpath("pipeline/range_multi_limits.json");
    manager.readPipeline(file);
    EXPECT_EQ(manager.execute(), (point_count_t)5);
    const PointViewSet& s = manager.views();
    EXPECT_EQ(s.size(), 1U);
    PointViewPtr view = *s.begin();
    EXPECT_EQ(view->getFieldAs<int>(Dimension::Id::X, 0), 3);
    EXPECT_EQ(view->getFieldAs<int>(Dimension::Id::X, 1), 4);
    EXPECT_EQ(view->getFieldAs<int>(Dimension::Id::X, 2), 5);
    EXPECT_EQ(view->getFieldAs<int>(Dimension::Id::X, 3), 8);
    EXPECT_EQ(view->getFieldAs<int>(Dimension::Id::X, 4), 9);

    PipelineManager manager2;

    file = Support::configuredpath("pipeline/range_bad_limits.json");
    EXPECT_THROW(manager2.readPipeline(file), pdal_error);
}
Пример #18
0
bool Pipeline::willOuputToVis(XmdvTool::VISTYPE visType) {
	PipelineManager* pm = getPipelineManager();
	ViewManager* vm = pm->getViewManager();
	return vm->willOuputToVis(getPipelineID(), visType);
}
Пример #19
0
void GlyphCustom::on_pushButton_apply_clicked() {
	getOkcPipelineSettings()->m_glyphPlaceMode = m_placeMode;
	PipelineManager* pm = m_mainWnd->getPipelineManager();
	ViewManager * vm = m_mainWnd->getViewManager();
	OkcPipeline* pl = getOkcPipeline();
	Transformation* mainT = pl->getMainTransformation();
	XmdvTool::PLTYPE plType = pl->getPipelineType();
	assert (plType==XmdvTool::PLTYPE_FLATNORMAL ||
			plType==XmdvTool::PLTYPE_SBB);

	SortRowsOperator* sortO = pl->getSortRowsOperator();
	PCADeriveOperator* pcaO = pl->getPCADeriveOperator();

	// Setup the pipeline in terms of the current glyph place mode
	switch (m_placeMode) {
	case XmdvTool::GLYPHPLACE_ORIGINAL :
	{
		// Disable the sort operator
		// Disable the PCA operator
		switch (plType) {
		case XmdvTool::PLTYPE_FLATNORMAL :
			mainT->enableOperator(PL_FN_OP_SORT, false);
			mainT->enableOperator(PL_FN_OP_PCADERIVE, false);
			break;
		case XmdvTool::PLTYPE_SBB :
			mainT->enableOperator(PL_SBB_OP_SORT, false);
			mainT->enableOperator(PL_SBB_OP_PCADERIVE, false);
			break;
		default:
			// The code should not go to here;
			return;
		}
		// Reassemble the pipeline
		pm->assemble(m_pipelineID, sortO);
		// If the current views include the glyphs, refresh the output
		if (vm->willOuputToVis(m_pipelineID, XmdvTool::VISTYPE_GL)) {
			vm->refreshDisplayByPID(m_pipelineID);
		}
	}
	break;
	case XmdvTool::GLYPHPLACE_ORDERED :
	{
		if (m_selectedDimNo<0 || m_selectedDimNo>=ui.listWidget_dims->count()) {
			// If users did not select anything, return immediately
			return;
		}
		// Enable the sort operator
		// Disable the PCA operator
		switch (plType) {
		case XmdvTool::PLTYPE_FLATNORMAL :
			mainT->enableOperator(PL_FN_OP_SORT, true);
			mainT->enableOperator(PL_FN_OP_PCADERIVE, false);
			break;
		case XmdvTool::PLTYPE_SBB :
			mainT->enableOperator(PL_SBB_OP_SORT, true);
			mainT->enableOperator(PL_SBB_OP_PCADERIVE, false);
			break;
		default:
			// The code should not go to here;
			return;
		}
		// Get the sort operator
		// Setup the sort Operator
		sortO->setSortWay (XmdvTool::OKCDIM_ORIGINAL);
		sortO->setSortDimNo (m_selectedDimNo);
		sortO->setSortOrder (m_sortOrder);
		// Reassemble the pipeline
		pm->assemble(m_pipelineID, sortO);
		// If the current views include the glyphs, refresh the output
		if (vm->willOuputToVis(m_pipelineID, XmdvTool::VISTYPE_GL)) {
			vm->refreshDisplayByPID(m_pipelineID);
		}
	}
	break;
	case XmdvTool::GLYPHPLACE_DATA_DRIVEN :
	{
		if (m_XDimNumber<0
				|| m_XDimNumber>=ui.listWidget_dims->count()
				|| m_YDimNumber<0
				|| m_YDimNumber>=ui.listWidget_dims->count()) {
			// If users did not select anything for X dim or Y dim, return immediately
			return;
		}
		// Disable the sort operator
		// Disable the PCA operator
		switch (plType) {
		case XmdvTool::PLTYPE_FLATNORMAL :
			mainT->enableOperator(PL_FN_OP_SORT, false);
			mainT->enableOperator(PL_FN_OP_PCADERIVE, false);
			break;
		case XmdvTool::PLTYPE_SBB :
			mainT->enableOperator(PL_SBB_OP_SORT, false);
			mainT->enableOperator(PL_SBB_OP_PCADERIVE, false);
			break;
		default:
			// The code should not go to here;
			return;
		}
		OkcPipeline* okcpl = getOkcPipeline();
		OkcVisualMap* okcvm = okcpl->getOkcVisualMap();
		GlyphPlace* gp = okcvm->getGlyphPlace();
		gp->setDimX(XmdvTool::OKCDIM_ORIGINAL);
		gp->setDimXNo(m_XDimNumber);
		gp->setDimY(XmdvTool::OKCDIM_ORIGINAL);
		gp->setDimYNo(m_YDimNumber);
		// Reassemble the pipeline
		pm->assemble(m_pipelineID, sortO);
		// If the current views include the glyphs, refresh the output
		if (vm->willOuputToVis(m_pipelineID, XmdvTool::VISTYPE_GL)) {
			vm->refreshDisplayByPID(m_pipelineID);
		}
	}
	break;
	case XmdvTool::GLYPHPLACE_DERIVED :
	{
		if (m_XDimNumber<0 || m_YDimNumber<0 ) {
			// If users did not select anything for X dim or Y dim, return immediately
			return;
		}
		// Disable the sort operator
		// Enable the PCA operator
		switch (plType) {
		case XmdvTool::PLTYPE_FLATNORMAL :
			mainT->enableOperator(PL_FN_OP_SORT, false);
			mainT->enableOperator(PL_FN_OP_PCADERIVE, true);
			break;
		case XmdvTool::PLTYPE_SBB :
			mainT->enableOperator(PL_SBB_OP_SORT, false);
			mainT->enableOperator(PL_SBB_OP_PCADERIVE, true);
			break;
		default:
			// The code should not go to here;
			return;
		}
		OkcPipeline* okcpl = getOkcPipeline();
		OkcVisualMap* okcvm = okcpl->getOkcVisualMap();
		GlyphPlace* gp = okcvm->getGlyphPlace();
		gp->setDimX(m_XDim);
		gp->setDimXNo(m_XDimNumber);
		gp->setDimY(m_YDim);
		gp->setDimYNo(m_YDimNumber);
		// Reassemble the pipeline
		if (okcpl->needRunPCA()) {
			// If the PCA algorithm has been run once,
			// assemble the pipeline from the pca operator
			pm->assemble(m_pipelineID, pcaO);
			okcpl->setNeedRunPCA(false);
		} else {
			// If the PCA algorithm has been run once,
			// we only need to do visual mapping
			pm->assemble(m_pipelineID, -1);
		}
		// If the current views include the glyphs, refresh the output
		if (vm->willOuputToVis(m_pipelineID, XmdvTool::VISTYPE_GL)) {
			vm->refreshDisplayByPID(m_pipelineID);
		}
	}
	break;
	}
}
Пример #20
0
OkcPipeline* GlyphCustom::getOkcPipeline() {
    PipelineManager* pm = m_mainWnd->getPipelineManager();
    Pipeline* pl = pm->getPipeline(m_pipelineID);
    return dynamic_cast<OkcPipeline*>(pl);
}