// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com #include <GEOMAlgo_ShapeInfo.hxx> static Standard_Integer TypeToInteger(const TopAbs_ShapeEnum aType); static void DumpKindOfShape(const GEOMAlgo_KindOfShape aKS); static void DumpKindOfClosed(const GEOMAlgo_KindOfClosed aKC); static void DumpKindOfBounds(const GEOMAlgo_KindOfBounds aKB); static void DumpKindOfName(const GEOMAlgo_KindOfName aKS); static void DumpPosition(const gp_Ax3& aAx3); static void DumpLocation(const gp_Pnt& aP); static void DumpDirection(const gp_Dir& aD); //======================================================================= //function : //purpose : //======================================================================= GEOMAlgo_ShapeInfo::GEOMAlgo_ShapeInfo() { Reset(); } //======================================================================= //function : ~ //purpose : //======================================================================= GEOMAlgo_ShapeInfo::~GEOMAlgo_ShapeInfo() { } //======================================================================= //function : Reset //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::Reset() { Standard_Integer i; // myType=TopAbs_SHAPE; // myNbTypes=9; for (i=0; i<myNbTypes; ++i) { myNbSubShapes[i]=0; } // myKindOfShape=GEOMAlgo_KS_UNKNOWN; myKindOfBounds=GEOMAlgo_KB_UNKNOWN; myKindOfClosed=GEOMAlgo_KC_UNKNOWN; myKindOfName=GEOMAlgo_KN_UNKNOWN; // myLocation.SetCoord(99., 99., 99.); myDirection.SetCoord(1.,0.,0.); // myRadius1=-1.; myRadius2=-2.; myLength=-3.; myWidth=-3.; myHeight=-3.; } //======================================================================= //function : SetType //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetType(const TopAbs_ShapeEnum aType) { myType=aType; } //======================================================================= //function : Type //purpose : //======================================================================= TopAbs_ShapeEnum GEOMAlgo_ShapeInfo::Type() const { return myType; } //======================================================================= //function : SetNbSubShapes //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetNbSubShapes(const TopAbs_ShapeEnum aType, const Standard_Integer aNb) { Standard_Integer iN; iN=TypeToInteger(aType); if (iN>=0 && iN<myNbTypes) { myNbSubShapes[iN]=aNb; } } //======================================================================= //function : NbSubShapes //purpose : //======================================================================= Standard_Integer GEOMAlgo_ShapeInfo::NbSubShapes(const TopAbs_ShapeEnum aType) const { Standard_Integer iN; iN=TypeToInteger(aType); if (iN>=0 && iN<myNbTypes) { return myNbSubShapes[iN]; } return 0; } //======================================================================= //function : SetKindOfShape //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetKindOfShape(const GEOMAlgo_KindOfShape aT) { myKindOfShape=aT; } //======================================================================= //function : KindOfShape //purpose : //======================================================================= GEOMAlgo_KindOfShape GEOMAlgo_ShapeInfo::KindOfShape() const { return myKindOfShape; } //======================================================================= //function : SetKindOfName //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetKindOfName(const GEOMAlgo_KindOfName aT) { myKindOfName=aT; } //======================================================================= //function : KindOfName //purpose : //======================================================================= GEOMAlgo_KindOfName GEOMAlgo_ShapeInfo::KindOfName() const { return myKindOfName; } //======================================================================= //function : SetKindOfBounds //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetKindOfBounds(const GEOMAlgo_KindOfBounds aT) { myKindOfBounds=aT; } //======================================================================= //function : KindOfBounds //purpose : //======================================================================= GEOMAlgo_KindOfBounds GEOMAlgo_ShapeInfo::KindOfBounds() const { return myKindOfBounds; } //======================================================================= //function : SetKindOfClosed //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetKindOfClosed(const GEOMAlgo_KindOfClosed aT) { myKindOfClosed=aT; } //======================================================================= //function : KindOfClosed //purpose : //======================================================================= GEOMAlgo_KindOfClosed GEOMAlgo_ShapeInfo::KindOfClosed() const { return myKindOfClosed; } //======================================================================= //function : SetLocation //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetLocation(const gp_Pnt& aP) { myLocation=aP; } //======================================================================= //function : Location //purpose : //======================================================================= const gp_Pnt& GEOMAlgo_ShapeInfo::Location() const { return myLocation; } //======================================================================= //function : SetDirection //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetDirection(const gp_Dir& aD) { myDirection=aD; } //======================================================================= //function : Direction //purpose : //======================================================================= const gp_Dir& GEOMAlgo_ShapeInfo::Direction() const { return myDirection; } //======================================================================= //function : SetPosition //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetPosition(const gp_Ax2& aAx2) { gp_Ax3 aAx3(aAx2); SetPosition(aAx3); } //======================================================================= //function : SetPosition //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetPosition(const gp_Ax3& aAx3) { myPosition=aAx3; } //======================================================================= //function : Position //purpose : //======================================================================= const gp_Ax3& GEOMAlgo_ShapeInfo::Position() const { return myPosition; } //======================================================================= //function : SetPnt1 //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetPnt1(const gp_Pnt& aP) { myPnt1=aP; } //======================================================================= //function : Pnt1 //purpose : //======================================================================= const gp_Pnt& GEOMAlgo_ShapeInfo::Pnt1() const { return myPnt1; } //======================================================================= //function : SetPnt2 //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetPnt2(const gp_Pnt& aP) { myPnt2=aP; } //======================================================================= //function : Pnt2 //purpose : //======================================================================= const gp_Pnt& GEOMAlgo_ShapeInfo::Pnt2() const { return myPnt2; } //======================================================================= //function : SetRadius1 //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetRadius1(const Standard_Real aR) { myRadius1=aR; } //======================================================================= //function : Radius1 //purpose : //======================================================================= Standard_Real GEOMAlgo_ShapeInfo::Radius1() const { return myRadius1; } //======================================================================= //function : SetRadius2 //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetRadius2(const Standard_Real aR) { myRadius2=aR; } //======================================================================= //function : Radius2 //purpose : //======================================================================= Standard_Real GEOMAlgo_ShapeInfo::Radius2() const { return myRadius2; } //======================================================================= //function : SetLength //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetLength(const Standard_Real aL) { myLength=aL; } //======================================================================= //function : Length //purpose : //======================================================================= Standard_Real GEOMAlgo_ShapeInfo::Length() const { return myLength; } //======================================================================= //function : SetWidth //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetWidth(const Standard_Real aW) { myWidth=aW; } //======================================================================= //function : Width //purpose : //======================================================================= Standard_Real GEOMAlgo_ShapeInfo::Width() const { return myWidth; } //======================================================================= //function : SetHeight //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::SetHeight(const Standard_Real aH) { myHeight=aH; } //======================================================================= //function : Height //purpose : //======================================================================= Standard_Real GEOMAlgo_ShapeInfo::Height() const { return myHeight; } //======================================================================= //function : TypeToInteger //purpose : //======================================================================= Standard_Integer TypeToInteger(const TopAbs_ShapeEnum aType) { Standard_Integer iN; // iN=(Standard_Integer)aType; return iN; } //======================================================================= //function : Dump //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::Dump()const { switch (myType) { // case TopAbs_VERTEX: DumpVertex(); break; // case TopAbs_EDGE: DumpEdge(); break; // case TopAbs_WIRE: DumpWire(); break; // case TopAbs_FACE: DumpFace(); break; // case TopAbs_SHELL: DumpShell(); break; // case TopAbs_SOLID: DumpSolid(); break; // case TopAbs_COMPSOLID: DumpCompSolid(); break; // case TopAbs_COMPOUND: DumpCompound(); break; // default: printf(" * not implememted yet\n"); break; } } //======================================================================= //function : DumpCompound //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpCompound()const { Standard_Integer aNbV, aNbE, aNbF, aNbS, aNbC, aNbP; GEOMAlgo_KindOfShape aKS; GEOMAlgo_KindOfName aKN; GEOMAlgo_KindOfBounds aKB; GEOMAlgo_KindOfClosed aKC; // aNbV=NbSubShapes(TopAbs_VERTEX); aNbE=NbSubShapes(TopAbs_EDGE); aNbF=NbSubShapes(TopAbs_FACE); aNbS=NbSubShapes(TopAbs_SOLID); aNbC=NbSubShapes(TopAbs_COMPSOLID); aNbP=NbSubShapes(TopAbs_COMPOUND); aKS=KindOfShape(); aKN=KindOfName(); aKB=KindOfBounds(); aKC=KindOfClosed(); // printf(" *COMPOUND\n"); printf(" number of vertices : %d\n", aNbV); printf(" number of edges : %d\n", aNbE); printf(" number of faces : %d\n", aNbF); printf(" number of solids : %d\n", aNbS); printf(" number of compsolids : %d\n", aNbC); printf(" number of compounds : %d\n", aNbP); DumpKindOfShape (aKS); DumpKindOfName (aKN); DumpKindOfBounds(aKB); DumpKindOfClosed(aKC); } //======================================================================= //function : DumpCompSolid //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpCompSolid()const { Standard_Integer aNbV, aNbE, aNbF, aNbS; GEOMAlgo_KindOfShape aKS; GEOMAlgo_KindOfName aKN; GEOMAlgo_KindOfBounds aKB; GEOMAlgo_KindOfClosed aKC; // aNbV=NbSubShapes(TopAbs_VERTEX); aNbE=NbSubShapes(TopAbs_EDGE); aNbF=NbSubShapes(TopAbs_FACE); aNbS=NbSubShapes(TopAbs_SOLID); aKS=KindOfShape(); aKN=KindOfName(); aKB=KindOfBounds(); aKC=KindOfClosed(); // printf(" *COMPSOLID\n"); printf(" number of vertices: %d\n", aNbV); printf(" number of edges : %d\n", aNbE); printf(" number of faces : %d\n", aNbF); printf(" number of solids : %d\n", aNbS); DumpKindOfShape (aKS); DumpKindOfName (aKN); DumpKindOfBounds(aKB); DumpKindOfClosed(aKC); } //======================================================================= //function : DumpSolid //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpSolid()const { Standard_Integer aNbV, aNbE, aNbF; GEOMAlgo_KindOfShape aKS; GEOMAlgo_KindOfName aKN; GEOMAlgo_KindOfBounds aKB; GEOMAlgo_KindOfClosed aKC; // aNbV=NbSubShapes(TopAbs_VERTEX); aNbE=NbSubShapes(TopAbs_EDGE); aNbF=NbSubShapes(TopAbs_FACE); aKS=KindOfShape(); aKN=KindOfName(); aKB=KindOfBounds(); aKC=KindOfClosed(); // printf(" *SOLID\n"); printf(" number of vertices: %d\n", aNbV); printf(" number of edges : %d\n", aNbE); printf(" number of faces : %d\n", aNbF); DumpKindOfShape (aKS); DumpKindOfName (aKN); DumpKindOfBounds(aKB); DumpKindOfClosed(aKC); // if (aKN==GEOMAlgo_KN_SPHERE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); } if (aKN==GEOMAlgo_KN_CYLINDER) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Height : %.3lf\n", myHeight); } else if (aKN==GEOMAlgo_KN_CONE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); printf(" Height : %.3lf\n", myHeight); } else if (aKN==GEOMAlgo_KN_TORUS) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); } else if (aKN==GEOMAlgo_KN_POLYHEDRON) { DumpLocation (myLocation); DumpPosition (myPosition); } else if (aKN==GEOMAlgo_KN_BOX) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Length : %.3lf\n", myLength); printf(" Width : %.3lf\n", myWidth); printf(" Height : %.3lf\n", myHeight); } } //======================================================================= //function : DumpFace //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpFace()const { Standard_Integer aNbV, aNbE; GEOMAlgo_KindOfShape aKS; GEOMAlgo_KindOfName aKN; GEOMAlgo_KindOfBounds aKB; GEOMAlgo_KindOfClosed aKC; // aNbV=NbSubShapes(TopAbs_VERTEX); aNbE=NbSubShapes(TopAbs_EDGE); aKS=KindOfShape(); aKN=KindOfName(); aKB=KindOfBounds(); aKC=KindOfClosed(); // printf(" *FACE\n"); printf(" number of vertices: %d\n", aNbV); printf(" number of edges : %d\n", aNbE); DumpKindOfShape (aKS); DumpKindOfName (aKN); DumpKindOfBounds(aKB); DumpKindOfClosed(aKC); // // PLANE if (aKN==GEOMAlgo_KN_PLANE) { DumpLocation (myLocation); DumpPosition (myPosition); } else if (aKN==GEOMAlgo_KN_DISKCIRCLE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); } else if (aKN==GEOMAlgo_KN_DISKELLIPSE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); } else if (aKN==GEOMAlgo_KN_RECTANGLE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Length : %.3lf\n", myLength); printf(" Width : %.3lf\n", myWidth); } else if (aKN==GEOMAlgo_KN_TRIANGLE || aKN==GEOMAlgo_KN_QUADRANGLE|| aKN==GEOMAlgo_KN_POLYGON) { DumpLocation (myLocation); DumpPosition (myPosition); } // // SPHERE else if (aKN==GEOMAlgo_KN_SPHERE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf", myRadius1); } // // CYLINDER else if (aKN==GEOMAlgo_KN_CYLINDER) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Height : %.3lf\n", myHeight); } // // CONE else if (aKN==GEOMAlgo_KN_CONE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); printf(" Height : %.3lf\n", myHeight); } // // TORUS else if (aKN==GEOMAlgo_KN_TORUS) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); } printf("\n"); } //======================================================================= //function : DumpShell //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpShell()const { Standard_Integer aNbV, aNbE, aNbF; GEOMAlgo_KindOfClosed aKC; // printf(" *SHELL\n"); // aNbV=NbSubShapes(TopAbs_VERTEX); aNbE=NbSubShapes(TopAbs_EDGE); aNbF=NbSubShapes(TopAbs_FACE); printf(" number of vertices: %d\n", aNbV); printf(" number of edges : %d\n", aNbE); printf(" number of faces : %d\n", aNbF); aKC=KindOfClosed(); DumpKindOfClosed(aKC); printf("\n"); } //======================================================================= //function : DumpWire //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpWire()const { Standard_Integer aNbV, aNbE; GEOMAlgo_KindOfClosed aKC; // printf(" *WIRE\n"); // aNbV=NbSubShapes(TopAbs_VERTEX); aNbE=NbSubShapes(TopAbs_EDGE); printf(" number of vertices: %d\n", aNbV); printf(" number of edges : %d\n", aNbE); aKC=KindOfClosed(); DumpKindOfClosed(aKC); printf("\n"); } //======================================================================= //function : DumpEdge //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpEdge()const { Standard_Integer aNbV; Standard_Real aX, aY, aZ; GEOMAlgo_KindOfShape aKS; GEOMAlgo_KindOfName aKN; GEOMAlgo_KindOfBounds aKB; GEOMAlgo_KindOfClosed aKC; // aNbV=NbSubShapes(TopAbs_VERTEX); aKS=KindOfShape(); aKN=KindOfName(); aKB=KindOfBounds(); aKC=KindOfClosed(); // printf(" *EDGE\n"); printf(" number of vertices: %d\n", aNbV); DumpKindOfShape (aKS); DumpKindOfName (aKN); DumpKindOfBounds(aKB); DumpKindOfClosed(aKC); // // LINE if (aKN==GEOMAlgo_KN_LINE) { DumpLocation (myLocation); DumpDirection(myDirection); } else if (aKN==GEOMAlgo_KN_SEGMENT) { DumpLocation (myLocation); DumpDirection(myDirection); printf(" Length : %.3lf\n", myLength); myPnt1.Coord(aX, aY, aZ); printf(" Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ); myPnt2.Coord(aX, aY, aZ); printf(" Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ); } else if (aKN==GEOMAlgo_KN_CIRCLE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); } else if (aKN==GEOMAlgo_KN_ARCCIRCLE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); myPnt1.Coord(aX, aY, aZ); printf(" Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ); myPnt2.Coord(aX, aY, aZ); printf(" Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ); } else if (aKN==GEOMAlgo_KN_ELLIPSE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); } else if (aKN==GEOMAlgo_KN_ARCELLIPSE) { DumpLocation (myLocation); DumpPosition (myPosition); printf(" Radius1 : %.3lf\n", myRadius1); printf(" Radius2 : %.3lf\n", myRadius2); myPnt1.Coord(aX, aY, aZ); printf(" Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ); myPnt2.Coord(aX, aY, aZ); printf(" Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ); } printf("\n"); } //======================================================================= //function : DumpVertex //purpose : //======================================================================= void GEOMAlgo_ShapeInfo::DumpVertex()const { printf(" *VERTEX\n"); DumpLocation(myLocation); } //======================================================================= //function : DumpLocation //purpose : //======================================================================= void DumpLocation(const gp_Pnt& aP) { Standard_Real aX, aY, aZ; // aP.Coord(aX, aY, aZ); printf(" Location : %.3lf %.3lf %.3lf \n", aX, aY, aZ); } //======================================================================= //function : DumpDirection //purpose : //======================================================================= void DumpDirection(const gp_Dir& aD) { Standard_Real aX, aY, aZ; // aD.Coord(aX, aY, aZ); printf(" Direction: %.3lf %.3lf %.3lf \n", aX, aY, aZ); } //======================================================================= //function : DumpPosition //purpose : //======================================================================= void DumpPosition(const gp_Ax3& aAx3) { const gp_Dir& aDZ=aAx3.Axis().Direction(); const gp_Dir& aDX=aAx3.XDirection(); const gp_Dir& aDY=aAx3.YDirection(); printf(" Position:\n"); printf(" Axis: %.3lf %.3lf %.3lf \n", aDZ.X(), aDZ.Y(), aDZ.Z()); printf(" X : %.3lf %.3lf %.3lf \n", aDX.X(), aDX.Y(), aDX.Z()); printf(" Y : %.3lf %.3lf %.3lf \n", aDY.X(), aDY.Y(), aDY.Z()); } //======================================================================= //function : DumpKindOfBounds //purpose : //======================================================================= void DumpKindOfBounds(const GEOMAlgo_KindOfBounds aKB) { const char *pStr[]={ "KB_UNKNOWN", "KB_TRIMMED", "KB_INFINITE" }; int i; // i=(Standard_Integer)aKB; printf(" KindOfBounds: %s\n", pStr[i]); } //======================================================================= //function : DumpKindOfClosed //purpose : //======================================================================= void DumpKindOfClosed(const GEOMAlgo_KindOfClosed aKC) { const char *pStr[]={ "KC_UNKNOWN", "KC_CLOSED", "KC_NOTCLOSED" }; int i; // i=(Standard_Integer)aKC; printf(" KindOfClosed: %s\n", pStr[i]); } //======================================================================= //function : DumpKindOfShape //purpose : //======================================================================= void DumpKindOfShape(const GEOMAlgo_KindOfShape aKS) { const char *pStr[]={ "KS_UNKNOWN", "KS_SPHERE", "KS_CYLINDER", "KS_BOX", "KS_TORUS", "KS_CONE", "KS_ELLIPSE", "KS_PLANE", "KS_CIRCLE", "KS_LINE", "KS_DEGENERATED", "KS_BSPLINE" }; int i; // i=(Standard_Integer)aKS; printf(" KindOfShape : %s\n", pStr[i]); } //======================================================================= //function : DumpKindOfName //purpose : //======================================================================= void DumpKindOfName(const GEOMAlgo_KindOfName aKS) { const char *pStr[]={ "KN_UNKNOWN", "KN_SPHERE", "KN_CYLINDER", "KN_TORUS", "KN_CONE", "KN_ELLIPSE", "KN_CIRCLE", "KN_PLANE", "KN_LINE", "KN_BOX", "KN_SEGMENT", "KN_ARCCIRCLE", "KN_POLYGON", "KN_POLYHEDRON", "KN_DISKCIRCLE", "KN_DISKELLIPSE", "KN_RECTANGLE", "KN_TRIANGLE", "KN_QUADRANGLE", "KN_ARCELLIPSE" }; int i; // i=(Standard_Integer)aKS; printf(" KindOfName : %s\n", pStr[i]); }