void TaskTransformedParameters::fillPlanesCombo(ComboLinks &combolinks, Part::Part2DObject* sketch) { combolinks.clear(); //add sketch axes if (sketch){ combolinks.addLink(sketch,"V_Axis",QObject::tr("Vertical sketch axis")); combolinks.addLink(sketch,"H_Axis",QObject::tr("Horizontal sketch axis")); for (int i=0; i < sketch->getAxisCount(); i++) { QString itemText = tr("Construction line %1").arg(i+1); std::stringstream sub; sub << "Axis" << i; combolinks.addLink(sketch,sub.str(),itemText); } } //add part baseplanes App::DocumentObject* obj = getObject(); PartDesign::Body * body = PartDesign::Body::findBodyOf ( obj ); if (body) { try { App::Origin* orig = body->getOrigin(); combolinks.addLink(orig->getXY(),"",tr("Base XY plane")); combolinks.addLink(orig->getYZ(),"",tr("Base YZ plane")); combolinks.addLink(orig->getXZ(),"",tr("Base XZ plane")); } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what() ); } } //add "Select reference" combolinks.addLink(0,std::string(),tr("Select reference...")); }
bool ViewProviderOrigin::onDelete(const std::vector<std::string> &) { App::Origin* origin = static_cast<App::Origin*>( getObject() ); if ( !origin->getInList().empty() ) { return false; } for (auto obj: origin->OriginFeatures.getValues() ) { Gui::Command::doCommand( Gui::Command::Doc, "App.getDocument(\"%s\").removeObject(\"%s\")", obj->getDocument()->getName(), obj->getNameInDocument() ); } return true; }
void ViewProviderOrigin::onChanged(const App::Property* prop) { if (prop == &Size) { try { Gui::Application *app = Gui::Application::Instance; Base::Vector3d sz = Size.getValue (); App::Origin* origin = static_cast<App::Origin*> ( getObject() ); // Calculate axes and planes sizes double szXY = std::max ( sz.x, sz.y ); double szXZ = std::max ( sz.x, sz.z ); double szYZ = std::max ( sz.y, sz.z ); double szX = std::min ( szXY, szXZ ); double szY = std::min ( szXY, szYZ ); double szZ = std::min ( szXZ, szYZ ); // Find view providers Gui::ViewProviderPlane* vpPlaneXY, *vpPlaneXZ, *vpPlaneYZ; Gui::ViewProviderLine* vpLineX, *vpLineY, *vpLineZ; // Planes vpPlaneXY = static_cast<Gui::ViewProviderPlane *> ( app->getViewProvider ( origin->getXY () ) ); vpPlaneXZ = static_cast<Gui::ViewProviderPlane *> ( app->getViewProvider ( origin->getXZ () ) ); vpPlaneYZ = static_cast<Gui::ViewProviderPlane *> ( app->getViewProvider ( origin->getYZ () ) ); // Axes vpLineX = static_cast<Gui::ViewProviderLine *> ( app->getViewProvider ( origin->getX () ) ); vpLineY = static_cast<Gui::ViewProviderLine *> ( app->getViewProvider ( origin->getY () ) ); vpLineZ = static_cast<Gui::ViewProviderLine *> ( app->getViewProvider ( origin->getZ () ) ); // set their sizes if (vpPlaneXY) { vpPlaneXY->Size.setValue ( szXY ); } if (vpPlaneXZ) { vpPlaneXZ->Size.setValue ( szXZ ); } if (vpPlaneYZ) { vpPlaneYZ->Size.setValue ( szYZ ); } if (vpLineX) { vpLineX->Size.setValue ( szX ); } if (vpLineY) { vpLineY->Size.setValue ( szY ); } if (vpLineZ) { vpLineZ->Size.setValue ( szZ ); } } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what() ); } } ViewProviderDocumentObject::onChanged ( prop ); }
void ViewProviderOrigin::setTemporaryVisibility(bool axis, bool plane) { App::Origin* origin = static_cast<App::Origin*>( getObject() ); bool saveState = tempVisMap.empty(); try { // Remember & Set axis visability for(App::DocumentObject* obj : origin->axes()) { if (obj) { Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(obj); if(vp) { if (saveState) { tempVisMap[vp] = vp->isVisible(); } vp->setVisible(axis); } } } // Remember & Set plane visability for(App::DocumentObject* obj : origin->planes()) { if (obj) { Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(obj); if(vp) { if (saveState) { tempVisMap[vp] = vp->isVisible(); } vp->setVisible(plane); } } } } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what() ); } // Remember & Set self visability tempVisMap[this] = isVisible(); setVisible(true); }
void TaskRevolutionParameters::fillAxisCombo(bool forceRefill) { // TODO share the code with TaskTransformedParameters (2015-08-31, Fat-Zer) bool oldVal_blockUpdate = blockUpdate; blockUpdate = true; if(axesInList.size() == 0) forceRefill = true;//not filled yet, full refill if (forceRefill){ ui->axis->clear(); for(size_t i = 0 ; i < axesInList.size() ; i++ ){ delete axesInList[i]; } this->axesInList.clear(); //add sketch axes PartDesign::ProfileBased* pcFeat = static_cast<PartDesign::Revolution*>(vp->getObject()); Part::Part2DObject* pcSketch = static_cast<Part::Part2DObject*>(pcFeat->Profile.getValue()); if (pcSketch){ addAxisToCombo(pcSketch,"V_Axis",QObject::tr("Vertical sketch axis")); addAxisToCombo(pcSketch,"H_Axis",QObject::tr("Horizontal sketch axis")); for (int i=0; i < pcSketch->getAxisCount(); i++) { QString itemText = QObject::tr("Construction line %1").arg(i+1); std::stringstream sub; sub << "Axis" << i; addAxisToCombo(pcSketch,sub.str(),itemText); } } //add part axes App::DocumentObject* obj = vp->getObject(); PartDesign::Body * body = PartDesign::Body::findBodyOf ( obj ); if (body) { try { App::Origin* orig = body->getOrigin(); addAxisToCombo(orig->getX(),"",tr("Base X axis")); addAxisToCombo(orig->getY(),"",tr("Base Y axis")); addAxisToCombo(orig->getZ(),"",tr("Base Z axis")); } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what() ); } } //add "Select reference" addAxisToCombo(0,std::string(),tr("Select reference...")); }//endif forceRefill //add current link, if not in list //first, figure out the item number for current axis int indexOfCurrent = -1; App::DocumentObject* ax = propReferenceAxis->getValue(); const std::vector<std::string> &subList = propReferenceAxis->getSubValues(); for(size_t i = 0 ; i < axesInList.size() ; i++) { if(ax == axesInList[i]->getValue() && subList == axesInList[i]->getSubValues()) indexOfCurrent = i; } if ( indexOfCurrent == -1 && ax ){ assert(subList.size() <= 1); std::string sub; if (subList.size()>0) sub = subList[0]; addAxisToCombo(ax, sub, getRefStr(ax, subList)); indexOfCurrent = axesInList.size()-1; } //highlight current. if (indexOfCurrent != -1) ui->axis->setCurrentIndex(indexOfCurrent); blockUpdate = oldVal_blockUpdate; }