Back to index

salome-geom  6.5.0
GEOMAlgo_ShapeInfo.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // This library is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU Lesser General Public
00005 // License as published by the Free Software Foundation; either
00006 // version 2.1 of the License.
00007 //
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // Lesser General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU Lesser General Public
00014 // License along with this library; if not, write to the Free Software
00015 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00016 //
00017 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00018 //
00019 
00020 #include <GEOMAlgo_ShapeInfo.hxx>
00021 
00022 
00023 static
00024   Standard_Integer TypeToInteger(const TopAbs_ShapeEnum aType);
00025 static
00026   void DumpKindOfShape(const GEOMAlgo_KindOfShape aKS);
00027 static
00028   void DumpKindOfClosed(const GEOMAlgo_KindOfClosed aKC);
00029 static
00030   void DumpKindOfBounds(const GEOMAlgo_KindOfBounds aKB);
00031 static
00032   void DumpKindOfName(const GEOMAlgo_KindOfName aKS);
00033 static
00034   void DumpPosition(const gp_Ax3& aAx3);
00035 static
00036   void DumpLocation(const gp_Pnt& aP);
00037 static
00038   void DumpDirection(const gp_Dir& aD);
00039 //=======================================================================
00040 //function :
00041 //purpose  :
00042 //=======================================================================
00043   GEOMAlgo_ShapeInfo::GEOMAlgo_ShapeInfo()
00044 {
00045   Reset();
00046 }
00047 //=======================================================================
00048 //function : ~
00049 //purpose  :
00050 //=======================================================================
00051   GEOMAlgo_ShapeInfo::~GEOMAlgo_ShapeInfo()
00052 {
00053 }
00054 //=======================================================================
00055 //function : Reset
00056 //purpose  :
00057 //=======================================================================
00058   void GEOMAlgo_ShapeInfo::Reset()
00059 {
00060   Standard_Integer i;
00061   //
00062   myType=TopAbs_SHAPE;
00063   //
00064   myNbTypes=9;
00065   for (i=0; i<myNbTypes; ++i) {
00066     myNbSubShapes[i]=0;
00067   }
00068   //
00069   myKindOfShape=GEOMAlgo_KS_UNKNOWN;
00070   myKindOfBounds=GEOMAlgo_KB_UNKNOWN;
00071   myKindOfClosed=GEOMAlgo_KC_UNKNOWN;
00072   myKindOfName=GEOMAlgo_KN_UNKNOWN;
00073   //
00074   myLocation.SetCoord(99., 99., 99.);
00075   myDirection.SetCoord(1.,0.,0.);
00076   //
00077   myRadius1=-1.;
00078   myRadius2=-2.;
00079   myLength=-3.;
00080   myWidth=-3.;
00081   myHeight=-3.;
00082 }
00083 //=======================================================================
00084 //function : SetType
00085 //purpose  :
00086 //=======================================================================
00087   void GEOMAlgo_ShapeInfo::SetType(const TopAbs_ShapeEnum aType)
00088 {
00089   myType=aType;
00090 }
00091 //=======================================================================
00092 //function : Type
00093 //purpose  :
00094 //=======================================================================
00095   TopAbs_ShapeEnum GEOMAlgo_ShapeInfo::Type() const
00096 {
00097   return myType;
00098 }
00099 //=======================================================================
00100 //function : SetNbSubShapes
00101 //purpose  :
00102 //=======================================================================
00103   void GEOMAlgo_ShapeInfo::SetNbSubShapes(const TopAbs_ShapeEnum aType,
00104                                           const Standard_Integer aNb)
00105 {
00106   Standard_Integer iN;
00107 
00108   iN=TypeToInteger(aType);
00109   if (iN>=0 && iN<myNbTypes) {
00110     myNbSubShapes[iN]=aNb;
00111   }
00112 }
00113 //=======================================================================
00114 //function : NbSubShapes
00115 //purpose  :
00116 //=======================================================================
00117   Standard_Integer GEOMAlgo_ShapeInfo::NbSubShapes(const TopAbs_ShapeEnum aType) const
00118 {
00119   Standard_Integer iN;
00120 
00121   iN=TypeToInteger(aType);
00122   if (iN>=0 && iN<myNbTypes) {
00123     return myNbSubShapes[iN];
00124   }
00125   return 0;
00126 }
00127 //=======================================================================
00128 //function : SetKindOfShape
00129 //purpose  :
00130 //=======================================================================
00131   void GEOMAlgo_ShapeInfo::SetKindOfShape(const GEOMAlgo_KindOfShape aT)
00132 {
00133   myKindOfShape=aT;
00134 }
00135 //=======================================================================
00136 //function : KindOfShape
00137 //purpose  :
00138 //=======================================================================
00139   GEOMAlgo_KindOfShape GEOMAlgo_ShapeInfo::KindOfShape() const
00140 {
00141   return myKindOfShape;
00142 }
00143 //=======================================================================
00144 //function : SetKindOfName
00145 //purpose  :
00146 //=======================================================================
00147   void GEOMAlgo_ShapeInfo::SetKindOfName(const GEOMAlgo_KindOfName aT)
00148 {
00149   myKindOfName=aT;
00150 }
00151 //=======================================================================
00152 //function : KindOfName
00153 //purpose  :
00154 //=======================================================================
00155   GEOMAlgo_KindOfName GEOMAlgo_ShapeInfo::KindOfName() const
00156 {
00157   return myKindOfName;
00158 }
00159 //=======================================================================
00160 //function : SetKindOfBounds
00161 //purpose  :
00162 //=======================================================================
00163   void GEOMAlgo_ShapeInfo::SetKindOfBounds(const GEOMAlgo_KindOfBounds aT)
00164 {
00165   myKindOfBounds=aT;
00166 }
00167 //=======================================================================
00168 //function : KindOfBounds
00169 //purpose  :
00170 //=======================================================================
00171   GEOMAlgo_KindOfBounds GEOMAlgo_ShapeInfo::KindOfBounds() const
00172 {
00173   return myKindOfBounds;
00174 }
00175 //=======================================================================
00176 //function : SetKindOfClosed
00177 //purpose  :
00178 //=======================================================================
00179   void GEOMAlgo_ShapeInfo::SetKindOfClosed(const GEOMAlgo_KindOfClosed aT)
00180 {
00181   myKindOfClosed=aT;
00182 }
00183 //=======================================================================
00184 //function : KindOfClosed
00185 //purpose  :
00186 //=======================================================================
00187   GEOMAlgo_KindOfClosed GEOMAlgo_ShapeInfo::KindOfClosed() const
00188 {
00189   return myKindOfClosed;
00190 }
00191 //=======================================================================
00192 //function : SetLocation
00193 //purpose  :
00194 //=======================================================================
00195   void GEOMAlgo_ShapeInfo::SetLocation(const gp_Pnt& aP)
00196 {
00197   myLocation=aP;
00198 }
00199 //=======================================================================
00200 //function : Location
00201 //purpose  :
00202 //=======================================================================
00203   const gp_Pnt& GEOMAlgo_ShapeInfo::Location() const
00204 {
00205   return myLocation;
00206 }
00207 //=======================================================================
00208 //function : SetDirection
00209 //purpose  :
00210 //=======================================================================
00211   void GEOMAlgo_ShapeInfo::SetDirection(const gp_Dir& aD)
00212 {
00213   myDirection=aD;
00214 }
00215 //=======================================================================
00216 //function : Direction
00217 //purpose  :
00218 //=======================================================================
00219   const gp_Dir& GEOMAlgo_ShapeInfo::Direction() const
00220 {
00221   return myDirection;
00222 }
00223 //=======================================================================
00224 //function : SetPosition
00225 //purpose  :
00226 //=======================================================================
00227   void GEOMAlgo_ShapeInfo::SetPosition(const gp_Ax2& aAx2)
00228 {
00229   gp_Ax3 aAx3(aAx2);
00230   SetPosition(aAx3);
00231 }
00232 //=======================================================================
00233 //function : SetPosition
00234 //purpose  :
00235 //=======================================================================
00236   void GEOMAlgo_ShapeInfo::SetPosition(const gp_Ax3& aAx3)
00237 {
00238   myPosition=aAx3;
00239 }
00240 //=======================================================================
00241 //function : Position
00242 //purpose  :
00243 //=======================================================================
00244   const gp_Ax3& GEOMAlgo_ShapeInfo::Position() const
00245 {
00246   return myPosition;
00247 }
00248 
00249 //=======================================================================
00250 //function : SetPnt1
00251 //purpose  :
00252 //=======================================================================
00253   void GEOMAlgo_ShapeInfo::SetPnt1(const gp_Pnt& aP)
00254 {
00255   myPnt1=aP;
00256 }
00257 //=======================================================================
00258 //function : Pnt1
00259 //purpose  :
00260 //=======================================================================
00261   const gp_Pnt& GEOMAlgo_ShapeInfo::Pnt1() const
00262 {
00263   return myPnt1;
00264 }
00265 //=======================================================================
00266 //function : SetPnt2
00267 //purpose  :
00268 //=======================================================================
00269   void GEOMAlgo_ShapeInfo::SetPnt2(const gp_Pnt& aP)
00270 {
00271   myPnt2=aP;
00272 }
00273 //=======================================================================
00274 //function : Pnt2
00275 //purpose  :
00276 //=======================================================================
00277   const gp_Pnt& GEOMAlgo_ShapeInfo::Pnt2() const
00278 {
00279   return myPnt2;
00280 }
00281 //=======================================================================
00282 //function : SetRadius1
00283 //purpose  :
00284 //=======================================================================
00285   void GEOMAlgo_ShapeInfo::SetRadius1(const Standard_Real aR)
00286 {
00287   myRadius1=aR;
00288 }
00289 //=======================================================================
00290 //function : Radius1
00291 //purpose  :
00292 //=======================================================================
00293   Standard_Real GEOMAlgo_ShapeInfo::Radius1() const
00294 {
00295   return myRadius1;
00296 }
00297 //=======================================================================
00298 //function : SetRadius2
00299 //purpose  :
00300 //=======================================================================
00301   void GEOMAlgo_ShapeInfo::SetRadius2(const Standard_Real aR)
00302 {
00303   myRadius2=aR;
00304 }
00305 //=======================================================================
00306 //function : Radius2
00307 //purpose  :
00308 //=======================================================================
00309   Standard_Real GEOMAlgo_ShapeInfo::Radius2() const
00310 {
00311   return myRadius2;
00312 }
00313 //=======================================================================
00314 //function : SetLength
00315 //purpose  :
00316 //=======================================================================
00317   void GEOMAlgo_ShapeInfo::SetLength(const Standard_Real aL)
00318 {
00319   myLength=aL;
00320 }
00321 //=======================================================================
00322 //function : Length
00323 //purpose  :
00324 //=======================================================================
00325   Standard_Real GEOMAlgo_ShapeInfo::Length() const
00326 {
00327   return myLength;
00328 }
00329 //=======================================================================
00330 //function : SetWidth
00331 //purpose  :
00332 //=======================================================================
00333   void GEOMAlgo_ShapeInfo::SetWidth(const Standard_Real aW)
00334 {
00335   myWidth=aW;
00336 }
00337 //=======================================================================
00338 //function : Width
00339 //purpose  :
00340 //=======================================================================
00341   Standard_Real GEOMAlgo_ShapeInfo::Width() const
00342 {
00343   return myWidth;
00344 }
00345 //=======================================================================
00346 //function : SetHeight
00347 //purpose  :
00348 //=======================================================================
00349   void GEOMAlgo_ShapeInfo::SetHeight(const Standard_Real aH)
00350 {
00351   myHeight=aH;
00352 }
00353 //=======================================================================
00354 //function : Height
00355 //purpose  :
00356 //=======================================================================
00357   Standard_Real GEOMAlgo_ShapeInfo::Height() const
00358 {
00359   return myHeight;
00360 }
00361 //=======================================================================
00362 //function : TypeToInteger
00363 //purpose  :
00364 //=======================================================================
00365 Standard_Integer TypeToInteger(const TopAbs_ShapeEnum aType)
00366 {
00367   Standard_Integer iN;
00368   //
00369   iN=(Standard_Integer)aType;
00370   return iN;
00371 }
00372 //=======================================================================
00373 //function : Dump
00374 //purpose  :
00375 //=======================================================================
00376   void GEOMAlgo_ShapeInfo::Dump()const
00377 {
00378   switch (myType) {
00379     //
00380   case TopAbs_VERTEX:
00381     DumpVertex();
00382     break;
00383     //
00384   case TopAbs_EDGE:
00385     DumpEdge();
00386     break;
00387     //
00388   case TopAbs_WIRE:
00389     DumpWire();
00390     break;
00391     //
00392   case TopAbs_FACE:
00393     DumpFace();
00394     break;
00395     //
00396   case TopAbs_SHELL:
00397     DumpShell();
00398     break;
00399     //
00400   case TopAbs_SOLID:
00401     DumpSolid();
00402     break;
00403     //
00404   case TopAbs_COMPSOLID:
00405     DumpCompSolid();
00406     break;
00407     //
00408   case TopAbs_COMPOUND:
00409     DumpCompound();
00410     break;
00411     //
00412   default:
00413     printf(" * not implememted yet\n");
00414     break;
00415   }
00416 }
00417 //=======================================================================
00418 //function : DumpCompound
00419 //purpose  :
00420 //=======================================================================
00421   void GEOMAlgo_ShapeInfo::DumpCompound()const
00422 {
00423   Standard_Integer aNbV, aNbE, aNbF, aNbS, aNbC, aNbP;
00424   GEOMAlgo_KindOfShape aKS;
00425   GEOMAlgo_KindOfName aKN;
00426   GEOMAlgo_KindOfBounds aKB;
00427   GEOMAlgo_KindOfClosed aKC;
00428   //
00429   aNbV=NbSubShapes(TopAbs_VERTEX);
00430   aNbE=NbSubShapes(TopAbs_EDGE);
00431   aNbF=NbSubShapes(TopAbs_FACE);
00432   aNbS=NbSubShapes(TopAbs_SOLID);
00433   aNbC=NbSubShapes(TopAbs_COMPSOLID);
00434   aNbP=NbSubShapes(TopAbs_COMPOUND);
00435   aKS=KindOfShape();
00436   aKN=KindOfName();
00437   aKB=KindOfBounds();
00438   aKC=KindOfClosed();
00439   //
00440   printf(" *COMPOUND\n");
00441   printf("  number of vertices    : %d\n", aNbV);
00442   printf("  number of edges       : %d\n", aNbE);
00443   printf("  number of faces       : %d\n", aNbF);
00444   printf("  number of solids      : %d\n", aNbS);
00445   printf("  number of compsolids  : %d\n", aNbC);
00446   printf("  number of compounds   : %d\n", aNbP);
00447   DumpKindOfShape (aKS);
00448   DumpKindOfName (aKN);
00449   DumpKindOfBounds(aKB);
00450   DumpKindOfClosed(aKC);
00451 }
00452 //=======================================================================
00453 //function : DumpCompSolid
00454 //purpose  :
00455 //=======================================================================
00456   void GEOMAlgo_ShapeInfo::DumpCompSolid()const
00457 {
00458   Standard_Integer aNbV, aNbE, aNbF, aNbS;
00459   GEOMAlgo_KindOfShape aKS;
00460   GEOMAlgo_KindOfName aKN;
00461   GEOMAlgo_KindOfBounds aKB;
00462   GEOMAlgo_KindOfClosed aKC;
00463   //
00464   aNbV=NbSubShapes(TopAbs_VERTEX);
00465   aNbE=NbSubShapes(TopAbs_EDGE);
00466   aNbF=NbSubShapes(TopAbs_FACE);
00467   aNbS=NbSubShapes(TopAbs_SOLID);
00468   aKS=KindOfShape();
00469   aKN=KindOfName();
00470   aKB=KindOfBounds();
00471   aKC=KindOfClosed();
00472   //
00473   printf(" *COMPSOLID\n");
00474   printf("  number of vertices: %d\n", aNbV);
00475   printf("  number of edges   : %d\n", aNbE);
00476   printf("  number of faces   : %d\n", aNbF);
00477   printf("  number of solids  : %d\n", aNbS);
00478   DumpKindOfShape (aKS);
00479   DumpKindOfName (aKN);
00480   DumpKindOfBounds(aKB);
00481   DumpKindOfClosed(aKC);
00482 }
00483 
00484 //=======================================================================
00485 //function : DumpSolid
00486 //purpose  :
00487 //=======================================================================
00488   void GEOMAlgo_ShapeInfo::DumpSolid()const
00489 {
00490   Standard_Integer aNbV, aNbE, aNbF;
00491   GEOMAlgo_KindOfShape aKS;
00492   GEOMAlgo_KindOfName aKN;
00493   GEOMAlgo_KindOfBounds aKB;
00494   GEOMAlgo_KindOfClosed aKC;
00495   //
00496   aNbV=NbSubShapes(TopAbs_VERTEX);
00497   aNbE=NbSubShapes(TopAbs_EDGE);
00498   aNbF=NbSubShapes(TopAbs_FACE);
00499   aKS=KindOfShape();
00500   aKN=KindOfName();
00501   aKB=KindOfBounds();
00502   aKC=KindOfClosed();
00503   //
00504   printf(" *SOLID\n");
00505   printf("  number of vertices: %d\n", aNbV);
00506   printf("  number of edges   : %d\n", aNbE);
00507   printf("  number of faces   : %d\n", aNbF);
00508   DumpKindOfShape (aKS);
00509   DumpKindOfName (aKN);
00510   DumpKindOfBounds(aKB);
00511   DumpKindOfClosed(aKC);
00512   //
00513   if (aKN==GEOMAlgo_KN_SPHERE) {
00514     DumpLocation (myLocation);
00515     DumpPosition (myPosition);
00516     printf("  Radius1   : %.3lf\n", myRadius1);
00517   }
00518   if (aKN==GEOMAlgo_KN_CYLINDER) {
00519     DumpLocation (myLocation);
00520     DumpPosition (myPosition);
00521     printf("  Radius1   : %.3lf\n", myRadius1);
00522     printf("  Height    : %.3lf\n", myHeight);
00523   }
00524   else if (aKN==GEOMAlgo_KN_CONE) {
00525     DumpLocation (myLocation);
00526     DumpPosition (myPosition);
00527     printf("  Radius1   : %.3lf\n", myRadius1);
00528     printf("  Radius2   : %.3lf\n", myRadius2);
00529     printf("  Height    : %.3lf\n", myHeight);
00530   }
00531   else if (aKN==GEOMAlgo_KN_TORUS) {
00532     DumpLocation (myLocation);
00533     DumpPosition (myPosition);
00534     printf("  Radius1   : %.3lf\n", myRadius1);
00535     printf("  Radius2   : %.3lf\n", myRadius2);
00536   }
00537   else if (aKN==GEOMAlgo_KN_POLYHEDRON) {
00538     DumpLocation (myLocation);
00539     DumpPosition (myPosition);
00540   }
00541   else if (aKN==GEOMAlgo_KN_BOX) {
00542     DumpLocation (myLocation);
00543     DumpPosition (myPosition);
00544     printf("  Length    : %.3lf\n", myLength);
00545     printf("  Width     : %.3lf\n", myWidth);
00546     printf("  Height    : %.3lf\n", myHeight);
00547   }
00548 }
00549 
00550 //=======================================================================
00551 //function : DumpFace
00552 //purpose  :
00553 //=======================================================================
00554   void GEOMAlgo_ShapeInfo::DumpFace()const
00555 {
00556   Standard_Integer aNbV, aNbE;
00557   GEOMAlgo_KindOfShape aKS;
00558   GEOMAlgo_KindOfName aKN;
00559   GEOMAlgo_KindOfBounds aKB;
00560   GEOMAlgo_KindOfClosed aKC;
00561   //
00562   aNbV=NbSubShapes(TopAbs_VERTEX);
00563   aNbE=NbSubShapes(TopAbs_EDGE);
00564   aKS=KindOfShape();
00565   aKN=KindOfName();
00566   aKB=KindOfBounds();
00567   aKC=KindOfClosed();
00568   //
00569   printf(" *FACE\n");
00570   printf("  number of vertices: %d\n", aNbV);
00571   printf("  number of edges   : %d\n", aNbE);
00572   DumpKindOfShape (aKS);
00573   DumpKindOfName (aKN);
00574   DumpKindOfBounds(aKB);
00575   DumpKindOfClosed(aKC);
00576   //
00577   // PLANE
00578   if (aKN==GEOMAlgo_KN_PLANE) {
00579     DumpLocation (myLocation);
00580     DumpPosition (myPosition);
00581   }
00582   else if (aKN==GEOMAlgo_KN_DISKCIRCLE) {
00583     DumpLocation (myLocation);
00584     DumpPosition (myPosition);
00585     printf("  Radius1   : %.3lf\n", myRadius1);
00586   }
00587   else if (aKN==GEOMAlgo_KN_DISKELLIPSE) {
00588     DumpLocation (myLocation);
00589     DumpPosition (myPosition);
00590     printf("  Radius1   : %.3lf\n", myRadius1);
00591     printf("  Radius2   : %.3lf\n", myRadius2);
00592   }
00593   else if (aKN==GEOMAlgo_KN_RECTANGLE) {
00594     DumpLocation (myLocation);
00595     DumpPosition (myPosition);
00596     printf("  Length    : %.3lf\n", myLength);
00597     printf("  Width     : %.3lf\n", myWidth);
00598   }
00599   else if (aKN==GEOMAlgo_KN_TRIANGLE ||
00600            aKN==GEOMAlgo_KN_QUADRANGLE||
00601            aKN==GEOMAlgo_KN_POLYGON) {
00602     DumpLocation (myLocation);
00603     DumpPosition (myPosition);
00604   }
00605   //
00606   // SPHERE
00607   else if (aKN==GEOMAlgo_KN_SPHERE) {
00608     DumpLocation (myLocation);
00609     DumpPosition (myPosition);
00610     printf("  Radius1   : %.3lf", myRadius1);
00611   }
00612   //
00613   // CYLINDER
00614   else if (aKN==GEOMAlgo_KN_CYLINDER) {
00615     DumpLocation (myLocation);
00616     DumpPosition (myPosition);
00617     printf("  Radius1   : %.3lf\n", myRadius1);
00618     printf("  Height    : %.3lf\n", myHeight);
00619   }
00620   //
00621   // CONE
00622   else if (aKN==GEOMAlgo_KN_CONE) {
00623     DumpLocation (myLocation);
00624     DumpPosition (myPosition);
00625     printf("  Radius1   : %.3lf\n", myRadius1);
00626     printf("  Radius2   : %.3lf\n", myRadius2);
00627     printf("  Height    : %.3lf\n", myHeight);
00628   }
00629   //
00630   // TORUS
00631   else if (aKN==GEOMAlgo_KN_TORUS) {
00632     DumpLocation (myLocation);
00633     DumpPosition (myPosition);
00634     printf("  Radius1   : %.3lf\n", myRadius1);
00635     printf("  Radius2   : %.3lf\n", myRadius2);
00636   }
00637 
00638 
00639   printf("\n");
00640 }
00641 //=======================================================================
00642 //function : DumpShell
00643 //purpose  :
00644 //=======================================================================
00645   void GEOMAlgo_ShapeInfo::DumpShell()const
00646 {
00647   Standard_Integer aNbV, aNbE, aNbF;
00648   GEOMAlgo_KindOfClosed aKC;
00649   //
00650   printf(" *SHELL\n");
00651   //
00652   aNbV=NbSubShapes(TopAbs_VERTEX);
00653   aNbE=NbSubShapes(TopAbs_EDGE);
00654   aNbF=NbSubShapes(TopAbs_FACE);
00655   printf("  number of vertices: %d\n", aNbV);
00656   printf("  number of edges   : %d\n", aNbE);
00657   printf("  number of faces   : %d\n", aNbF);
00658   aKC=KindOfClosed();
00659   DumpKindOfClosed(aKC);
00660   printf("\n");
00661 }
00662 //=======================================================================
00663 //function : DumpWire
00664 //purpose  :
00665 //=======================================================================
00666   void GEOMAlgo_ShapeInfo::DumpWire()const
00667 {
00668   Standard_Integer aNbV, aNbE;
00669   GEOMAlgo_KindOfClosed aKC;
00670   //
00671   printf(" *WIRE\n");
00672   //
00673   aNbV=NbSubShapes(TopAbs_VERTEX);
00674   aNbE=NbSubShapes(TopAbs_EDGE);
00675   printf("  number of vertices: %d\n", aNbV);
00676   printf("  number of edges   : %d\n", aNbE);
00677 
00678   aKC=KindOfClosed();
00679   DumpKindOfClosed(aKC);
00680   printf("\n");
00681 }
00682 //=======================================================================
00683 //function : DumpEdge
00684 //purpose  :
00685 //=======================================================================
00686   void GEOMAlgo_ShapeInfo::DumpEdge()const
00687 {
00688   Standard_Integer aNbV;
00689   Standard_Real aX, aY, aZ;
00690   GEOMAlgo_KindOfShape aKS;
00691   GEOMAlgo_KindOfName aKN;
00692   GEOMAlgo_KindOfBounds aKB;
00693   GEOMAlgo_KindOfClosed aKC;
00694   //
00695   aNbV=NbSubShapes(TopAbs_VERTEX);
00696   aKS=KindOfShape();
00697   aKN=KindOfName();
00698   aKB=KindOfBounds();
00699   aKC=KindOfClosed();
00700   //
00701   printf(" *EDGE\n");
00702   printf("  number of vertices: %d\n", aNbV);
00703   DumpKindOfShape (aKS);
00704   DumpKindOfName (aKN);
00705   DumpKindOfBounds(aKB);
00706   DumpKindOfClosed(aKC);
00707   //
00708   // LINE
00709   if (aKN==GEOMAlgo_KN_LINE) {
00710     DumpLocation (myLocation);
00711     DumpDirection(myDirection);
00712   }
00713   else if (aKN==GEOMAlgo_KN_SEGMENT) {
00714     DumpLocation (myLocation);
00715     DumpDirection(myDirection);
00716     printf("  Length    : %.3lf\n", myLength);
00717     myPnt1.Coord(aX, aY, aZ);
00718     printf("  Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
00719     myPnt2.Coord(aX, aY, aZ);
00720     printf("  Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
00721 
00722   }
00723   else if (aKN==GEOMAlgo_KN_CIRCLE) {
00724     DumpLocation (myLocation);
00725     DumpPosition (myPosition);
00726     printf("  Radius1   : %.3lf\n", myRadius1);
00727   }
00728   else if (aKN==GEOMAlgo_KN_ARCCIRCLE) {
00729     DumpLocation (myLocation);
00730     DumpPosition (myPosition);
00731     printf("  Radius1   : %.3lf\n", myRadius1);
00732     myPnt1.Coord(aX, aY, aZ);
00733     printf("  Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
00734     myPnt2.Coord(aX, aY, aZ);
00735     printf("  Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
00736   }
00737   else if (aKN==GEOMAlgo_KN_ELLIPSE) {
00738     DumpLocation (myLocation);
00739     DumpPosition (myPosition);
00740     printf("  Radius1   : %.3lf\n", myRadius1);
00741     printf("  Radius2   : %.3lf\n", myRadius2);
00742   }
00743   else if (aKN==GEOMAlgo_KN_ARCELLIPSE) {
00744     DumpLocation (myLocation);
00745     DumpPosition (myPosition);
00746     printf("  Radius1   : %.3lf\n", myRadius1);
00747     printf("  Radius2   : %.3lf\n", myRadius2);
00748     myPnt1.Coord(aX, aY, aZ);
00749     printf("  Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
00750     myPnt2.Coord(aX, aY, aZ);
00751     printf("  Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
00752   }
00753   printf("\n");
00754 }
00755 //=======================================================================
00756 //function : DumpVertex
00757 //purpose  :
00758 //=======================================================================
00759   void GEOMAlgo_ShapeInfo::DumpVertex()const
00760 {
00761   printf(" *VERTEX\n");
00762   DumpLocation(myLocation);
00763 }
00764 //=======================================================================
00765 //function : DumpLocation
00766 //purpose  :
00767 //=======================================================================
00768   void DumpLocation(const gp_Pnt& aP)
00769 {
00770   Standard_Real aX, aY, aZ;
00771   //
00772   aP.Coord(aX, aY, aZ);
00773   printf("  Location : %.3lf %.3lf %.3lf \n", aX, aY, aZ);
00774 }
00775 //=======================================================================
00776 //function : DumpDirection
00777 //purpose  :
00778 //=======================================================================
00779   void DumpDirection(const gp_Dir& aD)
00780 {
00781   Standard_Real aX, aY, aZ;
00782   //
00783   aD.Coord(aX, aY, aZ);
00784   printf("  Direction: %.3lf %.3lf %.3lf \n", aX, aY, aZ);
00785 }
00786 //=======================================================================
00787 //function : DumpPosition
00788 //purpose  :
00789 //=======================================================================
00790 void DumpPosition(const gp_Ax3& aAx3)
00791 {
00792   const gp_Dir& aDZ=aAx3.Axis().Direction();
00793   const gp_Dir& aDX=aAx3.XDirection();
00794   const gp_Dir& aDY=aAx3.YDirection();
00795   printf("  Position:\n");
00796   printf("  Axis: %.3lf %.3lf %.3lf \n", aDZ.X(), aDZ.Y(), aDZ.Z());
00797   printf("  X   : %.3lf %.3lf %.3lf \n", aDX.X(), aDX.Y(), aDX.Z());
00798   printf("  Y   : %.3lf %.3lf %.3lf \n", aDY.X(), aDY.Y(), aDY.Z());
00799 }
00800 //=======================================================================
00801 //function : DumpKindOfBounds
00802 //purpose  :
00803 //=======================================================================
00804 void DumpKindOfBounds(const GEOMAlgo_KindOfBounds aKB)
00805 {
00806   const char *pStr[]={
00807     "KB_UNKNOWN",
00808     "KB_TRIMMED",
00809     "KB_INFINITE"
00810   };
00811   int i;
00812   //
00813   i=(Standard_Integer)aKB;
00814   printf(" KindOfBounds: %s\n", pStr[i]);
00815 
00816 }
00817 //=======================================================================
00818 //function : DumpKindOfClosed
00819 //purpose  :
00820 //=======================================================================
00821 void DumpKindOfClosed(const GEOMAlgo_KindOfClosed aKC)
00822 {
00823   const char *pStr[]={
00824     "KC_UNKNOWN",
00825     "KC_CLOSED",
00826     "KC_NOTCLOSED"
00827   };
00828   int i;
00829   //
00830   i=(Standard_Integer)aKC;
00831   printf(" KindOfClosed: %s\n", pStr[i]);
00832 
00833 }
00834 //=======================================================================
00835 //function : DumpKindOfShape
00836 //purpose  :
00837 //=======================================================================
00838 void DumpKindOfShape(const GEOMAlgo_KindOfShape aKS)
00839 {
00840   const char *pStr[]={
00841     "KS_UNKNOWN",
00842     "KS_SPHERE",
00843     "KS_CYLINDER",
00844     "KS_BOX",
00845     "KS_TORUS",
00846     "KS_CONE",
00847     "KS_ELLIPSE",
00848     "KS_PLANE",
00849     "KS_CIRCLE",
00850     "KS_LINE",
00851     "KS_DEGENERATED"
00852     };
00853   int i;
00854   //
00855   i=(Standard_Integer)aKS;
00856   printf(" KindOfShape : %s\n", pStr[i]);
00857 }
00858 //=======================================================================
00859 //function : DumpKindOfName
00860 //purpose  :
00861 //=======================================================================
00862 void DumpKindOfName(const GEOMAlgo_KindOfName aKS)
00863 {
00864   const char *pStr[]={
00865     "KN_UNKNOWN",
00866     "KN_SPHERE",
00867     "KN_CYLINDER",
00868     "KN_TORUS",
00869     "KN_CONE",
00870     "KN_ELLIPSE",
00871     "KN_CIRCLE",
00872     "KN_PLANE",
00873     "KN_LINE",
00874     "KN_BOX",
00875     "KN_SEGMENT",
00876     "KN_ARCCIRCLE",
00877     "KN_POLYGON",
00878     "KN_POLYHEDRON",
00879     "KN_DISKCIRCLE",
00880     "KN_DISKELLIPSE",
00881     "KN_RECTANGLE",
00882     "KN_TRIANGLE",
00883     "KN_QUADRANGLE",
00884     "KN_ARCELLIPSE"
00885     };
00886   int i;
00887   //
00888   i=(Standard_Integer)aKS;
00889   printf(" KindOfName  : %s\n", pStr[i]);
00890 }