0024096: Eliminate compiler warning C4505 in MSVC++ with warning level 4
[occt.git] / src / TestTopOpe / TestTopOpe_MesureCommands.cxx
1 // Created on: 1996-10-21
2 // Created by: Jean Yves LEBEY
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
10 //
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 //
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
20
21
22 #include <TestTopOpe.ixx>
23
24 #include <Draw_Appli.hxx>
25 #include <Draw_Interpretor.hxx>
26 #include <TestTopOpeDraw_DrawableMesure.hxx>
27 #include <DrawTrSurf_Curve.hxx>
28
29 #include <TestTopOpeTools_Mesure.hxx>
30 #include <TestTopOpeTools_HArray1OfMesure.hxx>
31 #include <TestTopOpeDraw_Array1OfDrawableMesure.hxx>
32 #include <TColStd_Array1OfTransient.hxx>
33 #include <TColStd_Array1OfAsciiString.hxx>
34
35 #ifdef WNT
36 Standard_IMPORT Draw_Viewer dout;
37 #endif
38
39
40 //static Standard_Boolean Bool;
41 static Standard_Integer NbMES = 0;
42 static TColStd_Array1OfAsciiString *PDel = NULL;
43 static TColStd_Array1OfAsciiString *PNAME = NULL;
44 static TestTopOpeTools_Array1OfMesure *PAMES = NULL;
45
46 //-----------------------------------------------
47 static Standard_Integer SetName(const Standard_Character *C, Draw_Interpretor& di)
48 //-----------------------------------------------
49 // here the number of measurement is managed
50 {
51   if(PNAME == NULL) { 
52     PNAME = new TColStd_Array1OfAsciiString(1, 100);
53   }
54   if(PDel == NULL) { 
55     PDel = new TColStd_Array1OfAsciiString(1, 100);
56   }
57   if(NbMES >= 100) {di << "ATTENTION : last measurement accepted";}
58   for(Standard_Integer i = 1; i <= NbMES; i++) {
59     Standard_Character *Ch = (Standard_Character *)(*PNAME).Value(i).ToCString();
60     if( *Ch == *C) return i;
61   }
62   (*PNAME).SetValue(++NbMES, *C);
63   (*PDel).SetValue(NbMES, "0");
64   return NbMES;
65 }
66
67 static void Mes_help(Draw_Interpretor& di)
68 {
69   di<<"\n";
70   di<<"mesure M : create/reset measurement M "<<"\n";
71   di<<"mesure reset : reinitialize all measurements"<<"\n";
72   di<<"mesure M n t : add data [n t] to M"<<"\n";
73   di<<"mesure range M : sort indexes 'min max' of M"<<"\n";
74   di<<"mesure minmax M : take 'xmin ymin xmax ymax' from M"<<"\n";
75   di<<"mesure xy <i> M : take 'x y' = M(i)"<<"\n";
76   di<<"seem M : visualize M"<<"\n";
77   di<<"seemx M fx : visualize M with factor in x"<<"\n";
78   di<<"seemx M fy : visualize M with factor in y"<<"\n";
79   di<<"seemxy M fx fy : visualize M with factor in x,y"<<"\n";
80   di<<""<<"\n";
81 }
82
83 // ----------------------------------------------------------------------
84 Standard_Integer Mes(Draw_Interpretor& di,Standard_Integer na, const char** a)
85 // ----------------------------------------------------------------------
86 {
87   if (!strcmp(a[0],"mesure")) {
88     if (na == 1) {
89       Mes_help(di);
90       return 0;
91     }
92     else if (na == 2) {
93       if (!strcmp(a[1],"reset")) { PAMES = NULL; return 0;}
94       else {
95         Standard_Integer CurrentMES2 = SetName(a[1],di);
96         TestTopOpeTools_Mesure *MES2;
97         MES2 = new TestTopOpeTools_Mesure(a[1]);
98         if(PAMES == NULL) { PAMES = new  TestTopOpeTools_Array1OfMesure(1, 100); }
99         (*PAMES).SetValue(CurrentMES2, *MES2);
100       }
101     }
102     else if (na == 3) {
103       if      (!strcmp(a[1],"range")) {
104         const TestTopOpeTools_Mesure& M = (*PAMES).Value(SetName(a[2],di));
105         di<<"1 "<<M.NPnts();
106       }
107       else if (!strcmp(a[1],"minmax")) {
108         const TestTopOpeTools_Mesure& M = (*PAMES).Value(SetName(a[2],di));
109         Standard_Integer n=M.NPnts();
110         Standard_Real xm=0,ym=0,xM=0,yM=0;
111         if (n) {
112           xm=1.e100;ym=1.e100;xM=-1.e100;yM=-1.e100;
113           for (Standard_Integer i=1;i<=n;i++) {
114             Standard_Real x,y,z;gp_Pnt p=M.Pnt(i);p.Coord(x,y,z);
115             xm=Min(xm,x);xM=Max(xM,x);
116             ym=Min(ym,y);yM=Max(yM,y);
117           }
118         }
119         di<<xm<<" "<<ym<<" "<<xM<<" "<<yM;
120       }
121     }
122     else if (na == 4) {
123       if (!strcmp(a[1],"xy")) {
124         Standard_Integer i = Draw::Atoi(a[2]); 
125         const TestTopOpeTools_Mesure& M = (*PAMES).Value(SetName(a[3],di));
126         Standard_Real x,y,z;gp_Pnt p=M.Pnt(i);p.Coord(x,y,z);
127         di<<x<<" "<<y;
128         return 0;
129       }
130       Standard_Integer test2 = NbMES;
131       Handle(Draw_Drawable3D) D = Draw::Get(a[1],Standard_False);
132       Standard_Integer CurrentMES4 = SetName(a[1],di);
133       if(PAMES == NULL) { PAMES = new  TestTopOpeTools_Array1OfMesure(1, 100); } 
134       if((test2 < CurrentMES4) || // if nee measurement or if
135          (D.IsNull() && ((*PDel).Value(CurrentMES4) == "1"))) // after a "dall" 
136         { 
137           TestTopOpeTools_Mesure *MES4 = (new TestTopOpeTools_Mesure(a[1]));
138           (*MES4).Add(Draw::Atoi(a[2]),Draw::Atof(a[3]));
139           if((*PDel).Value(CurrentMES4) == "1") {
140             TestTopOpeTools_Mesure MES3;
141             MES3 = (*PAMES).Value(CurrentMES4);
142             MES3.Clear();
143           }
144           (*PDel).SetValue(CurrentMES4, "0");
145           (*PAMES).SetValue(CurrentMES4, *MES4);
146         } else {
147           TestTopOpeTools_Mesure& MES4 = (*PAMES).ChangeValue(CurrentMES4);
148           MES4.Add(Draw::Atoi(a[2]),Draw::Atof(a[3]));
149           (*PAMES).SetValue(CurrentMES4, MES4);
150         }
151       
152     }
153   }
154   else if (!strcmp(a[0],"seem")) {
155     if (na < 2) return 0;
156     TestTopOpeTools_Mesure MESS2;
157     Handle(Draw_Drawable3D) D;
158     Handle(TestTopOpeDraw_DrawableMesure) DMES2;
159     Standard_Integer test4, CurrentMESS2, i;
160     if(PAMES == NULL) { 
161       PAMES = new  TestTopOpeTools_Array1OfMesure(1, 100); 
162     }      
163     for (i=1;i<na;i++) {
164       test4 = NbMES;
165       CurrentMESS2 = SetName(a[i],di);
166       D = Draw::Get(a[i],Standard_False);
167       if(test4 < CurrentMESS2) {// if nee measurement, it is after restore
168         if(D.IsNull()) { return 0; }
169         DMES2 = Handle(TestTopOpeDraw_DrawableMesure)::DownCast(D);
170         TestTopOpeTools_Mesure *MES;
171         MES = (new TestTopOpeTools_Mesure(DMES2->Pnts()));
172         MES->SetName(a[i]);
173         (*PAMES).SetValue(CurrentMESS2, *MES);
174       } else {
175         MESS2 = (*PAMES).Value(CurrentMESS2);
176         if(!D.IsNull()) {
177           DMES2 = Handle(TestTopOpeDraw_DrawableMesure)::DownCast(D);
178         } else { // --> M is already in PAMES, and DMES has no name
179           DMES2 = new TestTopOpeDraw_DrawableMesure(MESS2, Draw_blanc,Draw_rose);
180         }
181       }
182       Draw::Set(a[i],DMES2);
183       (*PDel).SetValue(CurrentMESS2, "1");
184     }
185     dout.RepaintAll();
186   }
187   else if (!strcmp(a[0],"seemx") || !strcmp(a[0],"seemy")) {
188     if (na < 3) return 0;
189     Standard_Real dx=1.,dy=1.;
190     Standard_Boolean isX = Standard_False, isY = Standard_False;
191     if      (!strcmp(a[0],"seemx")) { dx = Draw::Atof(a[na-1]); isX = Standard_True; }
192     else if (!strcmp(a[0],"seemy")) { dy = Draw::Atof(a[na-1]); isY = Standard_True; }
193     TestTopOpeTools_Mesure MES5;
194     Handle(Draw_Drawable3D) D;
195     Handle(TestTopOpeDraw_DrawableMesure) DMES5;
196     Standard_Integer test, i;
197     if(PAMES == NULL) { PAMES = new  TestTopOpeTools_Array1OfMesure(1, 100); }      
198     for(i = 1; i < na-1; i++) {
199       test = NbMES;
200       Standard_Integer CurrentMES5 = SetName(a[i],di);
201       D = Draw::Get(a[i],Standard_False);
202       if(test < CurrentMES5) {// if new measurement, it is after restore
203         if(D.IsNull()) { return 0; }
204         DMES5 = Handle(TestTopOpeDraw_DrawableMesure)::DownCast(D);
205         TestTopOpeTools_Mesure *MES;
206         MES = (new TestTopOpeTools_Mesure(DMES5->Pnts()));
207         MES->SetName(a[i]);
208         (*PAMES).SetValue(CurrentMES5, *MES);
209       } else {
210         MES5 = (*PAMES).Value(CurrentMES5);
211         if(!D.IsNull()) {
212           DMES5 = Handle(TestTopOpeDraw_DrawableMesure)::DownCast(D);
213         } else {
214           DMES5 = new TestTopOpeDraw_DrawableMesure(MES5, Draw_blanc,Draw_rose);
215         }
216       }
217       Draw::Set(a[i],DMES5);
218       (*PDel).SetValue(CurrentMES5, "1");
219       if(isX) DMES5->SetScaleX(dx);
220       if(isY) DMES5->SetScaleY(dy);
221     }
222   }
223   else if (!strcmp(a[0],"seemxy")) {
224     if (na < 4) return 0;
225     TestTopOpeTools_Mesure& M = (*PAMES).ChangeValue(SetName(a[1],di));
226     Standard_Real dx=Draw::Atof(a[2]),dy=Draw::Atof(a[3]);
227     Handle(Draw_Drawable3D) D = Draw::Get(a[1],Standard_False);
228     Handle(TestTopOpeDraw_DrawableMesure) DM;
229     DM = Handle(TestTopOpeDraw_DrawableMesure)::DownCast(D);
230     if (DM.IsNull()) {
231       DM = new TestTopOpeDraw_DrawableMesure(M,Draw_blanc,Draw_rose);
232       Draw::Set(a[1],DM);
233     }
234     DM->SetScaleX(dx);
235     DM->SetScaleY(dy);
236     dout<<DM;
237   }
238
239   return 0;
240 }
241
242 void TestTopOpe::MesureCommands(Draw_Interpretor& theCommands)
243      //=======================================================================
244 {
245   const char* g = "Topological Operation Mesure commands";
246   theCommands.Add("mesure","mesure M [n v] : create /add a data/ to a mesure",__FILE__,Mes,g);
247   theCommands.Add("seem","seem M : visualize mesure M",__FILE__,Mes,g);
248   theCommands.Add("seemx","seemx M ScaleX",__FILE__,Mes,g);
249   theCommands.Add("seemy","seemy M ScaleY",__FILE__,Mes,g);
250   theCommands.Add("seemxy","seemxy M ScaleX ScaleY",__FILE__,Mes,g);
251 }