ControlNet * CnetEditorWidget::filteredNetwork() const { ControlNet * filteredCnet = new ControlNet(*m_controlNet); QList<AbstractTreeItem *> networkItems = m_pointModel->getItems(0, -1, AbstractTreeModel::MeasureItems | AbstractTreeModel::PointItems, true); // Iterate through our copy of the cnet, deleting anything that doesn't // exactly match our networkItems. for (int pointIndex = filteredCnet->GetNumPoints() - 1; pointIndex >= 0; pointIndex--) { if (networkItems.isEmpty()) { ControlPoint *cp = filteredCnet->GetPoint(pointIndex); cp->SetEditLock(false); for (int measureIndex = 0; measureIndex < cp->GetNumMeasures(); measureIndex++) { cp->GetMeasure(measureIndex)->SetEditLock(false); } filteredCnet->DeletePoint(cp); } else if (networkItems.last()->getPointerType() == AbstractTreeItem::Point) { ControlPoint *networkItemsCp = (ControlPoint *)networkItems.last()->getPointer(); ControlPoint *cp = filteredCnet->GetPoint(pointIndex); if (cp->GetId() != networkItemsCp->GetId()) { cp->SetEditLock(false); for (int measureIndex = 0; measureIndex < cp->GetNumMeasures(); measureIndex++) { cp->GetMeasure(measureIndex)->SetEditLock(false); } filteredCnet->DeletePoint(cp); } else { networkItems.removeLast(); } } else if (networkItems.last()->getPointerType() == AbstractTreeItem::Measure) { ControlPoint *cp = filteredCnet->GetPoint(pointIndex); ControlMeasure *networkItemsCm = (ControlMeasure *)networkItems.last()->getPointer(); if (cp->GetId() != networkItemsCm->Parent()->GetId()) { cp->SetEditLock(false); for (int measureIndex = 0; measureIndex < cp->GetNumMeasures(); measureIndex++) { cp->GetMeasure(measureIndex)->SetEditLock(false); } filteredCnet->DeletePoint(cp); } else { // Our CP stays, figure out which CMs stay. for (int measureIndex = cp->GetNumMeasures() - 1; networkItemsCm && measureIndex >= 0; measureIndex--) { ControlMeasure *cm = cp->GetMeasure(measureIndex); if (cm->GetCubeSerialNumber() != networkItemsCm->GetCubeSerialNumber()) { cm->SetEditLock(false); cp->Delete(cm); } else { networkItems.removeLast(); networkItemsCm = NULL; if (networkItems.last()->getPointerType() == AbstractTreeItem::Measure) { networkItemsCm = (ControlMeasure *)networkItems.last()->getPointer(); } } } // We still need to verify the copied CP at this index... although // nothing should go wrong, we know things do go wrong so do // the verify instead of just tossing the last networkItems item. pointIndex++; } } } return filteredCnet; }
/** * Repaint the viewport * * @internal * @history 2011-08-23 Tracie Sucharski - Use the GetMeasuresInCube method * from ControlNet to get list of measures rather * than searching through entire net. * @history 2011-11-09 Tracie Sucharski - If there are no measures for * this cube, return. */ void ChipViewport::paintEvent(QPaintEvent *e) { QPainter painter(this); if (p_tempView != NULL) { painter.drawImage(0, 0, *(p_tempView->p_image)); } else { painter.drawImage(0, 0, *p_image); } if (p_cross == true) { painter.setPen(Qt::red); painter.drawLine(0, (p_height - 1) / 2, p_width - 1, (p_height - 1) / 2); painter.drawLine((p_width - 1) / 2, 0, (p_width - 1) / 2, p_height - 1); } if (p_circle == true) { painter.setPen(Qt::red); painter.drawEllipse((p_height - 1) / 2 - p_circleSize / 2, (p_width - 1) / 2 - p_circleSize / 2, p_circleSize, p_circleSize); } QString serialNumber = p_chipCube? SerialNumber::Compose(*p_chipCube) : QString(); if (p_controlNet && !serialNumber.isEmpty() && p_controlNet->GetCubeSerials().contains( serialNumber)) { // draw measure locations if we have a control network // If the serial number is Unknown, we probably have a ground source // file or level 2 which means it does not exist in the network // TODO: Is there a better way to handle this? if (p_showPoints && serialNumber.compare("Unknown") && p_controlNet->GetNumPoints() != 0) { QList<ControlMeasure *> measures = p_controlNet->GetMeasuresInCube(serialNumber); // loop through all points in the control net for (int i = 0; i < measures.count(); i++) { ControlMeasure *m = measures[i]; // Find the measurments on the viewport double samp = m->GetSample(); double line = m->GetLine(); int x, y; cubeToViewport(samp, line, x, y); // Determine pen color // if the point or measure is ignored set to yellow if (m->Parent()->IsIgnored() || (!m->Parent()->IsIgnored() && m->IsIgnored())) { painter.setPen(QColor(255, 255, 0)); // set point marker yellow } // check for ground measure else if (m->Parent()->GetType() == ControlPoint::Fixed) { painter.setPen(Qt::magenta);// set point marker magenta } else { painter.setPen(Qt::green); // set all other point markers green } // draw points which are not under cross if (x != (p_width - 1) / 2 || y != (p_height - 1) / 2) { painter.drawLine(x - 5, y, x + 5, y); painter.drawLine(x, y - 5, x, y + 5); } } } } p_tempView = NULL; //painter.end(); }