int DrawProjGroup::removeProjection(const char *viewProjType) { if ( checkViewProjType(viewProjType) ) { if(!hasProjection(viewProjType)) { throw Base::Exception("The projection doesn't exist in the group"); } // Iterate through the child views and find the projection type const std::vector<App::DocumentObject *> &views = Views.getValues(); for(std::vector<App::DocumentObject *>::const_iterator it = views.begin(); it != views.end(); ++it) { TechDraw::DrawView *view = dynamic_cast<TechDraw::DrawView *>(*it); if(view->getTypeId() == TechDraw::DrawProjGroupItem::getClassTypeId()) { TechDraw::DrawProjGroupItem *projPtr = dynamic_cast<TechDraw::DrawProjGroupItem *>(*it); if ( strcmp(viewProjType, projPtr->Type.getValueAsString()) == 0 ) { // Remove from the document getDocument()->remObject((*it)->getNameInDocument()); moveToCentre(); return views.size(); } } } } return -1; }
App::DocumentObjectExecReturn *DrawViewCollection::execute(void) { if (ScaleType.isValue("Document")) { const std::vector<App::DocumentObject *> &views = Views.getValues(); for(std::vector<App::DocumentObject *>::const_iterator it = views.begin(); it != views.end(); ++it) { App::DocumentObject *docObj = *it; if(docObj->getTypeId().isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { TechDraw::DrawView *view = static_cast<TechDraw::DrawView *>(*it); // Set scale factor of each view view->ScaleType.setValue("Document"); view->touch(); } } } else if(strcmp(ScaleType.getValueAsString(), "Custom") == 0) { // Rebuild the views const std::vector<App::DocumentObject *> &views = Views.getValues(); for(std::vector<App::DocumentObject *>::const_iterator it = views.begin(); it != views.end(); ++it) { App::DocumentObject *docObj = *it; if(docObj->getTypeId().isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { TechDraw::DrawView *view = static_cast<TechDraw::DrawView *>(*it); view->ScaleType.setValue("Custom"); // Set scale factor of each view view->Scale.setValue(Scale.getValue()); view->touch(); } } } return DrawView::execute(); }
void CmdTechDrawClipPlus::activated(int iMsg) { Q_UNUSED(iMsg); std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); if (selection.size() != 2) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select 1 DrawViewClip and 1 DrawView.")); return; } TechDraw::DrawViewClip* clip = 0; TechDraw::DrawView* view = 0; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { clip = static_cast<TechDraw::DrawViewClip*>((*itSel).getObject()); } else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { view = static_cast<TechDraw::DrawView*>((*itSel).getObject()); } } if (!view) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Drawing View object.")); return; } if (!clip) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Clip object.")); return; } TechDraw::DrawPage* pageClip = clip->findParentPage(); TechDraw::DrawPage* pageView = view->findParentPage(); if (pageClip != pageView) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Clip and View must be from same Page.")); return; } std::string PageName = pageClip->getNameInDocument(); std::string ClipName = clip->getNameInDocument(); std::string ViewName = view->getNameInDocument(); double newX = clip->Width.getValue() / 2.0; double newY = clip->Height.getValue() / 2.0; openCommand("ClipPlus"); doCommand(Doc,"App.activeDocument().%s.ViewObject.Visibility = False",ViewName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",ClipName.c_str(),ViewName.c_str()); doCommand(Doc,"App.activeDocument().%s.X = %.3f",ViewName.c_str(),newX); doCommand(Doc,"App.activeDocument().%s.Y = %.3f",ViewName.c_str(),newY); doCommand(Doc,"App.activeDocument().%s.ViewObject.Visibility = True",ViewName.c_str()); updateActive(); commitCommand(); }
/////////////// Selection Routines /////////////////// // wf: this is never executed??? // needs a signal from Scene? hoverEvent? Scene does not emit signal for "preselect" void MDIViewPage::preSelectionChanged(const QPoint &pos) { QObject *obj = QObject::sender(); if(!obj) return; auto view( dynamic_cast<QGIView *>(obj) ); if(!view) return; QGraphicsItem* parent = view->parentItem(); if(!parent) return; TechDraw::DrawView *viewObj = view->getViewObject(); std::stringstream ss; QGIFace *face = dynamic_cast<QGIFace *>(obj); QGIEdge *edge = dynamic_cast<QGIEdge *>(obj); QGIVertex *vert = dynamic_cast<QGIVertex *>(obj); if(edge) { ss << "Edge" << edge->getProjIndex(); //bool accepted = static_cast<void> (Gui::Selection().setPreselect(viewObj->getDocument()->getName() ,viewObj->getNameInDocument() ,ss.str().c_str() ,pos.x() ,pos.y() ,0)); } else if(vert) { ss << "Vertex" << vert->getProjIndex(); //bool accepted = static_cast<void> (Gui::Selection().setPreselect(viewObj->getDocument()->getName() ,viewObj->getNameInDocument() ,ss.str().c_str() ,pos.x() ,pos.y() ,0)); } else if(face) { ss << "Face" << face->getProjIndex(); //TODO: SectionFaces have ProjIndex = -1. (but aren't selectable?) Problem? //bool accepted = static_cast<void> (Gui::Selection().setPreselect(viewObj->getDocument()->getName() ,viewObj->getNameInDocument() ,ss.str().c_str() ,pos.x() ,pos.y() ,0)); } else { ss << ""; Gui::Selection().setPreselect(viewObj->getDocument()->getName() ,viewObj->getNameInDocument() ,ss.str().c_str() ,pos.x() ,pos.y() ,0); } }
QRectF DrawViewCollection::getRect() const { QRectF result; for (auto& v:Views.getValues()) { TechDraw::DrawView *view = dynamic_cast<TechDraw::DrawView *>(v); if (!view) { throw Base::Exception("DrawViewCollection::getRect bad View\n"); } result = result.united(view->getRect().translated(view->X.getValue(),view->Y.getValue())); } return QRectF(0,0,Scale.getValue() * result.width(),Scale.getValue() * result.height()); }
void ViewProviderDrawingView::hide(void) { TechDraw::DrawView* obj = getViewObject(); if (!obj || obj->isRestoring()) return; if (obj->getTypeId().isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { QGIView* qView = getQView(); if (qView) { qView->isVisible(false); qView->draw(); qView->hide(); } } ViewProviderDocumentObject::hide(); }
bool DrawProjGroup::hasProjection(const char *viewProjType) const { const std::vector<App::DocumentObject *> &views = Views.getValues(); for(std::vector<App::DocumentObject *>::const_iterator it = views.begin(); it != views.end(); ++it) { TechDraw::DrawView *view = dynamic_cast<TechDraw::DrawView *>(*it); if(view->getTypeId() == TechDraw::DrawProjGroupItem::getClassTypeId()) { TechDraw::DrawProjGroupItem *projPtr = dynamic_cast<TechDraw::DrawProjGroupItem *>(*it); if( strcmp(viewProjType, projPtr->Type.getValueAsString()) == 0 ) { return true; } } } return false; }
QGIView * QGVPage::findParent(QGIView *view) const { const std::vector<QGIView *> qviews = getViews(); TechDraw::DrawView *myView = view->getViewObject(); //If type is dimension we check references first TechDraw::DrawViewDimension *dim = 0; dim = dynamic_cast<TechDraw::DrawViewDimension *>(myView); if(dim) { std::vector<App::DocumentObject *> objs = dim->References2D.getValues(); if(objs.size() > 0) { std::vector<App::DocumentObject *> objs = dim->References2D.getValues(); // Attach the dimension to the first object's group for(std::vector<QGIView *>::const_iterator it = qviews.begin(); it != qviews.end(); ++it) { if(strcmp((*it)->getViewName(), objs.at(0)->getNameInDocument()) == 0) { return *it; } } } } // Check if part of view collection for(std::vector<QGIView *>::const_iterator it = qviews.begin(); it != qviews.end(); ++it) { QGIViewCollection *grp = 0; grp = dynamic_cast<QGIViewCollection *>(*it); if(grp) { TechDraw::DrawViewCollection *collection = 0; collection = dynamic_cast<TechDraw::DrawViewCollection *>(grp->getViewObject()); if(collection) { std::vector<App::DocumentObject *> objs = collection->Views.getValues(); for( std::vector<App::DocumentObject *>::iterator it = objs.begin(); it != objs.end(); ++it) { if(strcmp(myView->getNameInDocument(), (*it)->getNameInDocument()) == 0) return grp; } } } } // Not found a parent return 0; }
std::vector<App::DocumentObject*> ViewProviderPage::claimChildren(void) const { std::vector<App::DocumentObject*> temp; // Attach the template if it exists App::DocumentObject *templateFeat = 0; templateFeat = getPageObject()->Template.getValue(); if(templateFeat) { temp.push_back(templateFeat); } // Collect any child views // for Page, valid children are any View except: DrawProjGroupItem // DrawViewDimension // any FeatuerView in a DrawViewClip // DrawHatch const std::vector<App::DocumentObject *> &views = getPageObject()->Views.getValues(); try { for(std::vector<App::DocumentObject *>::const_iterator it = views.begin(); it != views.end(); ++it) { TechDraw::DrawView* featView = dynamic_cast<TechDraw::DrawView*> (*it); App::DocumentObject *docObj = *it; // Don't collect if dimension, projection group item, hatch or member of ClipGroup as these should be grouped elsewhere if(docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawHatch::getClassTypeId()) || (featView && featView->isInClip()) ) continue; else temp.push_back(*it); } return temp; } catch (...) { std::vector<App::DocumentObject*> tmp; return tmp; } }
//! update FC Selection from QGraphicsScene selection //trigged by m_view->scene() signal void MDIViewPage::selectionChanged() { if(isSelectionBlocked) { return; } QList<QGraphicsItem*> selection = m_view->scene()->selectedItems(); bool saveBlock = blockConnection(true); // avoid to be notified by itself blockSelection(true); Gui::Selection().clearSelection(); for (QList<QGraphicsItem*>::iterator it = selection.begin(); it != selection.end(); ++it) { QGIView *itemView = dynamic_cast<QGIView *>(*it); if(itemView == 0) { QGIEdge *edge = dynamic_cast<QGIEdge *>(*it); if(edge) { QGraphicsItem*parent = edge->parentItem(); if(!parent) continue; QGIView *viewItem = dynamic_cast<QGIView *>(parent); if(!viewItem) continue; TechDraw::DrawView *viewObj = viewItem->getViewObject(); std::stringstream ss; ss << "Edge" << edge->getProjIndex(); //bool accepted = static_cast<void> (Gui::Selection().addSelection(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str())); showStatusMsg(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str()); continue; } QGIVertex *vert = dynamic_cast<QGIVertex *>(*it); if(vert) { QGraphicsItem*parent = vert->parentItem(); if(!parent) continue; QGIView *viewItem = dynamic_cast<QGIView *>(parent); if(!viewItem) continue; TechDraw::DrawView *viewObj = viewItem->getViewObject(); std::stringstream ss; ss << "Vertex" << vert->getProjIndex(); //bool accepted = static_cast<void> (Gui::Selection().addSelection(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str())); showStatusMsg(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str()); continue; } QGIFace *face = dynamic_cast<QGIFace *>(*it); if(face) { QGraphicsItem*parent = face->parentItem(); if(!parent) continue; QGIView *viewItem = dynamic_cast<QGIView *>(parent); if(!viewItem) continue; TechDraw::DrawView *viewObj = viewItem->getViewObject(); std::stringstream ss; ss << "Face" << face->getProjIndex(); //bool accepted = static_cast<void> (Gui::Selection().addSelection(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str())); showStatusMsg(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str()); continue; } QGIDatumLabel *dimLabel = dynamic_cast<QGIDatumLabel*>(*it); if(dimLabel) { QGraphicsItem*dimParent = dimLabel->parentItem(); if(!dimParent) continue; QGIView *dimItem = dynamic_cast<QGIView *>(dimParent); if(!dimItem) continue; TechDraw::DrawView *dimObj = dimItem->getViewObject(); if (!dimObj) { continue; } const char* name = dimObj->getNameInDocument(); if (!name) { //can happen during undo/redo if Dim is selected??? //Base::Console().Log("INFO - MDIVP::selectionChanged - dimObj name is null!\n"); continue; } //bool accepted = static_cast<void> (Gui::Selection().addSelection(dimObj->getDocument()->getName(),dimObj->getNameInDocument())); } } else { TechDraw::DrawView *viewObj = itemView->getViewObject(); if (viewObj && !viewObj->isRemoving()) { std::string doc_name = viewObj->getDocument()->getName(); std::string obj_name = viewObj->getNameInDocument(); Gui::Selection().addSelection(doc_name.c_str(), obj_name.c_str()); showStatusMsg(doc_name.c_str(), obj_name.c_str(), ""); } } } blockConnection(saveBlock); blockSelection(false); } // end MDIViewPage::selectionChanged()