#include "ct_step/abstract/ct_virtualabstractstep.h" #include "lvox3_stepmakeshootingpatternformls.h" #include "ct_global/ct_context.h" #include "ct_itemdrawable/ct_scanner.h" #include "loginterface.h" #include "tools/scanner/lvox_shootingpatternformls.h" LVOX3_StepMakeShootingPatternForMLS::LVOX3_StepMakeShootingPatternForMLS() : SuperClass() { // Initialize member variables if needed } QString LVOX3_StepMakeShootingPatternForMLS::description() const { return tr("Calcul des vecteurs directeurs"); } QString LVOX3_StepMakeShootingPatternForMLS::detailledDescription() const { return tr("Detailed description of the step"); } QString LVOX3_StepMakeShootingPatternForMLS::inputDescription() const { return SuperClass::inputDescription() + tr("

"); } QString LVOX3_StepMakeShootingPatternForMLS::outputDescription() const { return SuperClass::outputDescription() + tr("

"); } QString LVOX3_StepMakeShootingPatternForMLS::detailsDescription() const { return tr(""); } CT_VirtualAbstractStep* LVOX3_StepMakeShootingPatternForMLS::createNewInstance() const { // Create a copy of this step return new LVOX3_StepMakeShootingPatternForMLS(); } /////////////////////// PROTECTED /////////////////////// void LVOX3_StepMakeShootingPatternForMLS::declareInputModels(CT_StepInModelStructureManager& manager) { manager.addResult(_inResult, tr("Scene(s)"), "", true); manager.setZeroOrMoreRootGroup(_inResult, _inZeroOrMoreRootGroup); manager.addGroup(_inZeroOrMoreRootGroup, _inGroup); manager.addItem(_inGroup, _inScene, tr("Scene(s)")); manager.addItem(_inGroup, _inAttLAS, tr("Attributs LAS")); manager.addResult(_inResultTraj, tr("Trajectory"), "", true); manager.setZeroOrMoreRootGroup(_inResultTraj, _inZeroOrMoreRootGroupTraj); manager.addGroup(_inZeroOrMoreRootGroupTraj, _inGroupTraj); manager.addItem(_inGroupTraj, _inTraj, tr("Trajectory")); } void LVOX3_StepMakeShootingPatternForMLS::fillPostInputConfigurationDialog(CT_StepConfigurableDialog* postInputConfigDialog) { } void LVOX3_StepMakeShootingPatternForMLS::declareOutputModels(CT_StepOutModelStructureManager& manager) { manager.addResultCopy(_inResult); manager.addItem(_inGroup, m_outScanner, tr("Scanner LVOX MLS"), tr("Scanner position")); manager.addItem(_inGroup, m_outShootingPattern, tr("Shooting Pattern MLS"), tr("Shooting Pattern/Position/Direction/Angle forced by user")); } void LVOX3_StepMakeShootingPatternForMLS::compute() { // Perform the computation steps const CT_ScanPath* trajectorie; for (const CT_ScanPath* scanPath : _inTraj.iterateInputs(_inResultTraj)) { trajectorie = scanPath; } auto iterator = _inScene.iterateOutputs(_inResult); auto it = iterator.begin(); auto end = iterator.end(); int i = 0; while(it != end) { // i++; // PS_LOG->addInfoMessage(LogInterface::step, QString::number(i)); const CT_AbstractItemDrawableWithPointCloud* scene = *it; CT_StandardItemGroup* grp = it.currentParent(); const CT_StdLASPointsAttributesContainer* attributeLAS = nullptr; CT_AbstractPointAttributesScalar* attributeGPS = nullptr; CT_PCIR pcir = nullptr; for(const CT_StdLASPointsAttributesContainer* attLAS : grp->singularItems(_inAttLAS)) { i++; attributeGPS = dynamic_cast(attLAS->pointsAttributesAt(CT_LasDefine::GPS_Time)); if (attributeGPS != nullptr) { attributeLAS = attLAS; break; } } if (scene != nullptr) { //Gets the scene's pointcloudindexregistered to avoid duplicating point clouds. pcir = scene->pointCloudIndexRegistered(); } CT_ShootingPattern *pattern = new LVOX_ShootingPatternForMLS(pcir, *trajectorie, attributeGPS); if(pattern != nullptr) { CT_Scanner *scanner = new CT_Scanner(i, pattern); grp->addSingularItem(m_outScanner, scanner); CT_ShootingPatternD *patternD = new CT_ShootingPatternD(pattern); grp->addSingularItem(m_outShootingPattern, patternD); } ++it; } setProgress(100.0f); }