#include <QABugs.hxx>
-#include <Draw_Interpretor.hxx>
-#include <DBRep.hxx>
-#include <DrawTrSurf.hxx>
-#include <ViewerTest.hxx>
-#include <V3d_View.hxx>
-#include <TopoDS_Shape.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_LocalContext.hxx>
#include <AIS_TexturedShape.hxx>
-#include <Image_PixMap.hxx>
-#include <Image_Color.hxx>
-
-#include <gp_Pnt2d.hxx>
-#include <gp_Ax1.hxx>
-#include <GCE2d_MakeSegment.hxx>
-#include <Geom2d_TrimmedCurve.hxx>
-#include <DrawTrSurf.hxx>
-
-#include <Precision.hxx>
-
-#include <cstdio>
-#include <cmath>
-#include <iostream>
-#include <OSD_Timer.hxx>
-#include <OSD_Parallel.hxx>
-#include <OSD_PerfMeter.hxx>
+#include <BRepAlgo_Cut.hxx>
+#include <BRepOffsetAPI_MakePipe.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
-#include <BRepAlgo_Cut.hxx>
-#include <NCollection_Map.hxx>
+#include <DBRep.hxx>
+#include <Draw_Interpretor.hxx>
+#include <DrawTrSurf.hxx>
+#include <GCE2d_MakeSegment.hxx>
+#include <Geom2d_TrimmedCurve.hxx>
+#include <GeomFill_Trihedron.hxx>
+#include <Graphic3d_ArrayOfTriangles.hxx>
+#include <gp_Ax1.hxx>
+#include <gp_Pnt2d.hxx>
+#include <gp_Quaternion.hxx>
+#include <Image_Color.hxx>
+#include <Image_PixMap.hxx>
#include <NCollection_Handle.hxx>
#include <NCollection_IncAllocator.hxx>
+#include <NCollection_Map.hxx>
+#include <OSD_Parallel.hxx>
+#include <OSD_PerfMeter.hxx>
+#include <OSD_Timer.hxx>
+#include <Precision.hxx>
+#include <Prs3d_ShadingAspect.hxx>
+#include <Prs3d_Text.hxx>
+#include <SelectMgr_Filter.hxx>
+#include <Standard_Version.hxx>
+#include <StdSelect_BRepOwner.hxx>
#include <TCollection_HAsciiString.hxx>
-#include <GeomFill_Trihedron.hxx>
-#include <BRepOffsetAPI_MakePipe.hxx>
#include <TopExp_Explorer.hxx>
+#include <TopoDS_Shape.hxx>
+#include <V3d_View.hxx>
+#include <ViewerTest.hxx>
+#include <XmlDrivers_DocumentRetrievalDriver.hxx>
+#include <XmlDrivers_DocumentStorageDriver.hxx>
-#include <SelectMgr_Filter.hxx>
-
-#include <Standard_Version.hxx>
+#include <cstdio>
+#include <cmath>
+#include <iostream>
#define QCOMPARE(val1, val2) \
di << "Checking " #val1 " == " #val2 << \
}
#include <TDocStd_Application.hxx>
-#include <XCAFApp_Application.hxx>
#include <TDocStd_Document.hxx>
#include <XCAFDoc_ShapeTool.hxx>
#include <XCAFDoc_DocumentTool.hxx>
#include <TDF_Label.hxx>
#include <TDataStd_Name.hxx>
+#include <DDocStd.hxx>
static Standard_Integer OCC23595 (Draw_Interpretor& di, Standard_Integer /*argc*/, const char** /*argv*/)
{
- Handle(TDocStd_Application) anApp = XCAFApp_Application::GetApplication();
+ Handle(TDocStd_Application) anApp = DDocStd::GetApplication();
Handle(TDocStd_Document) aDoc;
anApp->NewDocument ("XmlXCAF", aDoc);
QCOMPARE (!aDoc.IsNull(), Standard_True);
return 0;
}
-#include <Extrema_FuncExtPS.hxx>
+#include <Extrema_FuncPSNorm.hxx>
#include <math_FunctionSetRoot.hxx>
#include <math_Vector.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
gp_Pnt aPnt = BRep_Tool::Pnt (aVert), aRes;
- Extrema_FuncExtPS anExtFunc;
+ Extrema_FuncPSNorm anExtFunc;
math_FunctionSetRoot aRoot (anExtFunc, aNbIts);
math_Vector aTolUV (1, 2), aUVinf (1, 2), aUVsup (1, 2), aFromUV (1, 2);
return aComp;
}
-#include <AppStd_Application.hxx>
#include <TDataStd_Integer.hxx>
#include <TNaming_Builder.hxx>
static Standard_Integer OCC24931 (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
TCollection_ExtendedString aFileName (argv[1]);
PCDM_StoreStatus aSStatus = PCDM_SS_Failure;
- Handle(TDocStd_Application) anApp = new AppStd_Application;
+ Handle(TDocStd_Application) anApp = DDocStd::GetApplication();
{
Handle(TDocStd_Document) aDoc;
anApp->NewDocument ("XmlOcaf", aDoc);
return 0;
}
-#include <AppStdL_Application.hxx>
-#include <TDocStd_Application.hxx>
-#include <TDataStd_Integer.hxx>
#include <TDF_AttributeIterator.hxx>
//=======================================================================
//function : OCC24755
return 1;
}
- Handle(TDocStd_Application) anApp = new AppStdL_Application;
+ Handle(TDocStd_Application) anApp = DDocStd::GetApplication();
Handle(TDocStd_Document) aDoc;
anApp->NewDocument ("BinOcaf", aDoc);
TDF_Label aLab = aDoc->Main();
{
public:
- static void initGlobalPluginMap (const TCollection_AsciiString& thePlugin,
- const TCollection_AsciiString& theSaver,
- const TCollection_AsciiString& theLoader)
+ Test_TDocStd_Application ()
{
- const Handle(Resource_Manager)& aManager = Plugin::AdditionalPluginMap();
- aManager->SetResource ((theSaver + ".Location").ToCString(), thePlugin.ToCString());
- aManager->SetResource ((theLoader + ".Location").ToCString(), thePlugin.ToCString());
- }
-
- Test_TDocStd_Application (const TCollection_AsciiString& thePlugin,
- const TCollection_AsciiString& theSaver,
- const TCollection_AsciiString& theLoader)
- {
- initGlobalPluginMap (thePlugin, theSaver, theLoader);
-
// explicitly initialize resource manager
myResources = new Resource_Manager ("");
myResources->SetResource ("xml.FileFormat", THE_QATEST_DOC_FORMAT);
myResources->SetResource (THE_QATEST_DOC_FORMAT ".Description", "Test XML Document");
myResources->SetResource (THE_QATEST_DOC_FORMAT ".FileExtension", "xml");
- myResources->SetResource (THE_QATEST_DOC_FORMAT ".StoragePlugin", theSaver.ToCString());
- myResources->SetResource (THE_QATEST_DOC_FORMAT ".RetrievalPlugin", theLoader.ToCString());
}
- virtual Standard_CString ResourcesName() { return ""; }
- virtual void Formats (TColStd_SequenceOfExtendedString& theFormats) { theFormats.Clear(); }
+ virtual Handle(PCDM_Reader) ReaderFromFormat (const TCollection_ExtendedString&) Standard_OVERRIDE
+ {
+ return new XmlDrivers_DocumentRetrievalDriver ();
+ }
+ virtual Handle(PCDM_StorageDriver) WriterFromFormat (const TCollection_ExtendedString&) Standard_OVERRIDE
+ {
+ return new XmlDrivers_DocumentStorageDriver ("Test");
+ }
+ virtual Standard_CString ResourcesName() Standard_OVERRIDE { return ""; }
};
//=======================================================================
PCDM_StoreStatus aSStatus = PCDM_SS_Failure;
PCDM_ReaderStatus aRStatus = PCDM_RS_OpenError;
- Handle(TDocStd_Application) anApp = new Test_TDocStd_Application (aPlugin, aSaver, aLoader);
+ Handle(TDocStd_Application) anApp = new Test_TDocStd_Application ();
{
Handle(TDocStd_Document) aDoc;
anApp->NewDocument (THE_QATEST_DOC_FORMAT, aDoc);
return 0;
}
-//=======================================================================
-//function : OCC23010
-//purpose :
-//=======================================================================
-#include <STEPCAFControl_Reader.hxx>
-
-class mOcafApplication : public TDocStd_Application
-{
- void Formats(TColStd_SequenceOfExtendedString& Formats)
- {
- Formats.Append(TCollection_ExtendedString("mOcafApplication"));
- }
- Standard_CString ResourcesName()
- {
- return Standard_CString("Resources");
- }
-};
-
-static Standard_Integer OCC23010 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
-{
- if (argc != 2) {
- di << "Usage: " << argv[0] << " invalid number of arguments\n";
- return 1;
- }
- std::string fileName=argv[1];
- mOcafApplication *mCasApp = new mOcafApplication();
- Handle(TDocStd_Document) doc;
- mCasApp->NewDocument("BinXCAF", doc);
- STEPCAFControl_Reader stepReader;
- IFSelect_ReturnStatus status = stepReader.ReadFile (fileName.c_str());
- if (status != IFSelect_RetDone)
- return false;
- stepReader.SetColorMode(Standard_True);
- stepReader.SetLayerMode(Standard_True);
- stepReader.SetNameMode(Standard_True);
- stepReader.Transfer(doc); // ERROR HERE!!!
- delete mCasApp;
- return 0;
-}
-
//=======================================================================
//function : OCC25202
//purpose :
return 0;
}
+//=======================================================================
+//function : OCC25574
+//purpose : check implementation of Euler angles in gp_Quaternion
+//=======================================================================
+
+static Standard_Integer OCC25574 (Draw_Interpretor& theDI, Standard_Integer /*argc*/, const char** /*argv*/)
+{
+ Standard_Boolean isTestOk = Standard_True;
+
+ // Check consistency of Get and Set operations for Euler angles
+ gp_Quaternion aQuat;
+ aQuat.Set(0.06766916507860499, 0.21848101129786085, 0.11994599260380681,0.9660744746954637);
+ Standard_Real alpha,beta,gamma;
+ gp_Mat aRinv = aQuat.GetMatrix().Inverted();
+ gp_Mat aI;
+ aI.SetIdentity();
+ const char* names[] = { "Extrinsic_XYZ", "Extrinsic_XZY", "Extrinsic_YZX", "Extrinsic_YXZ", "Extrinsic_ZXY", "Extrinsic_ZYX",
+ "Intrinsic_XYZ", "Intrinsic_XZY", "Intrinsic_YZX", "Intrinsic_YXZ", "Intrinsic_ZXY", "Intrinsic_ZYX",
+ "Extrinsic_XYX", "Extrinsic_XZX", "Extrinsic_YZY", "Extrinsic_YXY", "Extrinsic_ZYZ", "Extrinsic_ZXZ",
+ "Intrinsic_XYX", "Intrinsic_XZX", "Intrinsic_YZY", "Intrinsic_YXY", "Intrinsic_ZXZ", "Intrinsic_ZYZ" };
+ for (int i = gp_Extrinsic_XYZ; i <= gp_Intrinsic_ZYZ; i++)
+ {
+ aQuat.GetEulerAngles (gp_EulerSequence(i), alpha, beta, gamma);
+
+ gp_Quaternion aQuat2;
+ aQuat2.SetEulerAngles (gp_EulerSequence(i), alpha, beta, gamma);
+
+ gp_Mat aR = aQuat2.GetMatrix();
+ gp_Mat aDiff = aR * aRinv - aI;
+ if (aDiff.Determinant() > 1e-5)
+ {
+ theDI << "Error: Euler angles conversion incorrect for sequence " << names[i - gp_Extrinsic_XYZ] << "\n";
+ isTestOk = Standard_False;
+ }
+ }
+
+ // Check conversion between intrinsic and extrinsic rotations
+ // Any extrinsic rotation is equivalent to an intrinsic rotation
+ // by the same angles but with inverted order of elemental rotations, and vice versa
+ // For instance:
+ // Extrinsic_XZY = Incrinsic_XZY
+ // R = X(A)Z(B)Y(G) --> R = Y(G)Z(B)X(A)
+ alpha = 0.1517461713131;
+ beta = 1.5162198410141;
+ gamma = 1.9313156236541;
+ Standard_Real alpha2, beta2, gamma2;
+ gp_EulerSequence pairs[][2] = { {gp_Extrinsic_XYZ, gp_Intrinsic_ZYX},
+ {gp_Extrinsic_XZY, gp_Intrinsic_YZX},
+ {gp_Extrinsic_YZX, gp_Intrinsic_XZY},
+ {gp_Extrinsic_YXZ, gp_Intrinsic_ZXY},
+ {gp_Extrinsic_ZXY, gp_Intrinsic_YXZ},
+ {gp_Extrinsic_ZYX, gp_Intrinsic_XYZ} };
+ for (int i = 0; i < 6; i++)
+ {
+ aQuat.SetEulerAngles(pairs[i][0], alpha, beta, gamma);
+ aQuat.GetEulerAngles(pairs[i][1], gamma2, beta2, alpha2);
+
+ if (Abs(alpha - alpha2) > 1e-5 || Abs(beta - beta2) > 1e-5 || Abs(gamma - gamma2) > 1e-5)
+ {
+ theDI << "Error: intrinsic and extrinsic conversion incorrect for sequence " << names[i] << "\n";
+ isTestOk = Standard_False;
+ }
+ }
+
+ // Check correspondence of enumeration and actual rotation it defines,
+ // by rotation by one axis and checking that it does not change a point on that axis
+ for (int i = gp_Extrinsic_XYZ; i <= gp_Intrinsic_ZYZ; i++)
+ {
+ // Iterate over rotations R(A)R(B)R(G) for each Euler angle Alpha, Beta, Gamma
+ // There are three ordered axes corresponding to three rotations.
+ // Each rotation applyed with current angle around current axis.
+ for (int j=0; j < 3; j++)
+ {
+ // note that current axis index is obtained by parsing of enumeration name!
+ int anAxis = names[i - gp_Extrinsic_XYZ][10 + j] - 'X';
+ Standard_ASSERT_RETURN (anAxis >=0 && anAxis <= 2, "Incorrect parsing of enumeration name", 1);
+
+ // Set 90 degrees to current Euler angle
+ double anAngles[3] = {0., 0., 0.};
+ anAngles[j] = 0.5 * M_PI;
+
+ gp_Quaternion q2;
+ q2.SetEulerAngles (gp_EulerSequence(i), anAngles[0], anAngles[1], anAngles[2]);
+
+ // Set point on axis corresponding to current rotation
+ // We will apply rotation around this axis
+ gp_XYZ v (0., 0., 0.);
+ v.SetCoord (anAxis + 1, 1.);
+
+ // Apply rotation to point
+ gp_Trsf aT;
+ aT.SetRotation (q2);
+ gp_XYZ v2 = v;
+ aT.Transforms (v2);
+
+ // Check that point is still on origin position
+ if ((v - v2).SquareModulus() > Precision::SquareConfusion())
+ {
+ // avoid reporting small coordinates
+ for (int k=1; k <= 3; k++)
+ if (Abs (v2.Coord(k)) < Precision::Confusion())
+ v2.SetCoord (k, 0.);
+
+ isTestOk = Standard_False;
+ theDI << "Error: Euler sequence " << names[i - gp_Extrinsic_XYZ] << " is incorrect:\n";
+ theDI << "rotating by angle 90 deg around " << (anAxis == 0 ? "X" : anAxis == 1 ? "Y" : "Z") <<
+ " converts vector (" << v.X() << ", " << v.Y() << ", " << v.Z() << ") to ("
+ << v2.X() << ", " << v2.Y() << ", " << v2.Z() << ")\n";
+ }
+ }
+ }
+
+ // Check correspondence of enumeration and actual rotation it defines,
+ // by comparing cumulative rotation matrix with sequence of rotations by axes
+ const Standard_Real anAngle[3] = { 0.1, 0.2, 0.3 };
+ for (int i = gp_Extrinsic_XYZ; i <= gp_Intrinsic_ZYZ; i++)
+ {
+ // Sequence of rotations
+ gp_Mat aR[3];
+ for (int j=0; j < 3; j++)
+ {
+ // note that current axis index is obtained by parsing of enumeration name!
+ int anAxis = names[i - gp_Extrinsic_XYZ][10 + j] - 'X';
+ Standard_ASSERT_RETURN (anAxis >=0 && anAxis <= 2, "Incorrect parsing of enumeration name", 1);
+
+ // Set point on axis corresponding to current rotation
+ // We will apply rotation around this axis
+ gp_XYZ v (0., 0., 0.);
+ v.SetCoord (anAxis + 1, 1.);
+ aR[j].SetRotation (v, anAngle[j]);
+ }
+
+ // construct cumulative transformation (differently for extrinsic and intrinsic rotations);
+ // note that we parse first symbol of the enum name to identify its type
+ gp_Mat aRot;
+ if (names[i - gp_Extrinsic_XYZ][0] == 'E') // extrinsic
+ {
+ aRot = aR[2] * aR[1] * aR[0];
+ }
+ else // intrinsic
+ {
+ aRot = aR[0] * aR[1] * aR[2];
+ }
+
+ // set the same angles in quaternion
+ aQuat.SetEulerAngles (gp_EulerSequence(i), anAngle[0], anAngle[1], anAngle[2]);
+
+ gp_Mat aRQ = aQuat.GetMatrix();
+ gp_Mat aDiff = aRQ * aRot.Inverted() - aI;
+ if (aDiff.Determinant() > 1e-5)
+ {
+ theDI << "Error: Euler angles conversion does not correspond to sequential rotations for " << names[i - gp_Extrinsic_XYZ] << "\n";
+ isTestOk = Standard_False;
+ }
+ }
+
+ // similar checkfor YawPitchRoll sequence as defined in description of #25574
+ {
+ // Start with world coordinate system
+ gp_Ax2 world;
+
+ // Perform three rotations using the yaw-pitch-roll convention.
+ // This means: rotate around the original z axis with angle alpha,
+ // then rotate around the new y axis with angle beta,
+ // then rotate around the new x axis with angle gamma.
+ alpha = 0.0 / 180.0 * M_PI;
+ beta = -35.0 / 180.0 * M_PI;
+ gamma = 90.0 / 180.0 * M_PI;
+
+ const gp_Quaternion rotationZ(world.Direction(), alpha);
+ const gp_Vec rotY = rotationZ.Multiply(world.YDirection());
+ const gp_Vec rotX = rotationZ.Multiply(world.XDirection());
+
+ const gp_Quaternion rotationY(rotY, beta);
+ const gp_Vec rotZ = rotationY.Multiply(world.Direction());
+ const gp_Vec rotRotX = rotationY.Multiply(rotX);
+
+ const gp_Quaternion rotationX(rotRotX, gamma);
+ const gp_Vec rotRotZ = rotationX.Multiply(rotZ);
+
+ gp_Ax2 result(gp_Pnt(0.0, 0.0, 0.0), rotRotZ, rotRotX);
+
+ // Now compute the Euler angles
+ gp_Trsf transformation;
+ transformation.SetDisplacement(gp_Ax2(), result);
+
+ Standard_Real computedAlpha;
+ Standard_Real computedBeta;
+ Standard_Real computedGamma;
+
+ transformation.GetRotation().GetEulerAngles(gp_YawPitchRoll, computedAlpha, computedBeta, computedGamma);
+
+ // We expect now to get the same angles as we have used for our rotations
+ if (Abs(alpha - computedAlpha) > 1e-5 || Abs(beta - computedBeta) > 1e-5 || Abs(gamma - computedGamma) > 1e-5)
+ {
+ theDI << "Error: unexpected values of Euler angles for YawPitchRoll sequence:\n";
+ theDI << "alpha: " << alpha / M_PI * 180.0 << " and computed alpha: "
+ << computedAlpha / M_PI * 180.0 << "\n";
+ theDI << "beta: " << beta / M_PI * 180.0 << " and computed beta: "
+ << computedBeta / M_PI * 180.0 << "\n";
+ theDI << "gamma: " << gamma / M_PI * 180.0 << " and computed gamma: "
+ << computedGamma / M_PI * 180.0 << "\n";
+ isTestOk = Standard_False;
+ }
+ }
+
+ // test from #25946
+ {
+ gp_Quaternion q;
+ q.Set(0.06766916507860499, 0.21848101129786085, 0.11994599260380681,0.9660744746954637);
+
+ q.GetEulerAngles(gp_Intrinsic_ZYX, alpha,beta, gamma);
+ q.GetEulerAngles(gp_Extrinsic_XYZ, alpha2,beta2,gamma2);
+
+ // gp_Intrinsic_ZYX and gp_Extrinsic_XYZ should produce the same values of angles but in opposite order
+ if (Abs(alpha - gamma2) > 1e-5 || Abs(beta - beta2) > 1e-5 || Abs(gamma - alpha2) > 1e-5)
+ {
+ theDI << "Error: Euler angles computed for gp_Intrinsic_ZYX and gp_Extrinsic_XYZ do not match:\n";
+ theDI << "alpha: " << alpha / M_PI * 180.0 << " and " << alpha2 / M_PI * 180.0 << "\n";
+ theDI << "beta: " << beta / M_PI * 180.0 << " and " << beta2 / M_PI * 180.0 << "\n";
+ theDI << "gamma: " << gamma / M_PI * 180.0 << " and " << gamma2 / M_PI * 180.0 << "\n";
+ isTestOk = Standard_False;
+ }
+ }
+
+ theDI << (isTestOk ? "Test completed" : "Test failed") << "\n";
+ return 0;
+}
+
#include <TColGeom_Array1OfBSplineCurve.hxx>
#include <TColStd_Array1OfReal.hxx>
#include <TColGeom_HArray1OfBSplineCurve.hxx>
aMgr->BuildSelectingVolume (aPxPnt1);
}
const gp_Pnt* aVerts = aMgr->GetVertices();
- gp_Pnt aNearPnt = aMgr->GetNearPnt();
- gp_Pnt aFarPnt = aMgr->GetFarPnt();
+ gp_Pnt aNearPnt = aMgr->GetNearPickedPnt();
+ gp_Pnt aFarPnt = aMgr->GetFarPickedPnt();
BRepBuilderAPI_MakePolygon aWireBldrs[4];
aWireBldrs[0].Add (gp_Pnt (aVerts[0].X(), aVerts[0].Y(), aVerts[0].Z()));
return 0;
}
-DEFINE_STANDARD_HANDLE(QABugs_VertexFilter, SelectMgr_Filter);
+DEFINE_STANDARD_HANDLE(QABugs_VertexFilter, SelectMgr_Filter)
class QABugs_VertexFilter: public SelectMgr_Filter
{
public:
return 0;
}
+//=======================================================================
+//function : OCC27048
+//purpose : Calculate value of B-spline surface N times
+//=======================================================================
+static Standard_Integer OCC27048(Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+ if (theArgc != 5)
+ {
+ std::cout << "Incorrect number of arguments. See usage:" << std::endl;
+ theDI.PrintHelp(theArgv[0]);
+ return 1;
+ }
+
+ Handle(Geom_Surface) aSurf = DrawTrSurf::GetSurface(theArgv[1]);
+ GeomAdaptor_Surface anAdaptor(aSurf);
+
+ Standard_Real aU = Draw::Atof(theArgv[2]);
+ Standard_Real aV = Draw::Atof(theArgv[3]);
+ Standard_Integer aN = Draw::Atoi(theArgv[4]);
+
+ for (; aN > 0; --aN)
+ anAdaptor.Value(aU, aV);
+
+ return 0;
+}
+
+//========================================================================
+//function : OCC27065
+//purpose : Tests overloaded method "Generated" of BRepOffsetAPI_MakePipe
+//========================================================================
+static Standard_Integer OCC27065(Draw_Interpretor& di,
+ Standard_Integer n, const char** a)
+{
+ if (n < 3) return 1;
+ BRep_Builder BB;
+
+ TopoDS_Shape SpineShape = DBRep::Get(a[1],TopAbs_WIRE);
+ if ( SpineShape.IsNull()) return 1;
+ TopoDS_Wire Spine = TopoDS::Wire(SpineShape);
+
+ TopoDS_Shape Profile = DBRep::Get(a[2]);
+ if ( Profile.IsNull()) return 1;
+
+ BRepOffsetAPI_MakePipe aPipeBuilder(Spine, Profile);
+ if (!aPipeBuilder.IsDone())
+ {
+ di << "Error: failed to create pipe\n";
+ return 1;
+ }
+
+ TopExp_Explorer Explo(Profile, TopAbs_SHELL);
+ TopoDS_Shape aShape;
+ TopTools_ListIteratorOfListOfShape itl;
+ if (Explo.More())
+ {
+ aShape = Explo.Current();
+ TopoDS_Compound res1;
+ BB.MakeCompound(res1);
+ itl.Initialize(aPipeBuilder.Generated(aShape));
+ for (; itl.More(); itl.Next())
+ BB.Add(res1, itl.Value());
+ DBRep::Set("res_shell", res1);
+ }
+
+ Explo.Init(Profile, TopAbs_FACE);
+ if (Explo.More())
+ {
+ aShape = Explo.Current();
+ TopoDS_Compound res2;
+ BB.MakeCompound(res2);
+ itl.Initialize(aPipeBuilder.Generated(aShape));
+ for (; itl.More(); itl.Next())
+ BB.Add(res2, itl.Value());
+ DBRep::Set("res_face", res2);
+ }
+
+ Explo.Init(Profile, TopAbs_WIRE);
+ if (Explo.More())
+ {
+ aShape = Explo.Current();
+ TopoDS_Compound res3;
+ BB.MakeCompound(res3);
+ itl.Initialize(aPipeBuilder.Generated(aShape));
+ for (; itl.More(); itl.Next())
+ BB.Add(res3, itl.Value());
+ DBRep::Set("res_wire", res3);
+ }
+
+ Explo.Init(Profile, TopAbs_EDGE);
+ if (Explo.More())
+ {
+ aShape = Explo.Current();
+ TopoDS_Compound res4;
+ BB.MakeCompound(res4);
+ itl.Initialize(aPipeBuilder.Generated(aShape));
+ for (; itl.More(); itl.Next())
+ BB.Add(res4, itl.Value());
+ DBRep::Set("res_edge", res4);
+ }
+
+ Explo.Init(Profile, TopAbs_VERTEX);
+ if (Explo.More())
+ {
+ aShape = Explo.Current();
+ TopoDS_Compound res5;
+ BB.MakeCompound(res5);
+ itl.Initialize(aPipeBuilder.Generated(aShape));
+ for (; itl.More(); itl.Next())
+ BB.Add(res5, itl.Value());
+ DBRep::Set("res_vertex", res5);
+ }
+
+ return 0;
+}
+
+//========================================================================
+//function : OCC27318
+//purpose : Creates a box that is not listed in map of AIS objects of ViewerTest
+//========================================================================
+static Standard_Integer OCC27318 (Draw_Interpretor& /*theDI*/, Standard_Integer /*theArgc*/, const char** theArgv)
+{
+ const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
+ if (aCtx.IsNull())
+ {
+ std::cout << "No interactive context. Use 'vinit' command before " << theArgv[0] << "\n";
+ return 1;
+ }
+
+ TopoDS_Shape aBox = BRepPrimAPI_MakeBox (20, 20, 20).Shape();
+ Handle(AIS_Shape) aBoxObj = new AIS_Shape (aBox);
+ aCtx->Display (aBoxObj, Standard_True);
+
+ return 0;
+}
+
+//========================================================================
+//function : OCC27523
+//purpose : Checks recomputation of deactivated selection mode after object's redisplaying
+//========================================================================
+static Standard_Integer OCC27523 (Draw_Interpretor& theDI, Standard_Integer theArgNb, const char** theArgVec)
+{
+ if (theArgNb != 1)
+ {
+ std::cerr << "Error: wrong number of arguments! See usage:\n";
+ theDI.PrintHelp (theArgVec[0]);
+ return 1;
+ }
+
+ Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
+ if(anAISContext.IsNull())
+ {
+ std::cerr << "Error: no active view. Please call vinit.\n";
+ return 1;
+ }
+
+ gp_Pnt aStart (100, 100, 100);
+ gp_Pnt anEnd (300, 400, 600);
+ BRepBuilderAPI_MakeEdge anEdgeBuilder (aStart, anEnd);
+ TopoDS_Edge anEdge = anEdgeBuilder.Edge();
+ Handle(AIS_InteractiveObject) aTestAISShape = new AIS_Shape (anEdge);
+ anAISContext->Display (aTestAISShape);
+
+ // activate it in selection modes
+ TColStd_SequenceOfInteger aModes;
+ aModes.Append (AIS_Shape::SelectionMode ((TopAbs_ShapeEnum) TopAbs_VERTEX));
+
+ anAISContext->OpenLocalContext();
+ anAISContext->Deactivate (aTestAISShape);
+ anAISContext->Load (aTestAISShape, -1, true);
+ anAISContext->Activate (aTestAISShape, 0);
+ anAISContext->Deactivate (aTestAISShape, 0);
+
+ // activate in vertices mode
+ for (Standard_Integer anIt = 1; anIt <= aModes.Length(); ++anIt)
+ {
+ anAISContext->Activate (aTestAISShape, aModes (anIt));
+ }
+
+ TopoDS_Shape aVertexShape = BRepBuilderAPI_MakeVertex (gp_Pnt (75, 0, 0));
+ TopAbs_ShapeEnum aVertexShapeType = aVertexShape.ShapeType();
+ Handle(AIS_Shape)::DownCast (aTestAISShape)->Set (aVertexShape);
+ aTestAISShape->Redisplay();
+
+ anAISContext->AddOrRemoveSelected (aTestAISShape);
+
+ bool aValidShapeType = false;
+ for (anAISContext->InitSelected(); anAISContext->MoreSelected(); anAISContext->NextSelected())
+ {
+ Handle(SelectMgr_EntityOwner) anOwner = anAISContext->SelectedOwner();
+ Handle(StdSelect_BRepOwner) aBRO = Handle(StdSelect_BRepOwner)::DownCast (anOwner);
+ if (!aBRO.IsNull() && aBRO->HasShape())
+ {
+ TopoDS_Shape aShape = aBRO->Shape();
+
+ aValidShapeType = aShape.ShapeType() == aVertexShapeType;
+ }
+ }
+
+ if (!aValidShapeType)
+ {
+ std::cerr << "Error: shape type is invalid.\n";
+ return 1;
+ }
+
+ return 0;
+}
+
+//========================================================================
+//function : OCC27700
+//purpose : glPolygonMode() used for frame drawing affects label text shading
+//========================================================================
+
+class OCC27700_Text : public AIS_InteractiveObject
+{
+public:
+
+ DEFINE_STANDARD_RTTI_INLINE (OCC27700_Text, AIS_InteractiveObject)
+
+ virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& /*thePresentationManager*/,
+ const Handle(Prs3d_Presentation)& thePresentation,
+ const Standard_Integer /*theMode*/) Standard_OVERRIDE
+ {
+ Handle(Graphic3d_ArrayOfTriangles) aFrame = new Graphic3d_ArrayOfTriangles (6, 6);
+ aFrame->AddVertex (gp_Pnt (-1, 0, 0));
+ aFrame->AddVertex (gp_Pnt (-1, 1, 0));
+ aFrame->AddVertex (gp_Pnt ( 3, 1, 0));
+ aFrame->AddVertex (gp_Pnt ( 3, 0, 0));
+
+ aFrame->AddEdge (1);
+ aFrame->AddEdge (2);
+ aFrame->AddEdge (3);
+
+ aFrame->AddEdge (2);
+ aFrame->AddEdge (3);
+ aFrame->AddEdge (4);
+
+ Handle(Graphic3d_AspectFillArea3d) aFillAspect =
+ new Graphic3d_AspectFillArea3d (*myDrawer->ShadingAspect()->Aspect().get());
+ aFillAspect->SetInteriorStyle (Aspect_IS_POINT);
+
+ // create separate group for frame elements
+ Handle(Graphic3d_Group) aFrameGroup = Prs3d_Root::NewGroup (thePresentation);
+ aFrameGroup->AddPrimitiveArray (aFrame);
+ aFrameGroup->SetGroupPrimitivesAspect (aFillAspect);
+
+ // create separate group for text elements
+ Handle(Graphic3d_Group) aTextGroup = Prs3d_Root::NewGroup (thePresentation);
+ TCollection_ExtendedString aString ("YOU SHOULD SEE THIS TEXT", Standard_True);
+ Prs3d_Text::Draw (thePresentation, myDrawer->TextAspect(), aString, gp_Ax2 (gp::Origin(), gp::DZ()));
+ }
+
+ virtual void ComputeSelection (const Handle(SelectMgr_Selection)& /*theSelection*/,
+ const Standard_Integer /*theMode*/) Standard_OVERRIDE {}
+};
+
+static Standard_Integer OCC27700 (Draw_Interpretor& /*theDI*/, Standard_Integer /*theArgNb*/, const char** /*theArgVec*/)
+{
+ Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
+ if (aContext.IsNull())
+ {
+ std::cout << "Error: no view available, call 'vinit' before!" << std::endl;
+ return 1;
+ }
+ Handle(OCC27700_Text) aPresentation = new OCC27700_Text();
+ aContext->Display (aPresentation);
+ return 0;
+}
+
+//========================================================================
+//function : OCC27757
+//purpose : Creates a box that has a sphere as child object and displays it
+//========================================================================
+static Standard_Integer OCC27757 (Draw_Interpretor& /*theDI*/, Standard_Integer /*theArgc*/, const char** theArgv)
+{
+ const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
+ if (aCtx.IsNull())
+ {
+ std::cout << "No interactive context. Use 'vinit' command before " << theArgv[0] << "\n";
+ return 1;
+ }
+
+ TopoDS_Shape aBox = BRepPrimAPI_MakeBox (20.0, 20.0, 20.0).Shape();
+ TopoDS_Shape aSphere = BRepPrimAPI_MakeSphere (10.0).Shape();
+ gp_Trsf aTrsf;
+ aTrsf.SetTranslationPart (gp_Vec (20.0, 20.0, 0.0));
+ aSphere.Located (TopLoc_Location (aTrsf));
+
+
+ Handle(AIS_Shape) aBoxObj = new AIS_Shape (aBox);
+ Handle(AIS_Shape) aSphereObj = new AIS_Shape (aSphere);
+ aBoxObj->AddChild (aSphereObj);
+ aCtx->Display (aBoxObj, 1, 0, Standard_False);
+ aCtx->UpdateCurrentViewer();
+
+ return 0;
+}
+
+//========================================================================
+//function : Commands_19
+//purpose :
+//========================================================================
+
void QABugs::Commands_19(Draw_Interpretor& theCommands) {
const char *group = "QABugs";
"OCC24925 filename [pluginLib=TKXml storageGuid retrievalGuid]"
"\nOCAF persistence without setting environment variables",
__FILE__, OCC24925, group);
- theCommands.Add ("OCC23010", "OCC23010 STEP_file", __FILE__, OCC23010, group);
theCommands.Add ("OCC25043", "OCC25043 shape", __FILE__, OCC25043, group);
theCommands.Add ("OCC24826,", "This test performs simple saxpy test.\n Usage: OCC24826 length", __FILE__, OCC24826, group);
theCommands.Add ("OCC24606", "OCC24606 : Tests ::FitAll for V3d view ('vfit' is for NIS view)", __FILE__, OCC24606, group);
theCommands.Add ("OCC24537", "OCC24537 [file]", __FILE__, OCC24537, group);
theCommands.Add ("OCC26750", "OCC26750", __FILE__, OCC26750, group);
-
+ theCommands.Add ("OCC25574", "OCC25574", __FILE__, OCC25574, group);
theCommands.Add ("OCC26746", "OCC26746 torus [toler NbCheckedPoints] ", __FILE__, OCC26746, group);
theCommands.Add ("BUC26658", "BUC26658 unexpected selection in the context using a selection filter", __FILE__, BUC26658, group);
"OCC26945 localCtxToClose"
"\n\t\t: Closes local context with the ID localCtxToClose",
__FILE__, OCC26945_close, group);
+
+ theCommands.Add ("OCC27048",
+ "OCC27048 surf U V N\nCalculate value of surface N times in the point (U, V)",
+ __FILE__, OCC27048, group);
+ theCommands.Add ("OCC27065",
+ "OCC27065 spine profile",
+ __FILE__, OCC27065, group);
+
+ theCommands.Add ("OCC27318",
+ "OCC27318: Creates a box that is not listed in map of AIS objects of ViewerTest",
+ __FILE__, OCC27318, group);
+ theCommands.Add ("OCC27523",
+ "OCC27523: Checks recomputation of deactivated selection mode after object's redisplaying",
+ __FILE__, OCC27523, group);
+ theCommands.Add ("OCC27700",
+ "OCC27700: Checks drawing text after setting interior style",
+ __FILE__, OCC27700, group);
+ theCommands.Add ("OCC27757",
+ "OCC27757: Creates a box that has a sphere as child object and displays it",
+ __FILE__, OCC27757, group);
return;
}