Salome HOME
Full/single angle
authornds <nds@opencascade.com>
Thu, 3 Mar 2016 15:27:44 +0000 (18:27 +0300)
committerazv <azv@opencascade.com>
Fri, 4 Mar 2016 09:14:21 +0000 (12:14 +0300)
src/SketchSolver/SketchSolver_ConstraintMulti.h
src/SketchSolver/SketchSolver_ConstraintMultiRotation.cpp
src/SketchSolver/SketchSolver_ConstraintMultiRotation.h
src/SketchSolver/SketchSolver_ConstraintMultiTranslation.cpp
src/SketchSolver/SketchSolver_ConstraintMultiTranslation.h

index a5aea85fa7042c27796410f77590616821117930..6254c1f0054ac043ce564b948f80c8f291d86290 100644 (file)
@@ -24,7 +24,8 @@ public:
       SketchSolver_Constraint(theConstraint),
       myNumberOfObjects(0),
       myNumberOfCopies(0),
-      myAdjusted(false)
+      myAdjusted(false),
+      myIsFullValue(false)
   {}
 
   /// \brief Update constraint
@@ -73,6 +74,7 @@ protected:
 protected:
   int myNumberOfObjects; ///< number of previous initial objects
   int myNumberOfCopies;  ///< number of previous copies of initial objects
+  bool myIsFullValue;    ///< value whether the angle/distance is a full or single for objects
 
   bool myAdjusted; ///< the constraint is already adjusted (to not do it several times)
 
index e2839f7b9468cf07b7daa7ec303e8cb6b0582738..bd53679d9ae635b2882bc62374c5703e5b936a76 100644 (file)
@@ -143,8 +143,12 @@ void SketchSolver_ConstraintMultiRotation::adjustConstraint()
   myCenterCoord[0] = aParams.front()->value();
   myCenterCoord[1] = aParams.back()->value();
 
-  myRotationVal[0] = sin(myAngle * PI / 180.0);
-  myRotationVal[1] = cos(myAngle * PI / 180.0);
+  double anAngleValue = myAngle;
+  if (myIsFullValue && myNumberOfCopies > 0)
+    anAngleValue /= myNumberOfCopies;
+
+  myRotationVal[0] = sin(anAngleValue * PI / 180.0);
+  myRotationVal[1] = cos(anAngleValue * PI / 180.0);
 
   SketchSolver_ConstraintMulti::adjustConstraint();
 }
index 69e792bcc47fa125313672abf71e685c5d299e3c..10087cc67b6b124ca5804b82fc2e668c303bd68f 100644 (file)
@@ -56,7 +56,6 @@ private:
 private:
   AttributePoint2DPtr myCenterPointAttribute; ///< a center of rotation
   double              myAngle;           ///< angle of rotation
-  bool                myIsFullValue;     ///< value whether the angle is a full or single for objects
 
   double myCenterCoord[2]; ///< coordinates of rotation center
   double myRotationVal[2]; ///< sinus and cosine of rotation angle
index dd740003a3654babe6ea50769994edfa856991f8..2bea9a21774d8e3765694ad8a32a3c1af603763c 100644 (file)
@@ -148,9 +148,15 @@ void SketchSolver_ConstraintMultiTranslation::adjustConstraint()
   EntityWrapperPtr aEnd = myStorage->entity(
       myBaseConstraint->attribute(SketchPlugin_MultiTranslation::END_POINT_ID()));
   std::list<ParameterWrapperPtr> aEndParams = aEnd->parameters();
+
   myDelta[0] = aEndParams.front()->value() - aStartParams.front()->value();
   myDelta[1] = aEndParams.back()->value() - aStartParams.back()->value();
 
+  if (myIsFullValue && myNumberOfCopies > 0) {
+    myDelta[0] /= myNumberOfCopies;
+    myDelta[1] /= myNumberOfCopies;
+  }
+
   SketchSolver_ConstraintMulti::adjustConstraint();
 }
 
index 59cb06f9342d0e00c4bad06151df5f28c30dfaf2..7c93d6d0e156c29df701e66d74ee16713bd26568 100644 (file)
@@ -56,7 +56,6 @@ private:
 private:
   AttributePoint2DPtr myStartPointAttribute;
   AttributePoint2DPtr myEndPointAttribute;
-  bool                myIsFullValue;
 
   double myDelta[2]; ///< increment of translation
 };