]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
NPAL15298: KindOfShape. A fix by PKV for location of some shapes (DISK_ELLIPSE, some...
authorjfa <jfa@opencascade.com>
Wed, 11 Apr 2007 08:58:17 +0000 (08:58 +0000)
committerjfa <jfa@opencascade.com>
Wed, 11 Apr 2007 08:58:17 +0000 (08:58 +0000)
src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller.cxx
src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx

index fc8fb08542ab4e7a1afe14754afa9b948c5a5bb2..0e53aa6e4240ff78f495c3daeea165415c63420c 100644 (file)
@@ -588,6 +588,11 @@ static
     else {
       aInfo.SetKindOfClosed(GEOMAlgo_KC_NOTCLOSED);
       aInfo.SetKindOfName(GEOMAlgo_KN_ARCCIRCLE);
+      //
+      gp_Vec aVecX(aP, aP1);
+      gp_Dir aDirX(aVecX); 
+      gp_Ax2 aAx2new(aP, aAx2.Direction(), aDirX);
+      aInfo.SetPosition(aAx2new);
     }
   }// else if (aCT==GeomAbs_Circle) {
   //
@@ -625,6 +630,11 @@ static
     else {
       aInfo.SetKindOfClosed(GEOMAlgo_KC_NOTCLOSED);
       aInfo.SetKindOfName(GEOMAlgo_KN_ARCELLIPSE);
+      //
+      gp_Vec aVecX(aP, aP1);
+      gp_Dir aDirX(aVecX); 
+      gp_Ax2 aAx2new(aP, aAx2.Direction(), aDirX);
+      aInfo.SetPosition(aAx2new);
     }
   }// else if (aCT==GeomAbs_Ellipse) {
   //
index be832c487f72577264accc88e05038897caf173a..891b9c772b682e590f15cc4fccc6f64f0abe3b05 100644 (file)
       aKN=GEOMAlgo_KN_DISKCIRCLE;
       aInfo.SetKindOfName(aKN);
       aInfo.SetRadius1(aInfoE.Radius1());
+      aInfo.SetLocation(aInfoE.Location());
+      aInfo.SetPosition(aInfoE.Position());
     }
     if (aKNE==GEOMAlgo_KN_ELLIPSE) {
       aKN=GEOMAlgo_KN_DISKELLIPSE;
       aInfo.SetKindOfName(aKN);
       aInfo.SetRadius1(aInfoE.Radius1());
       aInfo.SetRadius2(aInfoE.Radius2());
+      aInfo.SetLocation(aInfoE.Location());
+      aInfo.SetPosition(aInfoE.Position());
     }
   }
   //
     //
     if (aNbV==3 && aNbE==3) {
       aInfo.SetKindOfName(GEOMAlgo_KN_TRIANGLE);
+      //
+      aXYZc.SetCoord(0.,0.,0.);
+      TopExp::MapShapes(aF, TopAbs_VERTEX, aMV);
+      for (i=1; i<=aNbV; ++i) {
+       const TopoDS_Vertex& aV=TopoDS::Vertex(aMV(i));
+       aP=BRep_Tool::Pnt(aV);
+       const gp_XYZ& aXYZ=aP.XYZ();
+       aXYZc=aXYZc+aXYZ;
+       aPx[i-1]=aP;
+      }
+      aXYZc.Divide(3.);
+      //
+      aPc.SetXYZ(aXYZc);
+      gp_Vec aVX(aPc, aPx[0]);
+      aVX.Normalize();
+      aDX.SetXYZ(aVX.XYZ());
+      const gp_Dir& aDZ=aPln.Axis().Direction();
+      //
+      gp_Ax2 aAx2(aPc, aDZ, aDX);
+      gp_Ax3 aAx3(aAx2);
+      //
+      aInfo.SetLocation(aPc);
+      aInfo.SetPosition(aAx3);
+      //
       return;
     }
+    //
     if (!(aNbV==4 && aNbE==4)) {
       return;
     }
     aPC[1]=aPD;
     aR[1]=0.;
   }
-  gp_Vec aVz(aPC[0], aPC[1]);
-  gp_Vec aVx(aPC[0], aPX[0]);
-  gp_Dir aDz(aVz);
-  gp_Dir aDx(aVx);
-  gp_Ax2 aAx2(aPC[0], aDz, aDx);
-  gp_Ax3 aAx3(aAx2);
   //
   aHeight=aPC[0].Distance(aPC[1]);
   //
-  aInfo.SetLocation(aPC[0]);
+  Standard_Real aRmin, aRmax;
+  gp_Ax2 aAx2new;
+  //
+  if (aR[0]>aR[1]) {
+    aRmin=aR[1];
+    aRmax=aR[0];
+    aPc=aPC[0];
+    gp_Vec aVz(aPC[0], aPC[1]);
+    gp_Vec aVx(aPC[0], aPX[0]);
+    gp_Dir aDz(aVz);
+    gp_Dir aDx(aVx);
+    gp_Ax2 aAx2(aPc, aDz, aDx);
+    aAx2new=aAx2;
+  }
+  else {
+    aRmin=aR[0];
+    aRmax=aR[1];
+    aPc=aPC[1];
+    gp_Vec aVz(aPC[1], aPC[0]);
+    gp_Vec aVx(aPC[1], aPX[1]);
+    gp_Dir aDz(aVz);
+    gp_Dir aDx(aVx);
+    gp_Ax2 aAx2(aPc, aDz, aDx);
+    aAx2new=aAx2;
+  }
+  //
+  gp_Ax3 aAx3(aAx2new);
+  aInfo.SetLocation(aPc);
   aInfo.SetPosition(aAx3);
-  aInfo.SetRadius1(aR[0]);
-  aInfo.SetRadius2(aR[1]);
+  aInfo.SetRadius1(aRmax);
+  aInfo.SetRadius2(aRmin);
   aInfo.SetHeight(aHeight);
   //
   aInfo.SetKindOfName(GEOMAlgo_KN_CONE);
   }
   aHeight=aPC[0].Distance(aPC[1]);
   //
+  gp_Ax3 aAx3=aCyl.Position();
+  aAx3.SetLocation(aPc);
+  //
   aInfo.SetKindOfName(GEOMAlgo_KN_CYLINDER);
+  aInfo.SetPosition(aAx3);
   aInfo.SetLocation(aPc);
   aInfo.SetHeight(aHeight);
 }