1 // Created on: 2002-03-19
2 // Created by: QA Admin
3 // Copyright (c) 2002-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
20 #include <Draw_Interpretor.hxx>
22 #include <DrawTrSurf.hxx>
23 #include <AIS_InteractiveContext.hxx>
24 #include <ViewerTest.hxx>
25 #include <AIS_Shape.hxx>
26 #include <TopoDS_Shape.hxx>
28 #include <Geom2d_Line.hxx>
29 #include <TColgp_Array1OfPnt2d.hxx>
30 #include <Geom2d_BezierCurve.hxx>
31 #include <Geom2dAdaptor_Curve.hxx>
32 #include <Geom2dGcc_QualifiedCurve.hxx>
33 #include <Geom2dGcc_Circ2d2TanRad.hxx>
34 #include <Geom2d_Circle.hxx>
35 #include <TopoDS_Edge.hxx>
37 #include <BRepAdaptor_Curve.hxx>
39 #include <BRepFeat_SplitShape.hxx>
40 #include <DBRep_DrawableShape.hxx>
41 #include <BRep_Builder.hxx>
42 #include <TopTools_ListIteratorOfListOfShape.hxx>
43 #include <BRepExtrema_DistShapeShape.hxx>
45 #include <TopoDS_Vertex.hxx>
46 #include <BRepLib_MakeVertex.hxx>
47 #include <BRepLib_MakeEdge.hxx>
48 #include <TColgp_HArray1OfPnt.hxx>
49 #include <GeomAPI_Interpolate.hxx>
50 #include <Precision.hxx>
51 #include <Geom_BSplineCurve.hxx>
52 #include <OSD_Path.hxx>
53 #include <ShapeBuild_ReShape.hxx>
54 #include <ShapeExtend_WireData.hxx>
55 #include <TopoDS_Wire.hxx>
56 #include <ShapeExtend_WireData.hxx>
57 #include <ShapeFix_Wire.hxx>
58 #include <ShapeAnalysis_WireOrder.hxx>
59 #include <ShapeAnalysis_Wire.hxx>
61 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
62 #include <BRep_Tool.hxx>
63 #include <ShapeAnalysis_Curve.hxx>
64 #include <V3d_View.hxx>
65 #include <Standard_ErrorHandler.hxx>
67 static Standard_Integer BUC60897 (Draw_Interpretor& di, Standard_Integer /*argc*/, const char ** /*argv*/)
69 Standard_Character abuf[16];
71 Handle(Geom2d_Line) aLine = new Geom2d_Line(gp_Pnt2d(100, 0), gp_Dir2d(-1, 0));
73 Standard_CString st = abuf;
74 DrawTrSurf::Set (st, aLine);
76 TColgp_Array1OfPnt2d aPoints(1, 3);
77 aPoints.SetValue(1, gp_Pnt2d(0, 0));
78 aPoints.SetValue(2, gp_Pnt2d(50, 50));
79 aPoints.SetValue(3, gp_Pnt2d(0, 100));
80 Handle(Geom2d_BezierCurve) aCurve = new Geom2d_BezierCurve(aPoints);
81 Sprintf(abuf,"curve");
82 DrawTrSurf::Set (st, aCurve);
84 Geom2dAdaptor_Curve aCLine(aLine);
85 Geom2dAdaptor_Curve aCCurve(aCurve);
86 Geom2dGcc_QualifiedCurve aQualifCurve1(aCLine, GccEnt_outside);
87 Geom2dGcc_QualifiedCurve aQualifCurve2(aCCurve, GccEnt_outside);
88 Geom2dGcc_Circ2d2TanRad aGccCirc2d(aQualifCurve1, aQualifCurve2, 10, 1e-7);
89 if(!aGccCirc2d.IsDone())
91 di << "Faulty: can not create a circle." << "\n";
94 for(Standard_Integer i = 1; i <= aGccCirc2d.NbSolutions(); i++)
96 gp_Circ2d aCirc2d = aGccCirc2d.ThisSolution(i);
97 di << "circle : X " << aCirc2d.Location().X() << " Y " << aCirc2d.Location().Y() << " R " << aCirc2d.Radius();
98 Standard_Real aTmpR1, aTmpR2;
99 gp_Pnt2d aPnt2d1, aPnt2d2;
100 aGccCirc2d.Tangency1(i, aTmpR1, aTmpR2, aPnt2d1);
101 aGccCirc2d.Tangency2(i, aTmpR1, aTmpR2, aPnt2d2);
102 di << "\n" << "tangency1 : X " << aPnt2d1.X() << " Y " << aPnt2d1.Y();
103 di << "\n" << "tangency2 : X " << aPnt2d2.X() << " Y " << aPnt2d2.Y() << "\n";
105 Sprintf(abuf,"circle_%d",i);
106 Handle(Geom2d_Curve) circ_res = new Geom2d_Circle(aCirc2d);
107 DrawTrSurf::Set (st, circ_res);
110 di << "done" << "\n";
114 static Standard_Integer BUC60889 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
117 di << "Usage : " << argv[0] << " point_1 point_2 name_of_edge bndbox_X1 bndbox_Y1 bndbox_Z1 bndbox_X2 bndbox_Y2 bndbox_Z2" << "\n";
121 if (!(DrawTrSurf::GetPoint(argv[1], p1)) || !(DrawTrSurf::GetPoint(argv[2], p2)))
123 di << "Need two points to define a band" << "\n";
126 TopoDS_Edge ed = TopoDS::Edge(DBRep::Get(argv[3]));
129 di << "Need an edge to define the band direction" << "\n";
132 BRepAdaptor_Curve curve(ed);
133 gp_Dir d = curve.Line().Direction();
135 bnd_box.Update(Draw::Atof(argv[4]), Draw::Atof(argv[5]), Draw::Atof(argv[6]), Draw::Atof(argv[7]), Draw::Atof(argv[8]), Draw::Atof(argv[9]));
136 if(bnd_box.IsOut(p1, p2, d))
137 di << "The band lies out of the box" << "\n";
139 di << "The band intersects the box" << "\n";
145 static Standard_Integer BUC60852 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
148 di << "Usage : " << argv[0] << " name_of_edge bndbox_X1 bndbox_Y1 bndbox_Z1 bndbox_X2 bndbox_Y2 bndbox_Z2" << "\n";
150 TopoDS_Edge shape = TopoDS::Edge(DBRep::Get(argv[1]));
151 if(shape.ShapeType() != TopAbs_EDGE)
152 di << "shape must be an edge" << "\n";
154 BRepAdaptor_Curve curve(shape);
155 gp_Lin lin = curve.Line();
157 bnd_box.Update(Draw::Atof(argv[2]), Draw::Atof(argv[3]), Draw::Atof(argv[4]), Draw::Atof(argv[5]), Draw::Atof(argv[6]), Draw::Atof(argv[7]));
158 if(bnd_box.IsOut(lin))
159 di << "Line that lies on edge does not intersect the box" << "\n";
161 di << "Line that lies on edge intersects the box" << "\n";
167 static Standard_Integer BUC60854 (Draw_Interpretor& /*di*/, Standard_Integer argc, const char ** argv)
169 Standard_Integer newnarg;
170 if (argc < 3) return 1;
171 TopoDS_Shape S = DBRep::Get(argv[2]);
172 BRepFeat_SplitShape Spls(S);
173 Standard_Boolean pick = Standard_False;
176 Standard_Integer i = 3;
177 for ( newnarg=3; newnarg<argc; newnarg++) {
178 if (argv[newnarg][0] == '@') {
183 (newnarg !=argc && ((argc-newnarg)<=2 || (argc-newnarg)%2 != 1))) {
187 pick = (argv[i][0] == '.');
188 EF = DBRep::Get(argv[i],TopAbs_FACE);
189 if (EF.IsNull()) return 1;
191 while (i < newnarg) {
193 DBRep_DrawableShape::LastPick(EF,u,v);
195 if (EF.ShapeType() == TopAbs_FACE) {
197 while (i < newnarg) {
199 Standard_Boolean rever = Standard_False;
200 if (argv[i][0] == '-') {
201 if (argv[i][1] == '\0')
203 pick = (argv[i][1] == '.');
204 const char* Temp = argv[i]+1;
205 W = DBRep::Get(Temp,TopAbs_SHAPE,Standard_False);
206 rever = Standard_True;
209 pick = (argv[i][0] == '.');
210 W = DBRep::Get(argv[i],TopAbs_SHAPE,Standard_False);
215 TopAbs_ShapeEnum wtyp = W.ShapeType();
216 if (wtyp != TopAbs_WIRE && wtyp != TopAbs_EDGE && pick) {
218 DBRep_DrawableShape::LastPick(W,u,v);
219 wtyp = W.ShapeType();
221 if (wtyp != TopAbs_WIRE && wtyp != TopAbs_EDGE) {
222 EF = DBRep::Get(argv[i]);
229 if (wtyp == TopAbs_WIRE) {
230 Spls.Add(TopoDS::Wire(W),TopoDS::Face(EF));
233 Spls.Add(TopoDS::Edge(W),TopoDS::Face(EF));
242 for (i++; i<argc; i+=2) {
244 TopoDS_Shape aLocalShape(DBRep::Get(argv[i],TopAbs_EDGE));
245 Es = TopoDS::Edge(aLocalShape);
249 aLocalShape = DBRep::Get(argv[i+1],TopAbs_EDGE);
250 Ew = TopoDS::Edge(aLocalShape);
254 Spls.Add(TopoDS::Edge(Ew),TopoDS::Edge(Es));
257 const TopTools_ListOfShape& aLeftPart = Spls.Left();
260 BB.MakeShell(TopoDS::Shell(aShell));
261 TopTools_ListIteratorOfListOfShape anIter(aLeftPart);
262 for(; anIter.More(); anIter.Next()) BB.Add(aShell, anIter.Value());
263 DBRep::Set(argv[1],aShell);
267 static Standard_Integer BUC60870 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
271 di << "Usage : " << argv[0] << " result name_of_shape_1 name_of_shape_2 dev" << "\n";
274 const char *ns1 = (argv[2]), *ns2 = (argv[3]), *ns0 = (argv[1]);
275 TopoDS_Shape S1(DBRep::Get(ns1)), S2(DBRep::Get(ns2)) ;
276 Standard_Real dev = Draw::Atof(argv[4]);
277 BRepExtrema_DistShapeShape dst(S1 ,S2, dev );
280 Sprintf(named, "%s%s" ,ns0,"_val");
282 Draw::Set(tempd,dst.Value());
284 for (i1=1; i1<= dst.NbSolution(); i1++) {
286 P1 = (dst.PointOnShape1(i1));
287 P2 = (dst.PointOnShape2(i1));
288 if (dst.Value()<=1.e-9) {
289 TopoDS_Vertex V =BRepLib_MakeVertex(P1);
292 Sprintf(namev, "%s" ,ns0);
294 Sprintf(namev, "%s%d" ,ns0,i1);
301 TopoDS_Edge E = BRepLib_MakeEdge (P1, P2);
303 Sprintf(name,"%s",ns0);
305 Sprintf(name,"%s%d",ns0,i1);
313 di << "Faulty : found a problem"<< "\n";
318 static Standard_Integer BUC60902 (Draw_Interpretor& di, Standard_Integer /*argc*/, const char ** /*argv*/)
320 Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt(1,5);
321 gp_Pnt aP(0., 0., 0.);
322 for(Standard_Integer i = 1; i <= 5; i++) {
324 aP.SetY(Sin((i-1)*1.57));
325 aPnts->SetValue(i, aP);
327 GeomAPI_Interpolate anInterpolater(aPnts, Standard_False, Precision::Confusion());
328 anInterpolater.Perform();
329 if(!anInterpolater.IsDone()) {
330 di << "Faulty : error in interpolation" << "\n";
333 Handle(Geom_BSplineCurve) aCur = anInterpolater.Curve();
334 gp_Vec aFirstTang, aLastTang;
335 aCur->D1(aCur->FirstParameter(), aP, aFirstTang);
336 aCur->D1(aCur->LastParameter(), aP, aLastTang);
337 di << " Used Tang1 = " << aFirstTang.X() << " " << aFirstTang.Y() << " " << aFirstTang.Z() << "\n";
338 di << " Used Tang2 = " << aLastTang.X() << " " << aLastTang.Y() << " " << aLastTang.Z() << "\n";
339 GeomAPI_Interpolate anInterpolater1(aPnts, Standard_False, Precision::Confusion());
340 anInterpolater1.Load(aFirstTang, aLastTang, Standard_False);
341 anInterpolater1.Perform();
342 if(!anInterpolater1.IsDone()) {
343 di << "Faulty : error in interpolation 1" << "\n";
346 aCur = anInterpolater1.Curve();
347 gp_Vec aFirstTang1, aLastTang1;
348 aCur->D1(aCur->FirstParameter(), aP, aFirstTang1);
349 aCur->D1(aCur->LastParameter(), aP, aLastTang1);
350 di << " Tang1 after compute = " << aFirstTang1.X() << " " << aFirstTang1.Y() << " " << aFirstTang1.Z() << "\n";
351 di << " Tang2 after compute = " << aLastTang1.X() << " " << aLastTang1.Y() << " " << aLastTang1.Z() << "\n";
352 if(aFirstTang.IsEqual(aFirstTang1, Precision::Confusion(), Precision::Angular())) {
353 di << "First tangent is OK" << "\n";
356 di << "Faulty : first tangent is wrong" << "\n";
358 if(aLastTang.IsEqual(aLastTang1, Precision::Confusion(), Precision::Angular())) {
359 di << "Last tangent is OK" << "\n";
362 di << "Faulty : last tangent is wrong" << "\n";
367 static Standard_Integer BUC60944 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
370 di << "Usage : " << argv[0] << " path" << "\n";
373 TCollection_AsciiString in(argv[1]);
374 OSD_Path* aPath = new OSD_Path(in);
375 TCollection_AsciiString out;
376 aPath->SystemName(out);
378 di << "The convertion is right." << "\n";
380 di << "Faulty : The convertion is incorrect : " << out.ToCString() << "\n";
381 di << out.ToCString() << "\n";
382 // cout << aPath->Trek() << " !" << endl;
386 Standard_Boolean BuildWiresWithReshape
387 (const Handle(ShapeBuild_ReShape)& theReshape,
388 const TopTools_ListOfShape &theListOfEdges,
389 TopTools_ListOfShape &theListOfWires,
390 const Standard_Boolean isFixConnectedMode,
391 const Standard_Boolean isKeepLoopsMode,
392 const Standard_Real theTolerance)
394 TopTools_ListIteratorOfListOfShape anEdgeIter;
395 Standard_Boolean isDone;
398 theListOfWires.Clear();
399 Handle(ShapeExtend_WireData) aWireData = new ShapeExtend_WireData;
400 Handle(ShapeFix_Wire) aShFixWire = new ShapeFix_Wire;
401 aShFixWire->SetContext (theReshape);
403 Handle(ShapeAnalysis_Wire) aWireAnalyzer;
404 ShapeAnalysis_WireOrder aWireOrder;
406 aShFixWire->Load(aWireData);
407 aShFixWire->SetPrecision(theTolerance);
409 for(anEdgeIter.Initialize(theListOfEdges); anEdgeIter.More(); anEdgeIter.Next())
410 aWireData->Add(TopoDS::Edge(anEdgeIter.Value()));
412 aWireOrder.KeepLoopsMode() = isKeepLoopsMode;
413 aWireAnalyzer = aShFixWire->Analyzer();
414 aWireAnalyzer->CheckOrder(aWireOrder, Standard_True);
416 aShFixWire->FixReorder(aWireOrder);
417 isDone = !aShFixWire->StatusReorder(ShapeExtend_FAIL);
419 return Standard_False;
421 if (isFixConnectedMode)
423 aShFixWire->ModifyTopologyMode() = Standard_True;
424 aShFixWire->FixConnected(theTolerance);
427 aWire = aWireData->Wire();
429 // if (aWire.Closed())
431 // theListOfWires.Append(aWire);
432 // return Standard_True;
436 BRep_Builder aBuilder;
437 TopoDS_Wire aCurWire;
440 TopoDS_Vertex aVlast;
441 Standard_Integer aNbEdges = aWireData->NbEdges();
443 aBuilder.MakeWire(aCurWire);
446 TopoDS_Edge anE = aWireData->Edge(1);
447 TopExp::Vertices(anE, aVf, aVlast, Standard_True);
448 aBuilder.Add(aCurWire, anE);
451 for(i = 2; i <= aNbEdges; i++)
453 TopoDS_Edge anE = aWireData->Edge(i);
454 TopExp::Vertices(anE, aVf, aVl, Standard_True);
455 if (aVf.IsSame(aVlast))
457 aBuilder.Add(aCurWire, anE);
463 TopExp::Vertices(aCurWire, aVf, aVl);
465 aCurWire.Closed(Standard_True);
466 theListOfWires.Append(aCurWire);
467 aBuilder.MakeWire(aCurWire);
468 aBuilder.Add(aCurWire, anE);
472 TopExp::Vertices(aCurWire, aVf, aVl);
474 aCurWire.Closed(Standard_True);
475 theListOfWires.Append(aCurWire);
477 return Standard_True;
480 Standard_Boolean BuildWires(const TopTools_ListOfShape &theListOfEdges,
481 TopTools_ListOfShape &theListOfWires,
482 const Standard_Boolean isFixConnectedMode = Standard_False,
483 const Standard_Boolean isKeepLoopsMode = Standard_True,
484 const Standard_Real theTolerance = Precision::Confusion())
486 Handle(ShapeBuild_ReShape) aReshape = new ShapeBuild_ReShape;
487 return BuildWiresWithReshape (aReshape, theListOfEdges, theListOfWires,
488 isFixConnectedMode, isKeepLoopsMode, theTolerance);
491 Standard_Boolean BuildBoundWires(const TopoDS_Shape &theShell,
492 TopTools_ListOfShape &theListOfWires)
494 TopTools_IndexedDataMapOfShapeListOfShape
497 Standard_Boolean isBound;
498 TopTools_ListOfShape aBoundaryEdges;
500 TopExp::MapShapesAndAncestors(theShell, TopAbs_EDGE, TopAbs_FACE, anEdgeFaceMap);
502 isBound = Standard_False;
503 for (i = 1; i <= anEdgeFaceMap.Extent(); i++)
505 const TopTools_ListOfShape &anAncestFaces = anEdgeFaceMap.FindFromIndex(i);
506 if (anAncestFaces.Extent() == 1)
508 const TopoDS_Edge &anEdge = TopoDS::Edge(anEdgeFaceMap.FindKey(i));
509 if (!BRep_Tool::Degenerated(anEdge))
511 aBoundaryEdges.Append(anEdge);
512 isBound = Standard_True;
518 return Standard_True;
520 return BuildWires(aBoundaryEdges, theListOfWires);
523 static Standard_Integer BUC60868 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
526 di << "Usage : " <<argv[0] << " Result Shell" << "\n";
530 TopoDS_Shape aShell = DBRep::Get(argv[2]);
532 if (aShell.IsNull()) {
533 di << "Faulty : The shape is NULL" << "\n";
537 TopTools_ListOfShape aListOfWires;
538 BuildBoundWires(aShell, aListOfWires);
541 if (aListOfWires.IsEmpty())
542 di << "no bound" << "\n";
543 else if (aListOfWires.Extent() == 1)
544 aRes = aListOfWires.First();
547 aBld.MakeCompound (TopoDS::Compound(aRes));
548 TopTools_ListIteratorOfListOfShape aWireIter (aListOfWires);
549 for(; aWireIter.More(); aWireIter.Next())
550 aBld.Add (aRes, aWireIter.Value());
553 DBRep::Set(argv[1], aRes);
557 static Standard_Integer BUC60924 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
560 di << "Usage : " <<argv[0] << " curve X Y Z" << "\n";
564 Handle(Geom_Curve) aCurve = DrawTrSurf::GetCurve(argv[1]);
566 if (aCurve.IsNull()) {
567 di << "Faulty : the curve is NULL." << "\n";
571 gp_XYZ aVec(Draw::Atof(argv[2]),Draw::Atof(argv[3]),Draw::Atof(argv[4]));
573 Standard_Boolean isPlanar=Standard_False;
574 isPlanar=ShapeAnalysis_Curve::IsPlanar(aCurve,aVec,1e-7);
577 di << "The curve is planar !" << "\n";
579 di << "Faulty : the curve is not planar!" << "\n";
584 static Standard_Integer BUC60920(Draw_Interpretor& di, Standard_Integer /*argc*/, const char ** argv)
587 Handle(AIS_InteractiveContext) myAISContext = ViewerTest::GetAISContext();
588 if(myAISContext.IsNull()) {
589 cerr << "use 'vinit' command before " << argv[0] << "\n";
593 di.Eval("box b 10 10 10");
594 di.Eval("box w 20 20 20");
595 di.Eval("explode w e");
597 di.Eval(" vdisplay b");
598 di.Eval("vsetdispmode 1");
600 const char * Shname="w_11";
601 TopoDS_Shape theShape = DBRep::Get(Shname);
603 Handle(AIS_Shape) anAISShape = new AIS_Shape( theShape );
604 myAISContext->Display( anAISShape, Standard_True );
606 Handle(V3d_View) myV3dView = ViewerTest::CurrentView();
609 myV3dView->Project(20,20,0,Xv,Yv);
610 // cout<<Xv<<"\t"<<Yv<<endl;
612 Standard_Integer Xp,Yp;
613 myV3dView->Convert(Xv,Yv,Xp,Yp);
614 // cout<<Xp<<"\t"<<Yp<<endl;
616 myAISContext->MoveTo( Xp,Yp, myV3dView );
617 myAISContext->MoveTo( Xp,Yp, myV3dView );
619 // if (myAISContext->IsHilighted(anAISShape))
620 // cout << "has hilighted shape : OK" << endl;
621 // else cout << "has hilighted shape : bugged - Faulty " << endl;
626 #include <LDOMParser.hxx>
627 static Standard_Integer OCC983 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
630 di << "Usage : " << argv[0] << " file" << "\n";
637 const char *File = (argv[1]);
639 if(!aParser.parse(File)) {
640 myDOM=aParser.getDocument();
641 di<<"Document parsed"<<"\n";
643 di<<"Document not parsed"<<"\n";
647 LDOM_Element root = myDOM.getDocumentElement();
649 if ( root.isNull() ) {
650 di<<"Root element is null"<<"\n";
654 TCollection_AsciiString RootName = root.getTagName();
655 di << " RootName = " << RootName.ToCString() << "\n";
656 LDOM_NodeList aChildList = root.GetAttributesList();
657 for(Standard_Integer i=0,n=aChildList.getLength();i<n;i++) {
658 LDOM_Node item = aChildList.item(i);
659 TCollection_AsciiString itemName = item.getNodeName();
660 TCollection_AsciiString itemValue = item.getNodeValue();
661 di << " AttributeName = " << itemName.ToCString() << "\n";
662 di << " AttributeValue = " << itemValue.ToCString() << "\n";
665 // LDOM_Element element;
666 // for ( element = (const LDOM_Element&) root.getFirstChild();
667 // !element.isNull();
668 // element = (const LDOM_Element&) element.getNextSibling() ) {
669 LDOM_Element element;
671 for ( node = root.getFirstChild(), element = (const LDOM_Element&) node;
673 node = element.getNextSibling(), element = (const LDOM_Element&) node) {
674 TCollection_AsciiString ElementName = element.getTagName();
675 di << " ElementName = " << ElementName.ToCString() << "\n";
676 LDOM_NodeList aChildList2 = element.GetAttributesList();
677 for(Standard_Integer i2=0,n2=aChildList2.getLength();i2<n2;i2++) {
678 LDOM_Node item2 = aChildList2.item(i2);
679 TCollection_AsciiString itemName2 = item2.getNodeName();
680 TCollection_AsciiString itemValue2 = item2.getNodeValue();
681 di << " AttributeName = " << itemName2.ToCString() << "\n";
682 di << " AttributeValue = " << itemValue2.ToCString() << "\n";
689 static Standard_Integer OCC984 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
692 di << "Usage : " << argv[0] << " file" << "\n";
699 //Standard_Character *File = new Standard_Character [100];
700 //Sprintf(File,"%s",argv[1]);
701 const char *File = (argv[1]);
703 if(!aParser.parse(File)) {
704 myDOM=aParser.getDocument();
705 di<<"Document parsed"<<"\n";
707 di<<"Document not parsed"<<"\n";
713 static Standard_Integer OCC1786 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
717 di << "Usage : " << argv[0] << " AutoHilight=0/1" << "\n";
720 Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
721 if(aContext.IsNull())
723 cerr << "use 'vinit' command before " << argv[0] << "\n";
726 Standard_Integer AutoHilightInteger = Draw::Atoi(argv[1]);
727 Standard_Boolean AutoHilightBoolean = Standard_False;
728 if (AutoHilightInteger != 0) {
729 AutoHilightBoolean = Standard_True;
731 aContext->SetAutomaticHilight(AutoHilightBoolean);
736 // See QAOCC.cxx OCC6143
737 //static Standard_Integer OCC1723 (Draw_Interpretor& /*di*/, Standard_Integer argc, const char ** argv)
741 // cout << "Usage : " << argv[0] << endl;
745 // Standard_Boolean isBad = Standard_False, isCaught;
748 // isCaught = Standard_False;
752 // Standard_Integer a = 1;
753 // Standard_Integer b = 0;
754 // Standard_Integer c = a / b;
756 // catch ( Standard_Failure ) {
757 // isCaught = Standard_True;
758 // cout << "OCC1723 Case 1 : OK" << endl;
761 // isBad = isBad || !isCaught;
764 // isCaught = Standard_False;
768 // Standard_Real d = -1.0;
769 // Standard_Real e = sqrt(d);
771 // catch ( Standard_Failure ) {
772 // isCaught = Standard_True;
773 // cout << "OCC1723 Case 2 : OK" << endl;
776 // isBad = isBad || !isCaught;
779 // isCaught = Standard_False;
783 // Standard_Real f = 1.0e-200;
784 // Standard_Real g = 1.0e-200;
785 // Standard_Real h = f * g;
787 // catch ( Standard_Failure ) {
788 // isCaught = Standard_True;
789 // cout << "OCC1723 Case 3 : OK" << endl;
792 // // MSV: underflow is not caught
793 // //isBad = isBad || !isCaught;
796 // isCaught = Standard_False;
800 // Standard_Real i = 1.0e+200;
801 // Standard_Real j = 1.0e+200;
802 // Standard_Real k = i * j;
804 // catch ( Standard_Failure ) {
805 // isCaught = Standard_True;
806 // cout << "OCC1723 Case 4 : OK" << endl;
809 // isBad = isBad || !isCaught;
812 // cout << "OCC1723 : Error" << endl;
814 // cout << "OCC1723 : OK" << endl;
821 static Standard_Integer OCC1919_get (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
825 di << "Usage : " << argv[0] << "\n";
828 const TCollection_AsciiString anOldNumLocale =
829 (Standard_CString) setlocale (LC_NUMERIC, NULL);
830 di << "LC_NUMERIC = " << anOldNumLocale.ToCString() << "\n";
833 static Standard_Integer OCC1919_set (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
837 di << "Usage : " << argv[0] << " LC_NUMERIC" << "\n";
840 TCollection_AsciiString aNumLocale(argv[1]);
841 setlocale(LC_ALL, "") ;
842 setlocale(LC_NUMERIC, aNumLocale.ToCString()) ;
846 #include <TDF_Label.hxx>
847 #include <TDataStd_Real.hxx>
848 #include <NCollection_BaseMap.hxx>
849 static Standard_Integer OCC1919_real (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
853 if (!DDF::GetDF(argv[1],DF)) return 1;
855 DDF::AddLabel(DF, argv[2], L);
857 //TDataStd_Real::Set(L,Draw::Atof(arg[3]));
858 TCollection_AsciiString AsciiStringReal(argv[3]);
859 if (!AsciiStringReal.IsRealValue()) return 1;
860 Standard_Real aReal = AsciiStringReal.RealValue();
861 di << "aReal = " << aReal << "\n";
863 TDataStd_Real::Set(L,aReal);
869 #include <TDataStd_UAttribute.hxx>
870 static Standard_Integer OCC2932_SetIDUAttribute (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
874 di << "Usage : " << argv[0] << " (DF, entry, oldLocalID, newLocalID)" << "\n";
878 if (!DDF::GetDF(argv[1],DF)) return 1;
880 if( !DDF::FindLabel(DF, argv[2], label) ) {
881 di << "No label for entry " << argv[2] << "\n";
884 Standard_GUID old_guid(argv[3]); //"00000000-0000-0000-2222-000000000000");
885 Standard_GUID new_guid(argv[4]); //"00000000-0000-0000-2222-000000000001");
887 Handle(TDataStd_UAttribute) UA;
888 if( !label.FindAttribute(old_guid, UA) ) {
889 di << "No UAttribute Attribute on label " << argv[2] << "\n";
892 Handle(TDataStd_UAttribute) anotherUA;
893 if( label.FindAttribute(new_guid, anotherUA) ) {
894 di << "There is this UAttribute Attribute on label " << argv[2] << "\n";
901 static Standard_Integer OCC2932_SetTag (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
905 di << "Usage : " << argv[0] << " (DF, entry, Tag)" << "\n";
909 if (!DDF::GetDF(argv[1],DF)) return 1;
911 DDF::AddLabel(DF, argv[2], L);
912 Standard_Integer Tag = Draw::Atoi(argv[3]);
913 Handle(TDF_TagSource) A = TDF_TagSource::Set(L);
918 #include <TDataStd_Current.hxx>
919 static Standard_Integer OCC2932_SetCurrent (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
923 di << "Usage : " << argv[0] << " (DF, entry)" << "\n";
927 if (!DDF::GetDF(argv[1],DF)) return 1;
929 DDF::AddLabel(DF, argv[2], L);
930 TDataStd_Current::Set(L);
934 #include <TDataStd_Expression.hxx>
935 static Standard_Integer OCC2932_SetExpression (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
939 di << "Usage : " << argv[0] << " (DF, entry, Expression)" << "\n";
943 if (!DDF::GetDF(argv[1],DF)) return 1;
945 DDF::AddLabel(DF, argv[2], L);
946 TCollection_ExtendedString Expression(argv[3]);
947 Handle(TDataStd_Expression) A = TDataStd_Expression::Set(L);
948 A->SetExpression(Expression);
952 #include <TDataStd_Relation.hxx>
953 static Standard_Integer OCC2932_SetRelation (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
957 di << "Usage : " << argv[0] << " (DF, entry, Relation)" << "\n";
961 if (!DDF::GetDF(argv[1],DF)) return 1;
963 DDF::AddLabel(DF, argv[2], L);
964 TCollection_ExtendedString Relation(argv[3]);
965 Handle(TDataStd_Relation) A = TDataStd_Relation::Set(L);
966 A->SetRelation(Relation);
970 static Standard_Integer OCC3277 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
974 di << "Usage : " << argv[0] << " string" << "\n";
977 TCollection_ExtendedString ExtendedString;
978 TCollection_ExtendedString InputString(argv[1]);
979 ExtendedString.Cat(InputString);
980 //ExtendedString.Print(cout);
981 Standard_SStream aSStream;
982 ExtendedString.Print(aSStream);
987 static Standard_Integer OCC6794 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
991 di << "Usage: " << argv[0] << " [nb]" << "\n";
995 char* max = ::getenv( "MMGT_THRESHOLD" );
997 Standard_Integer aNb = 1;
999 aNb += Draw::Atoi( max );
1004 aNb = Draw::Atoi( argv[1] );
1006 di << "Use nb = " << aNb << "\n";
1008 const char* c = "a";
1010 TCollection_AsciiString anAscii;
1011 for ( int i = 1; i <= aNb; i++ ) {
1012 anAscii += TCollection_AsciiString( c );
1014 Standard_Integer aLength = anAscii.Length();
1015 di << "aLength = " << aLength << "\n";
1020 static Standard_Integer OCC16485 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
1024 di << "Usage: " << argv[0] << "\n";
1028 // Create points with X co-ordinate from varying from 0. to 1000.
1029 // anc compute cumulative bounding box by adding boxes for all the
1030 // points, enlarged on tolerance
1032 Standard_Real tol = 1e-3;
1035 for ( int i=0; i <= nbstep; i++ )
1037 gp_Pnt p(i, 0., 0.);
1042 Box = B; // in this case XMin of Box will grow each time
1045 Standard_Real xmin, ymin, zmin, xmax, ymax, zmax;
1046 Box.Get (xmin, ymin, zmin, xmax, ymax, zmax);
1047 //cout.precision(16);
1048 //cout << "Resulting dimensions: Xmin = " << xmin << " , Xmax = " << xmax << " , Tolerance = " << tol << endl;
1049 di << "Resulting dimensions: Xmin = " << xmin << " , Xmax = " << xmax << " , Tolerance = " << tol << "\n";
1050 if ( Abs ( xmin + tol ) > 1e-10 )
1051 di << "TEST FAILED: Xmin must be equal to -1e3!\n";
1054 //cout << "TEST FAILED: Xmin must be equal to -1e3!" << endl;
1055 //cout << "TEST OK" << endl;
1056 //di << "TEST FAILED: Xmin must be equal to -1e3!\n";
1057 //di << "TEST OK\n";
1060 //Resulting dimensions: Xmin = -0.001 , Xmax = 1000.001 , Tolerance = 0.001
1063 void QABugs::Commands_14(Draw_Interpretor& theCommands) {
1064 const char *group = "QABugs";
1066 theCommands.Add ("BUC60897", "BUC60897", __FILE__, BUC60897, group);
1067 theCommands.Add ("BUC60889", "BUC60889 point_1 point_2 name_of_edge bndbox_X1 bndbox_Y1 bndbox_Z1 bndbox_X2 bndbox_Y2 bndbox_Z2", __FILE__, BUC60889, group);
1068 theCommands.Add ("BUC60852", "BUC60852 name_of_edge bndbox_X1 bndbox_Y1 bndbox_Z1 bndbox_X2 bndbox_Y2 bndbox_Z2", __FILE__, BUC60852, group);
1069 theCommands.Add ("BUC60854", "BUC60854 result_shape name_of_shape name_of_face name_of_wire/name_of_edge [ name_of_wire/name_of_edge ... ] [ name_of_face name_of_wire/name_of_edge [ name_of_wire/name_of_edge ... ] ... ] [ @ edge_on_shape edge_on_wire [ edge_on_shape edge_on_wire ... ] ] ", __FILE__, BUC60854, group);
1070 theCommands.Add ("BUC60870", "BUC60870 result name_of_shape_1 name_of_shape_2 dev", __FILE__, BUC60870, group);
1071 theCommands.Add ("BUC60902", "BUC60902", __FILE__, BUC60902, group);
1072 theCommands.Add ("BUC60944", "BUC60944 path", __FILE__, BUC60944, group);
1073 theCommands.Add ("BUC60868", "BUC60868 Result Shell", __FILE__, BUC60868, group);
1074 theCommands.Add ("BUC60924", "BUC60924 curve X Y Z", __FILE__, BUC60924, group);
1075 theCommands.Add ("BUC60920", "BUC60920", __FILE__, BUC60920, group);
1076 theCommands.Add ("OCC983", "OCC983 file", __FILE__, OCC983, group);
1077 theCommands.Add ("OCC984", "OCC984 file", __FILE__, OCC984, group);
1079 theCommands.Add ("OCC1786", "OCC1786 AutoHilight=0/1", __FILE__, OCC1786, group);
1081 // theCommands.Add ("OCC1723", "OCC1723", __FILE__, OCC1723, group);
1083 theCommands.Add ("OCC1919_get", "OCC1919_get", __FILE__, OCC1919_get, group);
1085 theCommands.Add ("OCC1919_set", "OCC1919_set LC_NUMERIC", __FILE__, OCC1919_set, group);
1087 theCommands.Add ("OCC1919_real", "OCC1919_real (DF, entry, value)", __FILE__, OCC1919_real, group);
1089 theCommands.Add ("OCC2932_SetIDUAttribute", "OCC2932_SetIDUAttribute (DF, entry, oldLocalID, newLocalID)", __FILE__, OCC2932_SetIDUAttribute, group);
1091 theCommands.Add ("OCC2932_SetTag", "OCC2932_SetTag (DF, entry, Tag)", __FILE__, OCC2932_SetTag, group);
1093 theCommands.Add ("OCC2932_SetCurrent", "OCC2932_SetCurrent (DF, entry)", __FILE__, OCC2932_SetCurrent, group);
1095 theCommands.Add ("OCC2932_SetExpression", "OCC2932_SetExpression (DF, entry, Expression)", __FILE__, OCC2932_SetExpression, group);
1097 theCommands.Add ("OCC2932_SetRelation", "OCC2932_SetRelation (DF, entry, Relation)", __FILE__, OCC2932_SetRelation, group);
1099 theCommands.Add ("OCC3277", "OCC3277 string", __FILE__, OCC3277, group);
1101 theCommands.Add ("OCC6794", "OCC6794 [nb]", __FILE__, OCC6794, group);
1103 theCommands.Add ("OCC16485", "OCC16485", __FILE__, OCC16485, group);