1 // Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include <GEOMAlgo_ShapeInfo.ixx>
24 Standard_Integer TypeToInteger(const TopAbs_ShapeEnum aType);
26 void DumpKindOfShape(const GEOMAlgo_KindOfShape aKS);
28 void DumpKindOfClosed(const GEOMAlgo_KindOfClosed aKC);
30 void DumpKindOfBounds(const GEOMAlgo_KindOfBounds aKB);
32 void DumpKindOfName(const GEOMAlgo_KindOfName aKS);
34 void DumpPosition(const gp_Ax3& aAx3);
36 void DumpLocation(const gp_Pnt& aP);
38 void DumpDirection(const gp_Dir& aD);
39 //=======================================================================
42 //=======================================================================
43 GEOMAlgo_ShapeInfo::GEOMAlgo_ShapeInfo()
47 //=======================================================================
50 //=======================================================================
51 GEOMAlgo_ShapeInfo::~GEOMAlgo_ShapeInfo()
54 //=======================================================================
57 //=======================================================================
58 void GEOMAlgo_ShapeInfo::Reset()
65 for (i=0; i<myNbTypes; ++i) {
69 myKindOfShape=GEOMAlgo_KS_UNKNOWN;
70 myKindOfBounds=GEOMAlgo_KB_UNKNOWN;
71 myKindOfClosed=GEOMAlgo_KC_UNKNOWN;
72 myKindOfName=GEOMAlgo_KN_UNKNOWN;
74 myLocation.SetCoord(99., 99., 99.);
75 myDirection.SetCoord(1.,0.,0.);
83 //=======================================================================
86 //=======================================================================
87 void GEOMAlgo_ShapeInfo::SetType(const TopAbs_ShapeEnum aType)
91 //=======================================================================
94 //=======================================================================
95 TopAbs_ShapeEnum GEOMAlgo_ShapeInfo::Type() const
99 //=======================================================================
100 //function : SetNbSubShapes
102 //=======================================================================
103 void GEOMAlgo_ShapeInfo::SetNbSubShapes(const TopAbs_ShapeEnum aType,
104 const Standard_Integer aNb)
108 iN=TypeToInteger(aType);
109 if (iN>=0 && iN<myNbTypes) {
110 myNbSubShapes[iN]=aNb;
113 //=======================================================================
114 //function : NbSubShapes
116 //=======================================================================
117 Standard_Integer GEOMAlgo_ShapeInfo::NbSubShapes(const TopAbs_ShapeEnum aType) const
121 iN=TypeToInteger(aType);
122 if (iN>=0 && iN<myNbTypes) {
123 return myNbSubShapes[iN];
127 //=======================================================================
128 //function : SetKindOfShape
130 //=======================================================================
131 void GEOMAlgo_ShapeInfo::SetKindOfShape(const GEOMAlgo_KindOfShape aT)
135 //=======================================================================
136 //function : KindOfShape
138 //=======================================================================
139 GEOMAlgo_KindOfShape GEOMAlgo_ShapeInfo::KindOfShape() const
141 return myKindOfShape;
143 //=======================================================================
144 //function : SetKindOfName
146 //=======================================================================
147 void GEOMAlgo_ShapeInfo::SetKindOfName(const GEOMAlgo_KindOfName aT)
151 //=======================================================================
152 //function : KindOfName
154 //=======================================================================
155 GEOMAlgo_KindOfName GEOMAlgo_ShapeInfo::KindOfName() const
159 //=======================================================================
160 //function : SetKindOfBounds
162 //=======================================================================
163 void GEOMAlgo_ShapeInfo::SetKindOfBounds(const GEOMAlgo_KindOfBounds aT)
167 //=======================================================================
168 //function : KindOfBounds
170 //=======================================================================
171 GEOMAlgo_KindOfBounds GEOMAlgo_ShapeInfo::KindOfBounds() const
173 return myKindOfBounds;
175 //=======================================================================
176 //function : SetKindOfClosed
178 //=======================================================================
179 void GEOMAlgo_ShapeInfo::SetKindOfClosed(const GEOMAlgo_KindOfClosed aT)
183 //=======================================================================
184 //function : KindOfClosed
186 //=======================================================================
187 GEOMAlgo_KindOfClosed GEOMAlgo_ShapeInfo::KindOfClosed() const
189 return myKindOfClosed;
191 //=======================================================================
192 //function : SetLocation
194 //=======================================================================
195 void GEOMAlgo_ShapeInfo::SetLocation(const gp_Pnt& aP)
199 //=======================================================================
200 //function : Location
202 //=======================================================================
203 const gp_Pnt& GEOMAlgo_ShapeInfo::Location() const
207 //=======================================================================
208 //function : SetDirection
210 //=======================================================================
211 void GEOMAlgo_ShapeInfo::SetDirection(const gp_Dir& aD)
215 //=======================================================================
216 //function : Direction
218 //=======================================================================
219 const gp_Dir& GEOMAlgo_ShapeInfo::Direction() const
223 //=======================================================================
224 //function : SetPosition
226 //=======================================================================
227 void GEOMAlgo_ShapeInfo::SetPosition(const gp_Ax2& aAx2)
232 //=======================================================================
233 //function : SetPosition
235 //=======================================================================
236 void GEOMAlgo_ShapeInfo::SetPosition(const gp_Ax3& aAx3)
240 //=======================================================================
241 //function : Position
243 //=======================================================================
244 const gp_Ax3& GEOMAlgo_ShapeInfo::Position() const
249 //=======================================================================
252 //=======================================================================
253 void GEOMAlgo_ShapeInfo::SetPnt1(const gp_Pnt& aP)
257 //=======================================================================
260 //=======================================================================
261 const gp_Pnt& GEOMAlgo_ShapeInfo::Pnt1() const
265 //=======================================================================
268 //=======================================================================
269 void GEOMAlgo_ShapeInfo::SetPnt2(const gp_Pnt& aP)
273 //=======================================================================
276 //=======================================================================
277 const gp_Pnt& GEOMAlgo_ShapeInfo::Pnt2() const
281 //=======================================================================
282 //function : SetRadius1
284 //=======================================================================
285 void GEOMAlgo_ShapeInfo::SetRadius1(const Standard_Real aR)
289 //=======================================================================
292 //=======================================================================
293 Standard_Real GEOMAlgo_ShapeInfo::Radius1() const
297 //=======================================================================
298 //function : SetRadius2
300 //=======================================================================
301 void GEOMAlgo_ShapeInfo::SetRadius2(const Standard_Real aR)
305 //=======================================================================
308 //=======================================================================
309 Standard_Real GEOMAlgo_ShapeInfo::Radius2() const
313 //=======================================================================
314 //function : SetLength
316 //=======================================================================
317 void GEOMAlgo_ShapeInfo::SetLength(const Standard_Real aL)
321 //=======================================================================
324 //=======================================================================
325 Standard_Real GEOMAlgo_ShapeInfo::Length() const
329 //=======================================================================
330 //function : SetWidth
332 //=======================================================================
333 void GEOMAlgo_ShapeInfo::SetWidth(const Standard_Real aW)
337 //=======================================================================
340 //=======================================================================
341 Standard_Real GEOMAlgo_ShapeInfo::Width() const
345 //=======================================================================
346 //function : SetHeight
348 //=======================================================================
349 void GEOMAlgo_ShapeInfo::SetHeight(const Standard_Real aH)
353 //=======================================================================
356 //=======================================================================
357 Standard_Real GEOMAlgo_ShapeInfo::Height() const
361 //=======================================================================
362 //function : TypeToInteger
364 //=======================================================================
365 Standard_Integer TypeToInteger(const TopAbs_ShapeEnum aType)
369 iN=(Standard_Integer)aType;
372 //=======================================================================
375 //=======================================================================
376 void GEOMAlgo_ShapeInfo::Dump()const
404 case TopAbs_COMPSOLID:
408 case TopAbs_COMPOUND:
413 printf(" * not implememted yet\n");
417 //=======================================================================
418 //function : DumpCompound
420 //=======================================================================
421 void GEOMAlgo_ShapeInfo::DumpCompound()const
423 Standard_Integer aNbV, aNbE, aNbF, aNbS, aNbC, aNbP;
424 GEOMAlgo_KindOfShape aKS;
425 GEOMAlgo_KindOfName aKN;
426 GEOMAlgo_KindOfBounds aKB;
427 GEOMAlgo_KindOfClosed aKC;
429 aNbV=NbSubShapes(TopAbs_VERTEX);
430 aNbE=NbSubShapes(TopAbs_EDGE);
431 aNbF=NbSubShapes(TopAbs_FACE);
432 aNbS=NbSubShapes(TopAbs_SOLID);
433 aNbC=NbSubShapes(TopAbs_COMPSOLID);
434 aNbP=NbSubShapes(TopAbs_COMPOUND);
440 printf(" *COMPOUND\n");
441 printf(" number of vertices : %d\n", aNbV);
442 printf(" number of edges : %d\n", aNbE);
443 printf(" number of faces : %d\n", aNbF);
444 printf(" number of solids : %d\n", aNbS);
445 printf(" number of compsolids : %d\n", aNbC);
446 printf(" number of compounds : %d\n", aNbP);
447 DumpKindOfShape (aKS);
448 DumpKindOfName (aKN);
449 DumpKindOfBounds(aKB);
450 DumpKindOfClosed(aKC);
452 //=======================================================================
453 //function : DumpCompSolid
455 //=======================================================================
456 void GEOMAlgo_ShapeInfo::DumpCompSolid()const
458 Standard_Integer aNbV, aNbE, aNbF, aNbS;
459 GEOMAlgo_KindOfShape aKS;
460 GEOMAlgo_KindOfName aKN;
461 GEOMAlgo_KindOfBounds aKB;
462 GEOMAlgo_KindOfClosed aKC;
464 aNbV=NbSubShapes(TopAbs_VERTEX);
465 aNbE=NbSubShapes(TopAbs_EDGE);
466 aNbF=NbSubShapes(TopAbs_FACE);
467 aNbS=NbSubShapes(TopAbs_SOLID);
473 printf(" *COMPSOLID\n");
474 printf(" number of vertices: %d\n", aNbV);
475 printf(" number of edges : %d\n", aNbE);
476 printf(" number of faces : %d\n", aNbF);
477 printf(" number of solids : %d\n", aNbS);
478 DumpKindOfShape (aKS);
479 DumpKindOfName (aKN);
480 DumpKindOfBounds(aKB);
481 DumpKindOfClosed(aKC);
484 //=======================================================================
485 //function : DumpSolid
487 //=======================================================================
488 void GEOMAlgo_ShapeInfo::DumpSolid()const
490 Standard_Integer aNbV, aNbE, aNbF;
491 GEOMAlgo_KindOfShape aKS;
492 GEOMAlgo_KindOfName aKN;
493 GEOMAlgo_KindOfBounds aKB;
494 GEOMAlgo_KindOfClosed aKC;
496 aNbV=NbSubShapes(TopAbs_VERTEX);
497 aNbE=NbSubShapes(TopAbs_EDGE);
498 aNbF=NbSubShapes(TopAbs_FACE);
505 printf(" number of vertices: %d\n", aNbV);
506 printf(" number of edges : %d\n", aNbE);
507 printf(" number of faces : %d\n", aNbF);
508 DumpKindOfShape (aKS);
509 DumpKindOfName (aKN);
510 DumpKindOfBounds(aKB);
511 DumpKindOfClosed(aKC);
513 if (aKN==GEOMAlgo_KN_SPHERE) {
514 DumpLocation (myLocation);
515 DumpPosition (myPosition);
516 printf(" Radius1 : %.3lf\n", myRadius1);
518 if (aKN==GEOMAlgo_KN_CYLINDER) {
519 DumpLocation (myLocation);
520 DumpPosition (myPosition);
521 printf(" Radius1 : %.3lf\n", myRadius1);
522 printf(" Height : %.3lf\n", myHeight);
524 else if (aKN==GEOMAlgo_KN_CONE) {
525 DumpLocation (myLocation);
526 DumpPosition (myPosition);
527 printf(" Radius1 : %.3lf\n", myRadius1);
528 printf(" Radius2 : %.3lf\n", myRadius2);
529 printf(" Height : %.3lf\n", myHeight);
531 else if (aKN==GEOMAlgo_KN_TORUS) {
532 DumpLocation (myLocation);
533 DumpPosition (myPosition);
534 printf(" Radius1 : %.3lf\n", myRadius1);
535 printf(" Radius2 : %.3lf\n", myRadius2);
537 else if (aKN==GEOMAlgo_KN_POLYHEDRON) {
538 DumpLocation (myLocation);
539 DumpPosition (myPosition);
541 else if (aKN==GEOMAlgo_KN_BOX) {
542 DumpLocation (myLocation);
543 DumpPosition (myPosition);
544 printf(" Length : %.3lf\n", myLength);
545 printf(" Width : %.3lf\n", myWidth);
546 printf(" Height : %.3lf\n", myHeight);
550 //=======================================================================
551 //function : DumpFace
553 //=======================================================================
554 void GEOMAlgo_ShapeInfo::DumpFace()const
556 Standard_Integer aNbV, aNbE;
557 GEOMAlgo_KindOfShape aKS;
558 GEOMAlgo_KindOfName aKN;
559 GEOMAlgo_KindOfBounds aKB;
560 GEOMAlgo_KindOfClosed aKC;
562 aNbV=NbSubShapes(TopAbs_VERTEX);
563 aNbE=NbSubShapes(TopAbs_EDGE);
570 printf(" number of vertices: %d\n", aNbV);
571 printf(" number of edges : %d\n", aNbE);
572 DumpKindOfShape (aKS);
573 DumpKindOfName (aKN);
574 DumpKindOfBounds(aKB);
575 DumpKindOfClosed(aKC);
578 if (aKN==GEOMAlgo_KN_PLANE) {
579 DumpLocation (myLocation);
580 DumpPosition (myPosition);
582 else if (aKN==GEOMAlgo_KN_DISKCIRCLE) {
583 DumpLocation (myLocation);
584 DumpPosition (myPosition);
585 printf(" Radius1 : %.3lf\n", myRadius1);
587 else if (aKN==GEOMAlgo_KN_DISKELLIPSE) {
588 DumpLocation (myLocation);
589 DumpPosition (myPosition);
590 printf(" Radius1 : %.3lf\n", myRadius1);
591 printf(" Radius2 : %.3lf\n", myRadius2);
593 else if (aKN==GEOMAlgo_KN_RECTANGLE) {
594 DumpLocation (myLocation);
595 DumpPosition (myPosition);
596 printf(" Length : %.3lf\n", myLength);
597 printf(" Width : %.3lf\n", myWidth);
599 else if (aKN==GEOMAlgo_KN_TRIANGLE ||
600 aKN==GEOMAlgo_KN_QUADRANGLE||
601 aKN==GEOMAlgo_KN_POLYGON) {
602 DumpLocation (myLocation);
603 DumpPosition (myPosition);
607 else if (aKN==GEOMAlgo_KN_SPHERE) {
608 DumpLocation (myLocation);
609 DumpPosition (myPosition);
610 printf(" Radius1 : %.3lf", myRadius1);
614 else if (aKN==GEOMAlgo_KN_CYLINDER) {
615 DumpLocation (myLocation);
616 DumpPosition (myPosition);
617 printf(" Radius1 : %.3lf\n", myRadius1);
618 printf(" Height : %.3lf\n", myHeight);
622 else if (aKN==GEOMAlgo_KN_CONE) {
623 DumpLocation (myLocation);
624 DumpPosition (myPosition);
625 printf(" Radius1 : %.3lf\n", myRadius1);
626 printf(" Radius2 : %.3lf\n", myRadius2);
627 printf(" Height : %.3lf\n", myHeight);
631 else if (aKN==GEOMAlgo_KN_TORUS) {
632 DumpLocation (myLocation);
633 DumpPosition (myPosition);
634 printf(" Radius1 : %.3lf\n", myRadius1);
635 printf(" Radius2 : %.3lf\n", myRadius2);
641 //=======================================================================
642 //function : DumpShell
644 //=======================================================================
645 void GEOMAlgo_ShapeInfo::DumpShell()const
647 Standard_Integer aNbV, aNbE, aNbF;
648 GEOMAlgo_KindOfClosed aKC;
652 aNbV=NbSubShapes(TopAbs_VERTEX);
653 aNbE=NbSubShapes(TopAbs_EDGE);
654 aNbF=NbSubShapes(TopAbs_FACE);
655 printf(" number of vertices: %d\n", aNbV);
656 printf(" number of edges : %d\n", aNbE);
657 printf(" number of faces : %d\n", aNbF);
659 DumpKindOfClosed(aKC);
662 //=======================================================================
663 //function : DumpWire
665 //=======================================================================
666 void GEOMAlgo_ShapeInfo::DumpWire()const
668 Standard_Integer aNbV, aNbE;
669 GEOMAlgo_KindOfClosed aKC;
673 aNbV=NbSubShapes(TopAbs_VERTEX);
674 aNbE=NbSubShapes(TopAbs_EDGE);
675 printf(" number of vertices: %d\n", aNbV);
676 printf(" number of edges : %d\n", aNbE);
679 DumpKindOfClosed(aKC);
682 //=======================================================================
683 //function : DumpEdge
685 //=======================================================================
686 void GEOMAlgo_ShapeInfo::DumpEdge()const
688 Standard_Integer aNbV;
689 Standard_Real aX, aY, aZ;
690 GEOMAlgo_KindOfShape aKS;
691 GEOMAlgo_KindOfName aKN;
692 GEOMAlgo_KindOfBounds aKB;
693 GEOMAlgo_KindOfClosed aKC;
695 aNbV=NbSubShapes(TopAbs_VERTEX);
702 printf(" number of vertices: %d\n", aNbV);
703 DumpKindOfShape (aKS);
704 DumpKindOfName (aKN);
705 DumpKindOfBounds(aKB);
706 DumpKindOfClosed(aKC);
709 if (aKN==GEOMAlgo_KN_LINE) {
710 DumpLocation (myLocation);
711 DumpDirection(myDirection);
713 else if (aKN==GEOMAlgo_KN_SEGMENT) {
714 DumpLocation (myLocation);
715 DumpDirection(myDirection);
716 printf(" Length : %.3lf\n", myLength);
717 myPnt1.Coord(aX, aY, aZ);
718 printf(" Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
719 myPnt2.Coord(aX, aY, aZ);
720 printf(" Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
723 else if (aKN==GEOMAlgo_KN_CIRCLE) {
724 DumpLocation (myLocation);
725 DumpPosition (myPosition);
726 printf(" Radius1 : %.3lf\n", myRadius1);
728 else if (aKN==GEOMAlgo_KN_ARCCIRCLE) {
729 DumpLocation (myLocation);
730 DumpPosition (myPosition);
731 printf(" Radius1 : %.3lf\n", myRadius1);
732 myPnt1.Coord(aX, aY, aZ);
733 printf(" Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
734 myPnt2.Coord(aX, aY, aZ);
735 printf(" Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
737 else if (aKN==GEOMAlgo_KN_ELLIPSE) {
738 DumpLocation (myLocation);
739 DumpPosition (myPosition);
740 printf(" Radius1 : %.3lf\n", myRadius1);
741 printf(" Radius2 : %.3lf\n", myRadius2);
743 else if (aKN==GEOMAlgo_KN_ARCELLIPSE) {
744 DumpLocation (myLocation);
745 DumpPosition (myPosition);
746 printf(" Radius1 : %.3lf\n", myRadius1);
747 printf(" Radius2 : %.3lf\n", myRadius2);
748 myPnt1.Coord(aX, aY, aZ);
749 printf(" Pnt1 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
750 myPnt2.Coord(aX, aY, aZ);
751 printf(" Pnt2 : %.3lf %.3lf %.3lf\n", aX, aY, aZ);
755 //=======================================================================
756 //function : DumpVertex
758 //=======================================================================
759 void GEOMAlgo_ShapeInfo::DumpVertex()const
761 printf(" *VERTEX\n");
762 DumpLocation(myLocation);
764 //=======================================================================
765 //function : DumpLocation
767 //=======================================================================
768 void DumpLocation(const gp_Pnt& aP)
770 Standard_Real aX, aY, aZ;
772 aP.Coord(aX, aY, aZ);
773 printf(" Location : %.3lf %.3lf %.3lf \n", aX, aY, aZ);
775 //=======================================================================
776 //function : DumpDirection
778 //=======================================================================
779 void DumpDirection(const gp_Dir& aD)
781 Standard_Real aX, aY, aZ;
783 aD.Coord(aX, aY, aZ);
784 printf(" Direction: %.3lf %.3lf %.3lf \n", aX, aY, aZ);
786 //=======================================================================
787 //function : DumpPosition
789 //=======================================================================
790 void DumpPosition(const gp_Ax3& aAx3)
792 const gp_Dir& aDZ=aAx3.Axis().Direction();
793 const gp_Dir& aDX=aAx3.XDirection();
794 const gp_Dir& aDY=aAx3.YDirection();
795 printf(" Position:\n");
796 printf(" Axis: %.3lf %.3lf %.3lf \n", aDZ.X(), aDZ.Y(), aDZ.Z());
797 printf(" X : %.3lf %.3lf %.3lf \n", aDX.X(), aDX.Y(), aDX.Z());
798 printf(" Y : %.3lf %.3lf %.3lf \n", aDY.X(), aDY.Y(), aDY.Z());
800 //=======================================================================
801 //function : DumpKindOfBounds
803 //=======================================================================
804 void DumpKindOfBounds(const GEOMAlgo_KindOfBounds aKB)
813 i=(Standard_Integer)aKB;
814 printf(" KindOfBounds: %s\n", pStr[i]);
817 //=======================================================================
818 //function : DumpKindOfClosed
820 //=======================================================================
821 void DumpKindOfClosed(const GEOMAlgo_KindOfClosed aKC)
830 i=(Standard_Integer)aKC;
831 printf(" KindOfClosed: %s\n", pStr[i]);
834 //=======================================================================
835 //function : DumpKindOfShape
837 //=======================================================================
838 void DumpKindOfShape(const GEOMAlgo_KindOfShape aKS)
855 i=(Standard_Integer)aKS;
856 printf(" KindOfShape : %s\n", pStr[i]);
858 //=======================================================================
859 //function : DumpKindOfName
861 //=======================================================================
862 void DumpKindOfName(const GEOMAlgo_KindOfName aKS)
888 i=(Standard_Integer)aKS;
889 printf(" KindOfName : %s\n", pStr[i]);