# Editing the Source Code (Part 2)

In the source file <Project name>Dlg.cpp:

1. Add the following lines after the #include section at the top of the file:

   Copy

       #include <vision/PMRedLine/PMRedLineTool.hpp>

       using namespace Cognex;

2. Add the following to the OnBnClickedRunTool method:

   Copy

       // Static train rectangle, to persist between tool runs.
       static Vision::RectanglePtr trainRect{};
       if (!trainRect)
       {
           trainRect = Vision::Object::Create<Vision::Rectangle>();
           trainRect->setInteractive(true);
           trainRect->setGraphicDOFEnable(Vision::RectangleDOFConstants::All);
           trainRect->SetXYWidthHeight(40, 85, 100, 100);
           trainRect->setSelectedSpaceName("#");
           trainRect->setTipText("Train Region");
       }

       // Static train origin coordinate axes, to persist between tool runs.
       static Vision::CoordinateAxesPtr trainAxes{};
       if (!trainAxes)
       {
           trainAxes = Vision::Object::Create<Vision::CoordinateAxes>();
           trainAxes->setInteractive(true);
           trainAxes->setGraphicDOFEnable(Vision::CoordinateAxesDOFConstants::All);
           trainAxes->setSelectedSpaceName("#");
           trainAxes->setTipText("Train Origin");

           trainAxes->Transform() = Vision::Object::Create<Vision::Transform2DLinear>();
           trainAxes->Transform()->setTranslationX(85);
           trainAxes->Transform()->setTranslationY(135);
       }

       // Static top graphics record, to persist between tool runs.
       static auto topRecord = Vision::Object::Create<Vision::Implementation::Record>();

       // Load image -- used for both input and training.
       auto imageFileTool = Vision::Object::Create<Vision::ImageFile::ImageFileTool>();
       imageFileTool->Operator()->Open("images\\coins.idb", OMX::ImageFile::ImageFileModeConstants::Read);
       imageFileTool->Run();
       auto image = imageFileTool->OutputImage();

       // Create PMRedLine tool.
       auto redLineTool = Vision::Object::Create<Vision::PMRedLine::PMRedLineTool>();

       redLineTool->SuspendChangedEvent();

       // Set input image.
       redLineTool->setInputImage(image);
       // Configure training pattern.
       redLineTool->Pattern()->setTrainImage(image);
       redLineTool->Pattern()->setTrainRegion(trainRect);
       redLineTool->Pattern()->setOrigin(trainAxes->Transform());
       // Configure run parameters.
       redLineTool->RunParams()->setNumberToFind(6);
       redLineTool->RunParams()->ZoneScale()->setConfiguration(
           OMX::PMRedLine::PMRedLineZoneConstants::LowHigh);
       redLineTool->RunParams()->ZoneScale()->setHigh(1.1);
       redLineTool->RunParams()->ZoneScale()->setLow(0.9);
       // Configure last-run record.
       auto lastRunRecordEnable = (int)Vision::PMRedLine::PMRedLineLastRunRecordConstants::All;
       lastRunRecordEnable &= ~(int)Vision::PMRedLine::PMRedLineLastRunRecordConstants::ResultsCoordinateAxes;
       redLineTool->setLastRunRecordEnable(
           (Vision::PMRedLine::PMRedLineLastRunRecordConstants)lastRunRecordEnable);

       // Train and run PMRedLine tool.
       redLineTool->Pattern()->Train();
       redLineTool->Run();

       redLineTool->ResumeAndRaiseChangedEvent();

       topRecord->SubRecords()->Clear();
       topRecord->SubRecords()->Add(redLineTool->CreateCurrentRecord());
       topRecord->SubRecords()->Add(redLineTool->CreateLastRunRecord());

       m_display.setAutoFitWithGraphics(true);
       m_display.setSubject(topRecord);

3. Add the following line to the OnSize method:

   Copy

       m_display.OnSize(nType, cx, cy);