-// ============================================================================
-// Function: updateWorkplane
-// Class: SketchSolver_Group
-// Purpose: update parameters of workplane
-// ============================================================================
-bool SketchSolver_Group::updateWorkplane()
-{
- if (!myStorage) // Create storage if not exists
- myStorage = StoragePtr(new SketchSolver_Storage);
- SketchSolver_Builder* aBuilder = SketchSolver_Builder::getInstance();
-
- std::vector<Slvs_Entity> anEntities;
- std::vector<Slvs_Param> aParams;
- if (!aBuilder->createWorkplane(mySketch, anEntities, aParams))
- return false;
-
- if (myWorkplaneID == SLVS_E_UNKNOWN) {
- myWorkplaneID = anEntities.back().h;
- // Add new workplane elements
- std::vector<Slvs_Param>::iterator aParIter = aParams.begin();
- for (; aParIter != aParams.end(); aParIter++) {
- aParIter->h = SLVS_E_UNKNOWN; // the ID should be generated by storage
- aParIter->group = myID;
- aParIter->h = myStorage->addParameter(*aParIter);
- }
- std::vector<Slvs_Entity>::iterator anEntIter = anEntities.begin();
- for (; anEntIter != anEntities.end(); anEntIter++) {
- anEntIter->h = SLVS_E_UNKNOWN; // the ID should be generated by storage
- anEntIter->group = myID;
- anEntIter->wrkpl = myWorkplaneID;
- for (int i = 0; i < 4; i++)
- if (anEntIter->param[i] != SLVS_E_UNKNOWN)
- anEntIter->param[i] = aParams[anEntIter->param[i]-1].h;
- for (int i = 0; i < 4; i++)
- if (anEntIter->point[i] != SLVS_E_UNKNOWN)
- anEntIter->point[i] = anEntities[anEntIter->point[i]-1].h;
- anEntIter->h = myStorage->addEntity(*anEntIter);
- }
- } else {
- // Update existent workplane
- const Slvs_Entity& aWP = myStorage->getEntity(myWorkplaneID);
- const Slvs_Entity& anOrigin = myStorage->getEntity(aWP.point[0]);
- const Slvs_Entity& aNormal = myStorage->getEntity(aWP.normal);
- // Get parameters and update them
- Slvs_hParam aWPParams[7] = {
- anOrigin.param[0], anOrigin.param[1], anOrigin.param[2],
- aNormal.param[0], aNormal.param[1], aNormal.param[2], aNormal.param[3]
- };
- std::vector<Slvs_Param>::iterator aParIter = aParams.begin();
- for (int i = 0; aParIter != aParams.end(); aParIter++, i++) {
- Slvs_Param aParam = myStorage->getParameter(aWPParams[i]);
- aParam.val = aParIter->val;
- myStorage->updateParameter(aParam);
- }
- }
- return myWorkplaneID > 0;
-}
-