1 // File: DrawTrSurf.cxx
2 // Created: Thu Aug 12 19:05:42 1993
3 // Author: Bruno DUMORTIER
12 #elif defined(HAVE_IOS_H)
20 #include <Standard_Stream.hxx>
22 #include <Draw_Color.hxx>
23 #include <DrawTrSurf.ixx>
24 #include <DrawTrSurf_Point.hxx>
25 #include <DrawTrSurf_BezierSurface.hxx>
26 #include <DrawTrSurf_BSplineSurface.hxx>
27 #include <DrawTrSurf_BezierCurve.hxx>
28 #include <DrawTrSurf_BSplineCurve.hxx>
29 #include <DrawTrSurf_BezierCurve2d.hxx>
30 #include <DrawTrSurf_BSplineCurve2d.hxx>
31 #include <DrawTrSurf_Triangulation.hxx>
32 #include <DrawTrSurf_Polygon3D.hxx>
33 #include <DrawTrSurf_Polygon2D.hxx>
34 #include <Draw_Appli.hxx>
37 #include <GeomTools_CurveSet.hxx>
38 #include <GeomTools_Curve2dSet.hxx>
39 #include <GeomTools_SurfaceSet.hxx>
42 #include <gp_Ax2d.hxx>
44 #include <gp_Trsf2d.hxx>
47 static Draw_Color PntColor(Draw_rouge);
48 static Draw_Color CurvColor(Draw_jaune);
49 static Draw_Color BoundsColor(Draw_vert);
50 static Draw_Color IsosColor(Draw_bleu);
51 static Draw_Color PolesColor(Draw_rouge);
52 static Draw_Color KnotsColor(Draw_violet);
54 static Draw_MarkerShape PntShape = Draw_Plus;
55 static Draw_MarkerShape KnotsShape = Draw_Losange;
56 static Standard_Boolean ShowPoles = Standard_True;
57 static Standard_Boolean ShowKnots = Standard_True;
58 static Standard_Boolean knotsIsos =Standard_True;
59 static Standard_Real Deflection = 0.01;
60 static Standard_Integer KnotsSize = 5;
61 static Standard_Integer Discret = 30;
62 static Standard_Integer DrawMode = 0;
63 static Standard_Integer NbUIsos = 10;
64 static Standard_Integer NbVIsos = 10;
66 Standard_EXPORT Draw_Color DrawTrSurf_CurveColor(const Draw_Color col)
68 Draw_Color c = CurvColor;
73 //=======================================================================
74 //function : GetDrawable
76 //=======================================================================
77 static Handle(DrawTrSurf_Drawable) GetDrawable(Standard_CString& Name)
79 Handle(Draw_Drawable3D) D = Draw::Get(Name);
80 Handle(DrawTrSurf_Drawable) Dr;
82 Dr = Handle(DrawTrSurf_Drawable)::DownCast(D);
86 //=======================================================================
87 //function : GetSurface
89 //=======================================================================
90 static Handle(DrawTrSurf_Surface) GetSurface(Standard_CString& Name)
92 Handle(Draw_Drawable3D) D = Draw::Get(Name);
93 Handle(DrawTrSurf_Surface) Dr;
95 Dr = Handle(DrawTrSurf_Surface)::DownCast(D);
99 //=======================================================================
100 //function : GetBezierSurface
102 //=======================================================================
103 static Handle(DrawTrSurf_BezierSurface) GetBezierSurface(Standard_CString& Name)
105 Handle(Draw_Drawable3D) D = Draw::Get(Name);
106 Handle(DrawTrSurf_BezierSurface) Dr;
108 Dr = Handle(DrawTrSurf_BezierSurface)::DownCast(D);
112 //=======================================================================
113 //function : GetBSplineSurface
115 //=======================================================================
116 static Handle(DrawTrSurf_BSplineSurface) GetBSplineSurface(Standard_CString& Name)
118 Handle(Draw_Drawable3D) D = Draw::Get(Name);
119 Handle(DrawTrSurf_BSplineSurface) Dr;
121 Dr = Handle(DrawTrSurf_BSplineSurface)::DownCast(D);
126 //=======================================================================
127 //function : GetCurve
129 //=======================================================================
130 static Handle(DrawTrSurf_Curve) GetCurve(Standard_CString& Name)
132 Handle(Draw_Drawable3D) D = Draw::Get(Name);
133 Handle(DrawTrSurf_Curve) Dr;
135 Dr = Handle(DrawTrSurf_Curve)::DownCast(D);
140 //=======================================================================
141 //function : GetBezierCurve
143 //=======================================================================
144 static Handle(DrawTrSurf_BezierCurve) GetBezierCurve(Standard_CString& Name)
146 Handle(Draw_Drawable3D) D = Draw::Get(Name);
147 Handle(DrawTrSurf_BezierCurve) Dr;
149 Dr = Handle(DrawTrSurf_BezierCurve)::DownCast(D);
153 //=======================================================================
154 //function : GetBSplineCurve
156 //=======================================================================
157 static Handle(DrawTrSurf_BSplineCurve) GetBSplineCurve(Standard_CString& Name)
159 Handle(Draw_Drawable3D) D = Draw::Get(Name);
160 Handle(DrawTrSurf_BSplineCurve) Dr;
162 Dr = Handle(DrawTrSurf_BSplineCurve)::DownCast(D);
166 //=======================================================================
167 //function : GetBezierCurve2d
169 //=======================================================================
170 static Handle(DrawTrSurf_BezierCurve2d) GetBezierCurve2d(Standard_CString& Name)
172 Handle(Draw_Drawable3D) D = Draw::Get(Name);
173 Handle(DrawTrSurf_BezierCurve2d) Dr;
175 Dr = Handle(DrawTrSurf_BezierCurve2d)::DownCast(D);
179 //=======================================================================
180 //function : GetBSplineCurve2d
182 //=======================================================================
183 static Handle(DrawTrSurf_BSplineCurve2d) GetBSplineCurve2d(Standard_CString& Name)
185 Handle(Draw_Drawable3D) D = Draw::Get(Name);
186 Handle(DrawTrSurf_BSplineCurve2d) Dr;
188 Dr = Handle(DrawTrSurf_BSplineCurve2d)::DownCast(D);
193 //=======================================================================
196 //=======================================================================
197 static Standard_Integer nbiso (Draw_Interpretor& di, Standard_Integer n, const char** a)
201 NbUIsos = atoi(a[1]);
202 NbVIsos = atoi(a[2]);
204 di << NbUIsos << " " << NbVIsos;
207 for (Standard_Integer i = 1; i < n - 2; i++) {
208 Handle(DrawTrSurf_Surface) DS = GetSurface(a[i]);
210 DS->ShowIsos(atoi(a[n-2]),atoi(a[n-1]));
218 //=======================================================================
219 //function : drawpoles
221 //=======================================================================
223 static Standard_Integer drawpoles(Draw_Interpretor&,
228 if ( !strcmp(a[0],"shpoles")) {
229 ShowPoles = Standard_True;
231 else if ( !strcmp(a[0],"clpoles")) {
232 ShowPoles = Standard_False;
234 else if ( !strcmp(a[0],"shknots")) {
235 ShowKnots = Standard_True;
237 else if ( !strcmp(a[0],"clknots")) {
238 ShowKnots = Standard_False;
244 Handle(DrawTrSurf_BezierSurface) BZS;
245 BZS = GetBezierSurface(a[1]);
246 if ( !BZS.IsNull()) {
247 if ( !strcmp(a[0],"shpoles")) {
250 else if ( !strcmp(a[0],"clpoles")) {
258 Handle(DrawTrSurf_BSplineSurface) BSS = GetBSplineSurface(a[1]);
259 if ( !BSS.IsNull()) {
260 if ( !strcmp(a[0],"shpoles")) {
263 else if ( !strcmp(a[0],"clpoles")) {
266 else if ( !strcmp(a[0],"shknots")) {
269 else if ( !strcmp(a[0],"clknots")) {
274 Handle(DrawTrSurf_BezierCurve) BZC = GetBezierCurve(a[1]);
275 if ( !BZC.IsNull()) {
276 if ( !strcmp(a[0],"shpoles")) {
279 else if ( !strcmp(a[0],"clpoles")) {
287 Handle(DrawTrSurf_BSplineCurve) BSC = GetBSplineCurve(a[1]);
288 if ( !BSC.IsNull()) {
289 if ( !strcmp(a[0],"shpoles")) {
292 else if ( !strcmp(a[0],"clpoles")) {
295 else if ( !strcmp(a[0],"shknots")) {
298 else if ( !strcmp(a[0],"clknots")) {
303 Handle(DrawTrSurf_BezierCurve2d) BZ2 = GetBezierCurve2d(a[1]);
304 if ( !BZ2.IsNull()) {
305 if ( !strcmp(a[0],"shpoles")) {
308 else if ( !strcmp(a[0],"clpoles")) {
316 Handle(DrawTrSurf_BSplineCurve2d) BS2 = GetBSplineCurve2d(a[1]);
317 if ( !BS2.IsNull()) {
318 if ( !strcmp(a[0],"shpoles")) {
321 else if ( !strcmp(a[0],"clpoles")) {
324 else if ( !strcmp(a[0],"shknots")) {
327 else if ( !strcmp(a[0],"clknots")) {
343 //=======================================================================
346 //=======================================================================
348 static Standard_Integer draw (Draw_Interpretor& di, Standard_Integer n, const char** a)
351 if (!strcmp(a[0],"dmode")) {
353 Standard_Integer mod = 0;
354 if ((*a[n-1] == 'U')||(*a[n-1] == 'u')) mod = 1;
363 else if (!strcmp(a[0],"discr")) {
365 Discret = atoi(a[n-1]);
369 else if (!strcmp(a[0],"defle")) {
371 Deflection = atof(a[n-1]);
376 for (Standard_Integer i = 1; i < n - 1; i++) {
377 Handle(DrawTrSurf_Drawable) D = GetDrawable(a[1]);
379 if (!strcmp(a[0],"dmode")) {
380 Standard_Integer mod = 0;
381 if ((*a[n-1] == 'U')||(*a[n-1] == 'u')) mod = 1;
385 else if (!strcmp(a[0],"discr")) {
386 D->SetDiscretisation(atoi(a[n-1]));
389 else if (!strcmp(a[0],"defle")) {
390 D->SetDeflection(atof(a[n-1]));
400 //=======================================================================
401 //function : transform
403 //=======================================================================
405 static Standard_Integer transform (Draw_Interpretor& di, Standard_Integer n, const char** a)
409 Standard_Integer i,last = n-1;
410 if (!strcmp(a[0],"pscale")) {
411 Standard_Real s = atof(a[last]);
413 if (last < 4) return 1;
414 gp_Pnt P(atof(a[last-2]),atof(a[last-1]),atof(a[last]));
417 else if (!strcmp(a[0]+1,"mirror")) {
418 if (last < 4) return 1;
419 gp_Pnt P(atof(a[last-2]),atof(a[last-1]),atof(a[last]));
425 if (last < 4) return 1;
426 gp_Pnt O(atof(a[last-2]),atof(a[last-1]),atof(a[last]));
428 gp_Dir D(P.X(),P.Y(),P.Z());
430 T.SetMirror(gp_Ax1(O,D));
432 else if (*a[0] == 's') {
434 T.SetMirror(Pl.Position().Ax2());
439 else if (!strcmp(a[0],"translate")) {
440 if (last < 4) return 1;
441 gp_Vec V(atof(a[last-2]),atof(a[last-1]),atof(a[last]));
446 else if (!strcmp(a[0],"rotate")) {
447 if (last < 8) return 1;
448 Standard_Real ang = atof(a[last]) * PI180;
450 gp_Dir D(atof(a[last-2]),atof(a[last-1]),atof(a[last]));
452 gp_Pnt P(atof(a[last-2]),atof(a[last-1]),atof(a[last]));
454 T.SetRotation(gp_Ax1(P,D),ang);
457 for (i = 1; i <= last; i++) {
458 Handle(Geom_Geometry) G = DrawTrSurf::Get(a[i]);
465 if (DrawTrSurf::GetPoint(a[i],P)) {
467 DrawTrSurf::Set(a[i],P);
475 //=======================================================================
476 //function : d2transform
478 //=======================================================================
480 static Standard_Integer d2transform (Draw_Interpretor& di, Standard_Integer n, const char** a)
484 Standard_Integer i,last = n-1;
485 if (!strcmp(a[0],"2dpscale")) {
486 Standard_Real s = atof(a[last]);
488 if (last < 3) return 1;
489 gp_Pnt2d P(atof(a[last-1]),atof(a[last]));
492 else if ( (!strcmp(a[0],"2dpmirror")) ||
493 (!strcmp(a[0],"2dlmirror")) ) {
494 if (last < 3) return 1;
495 gp_Pnt2d P(atof(a[last-1]),atof(a[last]));
496 if (!strcmp(a[0],"2dpmirror")) {
501 if (last < 3) return 1;
502 gp_Pnt2d O(atof(a[last-1]),atof(a[last]));
504 gp_Dir2d D(P.X(),P.Y());
505 T.SetMirror(gp_Ax2d(O,D));
509 else if (!strcmp(a[0],"2dtranslate")) {
510 if (last < 3) return 1;
511 gp_Vec2d V(atof(a[last-1]),atof(a[last]));
516 else if (!strcmp(a[0],"2drotate")) {
517 if (last < 4) return 1;
518 Standard_Real ang = atof(a[last]) * PI180;
520 gp_Pnt2d P(atof(a[last-1]),atof(a[last]));
522 T.SetRotation(P,ang);
525 for (i = 1; i <= last; i++) {
526 Handle(Geom2d_Curve) G = DrawTrSurf::GetCurve2d(a[i]);
533 if (DrawTrSurf::GetPoint2d(a[i],P)) {
535 DrawTrSurf::Set(a[i],P);
543 //=======================================================================
546 //=======================================================================
547 void DrawTrSurf::Set(const Standard_CString Name,
550 Handle(DrawTrSurf_Point) DP = new DrawTrSurf_Point(P,PntShape,PntColor);
554 //=======================================================================
557 //=======================================================================
558 void DrawTrSurf::Set(const Standard_CString Name,
561 Handle(DrawTrSurf_Point) DP = new DrawTrSurf_Point(P,PntShape,PntColor);
565 //=======================================================================
567 //purpose : Geometry from Geom
568 //=======================================================================
569 void DrawTrSurf::Set(const Standard_CString Name,
570 const Handle(Geom_Geometry)& G)
572 Handle(DrawTrSurf_Drawable) D;
575 Handle(Geom_Curve) C = Handle(Geom_Curve)::DownCast(G);
578 Handle(Geom_BezierCurve) Bez =
579 Handle(Geom_BezierCurve)::DownCast(C);
581 Handle(DrawTrSurf_BezierCurve) DBez =
582 new DrawTrSurf_BezierCurve(Bez,CurvColor,PolesColor,ShowPoles,
583 Discret,Deflection,DrawMode);
588 Handle(Geom_BSplineCurve) BS =
589 Handle(Geom_BSplineCurve)::DownCast(C);
591 Handle(DrawTrSurf_BSplineCurve) DBS =
592 new DrawTrSurf_BSplineCurve(BS,
593 CurvColor,PolesColor,
595 KnotsShape,KnotsSize,
597 Discret,Deflection,DrawMode);
601 if (Bez.IsNull() && BS.IsNull()) {
602 Handle(DrawTrSurf_Curve) DC =
603 new DrawTrSurf_Curve(C,CurvColor,Discret,Deflection,DrawMode);
609 Handle(Geom_Surface) S = Handle(Geom_Surface)::DownCast(G);
612 Handle(Geom_BezierSurface) Bez =
613 Handle(Geom_BezierSurface)::DownCast(S);
615 Handle(DrawTrSurf_BezierSurface) DBez =
616 new DrawTrSurf_BezierSurface(Bez,NbUIsos,NbVIsos,
617 BoundsColor,IsosColor,PolesColor,
619 Discret,Deflection,DrawMode);
624 Handle(Geom_BSplineSurface) BS =
625 Handle(Geom_BSplineSurface)::DownCast(S);
627 Handle(DrawTrSurf_BSplineSurface) DBS ;
629 DBS = new DrawTrSurf_BSplineSurface(BS,
631 BoundsColor,IsosColor,
632 PolesColor,KnotsColor,
633 KnotsShape,KnotsSize,
635 Discret,Deflection,DrawMode);
637 DBS = new DrawTrSurf_BSplineSurface(BS,
638 BoundsColor,IsosColor,
639 PolesColor,KnotsColor,
640 KnotsShape,KnotsSize,
642 Discret,Deflection,DrawMode);
647 if (Bez.IsNull() && BS.IsNull()) {
648 Handle(DrawTrSurf_Surface) DS =
649 new DrawTrSurf_Surface(S,
651 BoundsColor,IsosColor,
652 Discret,Deflection,DrawMode);
662 //=======================================================================
664 //purpose : Curve from Geom2d
665 //=======================================================================
666 void DrawTrSurf::Set(const Standard_CString Name,
667 const Handle(Geom2d_Curve)& C)
669 Handle(DrawTrSurf_Drawable) D;
672 Handle(Geom2d_BezierCurve) Bez =
673 Handle(Geom2d_BezierCurve)::DownCast(C);
675 Handle(DrawTrSurf_BezierCurve2d) DBez =
676 new DrawTrSurf_BezierCurve2d(Bez,CurvColor,PolesColor,ShowPoles,
682 Handle(Geom2d_BSplineCurve) BS =
683 Handle(Geom2d_BSplineCurve)::DownCast(C);
685 Handle(DrawTrSurf_BSplineCurve2d) DBS =
686 new DrawTrSurf_BSplineCurve2d(BS,
687 CurvColor,PolesColor,
689 KnotsShape,KnotsSize,
695 if (Bez.IsNull() && BS.IsNull()) {
696 Handle(DrawTrSurf_Curve2d) DC =
697 new DrawTrSurf_Curve2d(C,CurvColor,Discret);
705 //=======================================================================
708 //=======================================================================
709 void DrawTrSurf::Set(const Standard_CString Name,
710 const Handle(Poly_Triangulation)& T)
712 Handle(DrawTrSurf_Triangulation) D = new DrawTrSurf_Triangulation(T);
715 //=======================================================================
718 //=======================================================================
719 void DrawTrSurf::Set(const Standard_CString Name,
720 const Handle(Poly_Polygon3D)& P)
722 Handle(DrawTrSurf_Polygon3D) D = new DrawTrSurf_Polygon3D(P);
726 //=======================================================================
729 //=======================================================================
730 void DrawTrSurf::Set(const Standard_CString Name,
731 const Handle(Poly_Polygon2D)& P)
733 Handle(DrawTrSurf_Polygon2D) D = new DrawTrSurf_Polygon2D(P);
737 //=======================================================================
740 //=======================================================================
741 Handle(Geom_Geometry) DrawTrSurf::Get(Standard_CString& Name)
743 Handle(Draw_Drawable3D) D = Draw::Get(Name);
745 Handle(DrawTrSurf_Curve) DC =
746 Handle(DrawTrSurf_Curve)::DownCast(D);
748 return DC->GetCurve();
750 Handle(DrawTrSurf_Surface) DS =
751 Handle(DrawTrSurf_Surface)::DownCast(D);
753 return DS->GetSurface();
755 return Handle(Geom_Geometry) ();
759 //=======================================================================
760 //function : GetPoint
762 //=======================================================================
763 Standard_Boolean DrawTrSurf::GetPoint(Standard_CString& Name,
766 Handle(DrawTrSurf_Point) D =
767 Handle(DrawTrSurf_Point)::DownCast(Draw::Get(Name));
769 return Standard_False;
771 return Standard_False;
774 return Standard_True;
778 //=======================================================================
779 //function : GetPoint2d
781 //=======================================================================
782 Standard_Boolean DrawTrSurf::GetPoint2d(Standard_CString& Name,
785 Handle(DrawTrSurf_Point) D =
786 Handle(DrawTrSurf_Point)::DownCast(Draw::Get(Name));
788 return Standard_False;
790 return Standard_False;
793 return Standard_True;
797 //=======================================================================
798 //function : GetCurve
800 //=======================================================================
801 Handle(Geom_Curve) DrawTrSurf::GetCurve(Standard_CString& Name)
803 Handle(DrawTrSurf_Curve) D =
804 Handle(DrawTrSurf_Curve)::DownCast(Draw::Get(Name));
806 return Handle(Geom_Curve)();
808 return D->GetCurve();
812 //=======================================================================
813 //function : GetBezierCurve
815 //=======================================================================
816 Handle(Geom_BezierCurve) DrawTrSurf::GetBezierCurve(Standard_CString& Name)
818 Handle(DrawTrSurf_BezierCurve) D =
819 Handle(DrawTrSurf_BezierCurve)::DownCast(Draw::Get(Name));
821 return Handle(Geom_BezierCurve)();
823 return Handle(Geom_BezierCurve)::DownCast(D->GetCurve());
827 //=======================================================================
828 //function : GetBSplineCurve
830 //=======================================================================
831 Handle(Geom_BSplineCurve) DrawTrSurf::GetBSplineCurve(Standard_CString& Name)
833 Handle(DrawTrSurf_BSplineCurve) D =
834 Handle(DrawTrSurf_BSplineCurve)::DownCast(Draw::Get(Name));
836 return Handle(Geom_BSplineCurve)();
838 return Handle(Geom_BSplineCurve)::DownCast(D->GetCurve());
840 //=======================================================================
841 //function : GetCurve2d
843 //=======================================================================
844 Handle(Geom2d_Curve) DrawTrSurf::GetCurve2d(Standard_CString& Name)
846 Handle(DrawTrSurf_Curve2d) D =
847 Handle(DrawTrSurf_Curve2d)::DownCast(Draw::Get(Name));
849 return Handle(Geom2d_Curve)();
851 return D->GetCurve();
853 //=======================================================================
854 //function : GetBezierCurve2d
856 //=======================================================================
857 Handle(Geom2d_BezierCurve) DrawTrSurf::GetBezierCurve2d(Standard_CString& Name)
859 Handle(DrawTrSurf_Curve2d) D =
860 Handle(DrawTrSurf_Curve2d)::DownCast(Draw::Get(Name));
862 return Handle(Geom2d_BezierCurve)();
864 return Handle(Geom2d_BezierCurve)::DownCast(D->GetCurve());
866 //=======================================================================
867 //function : GetBSplineCurve2d
869 //=======================================================================
870 Handle(Geom2d_BSplineCurve) DrawTrSurf::GetBSplineCurve2d
871 (Standard_CString& Name)
873 Handle(DrawTrSurf_Curve2d) D =
874 Handle(DrawTrSurf_Curve2d)::DownCast(Draw::Get(Name));
876 return Handle(Geom2d_BSplineCurve)();
878 return Handle(Geom2d_BSplineCurve)::DownCast(D->GetCurve());
880 //=======================================================================
881 //function : GetSurface
883 //=======================================================================
884 Handle(Geom_Surface) DrawTrSurf::GetSurface
885 (Standard_CString& Name)
887 Handle(DrawTrSurf_Surface) D =
888 Handle(DrawTrSurf_Surface)::DownCast(Draw::Get(Name));
890 return Handle(Geom_Surface)();
892 return D->GetSurface();
894 //=======================================================================
895 //function : GetBezierSurface
897 //=======================================================================
898 Handle(Geom_BezierSurface) DrawTrSurf::GetBezierSurface
899 (Standard_CString& Name)
901 Handle(DrawTrSurf_BezierSurface) D =
902 Handle(DrawTrSurf_BezierSurface)::DownCast(Draw::Get(Name));
904 return Handle(Geom_BezierSurface)();
906 return Handle(Geom_BezierSurface)::DownCast(D->GetSurface());
908 //=======================================================================
909 //function : GetBSplineSurface
911 //=======================================================================
912 Handle(Geom_BSplineSurface) DrawTrSurf::GetBSplineSurface
913 (Standard_CString& Name)
915 Handle(DrawTrSurf_BSplineSurface) D =
916 Handle(DrawTrSurf_BSplineSurface)::DownCast(Draw::Get(Name));
918 return Handle(Geom_BSplineSurface)();
920 return Handle(Geom_BSplineSurface)::DownCast(D->GetSurface());
922 //=======================================================================
923 //function : GetTriangulation
925 //=======================================================================
926 Handle(Poly_Triangulation) DrawTrSurf::GetTriangulation(Standard_CString& Name)
928 Handle(DrawTrSurf_Triangulation) D =
929 Handle(DrawTrSurf_Triangulation)::DownCast(Draw::Get(Name));
931 return Handle(Poly_Triangulation)();
933 return D->Triangulation();
935 //=======================================================================
936 //function : GetPolygon3D
938 //=======================================================================
939 Handle(Poly_Polygon3D) DrawTrSurf::GetPolygon3D(Standard_CString& Name)
941 Handle(DrawTrSurf_Polygon3D) D =
942 Handle(DrawTrSurf_Polygon3D)::DownCast(Draw::Get(Name));
944 return Handle(Poly_Polygon3D)();
946 return D->Polygon3D();
948 //=======================================================================
949 //function : GetPolygon2D
951 //=======================================================================
952 Handle(Poly_Polygon2D) DrawTrSurf::GetPolygon2D(Standard_CString& Name)
954 Handle(DrawTrSurf_Polygon2D) D =
955 Handle(DrawTrSurf_Polygon2D)::DownCast(Draw::Get(Name));
957 return Handle(Poly_Polygon2D)();
959 return D->Polygon2D();
961 //=======================================================================
962 //function : setcurvcolor
964 //=======================================================================
965 static Standard_Integer setcurvcolor(Draw_Interpretor& di, Standard_Integer n, const char** a)
967 Draw_Color col,savecol;
969 savecol = DrawTrSurf_CurveColor(Draw_Color(Draw_jaune));
970 DrawTrSurf_CurveColor(savecol);
973 switch (savecol.ID()) {
974 case Draw_blanc: di <<"blanc " << "\n"; break;
975 case Draw_rouge: di <<"rouge " << "\n"; break;
976 case Draw_vert: di <<"vert " << "\n"; break;
977 case Draw_bleu: di <<"bleu " << "\n"; break;
978 case Draw_cyan: di <<"cyan " << "\n"; break;
979 case Draw_or: di <<"or " << "\n"; break;
980 case Draw_magenta: di <<"magenta " << "\n"; break;
981 case Draw_marron: di <<"marron " << "\n"; break;
982 case Draw_orange: di <<"orange " << "\n"; break;
983 case Draw_rose: di <<"rose " << "\n"; break;
984 case Draw_saumon: di <<"saumon " << "\n"; break;
985 case Draw_violet: di <<"violet " << "\n"; break;
986 case Draw_jaune: di <<"jaune " << "\n"; break;
987 case Draw_kaki: di <<"kaki " << "\n"; break;
988 case Draw_corail: di <<"corail " << "\n"; break;
993 if (!strcasecmp(a[1],"blanc"))
995 if (!strcasecmp(a[1],"rouge"))
997 if (!strcasecmp(a[1],"vert"))
999 if (!strcasecmp(a[1],"bleu"))
1001 if (!strcasecmp(a[1],"cyan"))
1003 if (!strcasecmp(a[1],"or"))
1005 if (!strcasecmp(a[1],"magenta"))
1007 if (!strcasecmp(a[1],"marron"))
1009 if (!strcasecmp(a[1],"orange"))
1011 if (!strcasecmp(a[1],"rose"))
1013 if (!strcasecmp(a[1],"saumon"))
1015 if (!strcasecmp(a[1],"violet"))
1017 if (!strcasecmp(a[1],"jaune"))
1019 if (!strcasecmp(a[1],"kaki"))
1021 if (!strcasecmp(a[1],"corail"))
1024 DrawTrSurf_CurveColor(col);
1030 //=======================================================================
1031 //function : changecurvcolor
1033 //=======================================================================
1035 static Standard_Integer changecurvcolor(Draw_Interpretor& , Standard_Integer n, const char** a)
1037 Draw_Color col,savecol;
1039 savecol = DrawTrSurf_CurveColor(Draw_Color(Draw_jaune));
1040 DrawTrSurf_CurveColor(savecol);
1042 if (n < 3) return 1;
1045 if (!strcasecmp(a[1],"blanc"))
1047 if (!strcasecmp(a[1],"rouge"))
1049 if (!strcasecmp(a[1],"vert"))
1051 if (!strcasecmp(a[1],"bleu"))
1053 if (!strcasecmp(a[1],"cyan"))
1055 if (!strcasecmp(a[1],"or"))
1057 if (!strcasecmp(a[1],"magenta"))
1059 if (!strcasecmp(a[1],"marron"))
1061 if (!strcasecmp(a[1],"orange"))
1063 if (!strcasecmp(a[1],"rose"))
1065 if (!strcasecmp(a[1],"saumon"))
1067 if (!strcasecmp(a[1],"violet"))
1069 if (!strcasecmp(a[1],"jaune"))
1071 if (!strcasecmp(a[1],"kaki"))
1073 if (!strcasecmp(a[1],"corail"))
1076 Handle(DrawTrSurf_Curve) D =
1077 Handle(DrawTrSurf_Curve)::DownCast(Draw::Get(a[2]));
1086 //=======================================================================
1087 //function : BasicCommands
1089 //=======================================================================
1091 static Standard_Boolean done = Standard_False;
1092 void DrawTrSurf::BasicCommands(Draw_Interpretor& theCommands)
1095 done = Standard_True;
1098 g = "geometric display commands";
1100 theCommands.Add("nbiso",
1101 "nbiso name [names...] nuiso nviso",
1105 theCommands.Add("clpoles",
1106 "clpoles [name], no args : modal ",
1110 theCommands.Add("shpoles",
1111 "shpoles [name], no args : modal ",
1115 theCommands.Add("clknots",
1116 "clknots [name], no args : modal ",
1120 theCommands.Add("shknots",
1121 "shknots [name], no args : modal ",
1125 theCommands.Add("dmode",
1126 "dmode [names...] Uniform/Discret",
1130 theCommands.Add("discr",
1131 "discr [names...] nbintervals",
1135 theCommands.Add("defle",
1136 "defle [names...] defle",
1140 theCommands.Add("setcurvcolor","setcurvcolor [color] : set curve color by default, or print the current curve color if no argument (this does not modify the color of pcurve)",
1141 __FILE__,setcurvcolor,g);
1143 theCommands.Add("changecurvcolor","changecurvcolor color curve: change color of the curve",
1144 __FILE__,changecurvcolor,g);
1146 g = "Geometric tranformations";
1148 theCommands.Add("translate",
1149 "translate name [names...] dx dy dz",
1153 theCommands.Add("rotate",
1154 "rotate name [names...] x y z dx dy dz angle",
1158 theCommands.Add("pmirror",
1159 "pmirror name [names...] x y z",
1163 theCommands.Add("lmirror",
1164 "lmirror name [names...] x y z dx dy dz",
1168 theCommands.Add("smirror",
1169 "smirror name [names...] x y z dx dy dz",
1173 theCommands.Add("pscale",
1174 "pscale name [names...] x y z s",
1178 theCommands.Add("2dtranslate",
1179 "translate name [names...] dx dy",
1183 theCommands.Add("2drotate",
1184 "rotate name [names...] x y dx dy angle",
1188 theCommands.Add("2dpmirror",
1189 "pmirror name [names...] x y",
1193 theCommands.Add("2dlmirror",
1194 "lmirror name [names...] x y dx dy",
1198 theCommands.Add("2dpscale",
1199 "pscale name [names...] x y s",
1205 //=================================================================
1206 // save and restore curves
1207 //=================================================================
1209 static Standard_Boolean ctest(const Handle(Draw_Drawable3D)& d)
1211 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Curve));
1214 static void csave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1216 Handle(DrawTrSurf_Curve) N = Handle(DrawTrSurf_Curve)::DownCast(d);
1217 GeomTools_CurveSet::PrintCurve(N->GetCurve(),OS,Standard_True);
1220 static Handle(Draw_Drawable3D) crestore (istream& is)
1222 Handle(Geom_Curve) G;
1223 GeomTools_CurveSet::ReadCurve(is,G);
1224 Handle(DrawTrSurf_Curve) N =
1225 new DrawTrSurf_Curve(G,CurvColor,Discret,Deflection,DrawMode);
1230 static Draw_SaveAndRestore csr("DrawTrSurf_Curve",
1231 ctest,csave,crestore);
1236 //=================================================================
1237 // save and restore bezier curves
1238 //=================================================================
1240 static Standard_Boolean bzctest(const Handle(Draw_Drawable3D)& d)
1242 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_BezierCurve));
1245 static void bzcsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1247 Handle(DrawTrSurf_BezierCurve)
1248 N = Handle(DrawTrSurf_BezierCurve)::DownCast(d);
1249 GeomTools_CurveSet::PrintCurve(N->GetCurve(),OS,Standard_True);
1252 static Handle(Draw_Drawable3D) bzcrestore (istream& is)
1254 Handle(Geom_BezierCurve) G;
1255 GeomTools_CurveSet::ReadCurve(is,G);
1256 Handle(DrawTrSurf_BezierCurve) N =
1257 new DrawTrSurf_BezierCurve(G,CurvColor,PolesColor,ShowPoles,
1258 Discret,Deflection,DrawMode);
1263 static Draw_SaveAndRestore bzcsr("DrawTrSurf_BezierCurve",
1264 bzctest,bzcsave,bzcrestore);
1269 //=================================================================
1270 // save and restore bspline curves
1271 //=================================================================
1273 static Standard_Boolean bsctest(const Handle(Draw_Drawable3D)& d)
1275 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_BSplineCurve));
1278 static void bscsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1280 Handle(DrawTrSurf_BSplineCurve)
1281 N = Handle(DrawTrSurf_BSplineCurve)::DownCast(d);
1282 GeomTools_CurveSet::PrintCurve(N->GetCurve(),OS,Standard_True);
1285 static Handle(Draw_Drawable3D) bscrestore (istream& is)
1287 Handle(Geom_BSplineCurve) G;
1288 GeomTools_CurveSet::ReadCurve(is,G);
1289 Handle(DrawTrSurf_BSplineCurve) N =
1290 new DrawTrSurf_BSplineCurve(G, CurvColor,PolesColor,
1292 KnotsShape,KnotsSize,
1293 ShowPoles,ShowKnots,
1294 Discret,Deflection,DrawMode);
1299 static Draw_SaveAndRestore bscsr("DrawTrSurf_BSplineCurve",
1300 bsctest,bscsave,bscrestore);
1303 //=================================================================
1304 // save and restore curves 2d
1305 //=================================================================
1307 static Standard_Boolean c2dtest(const Handle(Draw_Drawable3D)& d)
1309 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Curve2d));
1312 static void c2dsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1314 Handle(DrawTrSurf_Curve2d) N = Handle(DrawTrSurf_Curve2d)::DownCast(d);
1315 GeomTools_Curve2dSet::PrintCurve2d(N->GetCurve(),OS,Standard_True);
1318 static Handle(Draw_Drawable3D) c2drestore (istream& is)
1320 Handle(Geom2d_Curve) G;
1321 GeomTools_Curve2dSet::ReadCurve2d(is,G);
1322 Handle(DrawTrSurf_Curve2d) N =
1323 new DrawTrSurf_Curve2d(G,CurvColor,Discret);
1328 static Draw_SaveAndRestore c2dsr("DrawTrSurf_Curve2d",
1329 c2dtest,c2dsave,c2drestore);
1334 //=================================================================
1335 // save and restore bezier curves 2d
1336 //=================================================================
1338 static Standard_Boolean bzc2dtest(const Handle(Draw_Drawable3D)& d)
1340 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_BezierCurve2d));
1343 static void bzc2dsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1345 Handle(DrawTrSurf_BezierCurve2d)
1346 N = Handle(DrawTrSurf_BezierCurve2d)::DownCast(d);
1347 GeomTools_Curve2dSet::PrintCurve2d(N->GetCurve(),OS,Standard_True);
1350 static Handle(Draw_Drawable3D) bzc2drestore (istream& is)
1352 Handle(Geom2d_BezierCurve) G;
1353 GeomTools_Curve2dSet::ReadCurve2d(is,G);
1354 Handle(DrawTrSurf_BezierCurve2d) N =
1355 new DrawTrSurf_BezierCurve2d(G,CurvColor,PolesColor,ShowPoles,
1361 static Draw_SaveAndRestore bzc2dsr("DrawTrSurf_BezierCurve2d",
1362 bzc2dtest,bzc2dsave,bzc2drestore);
1367 //=================================================================
1368 // save and restore bspline curves 2d
1369 //=================================================================
1371 static Standard_Boolean bsc2dtest(const Handle(Draw_Drawable3D)& d)
1373 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_BSplineCurve2d));
1376 static void bsc2dsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1378 Handle(DrawTrSurf_BSplineCurve2d)
1379 N = Handle(DrawTrSurf_BSplineCurve2d)::DownCast(d);
1380 GeomTools_Curve2dSet::PrintCurve2d(N->GetCurve(),OS,Standard_True);
1383 static Handle(Draw_Drawable3D) bsc2drestore (istream& is)
1385 Handle(Geom2d_BSplineCurve) G;
1386 GeomTools_Curve2dSet::ReadCurve2d(is,G);
1387 Handle(DrawTrSurf_BSplineCurve2d) N =
1388 new DrawTrSurf_BSplineCurve2d(G, CurvColor,PolesColor,
1390 KnotsShape,KnotsSize,
1391 ShowPoles,ShowKnots,
1397 static Draw_SaveAndRestore bsc2dsr("DrawTrSurf_BSplineCurve2d",
1398 bsc2dtest,bsc2dsave,bsc2drestore);
1401 //=================================================================
1402 // save and restore surfaces
1403 //=================================================================
1405 static Standard_Boolean stest(const Handle(Draw_Drawable3D)& d)
1407 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Surface));
1410 static void ssave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1412 Handle(DrawTrSurf_Surface) N = Handle(DrawTrSurf_Surface)::DownCast(d);
1413 GeomTools_SurfaceSet::PrintSurface(N->GetSurface(),OS,Standard_True);
1416 static Handle(Draw_Drawable3D) srestore (istream& is)
1418 Handle(Geom_Surface) G;
1419 GeomTools_SurfaceSet::ReadSurface(is,G);
1420 Handle(DrawTrSurf_Surface) N =
1421 new DrawTrSurf_Surface(G,
1423 BoundsColor,IsosColor,
1424 Discret,Deflection,DrawMode);
1429 static Draw_SaveAndRestore ssr("DrawTrSurf_Surface",
1430 stest,ssave,srestore);
1435 //=================================================================
1436 // save and restore bezier surfaces
1437 //=================================================================
1439 static Standard_Boolean bzstest(const Handle(Draw_Drawable3D)& d)
1441 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_BezierSurface));
1444 static void bzssave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1446 Handle(DrawTrSurf_BezierSurface)
1447 N = Handle(DrawTrSurf_BezierSurface)::DownCast(d);
1448 GeomTools_SurfaceSet::PrintSurface(N->GetSurface(),OS,Standard_True);
1451 static Handle(Draw_Drawable3D) bzsrestore (istream& is)
1453 Handle(Geom_BezierSurface) G;
1454 GeomTools_SurfaceSet::ReadSurface(is,G);
1455 Handle(DrawTrSurf_BezierSurface) N =
1456 new DrawTrSurf_BezierSurface(G,NbUIsos,NbVIsos,
1457 BoundsColor,IsosColor,PolesColor,
1459 Discret,Deflection,DrawMode);
1464 static Draw_SaveAndRestore bzssr("DrawTrSurf_BezierSurface",
1465 bzstest,bzssave,bzsrestore);
1470 //=================================================================
1471 // save and restore bspline surfaces
1472 //=================================================================
1474 static Standard_Boolean bsstest(const Handle(Draw_Drawable3D)& d)
1476 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_BSplineSurface));
1479 static void bsssave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1481 Handle(DrawTrSurf_BSplineSurface)
1482 N = Handle(DrawTrSurf_BSplineSurface)::DownCast(d);
1483 GeomTools_SurfaceSet::PrintSurface(N->GetSurface(),OS,Standard_True);
1486 static Handle(Draw_Drawable3D) bssrestore (istream& is)
1488 Handle(Geom_BSplineSurface) G;
1489 GeomTools_SurfaceSet::ReadSurface(is,G);
1490 Handle(DrawTrSurf_BSplineSurface) N;
1492 N = new DrawTrSurf_BSplineSurface(G,
1494 BoundsColor,IsosColor,
1495 PolesColor,KnotsColor,
1496 KnotsShape,KnotsSize,
1497 ShowPoles,ShowKnots,
1498 Discret,Deflection,DrawMode);
1500 N = new DrawTrSurf_BSplineSurface(G,
1501 BoundsColor,IsosColor,
1502 PolesColor,KnotsColor,
1503 KnotsShape,KnotsSize,
1504 ShowPoles,ShowKnots,
1505 Discret,Deflection,DrawMode);
1511 static Draw_SaveAndRestore bsssr("DrawTrSurf_BSplineSurface",
1512 bsstest,bsssave,bssrestore);
1515 //=================================================================
1516 // save and restore points
1517 //=================================================================
1519 static Standard_Boolean pnttest(const Handle(Draw_Drawable3D)& d)
1521 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Point));
1524 static void pntsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1526 Handle(DrawTrSurf_Point)
1527 N = Handle(DrawTrSurf_Point)::DownCast(d);
1528 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1529 ios::fmtflags F = OS.flags();
1530 OS.setf(ios::scientific,ios::floatfield);
1533 long form = OS.setf(ios::scientific);
1534 int prec = OS.precision(15);
1536 gp_Pnt P = N->Point();
1539 OS << P.X() << " " << P.Y() << " " << P.Z() << "\n";
1543 OS << P.X() << " " << P.Y() << "\n";
1545 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1553 static Handle(Draw_Drawable3D) pntrestore (istream& is)
1555 Standard_Integer is3d;
1557 Standard_Real x,y,z;
1562 Handle(DrawTrSurf_Point) N;
1564 N = new DrawTrSurf_Point(gp_Pnt(x,y,z),PntShape,PntColor);
1566 N = new DrawTrSurf_Point(gp_Pnt2d(x,y),PntShape,PntColor);
1572 static Draw_SaveAndRestore pntsr("DrawTrSurf_Point",
1573 pnttest,pntsave,pntrestore);
1577 //=================================================================
1578 // save and restore triangulation
1579 //=================================================================
1581 static Standard_Boolean triatest(const Handle(Draw_Drawable3D)& d)
1583 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Triangulation));
1586 static void triasave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1588 Handle(DrawTrSurf_Triangulation)
1589 T = Handle(DrawTrSurf_Triangulation)::DownCast(d);
1590 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1591 ios::fmtflags F = OS.flags();
1592 OS.setf(ios::scientific,ios::floatfield);
1595 long form = OS.setf(ios::scientific);
1596 int prec = OS.precision(15);
1598 Poly::Write(T->Triangulation(),OS);
1599 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1607 static Handle(Draw_Drawable3D) triarestore (istream& is)
1609 return new DrawTrSurf_Triangulation(Poly::ReadTriangulation(is));
1613 static Draw_SaveAndRestore triasr("DrawTrSurf_Triangulation",
1614 triatest,triasave,triarestore);
1618 //=================================================================
1619 // save and restore polygon3d
1620 //=================================================================
1622 static Standard_Boolean poly3dtest(const Handle(Draw_Drawable3D)& d)
1624 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Polygon3D));
1627 static void poly3dsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1629 Handle(DrawTrSurf_Polygon3D)
1630 T = Handle(DrawTrSurf_Polygon3D)::DownCast(d);
1631 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1632 ios::fmtflags F = OS.flags();
1633 OS.setf(ios::scientific,ios::floatfield);
1636 long form = OS.setf(ios::scientific);
1637 int prec = OS.precision(15);
1639 Poly::Write(T->Polygon3D(),OS);
1640 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1648 static Handle(Draw_Drawable3D) poly3drestore (istream& is)
1650 return new DrawTrSurf_Polygon3D(Poly::ReadPolygon3D(is));
1654 static Draw_SaveAndRestore poly3dsr("DrawTrSurf_Polygon3D",
1655 poly3dtest,poly3dsave,poly3drestore);
1658 //=================================================================
1659 // save and restore polygon2d
1660 //=================================================================
1662 static Standard_Boolean poly2dtest(const Handle(Draw_Drawable3D)& d)
1664 return d->IsInstance(STANDARD_TYPE(DrawTrSurf_Polygon2D));
1667 static void poly2dsave(const Handle(Draw_Drawable3D)&d, ostream& OS)
1669 Handle(DrawTrSurf_Polygon2D)
1670 T = Handle(DrawTrSurf_Polygon2D)::DownCast(d);
1671 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1672 ios::fmtflags F = OS.flags();
1673 OS.setf(ios::scientific, ios::floatfield);
1676 long form = OS.setf(ios::scientific);
1677 int prec = OS.precision(15);
1679 Poly::Write(T->Polygon2D(),OS);
1680 #if defined(HAVE_IOS) && !defined(__sgi) && !defined(IRIX)
1688 static Handle(Draw_Drawable3D) poly2drestore (istream& is)
1690 return new DrawTrSurf_Polygon2D(Poly::ReadPolygon2D(is));
1694 static Draw_SaveAndRestore poly2dsr("DrawTrSurf_Polygon2D",
1695 poly2dtest,poly2dsave,poly2drestore);